/*
* 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.apache.struts2.interceptor.validation.SkipValidation;
import org.egov.commons.CFinancialYear;
import org.egov.commons.CFunction;
import org.egov.commons.Functionary;
import org.egov.commons.Fund;
import org.egov.commons.dao.FinancialYearDAO;
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.web.struts.actions.BaseFormAction;
import org.egov.infstr.services.PersistenceService;
import org.egov.infstr.utils.EgovMasterDataCaching;
import org.egov.services.report.BalanceSheetScheduleService;
import org.egov.services.report.BalanceSheetService;
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 = "allScheduleDetailedResults", location = "balanceSheetReport-allScheduleDetailedResults.jsp"),
@Result(name = "report", location = "balanceSheetReport-report.jsp"),
@Result(name = "scheduleResults", location = "balanceSheetReport-scheduleResults.jsp"),
@Result(name = "allScheduleResults", location = "balanceSheetReport-allScheduleResults.jsp"),
@Result(name = "balanceSheet-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=BalanceSheet.pdf" }),
@Result(name = "balanceSheet-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=BalanceSheet.xls" }),
@Result(name = "balanceSheet-HTML", type = "stream", location = Constants.INPUT_STREAM, params = { Constants.INPUT_NAME,
Constants.INPUT_STREAM, Constants.CONTENT_TYPE, "text/html" })
})
public class BalanceSheetReportAction extends BaseFormAction {
/**
*
*/
private static final long serialVersionUID = 7914013458428148999L;
private static final String BALANCE_SHEET_PDF = "balanceSheet-PDF";
private static final String BALANCE_SHEET_XLS = "balanceSheet-XLS";
InputStream inputStream;
ReportHelper reportHelper;
Statement balanceSheet = new Statement();
private Date todayDate;
FinancialYearDAO financialYearDAO;
CFinancialYear financialYear=new CFinancialYear();
@Autowired
@Qualifier("persistenceService")
private PersistenceService persistenceService;
@Autowired
private EgovMasterDataCaching masterDataCache;
public FinancialYearDAO getFinancialYearDAO() {
return financialYearDAO;
}
public void setFinancialYearDAO(FinancialYearDAO financialYearDAO) {
this.financialYearDAO = financialYearDAO;
}
public Date getFromDate() {
return balanceSheetService.getFromDate(balanceSheet);
}
public Date getToDate() {
return balanceSheetService.getToDate(balanceSheet);
}
public void setFromDate(final Date fromDate) {
}
public Date getCurrentYearfromDate() {
return getFromDate();
}
public void setCurrentYearfromDate(final Date currentYearfromDate) {
}
public Date getCurrentYeartoDate() {
return getToDate();
}
public void setCurrentYeartoDate(final Date currentYeartoDate) {
}
public void setToDate(final Date toDate) {
}
public Date getPreviousYearfromDate() {
return balanceSheetService.getPreviousYearFor(getFromDate());
}
public Date getPreviousYeartoDate() {
return balanceSheetService.getPreviousYearFor(getToDate());
}
public void setPreviousYearfromDate(final Date previousYearfromDate) {
}
public void setPreviousYeartoDate(final Date previousYeartoDate) {
}
private StringBuffer header = new StringBuffer();
// private String heading;
BalanceSheetService balanceSheetService;
BalanceSheetScheduleService balanceSheetScheduleService;
public static final Locale LOCALE = new Locale("en", "IN");
public static final SimpleDateFormat DDMMYYYYFORMATS = new SimpleDateFormat("dd/MM/yyyy", LOCALE);
public void setBalanceSheetService(final BalanceSheetService balanceSheetService) {
this.balanceSheetService = balanceSheetService;
}
public void setBalanceSheetScheduleService(final BalanceSheetScheduleService balanceSheetScheduleService) {
this.balanceSheetScheduleService = balanceSheetScheduleService;
}
public void setReportHelper(final ReportHelper reportHelper) {
this.reportHelper = reportHelper;
}
public InputStream getInputStream() {
return inputStream;
}
public Statement getBalanceSheet() {
return balanceSheet;
}
public BalanceSheetReportAction() {
addRelatedEntity("department", Department.class);
addRelatedEntity("function", CFunction.class);
addRelatedEntity("fund", Fund.class);
addRelatedEntity("functionary", Functionary.class);
addRelatedEntity("financialYear", CFinancialYear.class);
addRelatedEntity("field", Boundary.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("fundList", masterDataCache.get("egi-fund"));
addDropdownData("functionList", masterDataCache.get("egi-function"));
// addDropdownData("functionaryList", masterCache.get("egi-functionary"));
// addDropdownData("fieldList", masterCache.get("egi-ward"));
// addDropdownData("financialYearList",
// getPersistenceService().findAllBy("from CFinancialYear where isActive=true and isActiveForPosting=true order by finYearRange desc "));
addDropdownData("financialYearList", persistenceService.findAllBy("from CFinancialYear order by finYearRange desc "));
}
}
protected void setRelatedEntitesOn() {
setTodayDate(new Date());
if (balanceSheet.getFinancialYear() != null && balanceSheet.getFinancialYear().getId() != null)
balanceSheet.setFinancialYear((CFinancialYear) getPersistenceService().find("from CFinancialYear where id=?",
balanceSheet.getFinancialYear().getId()));
if (balanceSheet.getDepartment() != null && balanceSheet.getDepartment().getId() != null
&& balanceSheet.getDepartment().getId() != 0) {
balanceSheet.setDepartment((Department) getPersistenceService().find("from Department where id=?",
balanceSheet.getDepartment().getId()));
persistenceService.find("from Department where id=?", balanceSheet.getDepartment()
.getId());
header.append(" in " + balanceSheet.getDepartment().getName());
} else
balanceSheet.setDepartment(null);
/* if (balanceSheet.getField() != null && balanceSheet.getField().getId() != null && balanceSheet.getField().getId() != 0) {
balanceSheet.setField((Boundary) getPersistenceService().find("from Boundary where id=?",
balanceSheet.getField().getId()));
header.append(" in " + balanceSheet.getField().getName());
}*/
if (balanceSheet.getFund() != null && balanceSheet.getFund().getId() != null && balanceSheet.getFund().getId() != 0) {
balanceSheet.setFund((Fund) getPersistenceService().find("from Fund where id=?", balanceSheet.getFund().getId()));
header.append(" for " + balanceSheet.getFund().getName());
}
if (balanceSheet.getFunction() != null && balanceSheet.getFunction().getId() != null
&& balanceSheet.getFunction().getId() != 0) {
balanceSheet.setFunction((CFunction) getPersistenceService().find("from CFunction where id=?",
balanceSheet.getFunction().getId()));
header.append(" for " + balanceSheet.getFunction().getName());
}
/* if (balanceSheet.getFunctionary() != null && balanceSheet.getFunctionary().getId() != null
&& balanceSheet.getFunctionary().getId() != 0) {
balanceSheet.setFunctionary((Functionary) getPersistenceService().find("from Functionary where id=?",
balanceSheet.getFunctionary().getId()));
header.append(" in " + balanceSheet.getFunctionary().getName());
}*/
if (balanceSheet.getAsOndate() != null)
header.append(" as on " + DDMMYYYYFORMATS.format(balanceSheet.getAsOndate()));
header.toString();
}
@Override
public Object getModel() {
return balanceSheet;
}
@SkipValidation
@Action(value = "/report/balanceSheetReport-generateBalanceSheetReport")
public String generateBalanceSheetReport() {
return "report";
}
@Action(value = "/report/balanceSheetReport-generateBalanceSheetSubReport")
public String generateBalanceSheetSubReport() {
populateDataSourceForSchedule();
return "scheduleResults";
}
@Action(value = "/report/balanceSheetReport-generateScheduleReport")
public String generateScheduleReport() {
populateDataSourceForAllSchedules();
return "allScheduleResults";
}
/* for Detailed */
@SkipValidation
@Action(value = "/report/balanceSheetReport-generateScheduleReportDetailed")
public String generateScheduleReportDetailed() {
populateDataSourceForAllSchedulesDetailed();
return "allScheduleDetailedResults";
}
private void populateDataSourceForSchedule() {
setRelatedEntitesOn();
if (balanceSheet.getFund() != null && balanceSheet.getFund().getId() != null) {
final List<Fund> selFund = new ArrayList<Fund>();
selFund.add(balanceSheet.getFund());
balanceSheet.setFunds(selFund);
} else
balanceSheet.setFunds(balanceSheetService.getFunds());
balanceSheetScheduleService.populateDataForSchedule(balanceSheet, parameters.get("majorCode")[0]);
}
private void populateDataSourceForAllSchedules() {
setRelatedEntitesOn();
if (balanceSheet.getFund() != null && balanceSheet.getFund().getId() != null && balanceSheet.getFund().getId() != 0) {
final List<Fund> selFund = new ArrayList<Fund>();
selFund.add(balanceSheet.getFund());
balanceSheet.setFunds(selFund);
} else
balanceSheet.setFunds(balanceSheetService.getFunds());
balanceSheetScheduleService.populateDataForAllSchedules(balanceSheet);
}
/* for detailed */
private void populateDataSourceForAllSchedulesDetailed() {
setRelatedEntitesOn();
if (balanceSheet.getFund() != null && balanceSheet.getFund().getId() != null && balanceSheet.getFund().getId() != 0) {
final List<Fund> selFund = new ArrayList<Fund>();
selFund.add(balanceSheet.getFund());
balanceSheet.setFunds(selFund);
} else
balanceSheet.setFunds(balanceSheetService.getFunds());
balanceSheetScheduleService.populateDataForAllSchedulesDetailed(balanceSheet);
}
@Action(value = "/report/balanceSheetReport-printBalanceSheetReport")
public String printBalanceSheetReport() {
populateDataSource();
return "report";
}
@Action(value = "/report/balanceSheetReport-generateBalanceSheetPdf")
public String generateBalanceSheetPdf() throws Exception {
populateDataSource();
final JasperPrint jasper = reportHelper.generateFinancialStatementReportJasperPrint(balanceSheet,
getText("report.heading"),
header.toString(),
getCurrentYearToDate(), getPreviousYearToDate(), true);
inputStream = reportHelper.exportPdf(inputStream, jasper);
return BALANCE_SHEET_PDF;
}
@Action(value = "/report/balanceSheetReport-generateBalanceSheetXls")
public String generateBalanceSheetXls() throws Exception {
populateDataSource();
JasperPrint jasper = null;
if (!balanceSheet.getPeriod().equalsIgnoreCase("Yearly"))
jasper = reportHelper.generateFinancialStatementReportJasperPrint(balanceSheet, getText("report.heading"),
header.toString(),
getCurrentYearToDate(), getPreviousYearToDate(), true);
else
jasper = reportHelper.generateFinancialStatementReportJasperPrint(balanceSheet, getText("report.heading"),
header.toString(),
getCurrentYearToDate(), getPreviousYearToDate(), true);
inputStream = reportHelper.exportXls(inputStream, jasper);
return BALANCE_SHEET_XLS;
}
@Action(value = "/report/balanceSheetReport-generateSchedulePdf")
public String generateSchedulePdf() throws Exception {
populateDataSourceForAllSchedules();
final JasperPrint jasper = reportHelper.generateFinancialStatementReportJasperPrint(balanceSheet,
getText("report.heading"),
header.toString(),
getCurrentYearToDate(), getPreviousYearToDate(), false);
inputStream = reportHelper.exportPdf(inputStream, jasper);
return BALANCE_SHEET_PDF;
}
@Action(value = "/report/balanceSheetReport-generateScheduleXls")
public String generateScheduleXls() throws Exception {
populateDataSourceForAllSchedules();
final JasperPrint jasper = reportHelper.generateFinancialStatementReportJasperPrint(balanceSheet,
getText("report.heading"),
header.toString(),
getCurrentYearToDate(), getPreviousYearToDate(), false);
inputStream = reportHelper.exportXls(inputStream, jasper);
return BALANCE_SHEET_XLS;
}
/* for detailed */
@Action(value = "/report/balanceSheetReport-generateDetailedSchedulePdf")
public String generateDetailedSchedulePdf() throws Exception {
populateDataSourceForAllSchedulesDetailed();
final JasperPrint jasper = reportHelper.generateFinancialStatementReportJasperPrint(balanceSheet,
getText("report.heading"),
header.toString(),
getCurrentYearToDate(), getPreviousYearToDate(), false);
inputStream = reportHelper.exportPdf(inputStream, jasper);
return BALANCE_SHEET_PDF;
}
/* for detailed */
@Action(value = "/report/balanceSheetReport-generateDetailedScheduleXls")
public String generateDetailedScheduleXls() throws Exception {
populateDataSourceForAllSchedulesDetailed();
final JasperPrint jasper = reportHelper.generateFinancialStatementReportJasperPrint(balanceSheet,
getText("report.heading"),
header.toString(),
getCurrentYearToDate(), getPreviousYearToDate(), false);
inputStream = reportHelper.exportXls(inputStream, jasper);
return BALANCE_SHEET_XLS;
}
@Action(value = "/report/balanceSheetReport-generateBalanceSheetSchedulePdf")
public String generateBalanceSheetSchedulePdf() throws Exception {
populateDataSourceForSchedule();
final JasperPrint jasper = reportHelper.generateFinancialStatementReportJasperPrint(balanceSheet,
getText("report.sub.schedule.heading"), header.toString(),
getCurrentYearToDate(), getPreviousYearToDate(), false);
inputStream = reportHelper.exportPdf(inputStream, jasper);
return BALANCE_SHEET_PDF;
}
@Action(value = "/report/balanceSheetReport-generateBalanceSheetScheduleXls")
public String generateBalanceSheetScheduleXls() throws Exception {
populateDataSourceForSchedule();
final JasperPrint jasper = reportHelper.generateFinancialStatementReportJasperPrint(balanceSheet,
getText("report.sub.schedule.heading"), header.toString(),
getCurrentYearToDate(), getPreviousYearToDate(), false);
inputStream = reportHelper.exportXls(inputStream, jasper);
return BALANCE_SHEET_XLS;
}
protected void populateDataSource() {
setRelatedEntitesOn();
if (balanceSheet.getFund() != null && balanceSheet.getFund().getId() != null) {
final List<Fund> selFund = new ArrayList<Fund>();
selFund.add(balanceSheet.getFund());
balanceSheet.setFunds(selFund);
} else
balanceSheet.setFunds(balanceSheetService.getFunds());
balanceSheetService.populateBalanceSheet(balanceSheet);
}
//TODO- This table is not used. Check reference and remove
public String getCurrentYearToDate() {
return balanceSheetService.getFormattedDate(balanceSheetService.getToDate(balanceSheet));
}
public String getPreviousYearToDate() {
return balanceSheetService.getFormattedDate(balanceSheetService.getPreviousYearFor(balanceSheetService
.getToDate(balanceSheet)));
}
public Date getTodayDate() {
return todayDate;
}
public void setTodayDate(final Date todayDate) {
this.todayDate = todayDate;
}
public StringBuffer getHeader() {
return header;
}
public void setHeader(final StringBuffer header) {
this.header = header;
}
}