/* * eGov suite of products aim to improve the internal efficiency,transparency, * accountability and the service delivery of the government organizations. * * Copyright (C) <2015> eGovernments Foundation * * The updated version of eGov suite of products as by eGovernments Foundation * is available at http://www.egovernments.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/ or * http://www.gnu.org/licenses/gpl.html . * * In addition to the terms of the GPL license to be adhered to in using this * program, the following additional terms are to be complied with: * * 1) All versions of this program, verbatim or modified must carry this * Legal Notice. * * 2) Any misrepresentation of the origin of the material is prohibited. It * is required that all modified versions of this material be marked in * reasonable ways as different from the original version. * * 3) This license does not grant any rights to any user of the program * with regards to rights under trademark law for use of the trade names * or trademarks of eGovernments Foundation. * * In case of any queries, you can reach eGovernments Foundation at contact@egovernments.org. */ /** * */ package org.egov.ptis.actions.recovery; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.egov.commons.CFinancialYear; import org.egov.demand.model.EgBill; import org.egov.demand.model.EgDemandReason; import org.egov.infra.admin.master.entity.User; import org.egov.infra.admin.master.service.UserService; import org.egov.infra.reporting.engine.ReportOutput; import org.egov.infra.reporting.engine.ReportRequest; import org.egov.infra.web.struts.annotation.ValidationErrorPage; import org.egov.infra.workflow.entity.StateAware; import org.egov.infra.workflow.service.WorkflowService; import org.egov.infstr.services.PersistenceService; import org.egov.pims.commons.Position; import org.egov.ptis.client.model.PropertyBillInfo; import org.egov.ptis.client.util.PropertyTaxUtil; import org.egov.ptis.constants.PropertyTaxConstants; import org.egov.ptis.domain.entity.property.BasicPropertyImpl; import org.egov.ptis.domain.entity.recovery.IntimationNotice; import org.egov.ptis.domain.entity.recovery.Recovery; import org.egov.ptis.domain.entity.recovery.Warrant; import org.egov.ptis.domain.entity.recovery.WarrantFee; import org.egov.ptis.notice.PtNotice; import org.hibernate.FlushMode; import org.hibernate.Session; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import static org.egov.ptis.constants.PropertyTaxConstants.DEMANDRSN_CODE_COURT_FEE; import static org.egov.ptis.constants.PropertyTaxConstants.DEMANDRSN_CODE_NOTICE_FEE; import static org.egov.ptis.constants.PropertyTaxConstants.DEMANDRSN_CODE_WARRANT_FEE; import static org.egov.ptis.constants.PropertyTaxConstants.WFLOW_ACTION_STEP_APPROVE; import static org.egov.ptis.constants.PropertyTaxConstants.WFLOW_ACTION_STEP_FORWARD; import static org.egov.ptis.constants.PropertyTaxConstants.WFLOW_ACTION_STEP_SAVE; /** * @author manoranjan * */ @ParentPackage("egov") @Results({ @Result(name = "invalidUser", location = "workflow", params = { "namespace", "/workflow", "method", "inboxItemViewErrorUserInvalid" }) }) public class RecoveryAction extends BaseRecoveryAction { private static final long serialVersionUID = 1L; private final Logger LOGGER = Logger.getLogger(RecoveryAction.class); private Recovery recovery = new Recovery(); @Autowired @Qualifier("ptRecoveryPeristenceService") private PersistenceService<Recovery, Long> recoveryService; protected WorkflowService<Recovery> recoveryWorkflowService; private static String MESSAGE = "message"; private static String WARRANTAPPLICATIONVIEW = "warrantApplicationView"; private static String WARRANTAPPLICATIONNEW = "warrantApplicationNew"; private static String NOTICE156NEW = "notice156New"; private static String NOTICE156VIEW = "notice156View"; private static String NOTICE159NEW = "notice159New"; private static String NOTICE159VIEW = "notice159View"; private static String PRINT = "print"; private UserService userService; @PersistenceContext private EntityManager entityManager; public RecoveryAction() { addRelatedEntity("basicProperty", BasicPropertyImpl.class); addRelatedEntity("bill", EgBill.class); addRelatedEntity("intimationNotice", IntimationNotice.class); addRelatedEntity("warrant", Warrant.class); } @Override public StateAware getModel() { return recovery; } @SuppressWarnings("unchecked") @Override public void prepare() { // to merge the new values from jsp with existing if (recovery.getId() != null) { recovery = recoveryService.findById(recovery.getId(), false); } super.prepare(); setUserInfo(); } public String newform() { String returnStr = MESSAGE; recovery.setBasicProperty(getPropertyView(parameters.get("propertyId")[0])); Map<String, String> wfMap = recovery.getBasicProperty().getPropertyWfStatus(); BigDecimal totalArrDue = BigDecimal.valueOf((Double.valueOf(viewMap.get("totalArrDue").toString()))); StringBuffer consumerId = new StringBuffer(); consumerId.append(recovery.getBasicProperty().getUpicNo()).append("(Zone:") .append(recovery.getBasicProperty().getPropertyID().getZone().getBoundaryNum()).append(" Ward:") .append(recovery.getBasicProperty().getPropertyID().getWard().getBoundaryNum()).append(")"); EgBill bill = getBil(consumerId.toString()); if (wfMap.get(PropertyTaxConstants.WFSTATUS).equalsIgnoreCase(Boolean.TRUE.toString()) && StringUtils.isNotEmpty(wfMap.get(PropertyTaxConstants.WFOWNER))) { addActionMessage(getText("property.state.recovery")); } else if (wfMap.get(PropertyTaxConstants.WFSTATUS).equalsIgnoreCase(Boolean.TRUE.toString()) && StringUtils.isEmpty(wfMap.get(PropertyTaxConstants.WFOWNER))) { addActionMessage(getText("property.state.in.recovery")); } else if (null == bill) { addActionMessage(getText("bill.not.generated")); } else if (totalArrDue.compareTo(BigDecimal.ZERO) == 0) { addActionMessage(getText("tax.arrears.not")); } else { setupWorkflowDetails(); recovery.setBill(bill); returnStr = NEW; } return returnStr; } @ValidationErrorPage(value = "new") public String startRecovery() { LOGGER.debug("RecoveryAction | startRecovery | Start" + recovery); setupWorkflowDetails(); validateStartRecovery(recovery); recovery.getBasicProperty().setStatus(getPropStatusByStatusCode("NOTICE155ISSUED")); recovery.setStatus(getEgwStatusForModuleAndCode(PropertyTaxConstants.RECOVERY_MODULE, PropertyTaxConstants.RECOVERY_NOTICE155CREATED)); IntimationNotice intimationNotice = recovery.getIntimationNotice(); intimationNotice.setRecovery(recovery); recoveryService.persist(recovery); // Position position = // eisCommonsManager.getPositionByUserId(Integer.valueOf(ApplicationThreadLocals.getUserId())); Position position = null; recovery.transition(true).start().withOwner(position); updateWfstate("Notice 155"); addActionMessage(getText("notice155.success")); LOGGER.debug("RecoveryAction | startRecovery | end" + recovery); return MESSAGE; } public String view() { if (!authenticateInboxItemRqst(recovery.getState())) { return "invalidUser"; } getPropertyView(recovery.getBasicProperty().getUpicNo()); setupWorkflowDetails(); if (recovery.getStatus().getCode().equalsIgnoreCase(PropertyTaxConstants.RECOVERY_NOTICE155GENERATED)) { return WARRANTAPPLICATIONNEW; } else if (recovery.getStatus().getCode().equalsIgnoreCase(PropertyTaxConstants.RECOVERY_WARRANTPREPARED)) { return WARRANTAPPLICATIONVIEW; } else if (recovery.getStatus().getCode().equalsIgnoreCase(PropertyTaxConstants.RECOVERY_WARRANTAPPROVED)) { return NOTICE156NEW; } else if (recovery.getStatus().getCode().equalsIgnoreCase(PropertyTaxConstants.RECOVERY_WARRANTNOTICECREATED)) { return NOTICE156VIEW; } else if (recovery.getStatus().getCode().equalsIgnoreCase(PropertyTaxConstants.RECOVERY_WARRANTNOTICEISSUED)) { return NOTICE159NEW; } else if (recovery.getStatus().getCode().equalsIgnoreCase(PropertyTaxConstants.RECOVERY_CEASENOTICECREATED)) { return NOTICE159VIEW; } return "view"; } @ValidationErrorPage(value = "view") public String updateWf() { updateWfstate(recovery.getStatus().getDescription()); return MESSAGE; } @ValidationErrorPage(value = "view") public String generateNotice155() { LOGGER.debug("RecoveryAction | generateNotice155 | start" + recovery.getIntimationNotice()); String noticeNo = propertyTaxNumberGenerator.generateRecoveryNotice(PropertyTaxConstants.NOTICE155); recovery.setStatus(getEgwStatusForModuleAndCode(PropertyTaxConstants.RECOVERY_MODULE, PropertyTaxConstants.RECOVERY_NOTICE155GENERATED)); updateWfstate("Notice 155 Generated"); Map<String, Object> paramMap = new HashMap<String, Object>(); CFinancialYear currentFinancialYear = propertyTaxUtil.getFinancialYearforDate(getCurrentDate()); String currFinYear = currentFinancialYear.getFinYearRange(); paramMap.put("paasoon", currFinYear); paramMap.put("currentDate", DDMMYYYYFORMATS.format(getCurrentDate())); paramMap.put("noticeNo", noticeNo); PropertyTaxUtil propertyTaxUtil = new PropertyTaxUtil(); Map<String, Map<String, BigDecimal>> reasonwiseDues = propertyTaxUtil.getDemandDues(recovery.getBasicProperty() .getUpicNo()); PropertyBillInfo propertyBillInfo = new PropertyBillInfo(reasonwiseDues, recovery.getBasicProperty(), null); ReportRequest reportRequest = new ReportRequest("Notice-155", propertyBillInfo, paramMap); reportRequest.setPrintDialogOnOpenReport(true); ReportOutput reportOutput = reportService.createReport(reportRequest); reportId = addingReportToSession(reportOutput); if (reportOutput != null && reportOutput.getReportOutputData() != null) { InputStream Notice155PDF = new ByteArrayInputStream(reportOutput.getReportOutputData()); PtNotice ptNotice = noticeService.saveNotice(null,noticeNo, PropertyTaxConstants.NOTICE155, recovery.getBasicProperty(), Notice155PDF); recovery.getIntimationNotice().setNotice(ptNotice); } LOGGER.debug("RecoveryAction | generateNotice155 | end" + recovery.getIntimationNotice()); return PRINT; } @ValidationErrorPage(value = "warrantApplicationNew") public String warrantApplication() { LOGGER.debug("RecoveryAction | warrantApplication | Start"); entityManager.unwrap(Session.class).setFlushMode(FlushMode.MANUAL); setupWorkflowDetails(); List<WarrantFee> warrantFess = new LinkedList<WarrantFee>(); for (WarrantFee warrantFee : recovery.getWarrant().getWarrantFees()) { EgDemandReason demandReason = (EgDemandReason) persistenceService.find(" from EgDemandReason where id=" + warrantFee.getDemandReason().getId()); warrantFee.setDemandReason(demandReason); warrantFess.add(warrantFee); LOGGER.debug("RecoveryAction | warrantApplication | Warrant Fee" + warrantFee); } recovery.getWarrant().getWarrantFees().clear(); recovery.getWarrant().getWarrantFees().addAll(warrantFess); recovery.getBasicProperty().setStatus(getPropStatusByStatusCode(PropertyTaxConstants.RECOVERY_WARRANTPREPARED)); recovery.setStatus(getEgwStatusForModuleAndCode(PropertyTaxConstants.RECOVERY_MODULE, PropertyTaxConstants.RECOVERY_WARRANTPREPARED)); updateWfstate("Warrant Application"); LOGGER.debug("RecoveryAction | warrantApplication | end" + recovery.getWarrant()); entityManager.unwrap(Session.class).flush(); addActionMessage(getText("warrantApp.success")); return MESSAGE; } @ValidationErrorPage(value = "warrantApplicationView") public String generateWarrantApplicaton() { String noticeNo = propertyTaxNumberGenerator.generateRecoveryNotice(PropertyTaxConstants.WARRANT_APPLICATION); recovery.getBasicProperty().setStatus(getPropStatusByStatusCode(PropertyTaxConstants.RECOVERY_WARRANTAPPROVED)); recovery.setStatus(getEgwStatusForModuleAndCode(PropertyTaxConstants.RECOVERY_MODULE, PropertyTaxConstants.RECOVERY_WARRANTAPPROVED)); updateWfstate(PropertyTaxConstants.WARRANT_APPLICATION); BigDecimal courtFee = BigDecimal.ZERO; BigDecimal noticeFee = BigDecimal.ZERO; BigDecimal warrantFee = BigDecimal.ZERO; for (WarrantFee fee : recovery.getWarrant().getWarrantFees()) { if (fee.getDemandReason().getEgDemandReasonMaster().getCode().equalsIgnoreCase(DEMANDRSN_CODE_WARRANT_FEE)) { warrantFee = fee.getAmount(); } else if (fee.getDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(DEMANDRSN_CODE_COURT_FEE)) { courtFee = fee.getAmount(); } else if (fee.getDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(DEMANDRSN_CODE_NOTICE_FEE)) { noticeFee = fee.getAmount(); } } Map<String, Object> paramMap = new HashMap<String, Object>(); CFinancialYear currentFinancialYear = propertyTaxUtil.getFinancialYearforDate(getCurrentDate()); String currFinYear = currentFinancialYear.getFinYearRange(); paramMap.put("paasoon", currFinYear); paramMap.put("noticeDate", new Date()); paramMap.put("billNo", recovery.getBill().getBillNo()); paramMap.put("warrantFee", warrantFee.toString()); paramMap.put("courtFee", courtFee.toString()); paramMap.put("noticeFee", noticeFee.toString()); paramMap.put("zoneNum", recovery.getBasicProperty().getPropertyID().getZone().getBoundaryNum().toString()); paramMap.put("noticeNo", noticeNo); PropertyTaxUtil propertyTaxUtil = new PropertyTaxUtil(); Map<String, Map<String, BigDecimal>> reasonwiseDues = propertyTaxUtil.getDemandDues(recovery.getBasicProperty() .getUpicNo()); PropertyBillInfo propertyBillInfo = new PropertyBillInfo(reasonwiseDues, recovery.getBasicProperty(), null); BigDecimal totalRecoverAmt = (propertyBillInfo.getGrandTotal().add(courtFee.add(warrantFee))).setScale(2); paramMap.put("totalAmt", totalRecoverAmt.toString()); ReportRequest reportRequest = new ReportRequest(PropertyTaxConstants.WARRANT_APPLICATION, propertyBillInfo, paramMap); reportRequest.setPrintDialogOnOpenReport(true); ReportOutput reportOutput = reportService.createReport(reportRequest); reportId = addingReportToSession(reportOutput); if (reportOutput != null && reportOutput.getReportOutputData() != null) { InputStream warrantApplPDF = new ByteArrayInputStream(reportOutput.getReportOutputData()); PtNotice ptNotice = noticeService.saveNotice(null,noticeNo, PropertyTaxConstants.WARRANT_APPLICATION, recovery.getBasicProperty(), warrantApplPDF); recovery.getWarrant().setNotice(ptNotice); } return PRINT; } @ValidationErrorPage(value = "notice156New") public String warrantNotice() { LOGGER.debug("RecoveryAction | warrantNotice | Start" + recovery.getWarrantNotice()); setupWorkflowDetails(); validateWarrantNotice(recovery); recovery.getBasicProperty().setStatus( getPropStatusByStatusCode(PropertyTaxConstants.RECOVERY_WARRANTNOTICECREATED)); recovery.setStatus(getEgwStatusForModuleAndCode(PropertyTaxConstants.RECOVERY_MODULE, PropertyTaxConstants.RECOVERY_WARRANTNOTICECREATED)); updateWfstate("Notice 156"); addActionMessage(getText("notice156.success")); LOGGER.debug("RecoveryAction | warrantNotice | end" + recovery.getWarrantNotice()); return MESSAGE; } public String generateWarrantNotice() { LOGGER.debug("RecoveryAction | generateWarrantNotice | Start" + recovery.getWarrantNotice()); String noticeNo = propertyTaxNumberGenerator.generateRecoveryNotice(PropertyTaxConstants.NOTICE156); recovery.getBasicProperty().setStatus( getPropStatusByStatusCode(PropertyTaxConstants.RECOVERY_WARRANTNOTICEISSUED)); recovery.setStatus(getEgwStatusForModuleAndCode(PropertyTaxConstants.RECOVERY_MODULE, PropertyTaxConstants.RECOVERY_WARRANTNOTICEISSUED)); updateWfstate("Notic 156 Generated"); updateDemand(recovery); Map<String, Object> paramMap = getNotice156Param(recovery); PropertyTaxUtil propertyTaxUtil = new PropertyTaxUtil(); Map<String, Map<String, BigDecimal>> reasonwiseDues = propertyTaxUtil.getDemandDues(recovery.getBasicProperty() .getUpicNo()); PropertyBillInfo propertyBillInfo = new PropertyBillInfo(reasonwiseDues, recovery.getBasicProperty(), null); String adress = recovery.getBasicProperty().getAddress().toString(); BigDecimal totalRecoverAmt = propertyBillInfo.getGrandTotal() .add(BigDecimal.valueOf(Double.valueOf(paramMap.get("totalWarrantFees").toString()))).setScale(2); paramMap.put("adress", adress); paramMap.put("zoneNum", recovery.getBasicProperty().getPropertyID().getZone().getBoundaryNum().toString()); paramMap.put("totalRecoverAmt", totalRecoverAmt.toString()); ReportRequest reportRequest = new ReportRequest("Warrent", propertyBillInfo, paramMap); reportRequest.setPrintDialogOnOpenReport(true); ReportOutput reportOutput = reportService.createReport(reportRequest); reportId = addingReportToSession(reportOutput); if (reportOutput != null && reportOutput.getReportOutputData() != null) { InputStream Notice156PDF = new ByteArrayInputStream(reportOutput.getReportOutputData()); PtNotice ptNotice = noticeService.saveNotice(null,noticeNo, PropertyTaxConstants.NOTICE156, recovery.getBasicProperty(), Notice156PDF); recovery.getWarrantNotice().setNotice(ptNotice); } LOGGER.debug("RecoveryAction | generateWarrantNotice | End" + recovery.getWarrantNotice()); return PRINT; } @ValidationErrorPage(value = "notice159New") public String ceaseNotice() { LOGGER.debug("RecoveryAction | ceaseNotice | Start" + recovery.getCeaseNotice()); setupWorkflowDetails(); validateCeaseNotice(recovery); recovery.getBasicProperty().setStatus( getPropStatusByStatusCode(PropertyTaxConstants.RECOVERY_CEASENOTICECREATED)); recovery.setStatus(getEgwStatusForModuleAndCode(PropertyTaxConstants.RECOVERY_MODULE, PropertyTaxConstants.RECOVERY_CEASENOTICECREATED)); updateWfstate("Notice 159"); addActionMessage(getText("notice159.success")); LOGGER.debug("RecoveryAction | ceaseNotice | end" + recovery.getCeaseNotice()); return MESSAGE; } @ValidationErrorPage(value = "notice159View") public String generateCeaseNotice() { LOGGER.debug("RecoveryAction | generateCeaseNotice | Start" + recovery.getCeaseNotice()); String noticeNo = propertyTaxNumberGenerator.generateRecoveryNotice(PropertyTaxConstants.NOTICE159); recovery.getBasicProperty().setStatus( getPropStatusByStatusCode(PropertyTaxConstants.RECOVERY_CEASENOTICEISSUED)); recovery.setStatus(getEgwStatusForModuleAndCode(PropertyTaxConstants.RECOVERY_MODULE, PropertyTaxConstants.RECOVERY_CEASENOTICEISSUED)); // FIX ME // Position position = // eisCommonsManager.getPositionByUserId(Integer.valueOf(ApplicationThreadLocals.getUserId())); Position position = null; recovery.transition(true).transition().withNextAction("END").withStateValue("END").withOwner(position) .withComments(workflowBean.getComments()); Map<String, Object> paramMap = getNotice159Param(recovery); PropertyTaxUtil propertyTaxUtil = new PropertyTaxUtil(); Map<String, Map<String, BigDecimal>> reasonwiseDues = propertyTaxUtil.getDemandDues(recovery.getBasicProperty() .getUpicNo()); PropertyBillInfo propertyBillInfo = new PropertyBillInfo(reasonwiseDues, recovery.getBasicProperty(), null); BigDecimal totalRecoverAmt = propertyBillInfo.getGrandTotal() .add(BigDecimal.valueOf(Double.valueOf(paramMap.get("totalWarrantFees").toString()))).setScale(2); paramMap.put("totalRecoverAmt", totalRecoverAmt.toString()); paramMap.put("executionDate", DDMMYYYYFORMATS.format(recovery.getCeaseNotice().getExecutionDate())); paramMap.put("currentDate", DDMMYYYYFORMATS.format(new Date())); paramMap.put("north", recovery.getBasicProperty().getPropertyID().getNorthBoundary()); paramMap.put("south", recovery.getBasicProperty().getPropertyID().getSouthBoundary()); paramMap.put("zoneNum", recovery.getBasicProperty().getPropertyID().getZone().getBoundaryNum().toString()); paramMap.put("east", recovery.getBasicProperty().getPropertyID().getEastBoundary()); paramMap.put("west", recovery.getBasicProperty().getPropertyID().getWestBoundary()); ReportRequest reportRequest = new ReportRequest("Notice-159", propertyBillInfo, paramMap); reportRequest.setPrintDialogOnOpenReport(true); ReportOutput reportOutput = reportService.createReport(reportRequest); reportId = addingReportToSession(reportOutput); if (reportOutput != null && reportOutput.getReportOutputData() != null) { InputStream Notice159PDF = new ByteArrayInputStream(reportOutput.getReportOutputData()); PtNotice ptNotice = noticeService.saveNotice(null,noticeNo, PropertyTaxConstants.NOTICE159, recovery.getBasicProperty(), Notice159PDF); recovery.getCeaseNotice().setNotice(ptNotice); } LOGGER.debug("RecoveryAction | generateCeaseNotice | End" + recovery.getCeaseNotice()); return PRINT; } public String viewDetails() { getPropertyView(recovery.getBasicProperty().getUpicNo()); return "viewDetails"; } private void updateWfstate(String value) { LOGGER.debug("RecoveryAction | updateStateAndStatus | Start"); if (WFLOW_ACTION_STEP_SAVE.equalsIgnoreCase(workflowBean.getActionName())) { // FIX ME // Position position = // eisCommonsManager.getPositionByUserId(Integer.valueOf(ApplicationThreadLocals.getUserId())); Position position = null; recovery.transition(true).transition().withNextAction("Saved : " + value).withOwner(position) .withComments(workflowBean.getComments()); addActionMessage(getText("file.save")); } else if (WFLOW_ACTION_STEP_FORWARD.equalsIgnoreCase(workflowBean.getActionName())) { // FIX ME // Position position = // eisCommonsManager.getPositionByUserId(workflowBean.getApproverUserId()); Position position = null; User approverUser = userService.getUserById(workflowBean.getApproverUserId().longValue()); recovery.transition(true).transition().withNextAction("Forwarded : " + value) .withStateValue("Forward/Approve").withOwner(position).withComments(workflowBean.getComments()); addActionMessage(getText("recovery.forward", new String[] { approverUser.getUsername() })); } else if (WFLOW_ACTION_STEP_APPROVE.equalsIgnoreCase(workflowBean.getActionName())) { // Position position = // eisCommonsManager.getPositionByUserId(recovery.getCreatedBy().getId()); Position position = null; User approverUser = userService.getUserById(recovery.getCreatedBy().getId()); recovery.transition(true).transition().withNextAction("Approved : " + value) .withStateValue(getNextState(recovery.getStatus().getCode())).withOwner(position) .withComments(workflowBean.getComments()); addActionMessage(getText("recovery.approve", new String[] { approverUser.getUsername() })); } else { // FIX ME // Position position = // eisCommonsManager.getPositionByUserId(workflowBean.getApproverUserId()); Position position = null; User approverUser = userService.getUserById(workflowBean.getApproverUserId().longValue()); recovery.transition(true).start().withNextAction(value).withStateValue(recovery.getStatus().getCode()) .withOwner(position).withComments(workflowBean.getComments()); addActionMessage(getText("recovery.approve", new String[] { approverUser.getUsername() })); } LOGGER.debug("RecoveryAction | updateStateAndStatus | End"); } public Recovery getRecovery() { return recovery; } public void setRecovery(Recovery recovery) { this.recovery = recovery; } public void setRecoveryService(PersistenceService<Recovery, Long> recoveryService) { this.recoveryService = recoveryService; } public void setRecoveryWorkflowService(WorkflowService<Recovery> recoveryWorkflowService) { this.recoveryWorkflowService = recoveryWorkflowService; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } }