/*
* 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.report;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.ParseException;
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 net.sf.jasperreports.engine.JRException;
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.CFinancialYear;
import org.egov.commons.CFunction;
import org.egov.commons.Fund;
import org.egov.commons.dao.FinancialYearDAO;
import org.egov.dao.budget.BudgetDetailsDAO;
import org.egov.egf.model.BudgetAppDisplay;
import org.egov.infra.admin.master.entity.AppConfigValues;
import org.egov.infra.admin.master.entity.Department;
import org.egov.infra.admin.master.service.AppConfigValueService;
import org.egov.infra.validation.exception.ValidationException;
import org.egov.infra.web.struts.actions.BaseFormAction;
import org.egov.infstr.services.PersistenceService;
import org.egov.infstr.utils.EgovMasterDataCaching;
import org.egov.model.budget.BudgetDetail;
import org.egov.model.budget.BudgetGroup;
import org.egov.services.budget.BudgetService;
import org.egov.utils.BudgetDetailConfig;
import org.egov.utils.BudgetingType;
import org.egov.utils.Constants;
import org.egov.utils.ReportHelper;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.transform.Transformers;
import org.hibernate.type.BigDecimalType;
import org.hibernate.type.StandardBasicTypes;
import org.springframework.beans.factory.annotation.Autowired;
@Results(value = {
@Result(name = "result", location = "budgetAppropriationRegisterReport-form.jsp"),
@Result(name = "PDF", type = "stream", location = Constants.INPUT_STREAM, params = { Constants.INPUT_NAME,
Constants.INPUT_STREAM, Constants.CONTENT_TYPE, "application/pdf", Constants.CONTENT_DISPOSITION,
"no-cache;filename=BudgetAppropriationRegisterRepor.pdf" }),
@Result(name = "XLS", type = "stream", location = Constants.INPUT_STREAM, params = { Constants.INPUT_NAME,
Constants.INPUT_STREAM, Constants.CONTENT_TYPE, "application/xls", Constants.CONTENT_DISPOSITION,
"no-cache;filename=BudgetAppropriationRegisterRepor.xls" })
})
@ParentPackage("egov")
public class BudgetAppropriationRegisterReportAction extends BaseFormAction {
private static final long serialVersionUID = 1658431423915247237L;
private static final Logger LOGGER = Logger.getLogger(BudgetAppropriationRegisterReportAction.class);
String jasperpath = "/reports/templates/BudgetAppReport.jasper";
private Department department = new Department();
private CFunction function = new CFunction();
private Fund fund = new Fund();
private BudgetGroup budgetGroup = new BudgetGroup();
private List<BudgetAppDisplay> budgetAppropriationRegisterList = new ArrayList<BudgetAppDisplay>();
private List<BudgetAppDisplay> updatedBdgtAppropriationRegisterList = new ArrayList<BudgetAppDisplay>();
private String budgetHead;
private BigDecimal totalGrant;
BudgetDetailsDAO budgetDetailsDAO;
FinancialYearDAO financialYearDAO;
PersistenceService persistenceService;
ReportHelper reportHelper;
private InputStream inputStream;
private String strAsOnDate;
String financialYearId = "";
Date dtAsOnDate = null;
private BigDecimal addtionalAppropriationForBe = BigDecimal.ZERO;
private BigDecimal addtionalAppropriationForRe = BigDecimal.ZERO;
private BigDecimal beAmount;
private BigDecimal reAmount = BigDecimal.ZERO;
private String finYearRange;
protected List<String> mandatoryFields = new ArrayList<String>();
private BudgetService budgetService;
private boolean isBeDefined = true;
private boolean isReDefined = true;
@Autowired
private AppConfigValueService appConfigValuesService;
private Boolean shouldShowREAppropriations = false;
@Autowired
private EgovMasterDataCaching masterDataCache;
@Autowired
private BudgetDetailConfig budgetDetailConfig;
public BudgetAppropriationRegisterReportAction() {
addRelatedEntity(Constants.FUNCTION, CFunction.class);
addRelatedEntity(Constants.EXECUTING_DEPARTMENT, Department.class);
addRelatedEntity(Constants.FUND, Fund.class);
}
@Override
public void prepare() {
super.prepare();
mandatoryFields = budgetDetailConfig.getMandatoryFields();
dropdownData.put("functionList",Collections.EMPTY_LIST);
dropdownData.put("executingDepartmentList",Collections.EMPTY_LIST);
dropdownData.put("budgetGroupList", Collections.EMPTY_LIST);
dropdownData.put("fundList", masterDataCache.get("egi-fund"));
if (department.getId() != null && department.getId() != -1)
department = (Department) persistenceService.find("from Department where id=?", department.getId());
if (function.getId() != null && function.getId() != -1)
function = (CFunction) persistenceService.find("from CFunction where id=?", function.getId());
if (fund.getId() != null && fund.getId() != -1)
fund = (Fund) persistenceService.find("from Fund where id=?", fund.getId());
if (budgetGroup.getId() != null && budgetGroup.getId() != -1)
budgetGroup = (BudgetGroup) persistenceService.find("from BudgetGroup where id=?", budgetGroup.getId());
}
@SkipValidation
@Action(value = "/report/budgetAppropriationRegisterReport-search")
public String search() {
CFinancialYear financialYear = new CFinancialYear();
if (parameters.get("asOnDate")[0] != null) {
strAsOnDate = parameters.get("asOnDate")[0];
try {
dtAsOnDate = Constants.DDMMYYYYFORMAT2.parse(strAsOnDate);
financialYear = financialYearDAO.getFinancialYearByDate(dtAsOnDate);
} catch (final ParseException e) {
if (LOGGER.isInfoEnabled())
LOGGER.info("ParseException the date :" + e.getMessage());
}
}
// Get this to show at header level
if (budgetService.hasApprovedBeForYear(financialYear.getId()))
beAmount = getBudgetBEorREAmt("BE");
else {
isBeDefined = false;
isReDefined = false;
}
// -- Consider RE if RE is present & approved for the current yr.
if (budgetService.hasApprovedReForYear(financialYear.getId())) {
reAmount = getBudgetBEorREAmt("RE");
if (getConsiderReAppropriationAsSeperate())
totalGrant = reAmount.add(addtionalAppropriationForRe);
else
totalGrant = reAmount;
} else if (budgetService.hasApprovedBeForYear(financialYear.getId())) {
isReDefined = false;
totalGrant = beAmount.add(addtionalAppropriationForBe);
}
generateReport();
if(budgetAppropriationRegisterList.isEmpty())
{
addActionMessage(getText("voucher.norecords"));
}
return "result";
}
private void generateReport() {
CFinancialYear financialYr = new CFinancialYear();
financialYr = financialYearDAO.getFinancialYearByDate(dtAsOnDate);
CFinancialYear financialYear = null;
financialYear = financialYearDAO.getFinancialYearById(Long.valueOf(financialYr.getId()));
finYearRange = financialYear.getFinYearRange();
final Date dStartDate = financialYear.getStartingDate();
final String strAODate = Constants.DDMMYYYYFORMAT1.format(dtAsOnDate);
final String strStDate = Constants.DDMMYYYYFORMAT1.format(dStartDate);
Query query = null;
if (budgetGroup != null) {
budgetHead = budgetGroup.getName();
StringBuilder strQuery = new StringBuilder();
strQuery.append("select vmis.budgetary_appnumber as bdgApprNumber, vh.vouchernumber as VoucherNumber, vh.voucherdate as voucherDate, vh.description as description,vh.createddate as createdDate, ");
strQuery.append(" null as billNumber, null as billDate,null as billCreatedDate, gl.debitamount as debitAmount, gl.creditamount as creditAmount from generalledger gl, vouchermis vmis, ");
strQuery.append(" voucherheader vh where vh.id = gl.voucherheaderid and vh.id = vmis.voucherheaderid and gl.glcodeid =:glCodeId");
strQuery.append(" and (vmis.budgetary_appnumber != 'null' and vmis.budgetary_appnumber is not null) and vh.status != 4 and vh.voucherdate >=:strStDate");
strQuery.append(" and vh.voucherdate <=:strAODate");
strQuery.append(getFunctionQuery("gl.functionid"));
strQuery.append(getDepartmentQuery("vmis.departmentid"));
strQuery.append(getFundQuery("vh.fundid"));
strQuery.append(" ");
strQuery.append(" union select distinct bmis.budgetary_appnumber as bdgApprNumber, vh1.vouchernumber as VoucherNumber, vh1.voucherdate as voucherDate , br.narration as description,vh1.createddate as createdDate, br.billnumber as billNumber, br.billdate as billDate,br.createddate as billCreatedDate , bd.debitamount as debitAmount, bd.creditamount as creditAmount ");
strQuery.append(" from eg_billdetails bd, eg_billregistermis bmis, eg_billregister br, voucherHeader vh1 where br.id = bd.billid and br.id = bmis.billid and bd.glcodeid =:glCodeId ");
strQuery.append(" and (bmis.budgetary_appnumber != 'null' and bmis.budgetary_appnumber is not null) and br.statusid not in (select id from egw_status where description='Cancelled' and moduletype in ('EXPENSEBILL', 'SALBILL', 'WORKSBILL', 'PURCHBILL', 'CBILL', 'SBILL', 'CONTRACTORBILL')) and (vh1.id = bmis.voucherheaderid ) and br.billdate >=:strStDate");
strQuery.append(" and br.billdate <=:strAODate");
strQuery.append(getFunctionQuery("bd.functionid"));
strQuery.append(getDepartmentQuery("bmis.departmentid"));
strQuery.append(getFundQuery("bmis.fundid"));
strQuery.append(" ");
strQuery.append(" union select distinct bmis1.budgetary_appnumber as bdgApprNumber, null as VoucherNumber,cast( null as date) voucherDate , ");
strQuery.append(" br.narration as description,cast( null as date) createdDate, br.billnumber as billNumber, br.billdate as billDate,br.createddate as billCreatedDate , bd1.debitamount as debitAmount, bd1.creditamount as creditAmount from eg_billdetails bd1, eg_billregistermis bmis1, eg_billregister br ");
strQuery.append(" where br.id = bd1.billid and br.id = bmis1.billid and bd1.glcodeid =:glCodeId ");
strQuery.append(" and (bmis1.budgetary_appnumber != 'null' and bmis1.budgetary_appnumber is not null) ");
strQuery.append(" and br.statusid not in (select id from egw_status where description='Cancelled' and moduletype in ('EXPENSEBILL', 'SALBILL', 'WORKSBILL', 'PURCHBILL', 'CBILL', 'SBILL', 'CONTRACTORBILL')) and bmis1.voucherheaderid is null and br.billdate >=:strStDate");
strQuery.append(" and br.billdate <=:strAODate");
strQuery.append(getFunctionQuery("bd1.functionid"));
strQuery.append(getDepartmentQuery("bmis1.departmentid"));
strQuery.append(getFundQuery("bmis1.fundid"));
strQuery.append(" order by bdgApprNumber ");
if (LOGGER.isDebugEnabled())
LOGGER.debug("BudgetAppropriationRegisterReportAction -- strQuery...." + strQuery);
query = persistenceService.getSession().createSQLQuery(strQuery.toString())
.addScalar("bdgApprNumber")
.addScalar("voucherDate", StandardBasicTypes.DATE)
.addScalar("billDate", StandardBasicTypes.DATE)
.addScalar("createdDate",StandardBasicTypes.DATE)
.addScalar("billCreatedDate", StandardBasicTypes.DATE)
.addScalar("description")
.addScalar("VoucherNumber")
.addScalar("billNumber")
.addScalar("debitAmount", BigDecimalType.INSTANCE)
.addScalar("creditAmount", BigDecimalType.INSTANCE)
.setResultTransformer(Transformers.aliasToBean(BudgetAppDisplay.class));
query=setParameterForBudgetAppDisplay(query,dtAsOnDate,dStartDate);
}
budgetAppropriationRegisterList = query.list();
List<BudgetAppDisplay> budgetApprRegNewList = new ArrayList<BudgetAppDisplay>();
final List<BudgetAppDisplay> budgetApprRegUpdatedList1 = new ArrayList<BudgetAppDisplay>();
final HashMap<String, BudgetAppDisplay> regMap = new HashMap<String, BudgetAppDisplay>();
if (budgetAppropriationRegisterList.size() > 0) {
StringBuilder strsubQuery = new StringBuilder();
strsubQuery.append("select vmis.budgetary_appnumber as bdgApprNumber, vh.vouchernumber as VoucherNumber, vh.voucherdate as voucherDate, vh.description as description,vh.createddate as createdDate, ");
strsubQuery.append(" br.billnumber as billNumber, br.billdate as billDate,br.createddate as billCreatedDate, gl.debitamount as debitAmount, gl.creditamount as creditAmount from generalledger gl, vouchermis vmis, ");
strsubQuery.append(" voucherheader vh, eg_billregistermis bmis, eg_billregister br where vh.id = gl.voucherheaderid and vh.id = vmis.voucherheaderid and vh.id = bmis.voucherheaderid and bmis.billid = br.id ");
strsubQuery.append(" and gl.glcodeid =:glCodeId ");
strsubQuery.append(" and ");
strsubQuery.append(" (vmis.budgetary_appnumber != 'null' and vmis.budgetary_appnumber is not null) and vh.status != 4 and vh.voucherdate >=:strStDate");
strsubQuery.append(" and vh.voucherdate <=:strAODate");
strsubQuery.append(getFunctionQuery("gl.functionid"));
strsubQuery.append(getDepartmentQuery("vmis.departmentid"));
strsubQuery.append(getFundQuery("vh.fundid"));
strsubQuery.append(" order by bdgApprNumber ");
if (LOGGER.isDebugEnabled())
LOGGER.debug("BudgetAppropriationRegisterReportAction -- strsubQuery...." + strsubQuery);
query = persistenceService.getSession().createSQLQuery(strsubQuery.toString())
.addScalar("bdgApprNumber")
.addScalar("voucherDate", StandardBasicTypes.DATE)
.addScalar("billDate", StandardBasicTypes.DATE)
.addScalar("createdDate", StandardBasicTypes.DATE)
.addScalar("billCreatedDate", StandardBasicTypes.DATE)
.addScalar("description")
.addScalar("VoucherNumber")
.addScalar("billNumber")
.addScalar("debitAmount", BigDecimalType.INSTANCE)
.addScalar("creditAmount", BigDecimalType.INSTANCE)
.setResultTransformer(Transformers.aliasToBean(BudgetAppDisplay.class));
query=setParameterForBudgetAppDisplay(query,dtAsOnDate,dStartDate);
budgetApprRegNewList = query.list();
if (budgetApprRegNewList.size() > 0) {
for (final BudgetAppDisplay budgetAppRtDisp : budgetApprRegNewList)
regMap.put(budgetAppRtDisp.getBdgApprNumber(), budgetAppRtDisp);
for (final BudgetAppDisplay budgetAppropriationRegisterDisp : budgetAppropriationRegisterList)
if (regMap.containsKey(budgetAppropriationRegisterDisp.getBdgApprNumber()))
budgetApprRegUpdatedList1.add(regMap.get(budgetAppropriationRegisterDisp.getBdgApprNumber()));
else
budgetApprRegUpdatedList1.add(budgetAppropriationRegisterDisp);
}
}
if (budgetApprRegUpdatedList1.size() > 0) {
budgetAppropriationRegisterList.clear();
budgetAppropriationRegisterList.addAll(budgetApprRegUpdatedList1);
}
updateBdgtAppropriationList();
}
private String getFundQuery(final String string) {
final String query = "";
if (fund.getId() != null && fund.getId() != -1)
return " and " + string + " =:fundId ";
return query;
}
private String getFunctionQuery(final String string) {
final String query = "";
if (function.getId() != null && function.getId() != -1)
return " and " + string + " =:functionId ";
return query;
}
private String getDepartmentQuery(final String string) {
final String query = "";
if (department.getId() != null && department.getId() != -1)
return " and " + string + " =:departmentId ";
return query;
}
public boolean isFieldMandatory(final String field) {
return mandatoryFields.contains(field);
}
private void updateBdgtAppropriationList() {
BigDecimal cumulativeAmt = null;
BigDecimal balanceAvailableAmt = new BigDecimal(0.0);
BigDecimal totalDebit = new BigDecimal(0.0);
BigDecimal totalCredit = new BigDecimal(0.0);
if (totalGrant == null)
totalGrant = new BigDecimal(0.0);
if (LOGGER.isInfoEnabled())
LOGGER.info("budgetAppropriationRegisterList.size() :" + budgetAppropriationRegisterList.size());
if (budgetAppropriationRegisterList.size() > 0) {
int iSerialNumber = 1;
for (final BudgetAppDisplay budgetAppropriationRegisterDisp : budgetAppropriationRegisterList) {
if (BudgetingType.DEBIT.equals(budgetGroup.getBudgetingType()))
if (budgetAppropriationRegisterDisp.getDebitAmount() != null
&& budgetAppropriationRegisterDisp.getDebitAmount().compareTo(BigDecimal.ZERO) == 1) {
budgetAppropriationRegisterDisp.setBillAmount(budgetAppropriationRegisterDisp.getDebitAmount());
totalDebit = totalDebit.add(budgetAppropriationRegisterDisp.getBillAmount());
} else {
budgetAppropriationRegisterDisp.setBillAmount(budgetAppropriationRegisterDisp.getCreditAmount().multiply(
new BigDecimal("-1")));
totalCredit = totalCredit.add(budgetAppropriationRegisterDisp.getBillAmount().abs());
}
if (BudgetingType.CREDIT.equals(budgetGroup.getBudgetingType()))
if (budgetAppropriationRegisterDisp.getCreditAmount() != null
&& budgetAppropriationRegisterDisp.getCreditAmount().compareTo(BigDecimal.ZERO) == 1) {
budgetAppropriationRegisterDisp.setBillAmount(budgetAppropriationRegisterDisp.getCreditAmount());
totalCredit = totalCredit.add(budgetAppropriationRegisterDisp.getBillAmount());
} else {
budgetAppropriationRegisterDisp.setBillAmount(budgetAppropriationRegisterDisp.getDebitAmount().multiply(
new BigDecimal("-1")));
totalDebit = totalDebit.add(budgetAppropriationRegisterDisp.getBillAmount().abs());
}
if (BudgetingType.ALL.equals(budgetGroup.getBudgetingType()))
if (budgetAppropriationRegisterDisp.getDebitAmount() != null
&& budgetAppropriationRegisterDisp.getDebitAmount().compareTo(BigDecimal.ZERO) == 1)
budgetAppropriationRegisterDisp.setBillAmount(budgetAppropriationRegisterDisp.getDebitAmount());
else
budgetAppropriationRegisterDisp.setBillAmount(budgetAppropriationRegisterDisp.getCreditAmount().multiply(
new BigDecimal("-1")));
if (cumulativeAmt == null) {
if (BudgetingType.ALL.equals(budgetGroup.getBudgetingType()))
cumulativeAmt = budgetAppropriationRegisterDisp.getBillAmount();
else if (BudgetingType.CREDIT.equals(budgetGroup.getBudgetingType()))
cumulativeAmt = totalCredit.subtract(totalDebit);
else if (BudgetingType.DEBIT.equals(budgetGroup.getBudgetingType()))
cumulativeAmt = totalDebit.subtract(totalCredit);
budgetAppropriationRegisterDisp.setCumulativeAmount(cumulativeAmt);
} else // when budgeting type is 'ALL', to calculate the cumulative balance,
// if the debit amount>0, add the debit amount to cumulative amount
// if the credit amount>0, subtract the credit amount from the cumulative amount
if (BudgetingType.ALL.equals(budgetGroup.getBudgetingType())) {
if (budgetAppropriationRegisterDisp.getDebitAmount() != null
&& budgetAppropriationRegisterDisp.getDebitAmount().compareTo(BigDecimal.ZERO) == 1) {
cumulativeAmt = budgetAppropriationRegisterDisp.getBillAmount().abs().add(cumulativeAmt);
budgetAppropriationRegisterDisp.setCumulativeAmount(cumulativeAmt);
} else {
cumulativeAmt = cumulativeAmt.subtract(budgetAppropriationRegisterDisp.getBillAmount().abs());
budgetAppropriationRegisterDisp.setCumulativeAmount(cumulativeAmt);
}
} else if (BudgetingType.CREDIT.equals(budgetGroup.getBudgetingType())) {
cumulativeAmt = cumulativeAmt.add(totalCredit.subtract(totalDebit));
budgetAppropriationRegisterDisp.setCumulativeAmount(cumulativeAmt);
} else if (BudgetingType.DEBIT.equals(budgetGroup.getBudgetingType())) {
cumulativeAmt = cumulativeAmt.add(totalDebit.subtract(totalCredit));
budgetAppropriationRegisterDisp.setCumulativeAmount(cumulativeAmt);
}
// when budgeting type is 'ALL', to calculate the running balance,
// if the debit amount>0, subtract the cumulative from running balance
// if the credit amount>0, add the cumulative to running balance
if (BudgetingType.ALL.equals(budgetGroup.getBudgetingType())) {
if (budgetAppropriationRegisterDisp.getDebitAmount() != null
&& budgetAppropriationRegisterDisp.getDebitAmount().compareTo(BigDecimal.ZERO) == 1)
balanceAvailableAmt = totalGrant.subtract(budgetAppropriationRegisterDisp.getCumulativeAmount().abs());
else
balanceAvailableAmt = totalGrant.add(budgetAppropriationRegisterDisp.getCumulativeAmount());
} else
balanceAvailableAmt = totalGrant.subtract(budgetAppropriationRegisterDisp.getCumulativeAmount());
budgetAppropriationRegisterDisp.setBalanceAvailableAmount(balanceAvailableAmt);
budgetAppropriationRegisterDisp.setSerailNumber(Integer.toString(iSerialNumber));
updatedBdgtAppropriationRegisterList.add(budgetAppropriationRegisterDisp);
totalCredit = BigDecimal.ZERO;
totalDebit = BigDecimal.ZERO;
iSerialNumber++;
}
}
}
private BigDecimal getBudgetBEorREAmt(final String type) {
BigDecimal approvedAmount = new BigDecimal(0.0);
try {
CFinancialYear financialYr = new CFinancialYear();
financialYr = financialYearDAO.getFinancialYearByDate(dtAsOnDate);
final CFinancialYear financialYear = financialYearDAO.getFinancialYearById(Long.valueOf(financialYr.getId()));
List<BudgetDetail> budgedDetailList = new ArrayList<BudgetDetail>();
String query = " from BudgetDetail bd where bd.budget.isbere=? and bd.budgetGroup=? and bd.budget.financialYear=? ";
if (department.getId() != null && department.getId() != -1)
query = query + " and bd.executingDepartment.id=" + department.getId();
if (function.getId() != null && function.getId() != -1)
query = query + " and bd.function.id=" + function.getId();
if (fund.getId() != null && fund.getId() != -1)
query = query + " and bd.fund.id=" + fund.getId();
budgedDetailList = persistenceService.findAllBy(query, type, budgetGroup, financialYear);
if (budgedDetailList != null && budgedDetailList.size() > 0)
for (final BudgetDetail bdetail : budgedDetailList) {
approvedAmount = approvedAmount.add(bdetail.getApprovedAmount());
if ("RE".equalsIgnoreCase(type) && !getConsiderReAppropriationAsSeperate()) {
approvedAmount = approvedAmount.add(bdetail.getApprovedReAppropriationsTotal());
continue;
} else if ("BE".equalsIgnoreCase(type))
addtionalAppropriationForBe = addtionalAppropriationForBe.add(bdetail
.getApprovedReAppropriationsTotal());
else {
shouldShowREAppropriations = true;
addtionalAppropriationForRe = addtionalAppropriationForRe.add(bdetail
.getApprovedReAppropriationsTotal());
}
}
} catch (final ValidationException e) {
if (LOGGER.isInfoEnabled())
LOGGER.info("ValidationException while fetching BudgetBEorREAmt :" + e.getMessage());
return new BigDecimal(0.0);
}
return approvedAmount;
}
private Map<String, Object> getParamMapForReportFile() {
final Map<String, Object> paramMapForReportFile = new HashMap<String, Object>();
paramMapForReportFile.put("bgname", budgetHead);
paramMapForReportFile.put("deptName", department.getName());
paramMapForReportFile.put("function", function.getName());
paramMapForReportFile.put("fund", fund.getName());
final String rBEorREAmountForm = " - (" + finYearRange + ") (Rs.) : ";
paramMapForReportFile.put("rAsOnDate", strAsOnDate);
if (isBeDefined) {
paramMapForReportFile.put("rBE", rBEorREAmountForm + beAmount.toString());
paramMapForReportFile.put("rAddiApprBe", addtionalAppropriationForBe.toString());
} else {
paramMapForReportFile.put("rBE", rBEorREAmountForm + "Budget Not Defined ");
paramMapForReportFile.put("rAddiApprBe", "");
}
if (isReDefined) {
paramMapForReportFile.put("rRE", rBEorREAmountForm + reAmount.toString());
paramMapForReportFile.put("rAddiApprRe", addtionalAppropriationForRe.toString());
} else {
paramMapForReportFile.put("rRE", rBEorREAmountForm);
paramMapForReportFile.put("rAddiApprRe", "");
}
paramMapForReportFile.put("showREAppr", shouldShowREAppropriations.toString());
return paramMapForReportFile;
}
@Action(value = "/report/budgetAppropriationRegisterReport-generatePdf")
public String generatePdf() throws JRException, IOException {
updatedBdgtAppropriationRegisterList = new ArrayList<BudgetAppDisplay>();
search();
final List<Object> data = new ArrayList<Object>();
data.addAll(getUpdatedBdgtAppropriationRegisterList());
inputStream = reportHelper.exportPdf(getInputStream(), jasperpath, getParamMapForReportFile(), data);
return "PDF";
}
@Action(value = "/report/budgetAppropriationRegisterReport-generateXls")
public String generateXls() throws JRException, IOException {
updatedBdgtAppropriationRegisterList = new ArrayList<BudgetAppDisplay>();
search();
final List<Object> data = new ArrayList<Object>();
data.addAll(getUpdatedBdgtAppropriationRegisterList());
inputStream = reportHelper.exportXls(getInputStream(), jasperpath, getParamMapForReportFile(), data);
return "XLS";
}
private Query setParameterForBudgetAppDisplay(Query query ,Date asOnDate,Date startDate)
{
if (function.getId() != null && function.getId() != -1)
{
query.setLong("functionId", function.getId()) ;
}
if (department.getId() != null && department.getId() != -1)
{
query.setLong("departmentId", department.getId()) ;
}
if (fund.getId() != null && fund.getId() != -1)
{
query.setLong("fundId", fund.getId()) ;
}
if (budgetGroup.getMinCode().getId() != null )
{
query.setLong("glCodeId", budgetGroup.getMinCode().getId()) ;
}
if (asOnDate != null )
{
query.setDate("strAODate", asOnDate) ;
}
if (startDate != null )
{
query.setDate("strStDate", startDate) ;
}
return query;
}
public String getFormattedDate(final Date date) {
final SimpleDateFormat formatter = Constants.DDMMYYYYFORMAT1;
return formatter.format(date);
}
public void setReportHelper(final ReportHelper reportHelper) {
this.reportHelper = reportHelper;
}
@Override
public String execute() throws Exception {
return "form";
}
@Override
public Object getModel() {
return null;
}
public Department getDepartment() {
return department;
}
public void setDepartment(final Department department) {
this.department = department;
}
public CFunction getFunction() {
return function;
}
public void setFunction(final CFunction function) {
this.function = function;
}
public List<BudgetAppDisplay> getBudgetAppropriationRegisterList() {
return budgetAppropriationRegisterList;
}
public void setBudgetAppropriationRegisterList(
final List<BudgetAppDisplay> budgetAppropriationRegisterList) {
this.budgetAppropriationRegisterList = budgetAppropriationRegisterList;
}
public String getBudgetHead() {
return budgetHead;
}
public void setBudgetHead(final String budgetHead) {
this.budgetHead = budgetHead;
}
public BigDecimal getTotalGrant() {
return totalGrant;
}
public void setTotalGrant(final BigDecimal totalGrant) {
this.totalGrant = totalGrant;
}
public BudgetDetailsDAO getBudgetDetailsDAO() {
return budgetDetailsDAO;
}
public void setBudgetDetailsDAO(final BudgetDetailsDAO budgetDetailsDAO) {
this.budgetDetailsDAO = budgetDetailsDAO;
}
public BudgetGroup getBudgetGroup() {
return budgetGroup;
}
public void setBudgetGroup(final BudgetGroup budgetGroup) {
this.budgetGroup = budgetGroup;
}
@Override
public void setPersistenceService(final PersistenceService persistenceService) {
this.persistenceService = persistenceService;
}
@Override
public PersistenceService getPersistenceService() {
return persistenceService;
}
public FinancialYearDAO getFinancialYearDAO() {
return financialYearDAO;
}
public void setFinancialYearDAO(final FinancialYearDAO financialYearDAO) {
this.financialYearDAO = financialYearDAO;
}
public List<BudgetAppDisplay> getUpdatedBdgtAppropriationRegisterList() {
return updatedBdgtAppropriationRegisterList;
}
public void setUpdatedBdgtAppropriationRegisterList(
final List<BudgetAppDisplay> updatedBdgtAppropriationRegisterList) {
this.updatedBdgtAppropriationRegisterList = updatedBdgtAppropriationRegisterList;
}
public String getStrAsOnDate() {
return strAsOnDate;
}
public void setStrAsOnDate(final String strAsOnDate) {
this.strAsOnDate = strAsOnDate;
}
public InputStream getInputStream() {
return inputStream;
}
public BigDecimal getBeAmount() {
return beAmount;
}
public void setBeAmount(final BigDecimal beAmount) {
this.beAmount = beAmount;
}
public BigDecimal getReAmount() {
return reAmount;
}
public void setReAmount(final BigDecimal reAmount) {
this.reAmount = reAmount;
}
public String getFinYearRange() {
return finYearRange;
}
public void setFinYearRange(final String finYearRange) {
this.finYearRange = finYearRange;
}
public void setFund(final Fund fund) {
this.fund = fund;
}
public Fund getFund() {
return fund;
}
public void setBudgetService(final BudgetService budgetService) {
this.budgetService = budgetService;
}
public void setAddtionalAppropriationForBe(
final BigDecimal addtionalAppropriationForBe) {
this.addtionalAppropriationForBe = addtionalAppropriationForBe;
}
public BigDecimal getAddtionalAppropriationForBe() {
return addtionalAppropriationForBe;
}
public void setAddtionalAppropriationForRe(
final BigDecimal addtionalAppropriationForRe) {
this.addtionalAppropriationForRe = addtionalAppropriationForRe;
}
public BigDecimal getAddtionalAppropriationForRe() {
return addtionalAppropriationForRe;
}
public boolean getIsBeDefined() {
return isBeDefined;
}
public boolean getIsReDefined() {
return isReDefined;
}
private boolean getConsiderReAppropriationAsSeperate() {
final List<AppConfigValues> appList = appConfigValuesService.getConfigValuesByModuleAndKey("EGF",
"CONSIDER_RE_REAPPROPRIATION_AS_SEPARATE");
String appValue = "-1";
appValue = appList.get(0).getValue();
return "Y".equalsIgnoreCase(appValue);
}
public void setShouldShowREAppropriations(final boolean shouldShowREAppropriations) {
this.shouldShowREAppropriations = shouldShowREAppropriations;
}
public boolean getShouldShowREAppropriations() {
return shouldShowREAppropriations;
}
}