/* * 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.stms.transactions.service; import static org.egov.stms.utils.constants.SewerageTaxConstants.ARREARSEWERAGETAX; import static org.egov.stms.utils.constants.SewerageTaxConstants.BOUNDARYTYPE_WARD; import static org.egov.stms.utils.constants.SewerageTaxConstants.FEES_ADVANCE_CODE; import static org.egov.stms.utils.constants.SewerageTaxConstants.FEES_SEWERAGETAX_CODE; import static org.egov.stms.utils.constants.SewerageTaxConstants.HIERARCHYTYPE_REVENUE; import static org.egov.stms.utils.constants.SewerageTaxConstants.MODULE_NAME; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.egov.commons.CFinancialYear; import org.egov.commons.Installment; import org.egov.commons.dao.InstallmentDao; import org.egov.commons.service.FinancialYearService; import org.egov.demand.model.EgDemandDetails; import org.egov.demand.model.EgdmCollectedReceipt; import org.egov.infra.admin.master.entity.Boundary; import org.egov.infra.admin.master.entity.BoundaryType; import org.egov.infra.admin.master.service.BoundaryService; import org.egov.infra.admin.master.service.BoundaryTypeService; import org.egov.infra.admin.master.service.ModuleService; import org.egov.infra.reporting.engine.ReportConstants; import org.egov.infra.reporting.engine.ReportOutput; import org.egov.infra.reporting.engine.ReportRequest; import org.egov.infra.reporting.engine.ReportService; import org.egov.infra.utils.autonumber.AutonumberServiceBeanResolver; import org.egov.infra.web.utils.WebUtils; import org.egov.ptis.domain.model.AssessmentDetails; import org.egov.ptis.domain.model.OwnerName; import org.egov.stms.autonumber.SewerageDemandBillNumberGenerator; import org.egov.stms.entity.SewerageDCBReportResult; import org.egov.stms.masters.pojo.DCBReportWardwiseResult; import org.egov.stms.masters.pojo.SewerageRateDCBResult; import org.egov.stms.masters.pojo.SewerageRateResultComparatorByInstallment; import org.egov.stms.notice.entity.SewerageNotice; import org.egov.stms.notice.service.SewerageNoticeService; import org.egov.stms.transactions.entity.SewerageApplicationDetails; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional(readOnly = true) public class SewerageDCBReporService { @Autowired private BoundaryService boundaryService; @Autowired SewerageThirdPartyServices sewerageThirdPartyServices; @Autowired private BoundaryTypeService boundaryTypeService; @Autowired private ReportService reportService; @Autowired private InstallmentDao installmentDao; @Autowired private ModuleService moduleService; @Autowired private AutonumberServiceBeanResolver beanResolver; @Autowired private FinancialYearService financialYearService; @Autowired private SewerageNoticeService sewerageNoticeService; @Autowired private SewerageApplicationDetailsService sewerageApplicationDetailsService; public static final String SEWERAGEDEMANDBILL = "sewerageDemandBill"; public List<SewerageRateDCBResult> getSewerageRateDCBReport(final SewerageApplicationDetails sewerageApplicationDetails) { final List<SewerageRateDCBResult> rateResultList = new ArrayList<SewerageRateDCBResult>(); Map<String, Map<Date, BigDecimal>> receiptMap = null; Map<Date, BigDecimal> receiptDtlMap = null; Map<String, Map<String, Map<Date, BigDecimal>>> receiptApplDtlMap = null; final HashMap<String, SewerageRateDCBResult> sewerageReportMap = new HashMap<String, SewerageRateDCBResult>(); if (sewerageApplicationDetails.getConnection() != null) { SewerageRateDCBResult dcbResult = new SewerageRateDCBResult(); if (sewerageApplicationDetails.getCurrentDemand() != null && sewerageApplicationDetails.getCurrentDemand().getEgDemandDetails() != null) for (final EgDemandDetails demandDtl : sewerageApplicationDetails.getCurrentDemand().getEgDemandDetails()) { final SewerageRateDCBResult rateResult = sewerageReportMap .get(demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription()); if (rateResult == null) { // TODO: Handle Penalty cases in future. if (demandDtl.getAmtCollected() == null) demandDtl.setAmtCollected(BigDecimal.ZERO); dcbResult = new SewerageRateDCBResult(); dcbResult.setInstallmentYearDescription( demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription()); dcbResult.setInstallmentYearId(demandDtl.getEgDemandReason().getEgInstallmentMaster().getId()); if (demandDtl.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(ARREARSEWERAGETAX)) { dcbResult.setArrearAmount(demandDtl.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP)); dcbResult.setCollectedArrearAmount(demandDtl.getAmtCollected().setScale(2, BigDecimal.ROUND_HALF_UP)); } else if (demandDtl.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(FEES_SEWERAGETAX_CODE)) { dcbResult.setDemandAmount(dcbResult.getDemandAmount().add(demandDtl.getAmount())); dcbResult.setCollectedDemandAmount( dcbResult.getCollectedDemandAmount().add(demandDtl.getAmtCollected())); } else if (demandDtl.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(FEES_ADVANCE_CODE)) { dcbResult.setAdvanceAmount(demandDtl.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP)); dcbResult .setCollectedAdvanceAmount(demandDtl.getAmtCollected().setScale(2, BigDecimal.ROUND_HALF_UP)); } sewerageReportMap.put(demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription(), dcbResult); } else { dcbResult = sewerageReportMap .get(demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription()); if (demandDtl.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(ARREARSEWERAGETAX)) { dcbResult.setArrearAmount( dcbResult.getArrearAmount().add(demandDtl.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setCollectedArrearAmount(dcbResult.getCollectedArrearAmount() .add(demandDtl.getAmtCollected().setScale(2, BigDecimal.ROUND_HALF_UP))); } else if (demandDtl.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(FEES_SEWERAGETAX_CODE)) { dcbResult.setDemandAmount( dcbResult.getDemandAmount().add(demandDtl.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setCollectedDemandAmount(dcbResult.getCollectedDemandAmount() .add(demandDtl.getAmtCollected().setScale(2, BigDecimal.ROUND_HALF_UP))); } else if (demandDtl.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(FEES_ADVANCE_CODE)) { dcbResult.setAdvanceAmount(dcbResult.getAdvanceAmount() .add(demandDtl.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setCollectedAdvanceAmount(dcbResult.getCollectedAdvanceAmount() .add(demandDtl.getAmtCollected().setScale(2, BigDecimal.ROUND_HALF_UP))); } sewerageReportMap.put(demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription(), dcbResult); } } receiptApplDtlMap = new TreeMap<String, Map<String, Map<Date, BigDecimal>>>(); for (final SewerageApplicationDetails detail : sewerageApplicationDetails.getConnection().getApplicationDetails()) { receiptMap = new TreeMap<String, Map<Date, BigDecimal>>(); if (detail.getCurrentDemand() != null && !detail.getCurrentDemand().getEgDemandDetails().isEmpty()) for (final EgDemandDetails demandDetail : detail.getCurrentDemand().getEgDemandDetails()) { receiptDtlMap = new HashMap<Date, BigDecimal>(); for (final EgdmCollectedReceipt receipt : demandDetail.getEgdmCollectedReceipts()) { receiptDtlMap.put(receipt.getReceiptDate(), receipt.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP)); receiptMap.put(receipt.getReceiptNumber(), receiptDtlMap); } if (!receiptMap.isEmpty()) receiptApplDtlMap.put(detail.getApplicationNumber(), receiptMap); } } dcbResult.setReceipts(receiptApplDtlMap); if (sewerageReportMap.size() > 0) sewerageReportMap.forEach((key, value) -> { rateResultList.add(value); }); } Collections.sort(rateResultList, new SewerageRateResultComparatorByInstallment()); return rateResultList; } public List<DCBReportWardwiseResult> getSewerageRateDCBWardwiseReport( final Map<String, List<SewerageApplicationDetails>> applicationDtlMap, final String propertyType) { final List<DCBReportWardwiseResult> dcbReportList = new ArrayList<DCBReportWardwiseResult>(); final Map<String, DCBReportWardwiseResult> dcbReportMap = new HashMap<String, DCBReportWardwiseResult>(); final Map<String, DCBReportWardwiseResult> dcbMap = new HashMap<String, DCBReportWardwiseResult>(); DCBReportWardwiseResult dcbResult = new DCBReportWardwiseResult(); for (final Map.Entry<String, List<SewerageApplicationDetails>> entry : applicationDtlMap.entrySet()) { Boundary boundary = null; BoundaryType boundaryType = null; final List<Boundary> boundaryList = new ArrayList<Boundary>(); dcbResult = new DCBReportWardwiseResult(); for (final SewerageApplicationDetails appDetails : entry.getValue()) if (appDetails != null && appDetails.getCurrentDemand() != null && appDetails.getCurrentDemand().getEgDemandDetails() != null) { dcbResult.setNoofassessments(entry.getValue().size()); for (final EgDemandDetails demandDetails : appDetails.getCurrentDemand().getEgDemandDetails()) { dcbResult.setRevenueWard(entry.getKey()); if (null != propertyType) dcbResult.setPropertyType(propertyType); boundaryType = boundaryTypeService.getBoundaryTypeByNameAndHierarchyTypeName(BOUNDARYTYPE_WARD, HIERARCHYTYPE_REVENUE); boundaryList.addAll(boundaryService.getBondariesByNameAndTypeOrderByBoundaryNumAsc(entry.getKey(), boundaryType.getId())); if (!boundaryList.isEmpty()) boundary = boundaryList.get(0); if (boundary != null) dcbResult.setWardId(boundary.getId()); final DCBReportWardwiseResult rateResult = dcbReportMap.get(entry.getKey()); if (rateResult == null) { dcbResult.setInstallmentYearDescription( demandDetails.getEgDemandReason().getEgInstallmentMaster().getDescription()); buildArrearAndCurrentDemandTax(dcbResult, demandDetails); } else { dcbResult = dcbReportMap.get(entry.getKey()); buildArrearAndCurrentDemandTax(dcbResult, demandDetails); } dcbResult.setTotal_demand(dcbResult.getArr_demand().add(dcbResult.getCurr_demand())); dcbResult.setTotal_collection(dcbResult.getArr_collection().add(dcbResult.getCurr_collection())); dcbResult.setTotal_balance(dcbResult.getArr_balance().add(dcbResult.getCurr_balance())); dcbReportMap.put(entry.getKey(), dcbResult); } } dcbMap.put(entry.getKey(), dcbResult); } if (dcbMap.size() > 0) dcbMap.forEach((key, value) -> { dcbReportList.add(value); }); return dcbReportList; } private void buildArrearAndCurrentDemandTax(final DCBReportWardwiseResult dcbResult, final EgDemandDetails demandDetails) { if (demandDetails.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(ARREARSEWERAGETAX)) { dcbResult.setArr_demand(dcbResult.getArr_demand() .add(demandDetails.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setArr_collection(dcbResult.getArr_collection() .add(demandDetails.getAmtCollected().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setArr_balance(dcbResult.getArr_balance() .add(demandDetails.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP) .subtract(demandDetails.getAmtCollected().setScale(2, BigDecimal.ROUND_HALF_UP)))); } else if (demandDetails.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(FEES_SEWERAGETAX_CODE)) { dcbResult.setCurr_demand( dcbResult.getCurr_demand().add(demandDetails.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setCurr_collection(dcbResult.getCurr_collection() .add(demandDetails.getAmtCollected().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setCurr_balance(dcbResult.getCurr_balance() .add(demandDetails.getAmount().subtract(demandDetails.getAmtCollected()).setScale(2, BigDecimal.ROUND_HALF_UP))); } } public List<DCBReportWardwiseResult> getSewerageDCBWardConnections( final Map<String, List<SewerageApplicationDetails>> applicationDtlMap, final String propertyType, final HttpServletRequest request) { final List<DCBReportWardwiseResult> dcbReportList = new ArrayList<DCBReportWardwiseResult>(); final Map<String, DCBReportWardwiseResult> dcbReportMap = new HashMap<String, DCBReportWardwiseResult>(); DCBReportWardwiseResult dcbResult = new DCBReportWardwiseResult(); for (final Map.Entry<String, List<SewerageApplicationDetails>> entry : applicationDtlMap.entrySet()) { final List<SewerageApplicationDetails> applicationList = new ArrayList<SewerageApplicationDetails>(); if (entry.getValue() != null) applicationList.addAll(entry.getValue()); for (final SewerageApplicationDetails detail : applicationList) { dcbResult = new DCBReportWardwiseResult(); if (detail != null && detail.getCurrentDemand() != null && detail.getCurrentDemand().getEgDemandDetails() != null) { dcbResult.setShscnumber(detail.getConnection().getShscNumber()); dcbResult.setOwnerName(detail.getOwnerName()); for (final EgDemandDetails demandDetails : detail.getCurrentDemand().getEgDemandDetails()) { dcbResult.setApplicationNumber(entry.getKey()); if (propertyType != null) dcbResult.setPropertyType(propertyType); final DCBReportWardwiseResult rateResult = dcbReportMap.get(entry.getKey()); if (rateResult == null) { dcbResult.setInstallmentYearDescription( demandDetails.getEgDemandReason().getEgInstallmentMaster().getDescription()); buildArrearAndCurrentDemandTax(dcbResult, demandDetails); dcbReportMap.put(entry.getKey(), dcbResult); } else { dcbResult = dcbReportMap.get(entry.getKey()); if (demandDetails.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(ARREARSEWERAGETAX)) { dcbResult.setArr_demand(dcbResult.getArr_demand() .add(demandDetails.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setArr_collection(dcbResult.getArr_collection() .add(demandDetails.getAmtCollected()).setScale(2, BigDecimal.ROUND_HALF_UP)); dcbResult.setArr_balance(dcbResult.getArr_balance() .add(demandDetails.getAmount().subtract(demandDetails.getAmtCollected()).setScale(2, BigDecimal.ROUND_HALF_UP))); } else if (demandDetails.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(FEES_SEWERAGETAX_CODE)) { dcbResult.setCurr_demand(dcbResult.getCurr_demand() .add(demandDetails.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setCurr_collection(dcbResult.getCurr_collection() .add(demandDetails.getAmtCollected().setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setCurr_balance(dcbResult.getCurr_balance() .add(demandDetails.getAmount().subtract(demandDetails.getAmtCollected()).setScale(2, BigDecimal.ROUND_HALF_UP))); dcbResult.setTotal_demand(dcbResult.getArr_demand().add(dcbResult.getCurr_demand())); dcbResult.setTotal_collection(dcbResult.getArr_collection().add(dcbResult.getCurr_collection())); dcbResult.setTotal_balance(dcbResult.getArr_balance().add(dcbResult.getCurr_balance())); } dcbReportMap.put(entry.getKey(), dcbResult); } } } } } if (dcbReportMap.size() > 0) dcbReportMap.forEach((key, value) -> { dcbReportList.add(value); }); return dcbReportList; } @Transactional public ReportOutput generateAndSaveDemandBillNotice(final SewerageApplicationDetails sewerageApplicationDetails, final AssessmentDetails propertyOwnerDetails, final HttpServletRequest request, final HttpSession session) { ReportOutput reportOutput = null; SewerageNotice sewerageNotice = null; String demandBillNumber = null; InputStream generateNoticePDF = null; final SewerageDemandBillNumberGenerator demandBillNumberGenerator = beanResolver .getAutoNumberServiceFor(SewerageDemandBillNumberGenerator.class); demandBillNumber = demandBillNumberGenerator.generateSewerageDemandBillNumber(sewerageApplicationDetails); reportOutput = generateSewerageDemandBillNotice(sewerageApplicationDetails, demandBillNumber, propertyOwnerDetails, session, request); if (reportOutput != null && reportOutput.getReportOutputData() != null) { generateNoticePDF = new ByteArrayInputStream(reportOutput.getReportOutputData()); sewerageNotice = sewerageNoticeService.buildDemandBillNotice(sewerageApplicationDetails, generateNoticePDF, demandBillNumber); } if (sewerageNotice != null) { sewerageApplicationDetails.addNotice(sewerageNotice); sewerageApplicationDetailsService.save(sewerageApplicationDetails); } return reportOutput; } public ReportOutput generateSewerageDemandBillNotice(final SewerageApplicationDetails sewerageApplicationDetails, final String demandBillNumber, final AssessmentDetails propertyOwnerDetails, final HttpSession session, final HttpServletRequest request) { final Map<String, Object> reportParams = new HashMap<String, Object>(); ReportRequest reportInput = null; BigDecimal sewerageTax = BigDecimal.ZERO; final Installment currentInstallment = installmentDao .getInsatllmentByModuleForGivenDate(moduleService.getModuleByName(MODULE_NAME), new Date()); final List<SewerageRateDCBResult> dcbResultList = getPendingSewerageTaxForCurrentYearInstallment( sewerageApplicationDetails); reportParams.put("demandBillNumber", demandBillNumber); final SimpleDateFormat date = new SimpleDateFormat("dd/MM/yyyy"); final String fromDate = date.format(currentInstallment.getFromDate()); final String url = WebUtils.extractRequestDomainURL(request, false); reportParams.put("cityLogo", url.concat(ReportConstants.IMAGE_CONTEXT_PATH) .concat((String) request.getSession().getAttribute("citylogo"))); reportParams.put("currInstallmentFromDate", fromDate); reportParams.put("financialYear", currentInstallment.getFinYearRange()); reportParams.put("shscnumber", sewerageApplicationDetails.getConnection().getShscNumber()); reportParams.put("houseno", propertyOwnerDetails.getHouseNo()); reportParams.put("municipality", session.getAttribute("citymunicipalityname")); reportParams.put("district", session.getAttribute("districtName")); if (propertyOwnerDetails.getOwnerNames() != null && !propertyOwnerDetails.getOwnerNames().isEmpty()) for (final OwnerName propertyOwner : propertyOwnerDetails.getOwnerNames()) reportParams.put("ownername", propertyOwner.getOwnerName()); if (propertyOwnerDetails.getBoundaryDetails() != null) { reportParams.put("localityname", propertyOwnerDetails.getBoundaryDetails().getLocalityName()); reportParams.put("revenueWardNo", propertyOwnerDetails.getBoundaryDetails().getWardName()); reportParams.put("blockname", propertyOwnerDetails.getBoundaryDetails().getBlockName()); } final SewerageDCBReportResult reportResultList = new SewerageDCBReportResult(); reportResultList.setDcbReportList(dcbResultList); for (final SewerageRateDCBResult dcbresultObject : dcbResultList) sewerageTax = sewerageTax.add(dcbresultObject.getDemandAmount()); reportParams.put("seweragetax", sewerageTax); reportInput = new ReportRequest(SEWERAGEDEMANDBILL, reportResultList, reportParams); return reportService.createReport(reportInput); } public List<SewerageRateDCBResult> getPendingSewerageTaxForCurrentYearInstallment( final SewerageApplicationDetails sewerageApplicationDetails) { final List<SewerageRateDCBResult> rateResultList = new ArrayList<SewerageRateDCBResult>(); final HashMap<String, SewerageRateDCBResult> sewerageReportMap = new HashMap<String, SewerageRateDCBResult>(); if (sewerageApplicationDetails.getConnection() != null) { final CFinancialYear financialYear = financialYearService.getCurrentFinancialYear(); final List<Installment> installmentList = installmentDao.getAllInstallmentsByModuleAndStartDate( moduleService.getModuleByName(MODULE_NAME), financialYear.getStartingDate()); for (final Installment intallment : installmentList) if (intallment.getFromDate().after(new Date())) installmentList.remove(intallment); SewerageRateDCBResult dcbResult = new SewerageRateDCBResult(); if (sewerageApplicationDetails.getCurrentDemand() != null && sewerageApplicationDetails.getCurrentDemand().getEgDemandDetails() != null) for (final EgDemandDetails demandDtl : sewerageApplicationDetails.getCurrentDemand().getEgDemandDetails()) if (demandDtl.getEgDemandReason().getEgDemandReasonMaster().getCode() .equalsIgnoreCase(FEES_SEWERAGETAX_CODE) && demandDtl.getAmount().subtract(demandDtl.getAmtCollected()) .compareTo(BigDecimal.ZERO) > 0) { final SewerageRateDCBResult rateResult = sewerageReportMap .get(demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription()); if (rateResult == null) { dcbResult = new SewerageRateDCBResult(); dcbResult.setInstallmentYearDescription( demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription()); dcbResult.setDemandAmount( dcbResult.getDemandAmount().add(demandDtl.getAmount().subtract(demandDtl.getAmtCollected()))); sewerageReportMap.put(demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription(), dcbResult); } else { dcbResult = sewerageReportMap .get(demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription()); dcbResult.setDemandAmount( dcbResult.getDemandAmount().add(demandDtl.getAmount().subtract(demandDtl.getAmtCollected()))); sewerageReportMap.put(demandDtl.getEgDemandReason().getEgInstallmentMaster().getDescription(), dcbResult); } } if (sewerageReportMap.size() > 0) sewerageReportMap.forEach((key, value) -> { rateResultList.add(value); }); } return rateResultList; } }