/** * 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.wtms.web.controller.application; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.validation.Valid; import javax.validation.ValidationException; import org.egov.commons.entity.ChairPerson; import org.egov.commons.service.ChairPersonService; import org.egov.eis.entity.Assignment; import org.egov.eis.web.contract.WorkflowContainer; import org.egov.infra.admin.master.service.DepartmentService; import org.egov.infra.admin.master.service.UserService; import org.egov.infra.filestore.entity.FileStoreMapper; import org.egov.infra.reporting.engine.ReportOutput; import org.egov.infra.security.utils.SecurityUtils; import org.egov.infra.utils.autonumber.AutonumberServiceBeanResolver; import org.egov.infra.config.core.ApplicationThreadLocals; import org.egov.wtms.application.entity.ApplicationDocuments; import org.egov.wtms.application.entity.ConnectionEstimationDetails; import org.egov.wtms.application.entity.WaterConnectionDetails; import org.egov.wtms.application.entity.WaterDemandConnection; import org.egov.wtms.application.service.ConnectionDemandService; import org.egov.wtms.application.service.ReportGenerationService; import org.egov.wtms.application.service.WaterConnectionDetailsService; import org.egov.wtms.application.service.WaterDemandConnectionService; import org.egov.wtms.autonumber.WorkOrderNumberGenerator; import org.egov.wtms.masters.entity.ConnectionCategory; import org.egov.wtms.masters.entity.enums.ClosureType; import org.egov.wtms.masters.service.MeterCostService; import org.egov.wtms.masters.service.RoadCategoryService; import org.egov.wtms.masters.service.UsageTypeService; import org.egov.wtms.utils.WaterTaxNumberGenerator; import org.egov.wtms.utils.WaterTaxUtils; import org.egov.wtms.utils.constants.WaterTaxConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.SmartValidator; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; 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.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @Controller @RequestMapping(value = "/application") public class UpdateConnectionController extends GenericConnectionController { private final WaterConnectionDetailsService waterConnectionDetailsService; private final DepartmentService departmentService; @Autowired private ConnectionDemandService connectionDemandService; @Autowired private WaterTaxUtils waterTaxUtils; @Autowired private RoadCategoryService roadCategoryService; @Autowired private AutonumberServiceBeanResolver beanResolver; @Autowired protected UsageTypeService usageTypeService; @Autowired private SecurityUtils securityUtils; @Autowired private UserService userService; @Autowired private WaterTaxNumberGenerator waterTaxNumberGenerator; @Autowired private ChairPersonService chairPersonService; @Autowired private MeterCostService meterCostService; @Autowired private ReportGenerationService reportGenerationService; @Autowired private WaterDemandConnectionService waterDemandConnectionService; @Autowired public UpdateConnectionController(final WaterConnectionDetailsService waterConnectionDetailsService, final DepartmentService departmentService, final ConnectionDemandService connectionDemandService, final SmartValidator validator) { this.waterConnectionDetailsService = waterConnectionDetailsService; this.departmentService = departmentService; } @ModelAttribute public WaterConnectionDetails getWaterConnectionDetails(@PathVariable final String applicationNumber) { final WaterConnectionDetails waterConnectionDetails = waterConnectionDetailsService .findByApplicationNumber(applicationNumber); return waterConnectionDetails; } @RequestMapping(value = "/update/{applicationNumber}", method = RequestMethod.GET) public String view(final Model model, @PathVariable final String applicationNumber, final HttpServletRequest request) { final WaterConnectionDetails waterConnectionDetails = waterConnectionDetailsService .findByApplicationNumber(applicationNumber); return loadViewData(model, request, waterConnectionDetails); } private String loadViewData(final Model model, final HttpServletRequest request, final WaterConnectionDetails waterConnectionDetails) { model.addAttribute("stateType", waterConnectionDetails.getClass().getSimpleName()); WorkflowContainer workflowContainer = new WorkflowContainer(); if (waterConnectionDetails.getCloseConnectionType() != null && waterConnectionDetails.getReConnectionReason() == null) { model.addAttribute("additionalRule", WaterTaxConstants.WORKFLOW_CLOSUREADDITIONALRULE); workflowContainer.setAdditionalRule(WaterTaxConstants.WORKFLOW_CLOSUREADDITIONALRULE); if (waterConnectionDetails.getCloseConnectionType().equals(WaterTaxConstants.PERMENENTCLOSECODE)) waterConnectionDetails.setCloseConnectionType(ClosureType.Permanent.getName()); else waterConnectionDetails.setCloseConnectionType(ClosureType.Temporary.getName()); model.addAttribute("radioButtonMap", Arrays.asList(ClosureType.values())); } model.addAttribute("applicationDocList", waterConnectionDetailsService.getApplicationDocForExceptClosureAndReConnection(waterConnectionDetails)); if (waterConnectionDetails.getCloseConnectionType() != null && (waterConnectionDetails.getReConnectionReason() == null || waterConnectionDetails.getReConnectionReason() != null)) { if (!waterConnectionDetails.getApplicationDocs().isEmpty()) for (final ApplicationDocuments appDoc : waterConnectionDetails.getApplicationDocs()) { if (appDoc.getDocumentNames() != null && appDoc.getDocumentNames().getApplicationType().getCode() .equals(WaterTaxConstants.CLOSINGCONNECTION)) { final List<ApplicationDocuments> tempListDoc = new ArrayList<ApplicationDocuments>(); tempListDoc.add(appDoc); model.addAttribute("appforDocumentList", tempListDoc); } if (appDoc.getDocumentNames() != null && appDoc.getDocumentNames().getApplicationType().getCode() .equals(WaterTaxConstants.RECONNECTIONCONNECTION)) { // waterConnectionDetails.getApplicationDocs().add(appDoc); final List<ApplicationDocuments> tempListDocrecon = new ArrayList<ApplicationDocuments>(); tempListDocrecon.add(appDoc); model.addAttribute("appforDocumentList", tempListDocrecon); } } else model.addAttribute("appforDocumentList", waterConnectionDetails.getApplicationDocs()); } if (waterConnectionDetails.getCloseConnectionType() != null && waterConnectionDetails.getReConnectionReason() != null) { model.addAttribute("additionalRule", WaterTaxConstants.RECONNECTIONCONNECTION); workflowContainer.setAdditionalRule(WaterTaxConstants.RECONNECTIONCONNECTION); } else if ("".equals(workflowContainer.getAdditionalRule()) || workflowContainer.getAdditionalRule() == null) { workflowContainer.setAdditionalRule(waterConnectionDetails.getApplicationType().getCode()); model.addAttribute("additionalRule", waterConnectionDetails.getApplicationType().getCode()); } prepareWorkflow(model, waterConnectionDetails, workflowContainer); model.addAttribute("currentState", waterConnectionDetails.getCurrentState().getValue()); model.addAttribute("currentUser", waterTaxUtils.getCurrentUserRole(securityUtils.getCurrentUser())); model.addAttribute("waterConnectionDetails", waterConnectionDetails); model.addAttribute("feeDetails", connectionDemandService.getSplitFee(waterConnectionDetails)); model.addAttribute("connectionType", waterConnectionDetailsService.getConnectionTypesMap() .get(waterConnectionDetails.getConnectionType().name())); model.addAttribute("applicationHistory", waterConnectionDetailsService.getHistory(waterConnectionDetails)); model.addAttribute("approvalDepartmentList", departmentService.getAllDepartments()); if (waterConnectionDetails.getStatus() != null && waterConnectionDetails.getStatus().getCode() .equalsIgnoreCase(WaterTaxConstants.APPLICATION_STATUS_WOGENERATED)) model.addAttribute("meterCostMasters", meterCostService.findByPipeSize(waterConnectionDetails.getPipeSize())); if (waterConnectionDetails.getStatus() != null && waterConnectionDetails.getStatus().getCode() .equalsIgnoreCase(WaterTaxConstants.APPLICATION_STATUS_FEEPAID)) { final ChairPerson chairPerson = chairPersonService.getActiveChairPersonAsOnCurrentDate(); model.addAttribute("chairPerson", chairPerson); } if (WaterTaxConstants.CHANGEOFUSE.equalsIgnoreCase(waterConnectionDetails.getApplicationType().getCode())) { waterConnectionDetails.getConnection().setMeter(null); waterConnectionDetails.getConnection().setInitialReading(null); waterConnectionDetails.getConnection().setMeterSerialNumber(""); } appendModeBasedOnApplicationCreator(model, request, waterConnectionDetails); final BigDecimal waterTaxDueforParent = waterConnectionDetailsService.getTotalAmount(waterConnectionDetails); model.addAttribute("waterTaxDueforParent", waterTaxDueforParent); model.addAttribute("usageTypes", usageTypeService.getActiveUsageTypes()); model.addAttribute("connectionCategories", connectionCategoryService.getAllActiveConnectionCategory()); model.addAttribute("pipeSizes", pipeSizeService.getAllActivePipeSize()); model.addAttribute("typeOfConnection", waterConnectionDetails.getApplicationType().getCode()); return "newconnection-edit"; } private void appendModeBasedOnApplicationCreator(final Model model, final HttpServletRequest request, final WaterConnectionDetails waterConnectionDetails) { final Boolean recordCreatedBYNonEmployee = waterTaxUtils.getCurrentUserRole(waterConnectionDetails .getCreatedBy()); // if record from csc to Clerk // TODO: as off now using anonymous created for MeeSeva after we need to // craete role for this and add in appconfig for // recordCreatedBYNonEmployee API // so it will work as CSC Operator record if ((recordCreatedBYNonEmployee || userService.getUserById(waterConnectionDetails.getCreatedBy().getId()) .getUsername().equals("anonymous")) && null == request.getAttribute("mode") && waterConnectionDetails.getState().getHistory().isEmpty()) { model.addAttribute("mode", "edit"); model.addAttribute("approvalPositionExist", waterConnectionDetailsService .getApprovalPositionByMatrixDesignation(waterConnectionDetails, 0l, waterConnectionDetails .getApplicationType().getCode(), "edit", "")); } // "edit" mode for AE inbox record FROM CSC and Record from Clerk else if (recordCreatedBYNonEmployee && request.getAttribute("mode") == null && waterConnectionDetails.getStatus().getCode().equals(WaterTaxConstants.APPLICATION_STATUS_CREATED) && waterConnectionDetails.getState().getHistory() != null || !recordCreatedBYNonEmployee && waterConnectionDetails.getStatus() != null && waterConnectionDetails.getStatus().getCode().equals(WaterTaxConstants.APPLICATION_STATUS_CREATED)) { model.addAttribute("mode", "fieldInspection"); model.addAttribute("approvalPositionExist", waterConnectionDetailsService .getApprovalPositionByMatrixDesignation(waterConnectionDetails, 0l, waterConnectionDetails .getApplicationType().getCode(), "fieldInspection", "")); model.addAttribute("roadCategoryList", roadCategoryService.getAllRoadCategory()); } else if (waterConnectionDetails.getCloseConnectionType() != null && waterConnectionDetails.getReConnectionReason() == null) model.addAttribute("approvalPositionExist", waterConnectionDetailsService .getApprovalPositionByMatrixDesignation(waterConnectionDetails, 0l, "CLOSECONNECTION", "", "")); else if (waterConnectionDetails.getCloseConnectionType() != null && waterConnectionDetails.getReConnectionReason() != null) model.addAttribute("approvalPositionExist", waterConnectionDetailsService .getApprovalPositionByMatrixDesignation(waterConnectionDetails, 0l, WaterTaxConstants.RECONNECTIONCONNECTION, "", "")); else model.addAttribute("approvalPositionExist", waterConnectionDetailsService .getApprovalPositionByMatrixDesignation(waterConnectionDetails, 0l, waterConnectionDetails .getApplicationType().getCode(), "", "")); if (waterConnectionDetails.getCurrentState().getValue().equals("Rejected")) model.addAttribute("mode", ""); if (waterConnectionDetails.getCloseConnectionType() != null && waterConnectionDetails.getReConnectionReason() == null && waterConnectionDetails.getStatus().getCode() .equals(WaterTaxConstants.APPLICATION_STATUS_CLOSERINITIATED)) model.addAttribute("mode", "closereditForAE"); if ((waterConnectionDetails.getStatus().getCode().equals(WaterTaxConstants.APPLICATION_STATUS_CLOSERINPROGRESS) || waterConnectionDetails .getStatus().getCode().equals(WaterTaxConstants.APPLICATION_STATUS_CLOSERINITIATED)) && waterConnectionDetails.getReConnectionReason() == null && waterConnectionDetails.getCloseConnectionType() != null && waterConnectionDetails.getState().getValue().equals("Rejected")) model.addAttribute("mode", "closeredit"); if (waterConnectionDetails.getReConnectionReason() != null && waterConnectionDetails.getState().getValue().equals("Rejected") && waterConnectionDetails.getReConnectionReason() != null && waterConnectionDetails.getStatus().getCode() .equals(WaterTaxConstants.WORKFLOW_RECONNCTIONINITIATED)) model.addAttribute("mode", "reconnectioneredit"); if (waterConnectionDetails.getReConnectionReason() != null && waterConnectionDetails.getStatus().getCode().equals(WaterTaxConstants.WORKFLOW_RECONNCTIONINITIATED)) model.addAttribute("mode", "reconEditForAE"); } @RequestMapping(value = "/update/{applicationNumber}", method = RequestMethod.POST) public String update(@Valid @ModelAttribute WaterConnectionDetails waterConnectionDetails, final BindingResult resultBinder, final RedirectAttributes redirectAttributes, final HttpServletRequest request, final Model model, @RequestParam("files") final MultipartFile[] files) { String mode = ""; String workFlowAction = ""; String sourceChannel = request.getParameter("Source"); if (request.getParameter("mode") != null) mode = request.getParameter("mode"); if (request.getParameter("workFlowAction") != null) workFlowAction = request.getParameter("workFlowAction"); request.getSession().setAttribute(WaterTaxConstants.WORKFLOW_ACTION, workFlowAction); // For Submit Button if (waterConnectionDetails.getStatus().getCode().equalsIgnoreCase(WaterTaxConstants.APPLICATION_STATUS_CREATED) && mode.equalsIgnoreCase("fieldInspection")) if (workFlowAction.equalsIgnoreCase(WaterTaxConstants.SUBMITWORKFLOWACTION)) { final ConnectionCategory connectionCategory = connectionCategoryService .findOne(waterConnectionDetails.getCategory().getId()); if (connectionCategory != null && !connectionCategory.getCode().equalsIgnoreCase(WaterTaxConstants.CATEGORY_BPL) && waterConnectionDetails.getBplCardHolderName() != null) waterConnectionDetails.setBplCardHolderName(null); populateEstimationDetails(waterConnectionDetails); WaterDemandConnection waterDemandConnection = waterTaxUtils.getCurrentDemand(waterConnectionDetails); waterDemandConnection.setDemand(connectionDemandService.createDemand(waterConnectionDetails)); waterDemandConnection.setWaterConnectionDetails(waterConnectionDetails); waterConnectionDetails.addWaterDemandConnection(waterDemandConnection); waterDemandConnectionService.createWaterDemandConnection(waterDemandConnection); waterConnectionDetailsService.save(waterConnectionDetails); waterConnectionDetailsService.getCurrentSession().flush(); // Attach any other file during field inspection and estimation final Set<FileStoreMapper> fileStoreSet = addToFileStore(files); Iterator<FileStoreMapper> fsIterator = null; if (fileStoreSet != null && !fileStoreSet.isEmpty()) fsIterator = fileStoreSet.iterator(); if (fsIterator != null && fsIterator.hasNext()) waterConnectionDetails.setFileStore(fsIterator.next()); } else if (workFlowAction.equalsIgnoreCase(WaterTaxConstants.WFLOW_ACTION_STEP_REJECT)) { waterConnectionDetailsService.getCurrentSession().evict(waterConnectionDetails); waterConnectionDetails = waterConnectionDetailsService.findBy(waterConnectionDetails.getId()); } Long approvalPosition = 0l; String approvalComent = ""; if (request.getParameter("approvalComent") != null) approvalComent = request.getParameter("approvalComent"); if (workFlowAction != null && workFlowAction.equals(WaterTaxConstants.APPROVEWORKFLOWACTION) && waterConnectionDetails.getStatus() != null && waterConnectionDetails.getStatus().getCode() != null && waterConnectionDetails.getStatus().getCode().equals(WaterTaxConstants.APPLICATION_STATUS_FEEPAID)) validateSanctionDetails(waterConnectionDetails, resultBinder); if (request.getParameter("approvalPosition") != null && !request.getParameter("approvalPosition").isEmpty()) approvalPosition = Long.valueOf(request.getParameter("approvalPosition")); // For Get Configured ApprovalPosition from workflow history if (approvalPosition == null || approvalPosition.equals(Long.valueOf(0))) if (waterConnectionDetails.getCloseConnectionType() != null) approvalPosition = waterConnectionDetailsService.getApprovalPositionByMatrixDesignation( waterConnectionDetails, approvalPosition, request.getParameter("additionalRule"), mode, workFlowAction); else approvalPosition = waterConnectionDetailsService.getApprovalPositionByMatrixDesignation( waterConnectionDetails, approvalPosition, waterConnectionDetails.getApplicationType().getCode(), mode, workFlowAction); // to get modes to hide and show details in every user inbox request.getSession().setAttribute("APPROVAL_POSITION", approvalPosition); appendModeBasedOnApplicationCreator(model, request, waterConnectionDetails); if ((approvalPosition == null || approvalPosition.equals(Long.valueOf(0))) && request.getParameter("approvalPosition") != null && !request.getParameter("approvalPosition").isEmpty()) approvalPosition = Long.valueOf(request.getParameter("approvalPosition")); if (!resultBinder.hasErrors()) { try { // For Closure Connection if (waterConnectionDetails.getCloseConnectionType() != null) if (waterConnectionDetails.getCloseConnectionType().equals(WaterTaxConstants.PERMENENTCLOSECODE)) waterConnectionDetails.setCloseConnectionType(ClosureType.Permanent.getName()); else waterConnectionDetails.setCloseConnectionType(ClosureType.Temporary.getName()); if (null != workFlowAction) if (workFlowAction.equalsIgnoreCase(WaterTaxConstants.PREVIEWWORKFLOWACTION) && (waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.NEWCONNECTION) || waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.ADDNLCONNECTION) || waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.CHANGEOFUSE))) return "redirect:/application/workorder?pathVar=" + waterConnectionDetails.getApplicationNumber(); else if (workFlowAction.equalsIgnoreCase(WaterTaxConstants.PREVIEWWORKFLOWACTION) && waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.CLOSINGCONNECTION)) return "redirect:/application/acknowlgementNotice?pathVar=" + waterConnectionDetails.getApplicationNumber(); else if (workFlowAction.equalsIgnoreCase(WaterTaxConstants.PREVIEWWORKFLOWACTION) && waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.RECONNECTIONCONNECTION)) return "redirect:/application/ReconnacknowlgementNotice?pathVar=" + waterConnectionDetails.getApplicationNumber(); else if (workFlowAction.equals(WaterTaxConstants.SIGNWORKFLOWACTION)) { // Sign WaterConnectionDetails upadtedWaterConnectionDetails = null; WorkOrderNumberGenerator workOrderGen = beanResolver .getAutoNumberServiceFor(WorkOrderNumberGenerator.class); if (waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.NEWCONNECTION) || waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.ADDNLCONNECTION) || waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.CHANGEOFUSE)) { waterConnectionDetails.setWorkOrderDate(new Date()); waterConnectionDetails.setWorkOrderNumber(workOrderGen.generateWorkOrderNumber()); } final String cityMunicipalityName = (String) request.getSession() .getAttribute("citymunicipalityname"); final String districtName = (String) request.getSession().getAttribute("districtName"); ReportOutput reportOutput = null; reportOutput = getReportOutputObject(waterConnectionDetails, workFlowAction, cityMunicipalityName, districtName); // Setting FileStoreMap object while Commissioner Signs // the document if (reportOutput != null) { String fileName = ""; if (waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.CLOSINGCONNECTION)) { fileName = WaterTaxConstants.SIGNED_DOCUMENT_PREFIX + waterConnectionDetails.getApplicationNumber() + ".pdf"; } else if (waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.RECONNECTIONCONNECTION)) { fileName = WaterTaxConstants.SIGNED_DOCUMENT_PREFIX + waterConnectionDetails.getApplicationNumber() + ".pdf"; } else { fileName = WaterTaxConstants.SIGNED_DOCUMENT_PREFIX + waterConnectionDetails.getWorkOrderNumber() + ".pdf"; } final InputStream fileStream = new ByteArrayInputStream(reportOutput.getReportOutputData()); final FileStoreMapper fileStore = fileStoreService.store(fileStream, fileName, "application/pdf", WaterTaxConstants.FILESTORE_MODULECODE); waterConnectionDetails.setFileStore(fileStore); upadtedWaterConnectionDetails = waterConnectionDetailsService .updateWaterConnectionDetailsWithFileStore(waterConnectionDetails); } model.addAttribute("fileStoreIds", upadtedWaterConnectionDetails.getFileStore().getFileStoreId()); model.addAttribute("ulbCode", ApplicationThreadLocals.getCityCode()); final HttpSession session = request.getSession(); session.setAttribute(WaterTaxConstants.MODE, mode); session.setAttribute(WaterTaxConstants.APPROVAL_POSITION, approvalPosition); session.setAttribute(WaterTaxConstants.APPROVAL_COMMENT, approvalComent); session.setAttribute(WaterTaxConstants.APPLICATION_NUMBER, upadtedWaterConnectionDetails.getApplicationNumber()); final Map<String, String> fileStoreIdsApplicationNoMap = new HashMap<String, String>(); fileStoreIdsApplicationNoMap.put(upadtedWaterConnectionDetails.getFileStore().getFileStoreId(), upadtedWaterConnectionDetails.getApplicationNumber()); session.setAttribute(WaterTaxConstants.FILE_STORE_ID_APPLICATION_NUMBER, fileStoreIdsApplicationNoMap); model.addAttribute("isDigitalSignatureEnabled", waterTaxUtils.isDigitalSignatureEnabled()); return "newConnection-digitalSignatureRedirection"; } else waterConnectionDetailsService.updateWaterConnection(waterConnectionDetails, approvalPosition, approvalComent, waterConnectionDetails.getApplicationType().getCode(), workFlowAction, mode, null, sourceChannel); } catch (final ValidationException e) { throw new ValidationException(e.getMessage()); } if (workFlowAction != null && !workFlowAction.isEmpty() && workFlowAction.equalsIgnoreCase(WaterTaxConstants.WF_ESTIMATION_NOTICE_BUTTON))// Generate // Esitmation // Notice // Button return "redirect:/application/estimationNotice?pathVar=" + waterConnectionDetails.getApplicationNumber(); if (null != workFlowAction && !workFlowAction.isEmpty() && workFlowAction.equalsIgnoreCase(WaterTaxConstants.WF_WORKORDER_BUTTON))// For // Generate // WorkOrder return "redirect:/application/workorder?pathVar=" + waterConnectionDetails.getApplicationNumber(); if (workFlowAction != null && !workFlowAction.isEmpty() && workFlowAction.equalsIgnoreCase(WaterTaxConstants.WF_CLOSERACKNOWLDGEENT_BUTTON))// For // Closure // Connection // Generate // Acknowlegement return "redirect:/application/acknowlgementNotice?pathVar=" + waterConnectionDetails.getApplicationNumber(); if (workFlowAction != null && !workFlowAction.isEmpty() && workFlowAction.equalsIgnoreCase(WaterTaxConstants.WF_RECONNECTIONACKNOWLDGEENT_BUTTON))// For // ReConnection // Generate // ReConnection // Ack return "redirect:/application/ReconnacknowlgementNotice?pathVar=" + waterConnectionDetails.getApplicationNumber(); // For ReConnection and Closure Connection if ((workFlowAction.equals(WaterTaxConstants.WFLOW_ACTION_STEP_REJECT) || workFlowAction.equalsIgnoreCase(WaterTaxConstants.WF_RECONNECTIONACKNOWLDGEENT_BUTTON)) && (waterConnectionDetails.getStatus().getCode() .equals(WaterTaxConstants.WORKFLOW_RECONNCTIONINITIATED) || waterConnectionDetails.getStatus().getCode() .equals(WaterTaxConstants.APPLICATION_STATUS__RECONNCTIONINPROGRESS) || waterConnectionDetails.getStatus().getCode() .equals(WaterTaxConstants.APPLICATION_STATUS_CLOSERINPROGRESS) || waterConnectionDetails.getStatus().getCode() .equals(WaterTaxConstants.APPLICATION_STATUS_CLOSERINITIATED))) approvalPosition = waterTaxUtils.getApproverPosition(WaterTaxConstants.ROLE_CLERKFORADONI, waterConnectionDetails); final Assignment currentUserAssignment = assignmentService .getPrimaryAssignmentForGivenRange(securityUtils.getCurrentUser().getId(), new Date(), new Date()); String nextDesign = ""; Assignment assignObj = null; List<Assignment> asignList = null; if (approvalPosition != null) assignObj = assignmentService.getPrimaryAssignmentForPositon(approvalPosition); if (assignObj != null) { asignList = new ArrayList<Assignment>(); asignList.add(assignObj); } else if (assignObj == null && approvalPosition != null) asignList = assignmentService.getAssignmentsForPosition(approvalPosition, new Date()); nextDesign = !asignList.isEmpty() ? asignList.get(0).getDesignation().getName() : ""; final String pathVars = waterConnectionDetails.getApplicationNumber() + "," + waterTaxUtils.getApproverName(approvalPosition) + "," + (currentUserAssignment != null ? currentUserAssignment.getDesignation().getName() : "") + "," + (nextDesign != null ? nextDesign : ""); return "redirect:/application/application-success?pathVars=" + pathVars; } else { if (waterConnectionDetails.getStatus().getCode() .equalsIgnoreCase(WaterTaxConstants.APPLICATION_STATUS_WOGENERATED)) model.addAttribute("meterFocus", true); return loadViewData(model, request, waterConnectionDetails); } } private ReportOutput getReportOutputObject(WaterConnectionDetails waterConnectionDetails, String workFlowAction, final String cityMunicipalityName, final String districtName) { ReportOutput reportOutput; if (waterConnectionDetails.getApplicationType().getCode().equals(WaterTaxConstants.CLOSINGCONNECTION)) { reportOutput = reportGenerationService.generateClosureConnectionReport(waterConnectionDetails, workFlowAction, cityMunicipalityName, districtName); } else if (waterConnectionDetails.getApplicationType().getCode() .equals(WaterTaxConstants.RECONNECTIONCONNECTION)) { reportOutput = reportGenerationService.generateReconnectionReport(waterConnectionDetails, workFlowAction, cityMunicipalityName, districtName); } else reportOutput = reportGenerationService.getReportOutput(waterConnectionDetails, workFlowAction, cityMunicipalityName, districtName); return reportOutput; } private void validateSanctionDetails(final WaterConnectionDetails waterConnectionDetails, final BindingResult errors) { if (waterConnectionDetails.getApprovalNumber() == null) errors.rejectValue("approvalNumber", "approvalNumber.required"); if (waterConnectionDetails.getApprovalDate() == null) errors.rejectValue("approvalDate", "approvalDate.required"); } private void populateEstimationDetails(final WaterConnectionDetails waterConnectionDetails) { final List<ConnectionEstimationDetails> estimationDetails = new ArrayList<ConnectionEstimationDetails>(); if (!waterConnectionDetails.getEstimationDetails().isEmpty()) for (final ConnectionEstimationDetails estimationDetail : waterConnectionDetails.getEstimationDetails()) if (validEstimationDetail(estimationDetail)) { estimationDetail.setWaterConnectionDetails(waterConnectionDetails); estimationDetails.add(estimationDetail); } waterConnectionDetails.getEstimationDetails().clear(); waterConnectionDetails.setEstimationDetails(estimationDetails); } private boolean validEstimationDetail(final ConnectionEstimationDetails connectionEstimationDetails) { if (connectionEstimationDetails == null || connectionEstimationDetails != null && connectionEstimationDetails.getItemDescription() == null) return false; return true; } }