/* * 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.bills; import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.apache.struts2.interceptor.validation.SkipValidation; import org.egov.commons.Installment; import org.egov.commons.dao.InstallmentDao; import org.egov.infra.admin.master.entity.Boundary; import org.egov.infra.admin.master.entity.Module; import org.egov.infra.admin.master.service.BoundaryService; import org.egov.infra.admin.master.service.ModuleService; import org.egov.infra.exception.ApplicationRuntimeException; import org.egov.infra.web.struts.actions.BaseFormAction; import org.egov.infra.web.struts.annotation.ValidationErrorPage; import org.egov.ptis.actions.common.CommonServices; import org.egov.ptis.constants.PropertyTaxConstants; import org.egov.ptis.domain.entity.demand.BulkBillGeneration; import org.egov.ptis.domain.service.bill.BillService; import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; import static org.egov.ptis.constants.PropertyTaxConstants.REVENUE_HIERARCHY_TYPE; @SuppressWarnings("serial") @ParentPackage("egov") @Results({ @Result(name = BulkBillGenerationAction.NEW, location = "bulkBillGeneration-new.jsp"), @Result(name = BulkBillGenerationAction.RESULT_ACK, location = "bulkBillGeneration-ack.jsp") }) public class BulkBillGenerationAction extends BaseFormAction { /** * */ private static final long serialVersionUID = -4113611719476196791L; Logger LOGGER = Logger.getLogger(getClass()); public static final String RESULT_ACK = "ack"; private Long zoneId; private Long wardId; private Map<Long, String> ZoneBndryMap; private String ackMessage; @Autowired private InstallmentDao installmentDao; @Autowired private ModuleService moduleService; @Autowired private BoundaryService boundaryService; @Autowired private BillService billService; private List<Boundary> wardList = new ArrayList<Boundary>(); @Override public Object getModel() { return null; } @SkipValidation @Action(value = "/bills/bulkBillGeneration-newForm") public String newForm() { return NEW; } @Override public void prepare() { try { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Entered into prepare method"); LOGGER.debug("Zone id : " + zoneId + ", " + "Ward id : " + wardId); } final List<Boundary> zoneList = boundaryService .getActiveBoundariesByBndryTypeNameAndHierarchyTypeName("Zone", REVENUE_HIERARCHY_TYPE); setZoneBndryMap(CommonServices.getFormattedBndryMap(zoneList)); final List<Boundary> wardList = boundaryService .getActiveBoundariesByBndryTypeNameAndHierarchyTypeName("Ward", REVENUE_HIERARCHY_TYPE); addDropdownData("wardList", wardList); if (LOGGER.isDebugEnabled()) LOGGER.debug("Exit from prepare method"); } catch (final Exception e) { throw new ApplicationRuntimeException("Bill Generation Exception : " + e); } } /** * Load ward drop down based on selected zone * * @param zoneExists * @param wardExists */ @SuppressWarnings("unchecked") @SkipValidation private void prepareWardDropDownData(final boolean zoneExists, final boolean wardExists) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Entered into prepareWardDropDownData method"); LOGGER.debug("Zone exists ? : " + zoneExists + ", " + "Ward exists ? : " + wardExists); } if (zoneExists && wardExists) { List<Boundary> wardNewList = new ArrayList<Boundary>(); wardNewList = boundaryService.getActiveChildBoundariesByBoundaryId(getZoneId()); addDropdownData("wardList", wardNewList); } else addDropdownData("wardList", Collections.EMPTY_LIST); if (LOGGER.isDebugEnabled()) LOGGER.debug("Exit from prepareWardDropDownData method"); } @Override public void validate() { if (zoneId == null || zoneId == -1) addActionError(getText("mandatory.zone")); } /** * Generates bill in bulk for selected zone and ward boundary * @return */ @ValidationErrorPage(value = "new") @Action(value = "/bills/bulkBillGeneration-generateBills") public String generateBills() { if (LOGGER.isDebugEnabled()) LOGGER.debug("generateBills method started for zone " + zoneId + " and ward number :" + wardId); BulkBillGeneration bulkBill = null; String wardMessage = ""; final Module module = moduleService.getModuleByName(PropertyTaxConstants.PTMODULENAME); final Installment currentInstall = installmentDao.getInsatllmentByModuleForGivenDate(module, new Date()); final List<BulkBillGeneration> bbgList = billService.getBulkBill(zoneId, wardId, currentInstall); if (bbgList != null && !bbgList.isEmpty()) bulkBill = bbgList.get(0); if (bulkBill == null) { bulkBill = billService.saveBulkBill(zoneId, wardId, currentInstall); if (wardId != null && wardId != -1) wardMessage = ", Ward " + bulkBill.getWard().getName(); setAckMessage("Bill generation scheduled for zone " + bulkBill.getZone().getName() + wardMessage + " and for Installment " + currentInstall.getDescription() + ", you can check the bill generation status using "); } else { if (wardId != null && wardId != -1) wardMessage = ", Ward " + bulkBill.getWard().getName(); setAckMessage("Bill generation already scheduled for zone " + bulkBill.getZone().getName() + wardMessage + " and for Installment " + currentInstall.getDescription() + ", you can check the bill generation status after some time using "); } if (LOGGER.isDebugEnabled()) LOGGER.debug("generateBills method started for zone " + zoneId + " and ward number :" + wardId); return RESULT_ACK; } public List<Boundary> getWardList() { return wardList; } public void setWardList(final List<Boundary> wardList) { this.wardList = wardList; } public Long getWardId() { return wardId; } public void setWardId(final Long wardId) { this.wardId = wardId; } public String getAckMessage() { return ackMessage; } public void setAckMessage(final String ackMessage) { this.ackMessage = ackMessage; } public Long getZoneId() { return zoneId; } public void setZoneId(final Long zoneId) { this.zoneId = zoneId; } public Map<Long, String> getZoneBndryMap() { return ZoneBndryMap; } public void setZoneBndryMap(final Map<Long, String> zoneBndryMap) { ZoneBndryMap = zoneBndryMap; } }