use of org.mifos.application.servicefacade.CollectionSheetErrorsDto in project head by mifos.
the class CollectionSheetEntryAction method create.
@TransactionDemarcate(validateAndResetToken = true)
public ActionForward create(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) throws PageExpiredException {
logTrackingInfo("create", request, form);
final BulkEntryActionForm collectionSheetActionForm = (BulkEntryActionForm) form;
final CollectionSheetEntryGridDto previousCollectionSheetEntryDto = retrieveFromRequestCollectionSheetEntryDto(request);
final CollectionSheetEntryDecomposedDto decomposedViews = new CollectionSheetEntryViewTranslator().toDecomposedView(previousCollectionSheetEntryDto.getBulkEntryParent());
logBeforeSave(request, collectionSheetActionForm, previousCollectionSheetEntryDto);
final long beforeSaveData = System.currentTimeMillis();
final CollectionSheetErrorsDto collectionSheetErrors = this.collectionSheetServiceFacade.saveCollectionSheet(previousCollectionSheetEntryDto, getUserContext(request).getId());
logAfterSave(request, decomposedViews, System.currentTimeMillis() - beforeSaveData, collectionSheetErrors.isDatabaseError());
storeOnRequestErrorAndCollectionSheetData(request, decomposedViews, collectionSheetErrors);
request.setAttribute(CollectionSheetEntryConstants.CENTER, previousCollectionSheetEntryDto.getBulkEntryParent().getCustomerDetail().getDisplayName());
setErrorMessagesIfErrorsExist(request, collectionSheetErrors);
/*
* Visit CREATESUCCESS if user entered data that breaks business rules, such as withdrawing more than the total
* amount in a savings account. Is this intended? It seems like we wouldn't want to even call
* saveCollectionSheet if business rules were violated in this manner.
*
* JohnW: Yes it is intended. The collection sheet logic 'does what it can' in terms of updating accounts. It
* allows for accounts with no issues to be persisted while building up error lists (warning lists really) for
* accounts that have problems (including breaking business rules) preventing them being persisted.
*
* So, in summary, what happens is, although "saveCollectionSheet" is called, part of the responsibility of the
* "saveCollectionSheet" process is to identify for each account if rules are broken. Only accounts that 'pass'
* are saved, the others are identified so that a warning message can be shown.
*/
return mapping.findForward(CollectionSheetEntryConstants.CREATESUCCESS);
}
use of org.mifos.application.servicefacade.CollectionSheetErrorsDto in project head by mifos.
the class CollectionSheetRESTController method saveCollectionSheet.
@RequestMapping(value = "/collectionsheet/save", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> saveCollectionSheet(@RequestBody JSONSaveCollectionsheet request) throws Throwable {
Map<String, Object> map = new HashMap<String, Object>();
ObjectMapper om = createObjectMapper();
List<InvalidSaveCollectionSheetReason> reasons = new ArrayList<InvalidSaveCollectionSheetReason>();
CollectionSheetErrorsDto errors = null;
SaveCollectionSheetDto saveCollectionSheetDto = null;
try {
saveCollectionSheetDto = om.readValue(request.getJson(), SaveCollectionSheetDto.class);
} catch (JsonMappingException e) {
if (e.getCause() instanceof SaveCollectionSheetException) {
reasons.addAll(((SaveCollectionSheetException) e.getCause()).getInvalidSaveCollectionSheetReasons());
} else {
throw e.getCause();
}
}
if (saveCollectionSheetDto != null) {
try {
errors = collectionSheetServiceFacade.saveCollectionSheet(saveCollectionSheetDto);
map.put("errors", errors != null ? errors.getErrorText() : null);
} catch (MifosRuntimeException e) {
map.put("errors", e.getMessage());
}
}
map.put("invalidCollectionSheet", reasons);
return map;
}
Aggregations