package org.mifos.ui.core.controller;
import org.apache.commons.lang.StringUtils;
import org.mifos.application.admin.servicefacade.CoaDto;
import org.mifos.application.admin.servicefacade.CoaServiceFacade;
import org.mifos.service.BusinessRuleException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/" + PreviewModifyCoaController.PREVIEW_MODIFY_COA)
@SessionAttributes("formBean")
public class PreviewModifyCoaController {
private CoaServiceFacade coaServiceFacade;
private static final String REDIRECT_TO_COA_ADMIN_SCREEN = "redirect:/coaAdmin.ftl";
private static final String CANCEL_PARAM = "CANCEL";
private static final String EDIT_PARAM = "EDIT";
public static final String PREVIEW_MODIFY_COA = "previewModifyCoa";
private static final String MODIFY_COA = "modifyCoa";
@RequestMapping(method = RequestMethod.POST)
public ModelAndView processFormSubmit(@RequestParam(value = EDIT_PARAM, required = false) String edit,
@RequestParam(value = CANCEL_PARAM, required = false) String cancel,
@ModelAttribute("formBean") CoaFormBean formBean,
BindingResult result,
SessionStatus status){
ModelAndView mav = new ModelAndView(REDIRECT_TO_COA_ADMIN_SCREEN);
if (StringUtils.isNotBlank(edit)) {
mav = new ModelAndView(MODIFY_COA);
mav.addObject("formBean", formBean);
mav.addObject("COAlist", coaServiceFacade.getList(null));
} else if (StringUtils.isNotBlank(cancel)) {
status.setComplete();
} else if (result.hasErrors()) {
mav = new ModelAndView(PREVIEW_MODIFY_COA);
} else {
try {
CoaDto coaDto = new CoaDto();
coaDto.setAccountId(formBean.getAccountId());
coaDto.setAccountName(formBean.getCoaName());
coaDto.setGlCodeString(formBean.getGlCode());
coaDto.setParentGlCode(formBean.getParentGlCode());
coaServiceFacade.modify(coaDto);
status.setComplete();
} catch (BusinessRuleException ex) {
ObjectError error = new ObjectError("formBean", new String[] { ex.getMessageKey() },
new Object[] {}, "default: ");
result.addError(error);
mav.setViewName(PREVIEW_MODIFY_COA);
mav.addObject("formBean", formBean);
}
}
return mav;
}
@Autowired
public void setCoaServiceFacade(CoaServiceFacade coaServiceFacade) {
this.coaServiceFacade = coaServiceFacade;
}
}