/* * 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.egf.web.actions.masters; import org.apache.struts2.convention.annotation.Action; 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.Bankaccount; import org.egov.commons.Bankbranch; import org.egov.commons.Scheme; import org.egov.commons.SubScheme; import org.egov.egf.masters.model.FundingAgency; import org.egov.egf.masters.model.LoanGrantBean; import org.egov.egf.masters.model.LoanGrantDetail; import org.egov.egf.masters.model.LoanGrantHeader; import org.egov.egf.masters.model.LoanGrantReceiptDetail; import org.egov.egf.masters.model.SchemeBankaccount; import org.egov.egf.masters.model.SubSchemeProject; import org.egov.egf.web.actions.masters.loangrant.LoanGrantBaseAction; import org.egov.infra.admin.master.entity.User; import org.egov.infra.config.core.ApplicationThreadLocals; import org.egov.infra.validation.exception.ValidationError; import org.egov.infra.validation.exception.ValidationException; import org.egov.infra.web.struts.annotation.ValidationErrorPage; import org.egov.infstr.services.PersistenceService; import org.egov.services.masters.BankService; import org.hibernate.Query; import org.hibernate.transform.Transformers; import org.hibernate.type.LongType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @Results({ @Result(name = LoanGrantAction.NEW, location = "loanGrant-" + LoanGrantAction.NEW + ".jsp"), @Result(name = "search", location = "loanGrant-search.jsp"), @Result(name = "new", location = "loanGrant-new.jsp"), @Result(name = LoanGrantAction.EDIT, location = "loanGrant-" + LoanGrantAction.EDIT + ".jsp"), @Result(name = "codeUniqueCheckCode", location = "loanGrant-codeUniqueCheckCode.jsp"), @Result(name = "view", location = "loanGrant-view.jsp") }) public class LoanGrantAction extends LoanGrantBaseAction { @Autowired @Qualifier("persistenceService") private PersistenceService persistenceService; private static final long serialVersionUID = -5126017690888146473L; private static final String VIEW = "view"; private LoanGrantHeader loanGrantHeader; private List<LoanGrantDetail> sanctionedAmountLGDetails; private List<LoanGrantDetail> unsanctionedAmountLGDetails; private List<LoanGrantDetail> revisedAmountLGDetails; private List<FundingAgency> fundingAgencyList; private List<LoanGrantBean> projectCodeList; private Integer bankaccount; private Integer bank_branch; private String mode; private Map<String, String> bankBranchMap; private List<LoanGrantHeader> loanGrantHeaderList; private Query query; private static final String SANCTIONEDTYPE = "sanctioned"; private static final String UNSANCTIONEDTYPE = "unsanctioned"; private static final String REVISEDTYPE = "revised"; @Autowired @Qualifier("bankService") private BankService bankService; public LoanGrantAction() { super(); loanGrantHeader = new LoanGrantHeader(); } @Override public void prepare() { super.prepare(); } public void prepareNewForm() { addDropdownData("bankaccountList", Collections.EMPTY_LIST); } @SuppressWarnings("unchecked") public void prepareBeforeEdit() { loanGrantHeader = (LoanGrantHeader) persistenceService.find("from LoanGrantHeader where id=?", ((LoanGrantHeader) getModel()).getId()); final SchemeBankaccount account = (SchemeBankaccount) persistenceService.find("from SchemeBankaccount where subScheme=?", loanGrantHeader.getSubScheme()); setFundId(loanGrantHeader.getSubScheme().getScheme().getFund().getId()); setBank_branch(account.getBankAccount().getBankbranch().getId()); final List<Bankaccount> accNumList = persistenceService.findAllBy( "from Bankaccount ba where ba.bankbranch.id=? and fund.id=? and isactive=true order by ba.chartofaccounts.glcode", bank_branch, fundId); setBankaccount(account.getBankAccount().getId().intValue()); addDropdownData("bankaccountList", accNumList); final List<Bankbranch> branchList = persistenceService .findAllBy( "from Bankbranch br where br.id in (select bankbranch.id from Bankaccount where fund.id=? ) and br.isactive=true order by br.bank.name asc", fundId); addDropdownData("bankbranchList", branchList); fundingAgencyList = new ArrayList<FundingAgency>(); fundingAgencyList.addAll(persistenceService.findAllBy(" from FundingAgency where isActive=true order by name")); schemeId = loanGrantHeader.getSubScheme().getScheme().getId(); subSchemeId = loanGrantHeader.getSubScheme().getId(); projectCodeList = new ArrayList<LoanGrantBean>(); final String strQuery = "select pc.id as id , pc.code as code, pc.name as name from egw_projectcode pc," + " egf_subscheme_project sp where pc.id= sp.projectcodeid and sp.subschemeid=" + subSchemeId; query = persistenceService.getSession().createSQLQuery(strQuery) .addScalar("id", LongType.INSTANCE).addScalar("code").addScalar("name") .setResultTransformer(Transformers.aliasToBean(LoanGrantBean.class)); projectCodeList = query.list(); final List<LoanGrantDetail> lgDetailList = loanGrantHeader.getDetailList(); if (lgDetailList != null && lgDetailList.size() != 0) { boolean sanctionedDetailsPresent, unsanctionedDetailsPresent, revisedDetailsPresent; sanctionedDetailsPresent = unsanctionedDetailsPresent = revisedDetailsPresent = false; // Assumption is lgDetailList is atleast of size 1. for (final LoanGrantDetail lgDetail : lgDetailList) { if (lgDetail.getPatternType().equalsIgnoreCase(SANCTIONEDTYPE)) sanctionedDetailsPresent = true; if (lgDetail.getPatternType().equalsIgnoreCase(UNSANCTIONEDTYPE)) unsanctionedDetailsPresent = true; if (lgDetail.getPatternType().equalsIgnoreCase(REVISEDTYPE)) revisedDetailsPresent = true; } if (!sanctionedDetailsPresent) { sanctionedAmountLGDetails = new ArrayList<LoanGrantDetail>(); sanctionedAmountLGDetails.add(new LoanGrantDetail()); } if (!unsanctionedDetailsPresent) { unsanctionedAmountLGDetails = new ArrayList<LoanGrantDetail>(); unsanctionedAmountLGDetails.add(new LoanGrantDetail()); } if (!revisedDetailsPresent) { revisedAmountLGDetails = new ArrayList<LoanGrantDetail>(); revisedAmountLGDetails.add(new LoanGrantDetail()); } } } public void prepareBeforeView() { prepareBeforeEdit(); } @Override public Object getModel() { return loanGrantHeader; } @SkipValidation @Action(value = "/masters/loanGrant-beforeSearch") public String beforeSearch() { return "search"; } @SuppressWarnings("unchecked") @SkipValidation @Action(value = "/masters/loanGrant-search") public String search() { loanGrantHeaderList = new ArrayList<LoanGrantHeader>(); if (schemeId != null && subSchemeId == null) loanGrantHeaderList.addAll(persistenceService.findAllBy( "from LoanGrantHeader where subScheme.scheme.id=? order by subScheme.name ", schemeId)); if (schemeId != null && subSchemeId != null) loanGrantHeaderList.addAll(persistenceService.findAllBy( "from LoanGrantHeader where subScheme.id=? order by subScheme.name ", subSchemeId)); return "search"; } @SkipValidation @Action(value = "/masters/loanGrant-beforeView") public String beforeView() { beforeEdit(); return VIEW; } @SkipValidation @Action(value = "/masters/loanGrant-beforeEdit") public String beforeEdit() { return EDIT; } @SuppressWarnings("unchecked") @SkipValidation @Action(value = "/masters/loanGrant-newForm") public String newForm() { projectCodeList = new ArrayList<LoanGrantBean>(); projectCodeList.add(new LoanGrantBean()); setBankBranchMap(new HashMap<String, String>()); addDropdownData("bankaccountList", Collections.EMPTY_LIST); //persistenceService.setType(LoanGrantDetail.class); sanctionedAmountLGDetails = new ArrayList<LoanGrantDetail>(); sanctionedAmountLGDetails.add(new LoanGrantDetail()); unsanctionedAmountLGDetails = new ArrayList<LoanGrantDetail>(); unsanctionedAmountLGDetails.add(new LoanGrantDetail()); revisedAmountLGDetails = new ArrayList<LoanGrantDetail>(); revisedAmountLGDetails.add(new LoanGrantDetail()); //persistenceService.setType(FundingAgency.class); fundingAgencyList = new ArrayList<FundingAgency>(); fundingAgencyList.addAll(persistenceService.findAllBy(" from FundingAgency where isActive=true order by name")); loanGrantHeader.getReceiptList().add(new LoanGrantReceiptDetail()); return "new"; } @SkipValidation @Action(value = "/masters/loanGrant-codeUniqueCheckCode") public String codeUniqueCheckCode() { return "codeUniqueCheckCode"; } @SkipValidation public boolean getCodeCheckCode() { LoanGrantHeader header = null; boolean isDuplicate = false; if (subSchemeId != null && loanGrantHeader.getId() != null) header = (LoanGrantHeader) persistenceService.find("from LoanGrantHeader where subScheme.id=? and id!=?", subSchemeId, loanGrantHeader.getId()); else if (subSchemeId != null) header = (LoanGrantHeader) persistenceService.find("from LoanGrantHeader where subScheme.id=?", subSchemeId); if (header != null) isDuplicate = true; return isDuplicate; } @Override public void validate() { if (schemeId == null || schemeId == -1) addFieldError("schemeId", getText("masters.loangrant.scheme.mandatory")); if (subSchemeId == null || subSchemeId == -1) addFieldError("subSchemeId", getText("masters.loangrant.subscheme.mandatory")); if (bankaccount == null || bankaccount == -1) addFieldError("bankaccount", getText("masters.loangrant.bankaccount.mandatory")); if (loanGrantHeader.getAmendmentDate() == null) addFieldError("amendmentDate", getText("masters.loangrant.amendmentdate.mandatory")); if (loanGrantHeader.getAmendmentNo() == null) addFieldError("amendmentNo", getText("masters.loangrant.amendmentno.mandatory")); if (loanGrantHeader.getCouncilResDate() == null) addFieldError("councilResDate", getText("masters.loangrant.councilresdate.mandatory")); if (loanGrantHeader.getCouncilResNo() == null) addFieldError("councilResNo", getText("masters.loangrant.councilresno.mandatory")); if (loanGrantHeader.getGovtOrderDate() == null) addFieldError("govtOrderDate", getText("masters.loangrant.govtorderdate.mandatory")); if (loanGrantHeader.getGovtOrderNo() == null) addFieldError("govtOrderNo", getText("masters.loangrant.govtorderno.mandatory")); if (loanGrantHeader.getProjectCost() == null || loanGrantHeader.getProjectCost().compareTo(BigDecimal.ZERO)==0) addFieldError("projectCost", getText("masters.loangrant.projectcost.mandatory")); if (loanGrantHeader.getProjectCost() != null && loanGrantHeader.getSanctionedCost() != null && loanGrantHeader.getSanctionedCost().compareTo(loanGrantHeader.getProjectCost()) > 0) addFieldError("projectCost", getText("masters.loangrant.validate.projectcost")); if (loanGrantHeader.getProjectCost() != null && loanGrantHeader.getRevisedCost() != null && loanGrantHeader.getRevisedCost().compareTo(loanGrantHeader.getProjectCost()) < 0) addFieldError("revisedCost", getText("masters.loangrant.validate.revisedcost")); if (getCodeCheckCode()) addActionError(getText("loangrant.subscheme.already.exists")); } @ValidationErrorPage(NEW) @SuppressWarnings("unchecked") @Action(value = "/masters/loanGrant-save") public String save() { if (!getFieldErrors().isEmpty()) return NEW; try { final Scheme scheme = (Scheme) persistenceService.find(" from Scheme where id=?", getSchemeId()); final SubScheme subScheme = (SubScheme) persistenceService.find(" from SubScheme where id=?", getSubSchemeId()); loanGrantHeader.setSubScheme(subScheme); if (loanGrantHeader.getRevisedCost() == null) loanGrantHeader.setRevisedCost(BigDecimal.ZERO); SubSchemeProject subSchemeProject; //persistenceService.setType(SubSchemeProject.class); for (final LoanGrantBean bean : projectCodeList) { subSchemeProject = new SubSchemeProject(); subSchemeProject.setSubScheme(subScheme); subSchemeProject.setProjectCode(bean.getId()); persistenceService.persist(subSchemeProject); } final Bankaccount bankaccObj = (Bankaccount) persistenceService.find(" from Bankaccount where id=?", bankaccount); final SchemeBankaccount schemeBankaccount = new SchemeBankaccount(); schemeBankaccount.setBankAccount(bankaccObj); schemeBankaccount.setScheme(scheme); schemeBankaccount.setSubScheme(subScheme); //persistenceService.setType(SchemeBankaccount.class); persistenceService.persist(schemeBankaccount); createDetailAndReceiptList(); //persistenceService.setType(LoanGrantHeader.class); persistenceService.persist(loanGrantHeader); } catch (final ValidationException e) { throw e; } catch (final Exception e) { throw new ValidationException(Arrays.asList(new ValidationError("An error occured contact Administrator", "An error occured contact Administrator"))); } return "result"; } @ValidationErrorPage(EDIT) @SuppressWarnings("unchecked") @Action(value = "/masters/loanGrant-update") public String update() { if (!getFieldErrors().isEmpty()) return EDIT; try { final SubScheme subScheme = (SubScheme) persistenceService.find(" from SubScheme where id=?", getSubSchemeId()); loanGrantHeader.setSubScheme(subScheme); final User user = (User) persistenceService.find("from User where id=?", ApplicationThreadLocals.getUserId()); final Date currDate = new Date(); loanGrantHeader.setCreatedBy(user); loanGrantHeader.setModifiedBy(user); loanGrantHeader.setCreatedDate(currDate); loanGrantHeader.setModifiedDate(currDate); if (loanGrantHeader.getRevisedCost() == null) loanGrantHeader.setRevisedCost(BigDecimal.ZERO); createDetailAndReceiptList(); for (final LoanGrantDetail lgDetail : loanGrantHeader.getDetailList()) if (lgDetail.getId() != null) { lgDetail.setCreatedBy(user); lgDetail.setModifiedBy(user); lgDetail.setCreatedDate(currDate); lgDetail.setModifiedDate(currDate); } for (final LoanGrantReceiptDetail lgRecptDetail : loanGrantHeader.getReceiptList()) if (lgRecptDetail.getId() != null) { lgRecptDetail.setCreatedBy(user); lgRecptDetail.setModifiedBy(user); lgRecptDetail.setCreatedDate(currDate); lgRecptDetail.setModifiedDate(currDate); } query = persistenceService.getSession().createSQLQuery( "delete from egf_subscheme_project where subschemeid= " + getSubSchemeId()); query.executeUpdate(); SubSchemeProject subSchemeProject; //persistenceService.setType(SubSchemeProject.class); for (final LoanGrantBean bean : projectCodeList) { subSchemeProject = new SubSchemeProject(); subSchemeProject.setSubScheme(subScheme); subSchemeProject.setProjectCode(bean.getId()); persistenceService.persist(subSchemeProject); } final SchemeBankaccount schemeBankaccount = (SchemeBankaccount) persistenceService.find( "from SchemeBankaccount where scheme.id=?", getSchemeId()); final Bankaccount accountObj = (Bankaccount) persistenceService.find("from Bankaccount where id=?", bankaccount); schemeBankaccount.setBankAccount(accountObj); //persistenceService.setType(LoanGrantHeader.class); persistenceService.persist(loanGrantHeader); } catch (final ValidationException e) { prepareBeforeEdit(); throw e; } catch (final Exception e) { prepareBeforeEdit(); throw new ValidationException(Arrays.asList(new ValidationError("An error occured contact Administrator", "An error occured contact Administrator"))); } return "result"; } @SkipValidation private void createDetailAndReceiptList() { for (final LoanGrantDetail detail : sanctionedAmountLGDetails) if (detail == null || detail.getFundingAgency() == null || detail.getFundingAgency().getId() == -1 || (detail.getLoanAmount() == null || detail.getLoanAmount().compareTo(BigDecimal.ZERO)==0) && (detail.getGrantAmount() == null || detail.getGrantAmount().compareTo(BigDecimal.ZERO)==0)) continue; else { if (detail.getLoanAmount() == null) detail.setLoanAmount(BigDecimal.ZERO); if (detail.getGrantAmount() == null) detail.setGrantAmount(BigDecimal.ZERO); detail.setPatternType(SANCTIONEDTYPE); detail.setHeader(loanGrantHeader); loanGrantHeader.getDetailList().add(detail); } for (final LoanGrantDetail detail : unsanctionedAmountLGDetails) if (detail == null || detail.getFundingAgency() == null || detail.getFundingAgency().getId() == -1 || (detail.getLoanAmount() == null || detail.getLoanAmount().compareTo(BigDecimal.ZERO)==0) && (detail.getGrantAmount() == null || detail.getGrantAmount().compareTo(BigDecimal.ZERO)==0)) continue; else { if (detail.getLoanAmount() == null) detail.setLoanAmount(BigDecimal.ZERO); if (detail.getGrantAmount() == null) detail.setGrantAmount(BigDecimal.ZERO); detail.setPatternType(UNSANCTIONEDTYPE); detail.setHeader(loanGrantHeader); loanGrantHeader.getDetailList().add(detail); } for (final LoanGrantDetail detail : revisedAmountLGDetails) if (detail == null || detail.getFundingAgency() == null || detail.getFundingAgency().getId() == -1 || (detail.getLoanAmount() == null || detail.getLoanAmount().compareTo(BigDecimal.ZERO)==0) && (detail.getGrantAmount() == null || detail.getGrantAmount().compareTo(BigDecimal.ZERO)==0)) continue; else { if (detail.getLoanAmount() == null) detail.setLoanAmount(BigDecimal.ZERO); if (detail.getGrantAmount() == null) detail.setGrantAmount(BigDecimal.ZERO); detail.setPatternType(REVISEDTYPE); detail.setHeader(loanGrantHeader); loanGrantHeader.getDetailList().add(detail); } final List<LoanGrantReceiptDetail> newReceiptList = new ArrayList<LoanGrantReceiptDetail>(); for (final LoanGrantReceiptDetail receiptDetail : loanGrantHeader.getReceiptList()) if (receiptDetail.getVoucherHeader() == null || receiptDetail.getVoucherHeader().getId() == null) continue; else { if (receiptDetail.getBankaccount() != null && receiptDetail.getBankaccount().getId() == null) receiptDetail.setBankaccount(null); if (receiptDetail.getInstrumentHeader() != null && receiptDetail.getInstrumentHeader().getId() == null) receiptDetail.setInstrumentHeader(null); if (receiptDetail.getFundingAgency() != null && receiptDetail.getFundingAgency().getId() == null) receiptDetail.setFundingAgency(null); receiptDetail.setLoanGrantHeader(loanGrantHeader); newReceiptList.add(receiptDetail); } loanGrantHeader.setReceiptList(newReceiptList); } @SkipValidation public void loadBanks() { addDropdownData("bankBranchList", bankService.getAllBankAndBranchName(getFundId())); } public void setLoanGrantHeader(final LoanGrantHeader loanGrantHeader) { this.loanGrantHeader = loanGrantHeader; } public LoanGrantHeader getLoanGrantHeader() { return loanGrantHeader; } public List<LoanGrantHeader> getLoanGrantHeaderList() { return loanGrantHeaderList; } public void setUnsanctionedAmountLGDetails( final List<LoanGrantDetail> unsanctionedAmountLGDetails) { this.unsanctionedAmountLGDetails = unsanctionedAmountLGDetails; } public List<LoanGrantDetail> getUnsanctionedAmountLGDetails() { return unsanctionedAmountLGDetails; } public void setRevisedAmountLGDetails(final List<LoanGrantDetail> revisedAmountLGDetails) { this.revisedAmountLGDetails = revisedAmountLGDetails; } public List<LoanGrantDetail> getRevisedAmountLGDetails() { return revisedAmountLGDetails; } public void setSanctionedAmountLGDetails( final List<LoanGrantDetail> sanctionedAmountLGDetails) { this.sanctionedAmountLGDetails = sanctionedAmountLGDetails; } public List<LoanGrantDetail> getSanctionedAmountLGDetails() { return sanctionedAmountLGDetails; } public List<LoanGrantBean> getProjectCodeList() { return projectCodeList; } public void setProjectCodeList(final List<LoanGrantBean> projectCodeList) { this.projectCodeList = projectCodeList; } public void setBankBranchMap(final Map<String, String> bankBranchMap) { this.bankBranchMap = bankBranchMap; } public Map<String, String> getBankBranchMap() { return bankBranchMap; } public void setFundingAgencyList(final List<FundingAgency> fundingAgencyList) { this.fundingAgencyList = fundingAgencyList; } public List<FundingAgency> getFundingAgencyList() { return fundingAgencyList; } public void setBankaccount(final Integer bankaccount) { this.bankaccount = bankaccount; } public Integer getBankaccount() { return bankaccount; } public String getMode() { return mode; } public void setMode(final String mode) { this.mode = mode; } public Integer getBank_branch() { return bank_branch; } public void setBank_branch(final Integer bank_branch) { this.bank_branch = bank_branch; } }