/*
* 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.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.egov.egf.model.BudgetReAppReportBean;
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.model.budget.Budget;
import org.egov.model.budget.BudgetReAppropriation;
import org.egov.utils.Constants;
import org.egov.utils.ReportHelper;
import org.hibernate.FlushMode;
import org.hibernate.Query;
import org.hibernate.transform.Transformers;
import org.hibernate.type.BigDecimalType;
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;
@Results(value = {
@Result(name = BudgetAppropriationReportAction.NEW, location = "budgetAppropriationReport-new.jsp"),
@Result(name = "result", location = "budgetAppropriationReport-result.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=BudgetAppropriationReport.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=BudgetAppropriationReport.xls" }) })
@ParentPackage("egov")
public class BudgetAppropriationReportAction extends BaseFormAction {
/**
*
*/
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = Logger
.getLogger(BudgetAppropriationReportAction.class);
public static final SimpleDateFormat YYYY_MM_DD_FORMAT = new SimpleDateFormat(
"yyyy/MM/dd");
private Date fromDate = null;
private Date toDate = null;
private InputStream inputStream;
private ReportHelper reportHelper;
private List<Budget> budgetList = null;
private BudgetReAppropriation budgetRep = new BudgetReAppropriation();
private List<BudgetReAppReportBean> budgetAppropriationList = new ArrayList<BudgetReAppReportBean>();
private List<BudgetReAppReportBean> budgetDisplayList = new ArrayList<BudgetReAppReportBean>();
private StringBuffer heading = new StringBuffer();
private String budgetName;
private String deptName = "";
private String fundName = "";
private String functionName = "";
private String isFundSelected = "false";
private String isFunctionSelected = "false";
private String isDepartmentSelected = "false";
@Autowired
@Qualifier("persistenceService")
private PersistenceService persistenceService;
@Autowired
private EgovMasterDataCaching masterDataCache;
@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("fundDropDownList", masterDataCache.get("egi-fund"));
budgetList = persistenceService
.findAllBy("from Budget bud where bud.isActiveBudget=true and bud.parent is null order by bud.financialYear.id desc");
addDropdownData("budList", budgetList);
}
}
@Override
public Object getModel() {
return budgetRep;
}
public BudgetAppropriationReportAction() {
}
@Action(value = "/report/budgetAppropriationReport-newForm")
public String newForm() {
return NEW;
}
@Action(value = "/report/budgetAppropriationReport-ajaxGenerateReport")
public String ajaxGenerateReport() {
if (LOGGER.isInfoEnabled())
LOGGER.info("Starting ajaxGenerateReport..");
populateReAppropriationData();
return "result";
}
private void prepareFormattedList() {
for (int index = 0, slNo = 1; index < budgetDisplayList.size(); index++) {
budgetAppropriationList.add(budgetDisplayList.get(index));
budgetAppropriationList.get(index).setSlNo(slNo++);
budgetAppropriationList.get(index).setAppDate(
Constants.DDMMYYYYFORMAT2.format(budgetDisplayList.get(
index).getAppropriationDate()));
}
}
@SuppressWarnings("unchecked")
private void populateReAppropriationData() {
setRelatedEntitesOn();
final Query query = generateQuery();
query.setResultTransformer(Transformers
.aliasToBean(BudgetReAppReportBean.class));
budgetDisplayList.addAll(query.list());
}
private StringBuffer getQueryString() {
StringBuffer queryString = new StringBuffer();
String deptQry = "";
String fundQry = "";
String functionQry = "";
if (budgetRep.getBudgetDetail().getExecutingDepartment() != null
&& budgetRep.getBudgetDetail().getExecutingDepartment().getId() != null)
deptQry = " and bd.EXECUTING_DEPARTMENT="
+ budgetRep.getBudgetDetail().getExecutingDepartment()
.getId();
if (budgetRep.getBudgetDetail().getFund() != null
&& budgetRep.getBudgetDetail().getFund().getId() != null)
fundQry = " and bd.fund="
+ budgetRep.getBudgetDetail().getFund().getId();
if (budgetRep.getBudgetDetail().getFunction() != null
&& budgetRep.getBudgetDetail().getFunction().getId() != null)
functionQry = " and bd.function="
+ budgetRep.getBudgetDetail().getFunction().getId();
queryString = queryString
.append("select dept.name as department,funct.name as function ,fnd.name as fund ,"
+ " bg.name as budgetHead,bmisc.sequence_number as budgetAppropriationNo,bmisc.reappropriation_date as appropriationDate,"
+ " bd.approvedamount as actualAmount,br.addition_amount as additionAmount,br.deduction_amount as deductionAmount"
+ " from egf_budget B,egf_budget_reappropriation br,egf_budgetdetail bd,egf_budgetgroup bg,egf_reappropriation_misc bmisc"
+ ", eg_department dept,fund fnd , function funct"
+ " where bd.id =br.budgetdetail and bd.budgetgroup=bg.id and br.REAPPROPRIATION_MISC=bmisc.id and bd.budget=b.id "
+ " and funct.id=bd.function and fnd.id=bd.fund and dept.id= bd.EXECUTING_DEPARTMENT "
+ deptQry
+ fundQry
+ functionQry
+ " and bmisc.reappropriation_date between '"
+ YYYY_MM_DD_FORMAT.format(getFromDate())
+ "' and '"
+ YYYY_MM_DD_FORMAT.format(getToDate())
+ "'"
+ " and bd.MATERIALIZEDPATH like ''||(select budinn.MATERIALIZEDPATH ||'%' from egf_budget budinn where budinn.id="
+ budgetRep.getBudgetDetail().getBudget().getId()
+ ")||''");
return queryString
.append(" order by fnd.id,dept.id,funct.id,bmisc.reappropriation_date");
}
private Query generateQuery() {
final Query query = persistenceService.getSession()
.createSQLQuery(getQueryString().toString())
.addScalar("department").addScalar("function")
.addScalar("fund").addScalar("budgetHead")
.addScalar("budgetAppropriationNo")
.addScalar("appropriationDate").addScalar("actualAmount")
.addScalar("additionAmount", BigDecimalType.INSTANCE)
.addScalar("deductionAmount", BigDecimalType.INSTANCE);
return query;
}
protected void setRelatedEntitesOn() {
heading.append("Budget Addition/Deduction Appropriation ");
if (!getFundName().equals("")) {
heading.append(" in " + getFundName());
isFundSelected = "true";
}
if (!getFunctionName().equals("")) {
heading.append(" under " + getFunctionName());
isFunctionSelected = "true";
}
if (!getDeptName().equals("")) {
heading.append(" For " + getDeptName() + "Department");
isDepartmentSelected = "true";
}
if (getFromDate() != null && getToDate() != null)
heading.append(" From " + getFormattedDate(getFromDate()) + " To "
+ getFormattedDate(getToDate()));
}
/*
* For Pdf/Excel
*/
@SuppressWarnings("unchecked")
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/budgetAppropriationReport-ajaxGenerateReportXls")
public String ajaxGenerateReportXls() throws Exception {
populateReAppropriationData();
prepareFormattedList();
final String title = ReportUtil.getCityName();
final String subtitle = "Amount in Rupess";
final JasperPrint jasper = reportHelper
.generateBudgetAppropriationJasperPrint(
budgetAppropriationList, title, subtitle, budgetName,
getIsFundSelected(), getIsFunctionSelected(),
getIsDepartmentSelected());
inputStream = reportHelper.exportXls(inputStream, jasper);
return "XLS";
}
@Action(value = "/report/budgetAppropriationReport-ajaxGenerateReportPdf")
public String ajaxGenerateReportPdf() throws Exception {
populateReAppropriationData();
prepareFormattedList();
final String title = ReportUtil.getCityName();
final String subtitle = "Amount in Rupess";
final JasperPrint jasper = reportHelper
.generateBudgetAppropriationJasperPrint(
budgetAppropriationList, title, subtitle, budgetName,
getIsFundSelected(), getIsFunctionSelected(),
getIsDepartmentSelected());
inputStream = reportHelper.exportPdf(inputStream, jasper);
return "PDF";
}
public String getFormattedDate(final Date date) {
return Constants.DDMMYYYYFORMAT2.format(date);
}
public Date getFromDate() {
return fromDate;
}
public void setFromDate(final Date fromDate) {
this.fromDate = fromDate;
}
public Date getToDate() {
return toDate;
}
public void setToDate(final Date toDate) {
this.toDate = toDate;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(final InputStream inputStream) {
this.inputStream = inputStream;
}
public ReportHelper getReportHelper() {
return reportHelper;
}
public void setReportHelper(final ReportHelper reportHelper) {
this.reportHelper = reportHelper;
}
public StringBuffer getHeading() {
return heading;
}
public BudgetReAppropriation getBudgetRep() {
return budgetRep;
}
public void setBudgetRep(final BudgetReAppropriation budgetRep) {
this.budgetRep = budgetRep;
}
public void setHeading(final StringBuffer heading) {
this.heading = heading;
}
public List<BudgetReAppReportBean> getBudgetDisplayList() {
return budgetDisplayList;
}
public void setBudgetDisplayList(
final List<BudgetReAppReportBean> budgetDisplayList) {
this.budgetDisplayList = budgetDisplayList;
}
public List<BudgetReAppReportBean> getBudgetAppropriationList() {
return budgetAppropriationList;
}
public void setBudgetAppropriationList(
final List<BudgetReAppReportBean> budgetAppropriationList) {
this.budgetAppropriationList = budgetAppropriationList;
}
public String getIsFundSelected() {
return isFundSelected;
}
public void setIsFundSelected(final String isFundSelected) {
this.isFundSelected = isFundSelected;
}
public String getIsFunctionSelected() {
return isFunctionSelected;
}
public void setIsFunctionSelected(final String isFunctionSelected) {
this.isFunctionSelected = isFunctionSelected;
}
public String getIsDepartmentSelected() {
return isDepartmentSelected;
}
public void setIsDepartmentSelected(final String isDepartmentSelected) {
this.isDepartmentSelected = isDepartmentSelected;
}
public String getBudgetName() {
return budgetName;
}
public void setBudgetName(final String budgetName) {
this.budgetName = budgetName;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(final String deptName) {
this.deptName = deptName;
}
public String getFundName() {
return fundName;
}
public void setFundName(final String fundName) {
this.fundName = fundName;
}
public String getFunctionName() {
return functionName;
}
public void setFunctionName(final String functionName) {
this.functionName = functionName;
}
}