/* * 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 net.sf.jasperreports.engine.JasperPrint; 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.egov.commons.CChartOfAccounts; import org.egov.commons.CFinancialYear; import org.egov.commons.CFunction; import org.egov.commons.Functionary; import org.egov.commons.Fund; import org.egov.egf.model.Statement; import org.egov.infra.admin.master.entity.Boundary; import org.egov.infra.admin.master.entity.Department; import org.egov.infra.reporting.util.ReportUtil; import org.egov.infra.web.struts.actions.BaseFormAction; import org.egov.infstr.services.PersistenceService; import org.egov.infstr.utils.EgovMasterDataCaching; import org.egov.services.report.IncomeExpenditureScheduleService; import org.egov.services.report.IncomeExpenditureService; import org.egov.utils.Constants; import org.egov.utils.ReportHelper; import org.hibernate.FlushMode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; @ParentPackage("egov") @Results({ @Result(name = "report", location = "incomeExpenditureReport-report.jsp"), @Result(name = "scheduleResults", location = "incomeExpenditureReport-scheduleResults.jsp"), @Result(name = "allScheduleResults", location = "incomeExpenditureReport-allScheduleResults.jsp"), @Result(name = "results", location = "incomeExpenditureReport-results.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=IncomeExpenditureStatement.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=IncomeExpenditureStatement.xls" }) }) public class IncomeExpenditureReportAction extends BaseFormAction { /** * */ private static final long serialVersionUID = 91711010096900620L; private static final String INCOME_EXPENSE_PDF = "PDF"; private static final String INCOME_EXPENSE_XLS = "XLS"; private static SimpleDateFormat FORMATDDMMYYYY = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH); InputStream inputStream; ReportHelper reportHelper; Statement incomeExpenditureStatement = new Statement(); IncomeExpenditureService incomeExpenditureService; IncomeExpenditureScheduleService incomeExpenditureScheduleService; private String majorCode; private String minorCode; private String scheduleNo; private String financialYearId; // private String asOndate; private Date todayDate; private String asOnDateRange; private String period; private Integer fundId; private final StringBuffer heading = new StringBuffer(); private StringBuffer scheduleheading = new StringBuffer(); private StringBuffer statementheading = new StringBuffer(); List<CChartOfAccounts> listChartOfAccounts; private boolean detailReport = false; @Autowired @Qualifier("persistenceService") private PersistenceService persistenceService; @Autowired private EgovMasterDataCaching masterDataCache; public void setIncomeExpenditureService(final IncomeExpenditureService incomeExpenditureService) { this.incomeExpenditureService = incomeExpenditureService; } public void setIncomeExpenditureScheduleService(final IncomeExpenditureScheduleService incomeExpenditureScheduleService) { this.incomeExpenditureScheduleService = incomeExpenditureScheduleService; } public void setReportHelper(final ReportHelper reportHelper) { this.reportHelper = reportHelper; } public InputStream getInputStream() { return inputStream; } public Statement getIncomeExpenditureStatement() { return incomeExpenditureStatement; } public IncomeExpenditureReportAction() { addRelatedEntity("department", Department.class); addRelatedEntity("function", CFunction.class); addRelatedEntity("functionary", Functionary.class); addRelatedEntity("financialYear", CFinancialYear.class); addRelatedEntity("field", Boundary.class); addRelatedEntity("fund", Fund.class); } @Override public void prepare() { persistenceService.getSession().setDefaultReadOnly(true); persistenceService.getSession().setFlushMode(FlushMode.MANUAL); super.prepare(); if (!parameters.containsKey("showDropDown")) { addDropdownData("departmentList", masterDataCache.get("egi-department")); addDropdownData("functionList", masterDataCache.get("egi-function")); addDropdownData("functionaryList", masterDataCache.get("egi-functionary")); addDropdownData("fundDropDownList", masterDataCache.get("egi-fund")); addDropdownData("fieldList", masterDataCache.get("egi-ward")); addDropdownData("financialYearList", getPersistenceService().findAllBy("from CFinancialYear where isActive=true order by finYearRange desc ")); } } protected void setRelatedEntitesOn() { setTodayDate(new Date()); if (incomeExpenditureStatement.getFund() != null && incomeExpenditureStatement.getFund().getId() != null && incomeExpenditureStatement.getFund().getId() != 0) { incomeExpenditureStatement.setFund((Fund) getPersistenceService().find("from Fund where id=?", incomeExpenditureStatement.getFund().getId())); heading.append(" in " + incomeExpenditureStatement.getFund().getName()); } if (incomeExpenditureStatement.getDepartment() != null && incomeExpenditureStatement.getDepartment().getId() != null && incomeExpenditureStatement.getDepartment().getId() != 0) { incomeExpenditureStatement.setDepartment((Department) getPersistenceService().find("from Department where id=?", incomeExpenditureStatement.getDepartment().getId())); heading.append(" in " + incomeExpenditureStatement.getDepartment().getName() + " Department"); } else incomeExpenditureStatement.setDepartment(null); if (incomeExpenditureStatement.getFinancialYear() != null && incomeExpenditureStatement.getFinancialYear().getId() != null && incomeExpenditureStatement.getFinancialYear().getId() != 0) { incomeExpenditureStatement.setFinancialYear((CFinancialYear) getPersistenceService().find( "from CFinancialYear where id=?", incomeExpenditureStatement.getFinancialYear().getId())); heading.append(" for the Financial Year " + incomeExpenditureStatement.getFinancialYear().getFinYearRange()); } if (incomeExpenditureStatement.getFunction() != null && incomeExpenditureStatement.getFunction().getId() != null && incomeExpenditureStatement.getFunction().getId() != 0) { incomeExpenditureStatement.setFunction((CFunction) getPersistenceService().find("from CFunction where id=?", incomeExpenditureStatement.getFunction().getId())); heading.append(" in Function Code " + incomeExpenditureStatement.getFunction().getName()); } if (incomeExpenditureStatement.getField() != null && incomeExpenditureStatement.getField().getId() != null && incomeExpenditureStatement.getField().getId() != 0) { incomeExpenditureStatement.setField((Boundary) getPersistenceService().find("from Boundary where id=?", incomeExpenditureStatement.getField().getId())); heading.append(" in the field value" + incomeExpenditureStatement.getField().getName()); } if (incomeExpenditureStatement.getFunctionary() != null && incomeExpenditureStatement.getFunctionary().getId() != null && incomeExpenditureStatement.getFunctionary().getId() != 0) { incomeExpenditureStatement.setFunctionary((Functionary) getPersistenceService().find("from Functionary where id=?", incomeExpenditureStatement.getFunctionary().getId())); heading.append(" and " + incomeExpenditureStatement.getFunctionary().getName() + " Functionary"); } } public void setIncomeExpenditureStatement(final Statement incomeExpenditureStatement) { this.incomeExpenditureStatement = incomeExpenditureStatement; } @Override public Object getModel() { return incomeExpenditureStatement; } @Action(value = "/report/incomeExpenditureReport-generateIncomeExpenditureReport") public String generateIncomeExpenditureReport() { return "report"; } @Action(value = "/report/incomeExpenditureReport-generateIncomeExpenditureSubReport") public String generateIncomeExpenditureSubReport() { setDetailReport(false); populateDataSourceForSchedule(); return "scheduleResults"; } @Action(value = "/report/incomeExpenditureReport-generateScheduleReport") public String generateScheduleReport() { populateDataSourceForAllSchedules(); return "allScheduleResults"; } @Action(value = "/report/incomeExpenditureReport-generateDetailCodeReport") public String generateDetailCodeReport() { setDetailReport(true); populateSchedulewiseDetailCodeReport(); return "scheduleResults"; } private void populateSchedulewiseDetailCodeReport() { setRelatedEntitesOn(); scheduleheading.append("Income And Expenditure Schedule Statement").append(heading); if (incomeExpenditureStatement.getFund() != null && incomeExpenditureStatement.getFund().getId() != null && incomeExpenditureStatement.getFund().getId() != 0) { final List<Fund> fundlist = new ArrayList<Fund>(); fundlist.add(incomeExpenditureStatement.getFund()); incomeExpenditureStatement.setFunds(fundlist); incomeExpenditureScheduleService.populateDetailcode(incomeExpenditureStatement); } else { incomeExpenditureStatement.setFunds(incomeExpenditureService.getFunds()); incomeExpenditureScheduleService.populateDetailcode(incomeExpenditureStatement); } } private void populateDataSourceForSchedule() { setDetailReport(false); setRelatedEntitesOn(); scheduleheading.append("Income And Expenditure Schedule Statement").append(heading); if (incomeExpenditureStatement.getFund() != null && incomeExpenditureStatement.getFund().getId() != null && incomeExpenditureStatement.getFund().getId() != 0) { final List<Fund> fundlist = new ArrayList<Fund>(); fundlist.add(incomeExpenditureStatement.getFund()); incomeExpenditureStatement.setFunds(fundlist); incomeExpenditureScheduleService.populateDataForLedgerSchedule(incomeExpenditureStatement, parameters.get("majorCode")[0]); } else { incomeExpenditureStatement.setFunds(incomeExpenditureService.getFunds()); incomeExpenditureScheduleService.populateDataForLedgerSchedule(incomeExpenditureStatement, parameters.get("majorCode")[0]); } } private void populateDataSourceForAllSchedules() { setRelatedEntitesOn(); if (incomeExpenditureStatement.getFund() != null && incomeExpenditureStatement.getFund().getId() != null && incomeExpenditureStatement.getFund().getId() != 0) { final List<Fund> fundlist = new ArrayList<Fund>(); fundlist.add(incomeExpenditureStatement.getFund()); incomeExpenditureStatement.setFunds(fundlist); incomeExpenditureScheduleService.populateDataForAllSchedules(incomeExpenditureStatement); } else { incomeExpenditureStatement.setFunds(incomeExpenditureService.getFunds()); incomeExpenditureScheduleService.populateDataForAllSchedules(incomeExpenditureStatement); } } public String printIncomeExpenditureReport() { populateDataSource(); return "report"; } @Action(value = "/report/incomeExpenditureReport-ajaxPrintIncomeExpenditureReport") public String ajaxPrintIncomeExpenditureReport() { populateDataSource(); return "results"; } protected void populateDataSource() { setRelatedEntitesOn(); statementheading.append("Income And Expenditure Statement").append(heading); if (incomeExpenditureStatement.getFund() != null && incomeExpenditureStatement.getFund().getId() != null && incomeExpenditureStatement.getFund().getId() != 0) { final List<Fund> fundlist = new ArrayList<Fund>(); fundlist.add(incomeExpenditureStatement.getFund()); incomeExpenditureStatement.setFunds(fundlist); incomeExpenditureService.populateIEStatement(incomeExpenditureStatement); } else { incomeExpenditureStatement.setFunds(incomeExpenditureService.getFunds()); incomeExpenditureService.populateIEStatement(incomeExpenditureStatement); } } @Action(value = "/report/incomeExpenditureReport-generateIncomeExpenditurePdf") public String generateIncomeExpenditurePdf() throws Exception { populateDataSource(); final String heading = ReportUtil.getCityName() + "\\n" + statementheading.toString(); final String subtitle = "Report Run Date-" + FORMATDDMMYYYY.format(getTodayDate()); final JasperPrint jasper = reportHelper.generateIncomeExpenditureReportJasperPrint(incomeExpenditureStatement, heading, getPreviousYearToDate(), getCurrentYearToDate(), subtitle, true); inputStream = reportHelper.exportPdf(inputStream, jasper); return INCOME_EXPENSE_PDF; } @Action(value = "/report/incomeExpenditureReport-generateDetailCodePdf") public String generateDetailCodePdf() throws Exception { populateSchedulewiseDetailCodeReport(); final String heading = ReportUtil.getCityName() + "\\n" + statementheading.toString(); final String subtitle = "Report Run Date-" + FORMATDDMMYYYY.format(getTodayDate()); final JasperPrint jasper = reportHelper.generateIncomeExpenditureReportJasperPrint(incomeExpenditureStatement, heading, getPreviousYearToDate(), getCurrentYearToDate(), subtitle, true); inputStream = reportHelper.exportPdf(inputStream, jasper); return INCOME_EXPENSE_PDF; } @Action(value = "/report/incomeExpenditureReport-generateDetailCodeXls") public String generateDetailCodeXls() throws Exception { populateSchedulewiseDetailCodeReport(); final String heading = ReportUtil.getCityName() + "\\n" + statementheading.toString(); final String subtitle = "Report Run Date-" + FORMATDDMMYYYY.format(getTodayDate()) + " "; final JasperPrint jasper = reportHelper.generateIncomeExpenditureReportJasperPrint(incomeExpenditureStatement, heading, getPreviousYearToDate(), getCurrentYearToDate(), subtitle, true); inputStream = reportHelper.exportXls(inputStream, jasper); return INCOME_EXPENSE_XLS; } /* public String getUlbName() { final Query query = persistenceService.getSession().createSQLQuery( "select name from companydetail"); final List<String> result = query.list(); if (result != null) return result.get(0); return ""; }*/ @Action(value = "/report/incomeExpenditureReport-generateIncomeExpenditureXls") public String generateIncomeExpenditureXls() throws Exception { populateDataSource(); final String heading = ReportUtil.getCityName() + "\\n" + statementheading.toString(); final String subtitle = "Report Run Date-" + FORMATDDMMYYYY.format(getTodayDate()) + " "; final JasperPrint jasper = reportHelper.generateIncomeExpenditureReportJasperPrint(incomeExpenditureStatement, heading, getPreviousYearToDate(), getCurrentYearToDate(), subtitle, true); inputStream = reportHelper.exportXls(inputStream, jasper); return INCOME_EXPENSE_XLS; } @Action(value = "/report/incomeExpenditureReport-generateSchedulePdf") public String generateSchedulePdf() throws Exception { populateDataSourceForAllSchedules(); final JasperPrint jasper = reportHelper.generateFinancialStatementReportJasperPrint(incomeExpenditureStatement, getText("report.ie.heading"), heading.toString(), getPreviousYearToDate(), getCurrentYearToDate(), false); inputStream = reportHelper.exportPdf(inputStream, jasper); return INCOME_EXPENSE_PDF; } @Action(value = "/report/incomeExpenditureReport-generateScheduleXls") public String generateScheduleXls() throws Exception { populateDataSourceForAllSchedules(); final JasperPrint jasper = reportHelper.generateFinancialStatementReportJasperPrint(incomeExpenditureStatement, getText("report.ie.heading"), heading.toString(), getPreviousYearToDate(), getCurrentYearToDate(), false); inputStream = reportHelper.exportXls(inputStream, jasper); return INCOME_EXPENSE_XLS; } @Action(value = "/report/incomeExpenditureReport-generateIncomeExpenditureSchedulePdf") public String generateIncomeExpenditureSchedulePdf() throws Exception { populateDataSourceForSchedule(); final String heading = ReportUtil.getCityName() + "\\n" + scheduleheading.toString(); final String subtitle = "Report Run Date-" + FORMATDDMMYYYY.format(getTodayDate()) + " "; final JasperPrint jasper = reportHelper.generateIncomeExpenditureReportJasperPrint(incomeExpenditureStatement, heading, getPreviousYearToDate(), getCurrentYearToDate(), subtitle, false); inputStream = reportHelper.exportPdf(inputStream, jasper); return INCOME_EXPENSE_PDF; } @Action(value = "/report/incomeExpenditureReport-generateIncomeExpenditureScheduleXls") public String generateIncomeExpenditureScheduleXls() throws Exception { populateDataSourceForSchedule(); final String heading = ReportUtil.getCityName() + "\\n" + scheduleheading.toString(); // Blank space for space didvidion between left and right corner final String subtitle = "Report Run Date-" + FORMATDDMMYYYY.format(getTodayDate()) + " "; final JasperPrint jasper = reportHelper.generateIncomeExpenditureReportJasperPrint(incomeExpenditureStatement, heading, getPreviousYearToDate(), getCurrentYearToDate(), subtitle, false); inputStream = reportHelper.exportXls(inputStream, jasper); return INCOME_EXPENSE_XLS; } public String getCurrentYearToDate() { return incomeExpenditureService.getFormattedDate(incomeExpenditureService.getToDate(incomeExpenditureStatement)); } public String getPreviousYearToDate() { return incomeExpenditureService.getFormattedDate(incomeExpenditureService.getPreviousYearFor(incomeExpenditureService .getToDate(incomeExpenditureStatement))); } public String getCurrentYearFromDate() { return incomeExpenditureService.getFormattedDate(incomeExpenditureService.getFromDate(incomeExpenditureStatement)); } public String getPreviousYearFromDate() { return incomeExpenditureService.getFormattedDate(incomeExpenditureService.getPreviousYearFor(incomeExpenditureService .getFromDate(incomeExpenditureStatement))); } public Date getTodayDate() { return todayDate; } public void setTodayDate(final Date todayDate) { this.todayDate = todayDate; } public String getMajorCode() { return majorCode; } public void setMajorCode(final String majorCode) { this.majorCode = majorCode; } public String getMinorCode() { return minorCode; } public void setMinorCode(final String minorCode) { this.minorCode = minorCode; } public String getScheduleNo() { return scheduleNo; } public void setScheduleNo(final String scheduleNo) { this.scheduleNo = scheduleNo; } public List<CChartOfAccounts> getListChartOfAccounts() { return listChartOfAccounts; } public void setListChartOfAccounts(final List<CChartOfAccounts> listChartOfAccounts) { this.listChartOfAccounts = listChartOfAccounts; } public String getFinancialYearId() { return financialYearId; } public void setFinancialYearId(final String financialYearId) { this.financialYearId = financialYearId; } public Integer getFundId() { return fundId; } public void setFundId(final Integer fundId) { this.fundId = fundId; } public String getPeriod() { return period; } public void setPeriod(final String period) { this.period = period; } public String getAsOnDateRange() { return asOnDateRange; } public void setAsOnDateRange(final String asOnDateRange) { this.asOnDateRange = asOnDateRange; } public StringBuffer getScheduleheading() { return scheduleheading; } public void setScheduleheading(final StringBuffer scheduleheading) { this.scheduleheading = scheduleheading; } public StringBuffer getStatementheading() { return statementheading; } public void setStatementheading(final StringBuffer statementheading) { this.statementheading = statementheading; } public boolean isDetailReport() { return detailReport; } public void setDetailReport(final boolean detailReport) { this.detailReport = detailReport; } }