/*
* 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.works.web.controller.reports;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.egov.commons.dao.EgwTypeOfWorkHibernateDAO;
import org.egov.infra.admin.master.entity.Department;
import org.egov.infra.admin.master.service.DepartmentService;
import org.egov.infra.reporting.engine.ReportConstants.FileFormat;
import org.egov.infra.reporting.engine.ReportOutput;
import org.egov.infra.reporting.engine.ReportRequest;
import org.egov.infra.reporting.engine.ReportService;
import org.egov.services.masters.SchemeService;
import org.egov.services.masters.SubSchemeService;
import org.egov.works.master.service.NatureOfWorkService;
import org.egov.works.reports.entity.EstimateAbstractReport;
import org.egov.works.reports.service.WorkProgressRegisterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.MessageSource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value = "/reports/estimateabstractreport")
public class EstimateAbstractReportPDFController {
@Autowired
private ReportService reportService;
@Autowired
private WorkProgressRegisterService workProgressRegisterService;
@Autowired
private DepartmentService departmentService;
@Autowired
@Qualifier("schemeService")
private SchemeService schemeService;
@Autowired
@Qualifier("subSchemeService")
private SubSchemeService subSchemeService;
@Autowired
private NatureOfWorkService natureOfWorkService;
@Autowired
private EgwTypeOfWorkHibernateDAO egwTypeOfWorkHibernateDAO;
@Autowired
private MessageSource messageSource;
private final Map<String, Object> reportParams = new HashMap<String, Object>();
private ReportRequest reportInput = null;
private ReportOutput reportOutput = null;
@RequestMapping(value = "/departmentwise/pdf", method = RequestMethod.GET)
public @ResponseBody ResponseEntity<byte[]> generatePDFDepartmentWise(final HttpServletRequest request,
@RequestParam("adminSanctionFromDate") final Date adminSanctionFromDate,
@RequestParam("adminSanctionToDate") final Date adminSanctionToDate,
@RequestParam("department") final Long department,
@RequestParam("scheme") final Integer scheme,
@RequestParam("subScheme") final Integer subScheme,
@RequestParam("workCategory") final String workCategory,
@RequestParam("beneficiary") final String beneficiary,
@RequestParam("natureOfWork") final Long natureOfWork,
@RequestParam("spillOverFlag") final boolean spillOverFlag,
@RequestParam("contentType") final String contentType,
final HttpSession session) throws IOException {
final EstimateAbstractReport searchRequest = new EstimateAbstractReport();
final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
searchRequest.setAdminSanctionFromDate(adminSanctionFromDate);
searchRequest.setAdminSanctionToDate(adminSanctionToDate);
searchRequest.setDepartment(department);
searchRequest.setScheme(scheme);
searchRequest.setSubScheme(subScheme);
searchRequest.setWorkCategory(workCategory);
searchRequest.setBeneficiary(beneficiary);
searchRequest.setNatureOfWork(natureOfWork);
searchRequest.setSpillOverFlag(spillOverFlag);
final List<EstimateAbstractReport> estimateAbstractReports = workProgressRegisterService
.searchEstimateAbstractReportByDepartmentWise(searchRequest);
String queryParameters = messageSource.getMessage("msg.estimateabstractreport.by.departmentwise", null, null);
if (spillOverFlag)
queryParameters = messageSource.getMessage("msg.estimateabstractreport.by.departmentwise.for.spillover", null, null);
if (adminSanctionFromDate != null
|| adminSanctionToDate != null
|| department != null)
queryParameters += "for ";
if (adminSanctionFromDate != null && adminSanctionToDate != null)
queryParameters += messageSource.getMessage("msg.daterange", null, null) + sdf.format(adminSanctionFromDate) + " - "
+ sdf.format(adminSanctionToDate)
+ ", ";
if (adminSanctionFromDate != null && adminSanctionToDate == null)
queryParameters += messageSource.getMessage("msg.adminsanctionfromdate", null, null) + adminSanctionFromDate + ", ";
if (adminSanctionToDate != null && adminSanctionFromDate == null)
queryParameters += messageSource.getMessage("msg.adminsanctiontodate", null, null) + adminSanctionToDate + ", ";
if (department != null)
queryParameters += messageSource.getMessage("msg.department", null, null)
+ departmentService.getDepartmentById(department).getName() + ", ";
if (scheme != null)
queryParameters += messageSource.getMessage("msg.scheme", null, null)
+ schemeService.findById(scheme, false).getName() + ", ";
if (subScheme != null)
queryParameters += messageSource.getMessage("msg.subscheme", null, null)
+ subSchemeService.findById(subScheme, false).getName() + ", ";
if (workCategory != null) {
queryParameters += "Work Category : " + workCategory.replace('_',' ') + ", ";
}
if (beneficiary != null) {
queryParameters += messageSource.getMessage("msg.beneficiary", null, null) + beneficiary.replaceAll("_C", "/C").replace("_", " ") + ", ";
}
if (natureOfWork != null) {
queryParameters += messageSource.getMessage("msg.natureofwork", null, null)
+ natureOfWorkService.findById(natureOfWork).getName() + ", ";
}
if (queryParameters.endsWith(", "))
queryParameters = queryParameters.substring(0, queryParameters.length() - 2);
reportParams.put("queryParameters", queryParameters);
return generateReportDepartmentWise(estimateAbstractReports, request, session, contentType);
}
private ResponseEntity<byte[]> generateReportDepartmentWise(final List<EstimateAbstractReport> estimateAbstractReports,
final HttpServletRequest request,
final HttpSession session, final String contentType) {
final List<EstimateAbstractReport> estimateAbstractReportPdfList = new ArrayList<EstimateAbstractReport>();
final SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
String dataRunDate = "";
if (estimateAbstractReports != null && !estimateAbstractReports.isEmpty())
for (final EstimateAbstractReport eadwr : estimateAbstractReports) {
final EstimateAbstractReport pdf = new EstimateAbstractReport();
if (eadwr.getDepartmentName() != null)
pdf.setDepartmentName(eadwr.getDepartmentName());
else
pdf.setDepartmentName("");
if (eadwr.getLineEstimates() != null)
pdf.setLineEstimates(eadwr.getLineEstimates());
else
pdf.setLineEstimates(null);
if (eadwr.getAdminSanctionedEstimates() != null)
pdf.setAdminSanctionedEstimates(eadwr.getAdminSanctionedEstimates());
else
pdf.setAdminSanctionedEstimates(null);
if (eadwr.getAdminSanctionedAmountInCrores() != null)
pdf.setAdminSanctionedAmountInCrores(new BigDecimal(eadwr.getAdminSanctionedAmountInCrores())
.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString());
else
pdf.setAdminSanctionedAmountInCrores("NA");
if (eadwr.getTechnicalSanctionedEstimates() != null)
pdf.setTechnicalSanctionedEstimates(eadwr.getTechnicalSanctionedEstimates());
else
pdf.setTechnicalSanctionedEstimates(null);
if (eadwr.getLoaCreated() != null)
pdf.setLoaCreated(eadwr.getLoaCreated());
else
pdf.setLoaCreated(null);
if (eadwr.getAgreementValueInCrores() != null)
pdf.setAgreementValueInCrores(new BigDecimal(eadwr.getAgreementValueInCrores())
.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString());
else
pdf.setAgreementValueInCrores("NA");
if (eadwr.getWorkInProgress() != null)
pdf.setWorkInProgress(eadwr.getWorkInProgress());
else
pdf.setWorkInProgress(null);
if (eadwr.getWorkCompleted() != null)
pdf.setWorkCompleted(eadwr.getWorkCompleted());
else
pdf.setWorkCompleted(null);
if (eadwr.getBillsCreated() != null)
pdf.setBillsCreated(eadwr.getBillsCreated());
else
pdf.setBillsCreated(null);
if (eadwr.getBillValueInCrores() != null)
pdf.setBillValueInCrores(new BigDecimal(eadwr.getBillValueInCrores())
.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString());
else
pdf.setBillValueInCrores("NA");
dataRunDate = formatter.format(workProgressRegisterService.getReportSchedulerRunDate());
estimateAbstractReportPdfList.add(pdf);
}
reportParams.put("heading", messageSource.getMessage("msg.estimateabstractreport.by.departmentwise", null, null));
reportParams.put("reportRunDate", formatter.format(new Date()));
reportParams.put("dataRunDate", dataRunDate);
reportInput = new ReportRequest(messageSource.getMessage("msg.estimateabstractreportbydepartmentwisepdf", null, null),
estimateAbstractReportPdfList, reportParams);
final HttpHeaders headers = new HttpHeaders();
if (contentType.equalsIgnoreCase("pdf")) {
reportInput.setReportFormat(FileFormat.PDF);
headers.setContentType(MediaType.parseMediaType("application/pdf"));
headers.add("content-disposition", "inline;filename=EstimateAbstractReportByDepartmentWise.pdf");
} else {
reportInput.setReportFormat(FileFormat.XLS);
headers.setContentType(MediaType.parseMediaType("application/vnd.ms-excel"));
headers.add("content-disposition", "inline;filename=EstimateAbstractReportByDepartmentWise.xls");
}
reportOutput = reportService.createReport(reportInput);
return new ResponseEntity<byte[]>(reportOutput.getReportOutputData(), headers, HttpStatus.CREATED);
}
@RequestMapping(value = "/typeofworkwise/pdf", method = RequestMethod.GET)
public @ResponseBody ResponseEntity<byte[]> generatePDFTypeOfWorkWise(final HttpServletRequest request,
@RequestParam("adminSanctionFromDate") final Date adminSanctionFromDate,
@RequestParam("adminSanctionToDate") final Date adminSanctionToDate,
@RequestParam("typeOfWork") final Long typeOfWork,
@RequestParam("subTypeOfWork") final Long subTypeOfWork,
@RequestParam("departments") final Set<Department> departments,
@RequestParam("scheme") final Integer scheme,
@RequestParam("subScheme") final Integer subScheme,
@RequestParam("workCategory") final String workCategory,
@RequestParam("beneficiary") final String beneficiary,
@RequestParam("natureOfWork") final Long natureOfWork,
@RequestParam("spillOverFlag") final boolean spillOverFlag,
@RequestParam("contentType") final String contentType,
final HttpSession session) throws IOException {
final EstimateAbstractReport searchRequest = new EstimateAbstractReport();
final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
searchRequest.setAdminSanctionFromDate(adminSanctionFromDate);
searchRequest.setAdminSanctionToDate(adminSanctionToDate);
searchRequest.setTypeOfWork(typeOfWork);
searchRequest.setSubTypeOfWork(subTypeOfWork);
searchRequest.setDepartments(departments);
searchRequest.setScheme(scheme);
searchRequest.setSubScheme(subScheme);
searchRequest.setWorkCategory(workCategory);
searchRequest.setBeneficiary(beneficiary);
searchRequest.setNatureOfWork(natureOfWork);
searchRequest.setSpillOverFlag(spillOverFlag);
final List<EstimateAbstractReport> estimateAbstractReports = workProgressRegisterService
.searchEstimateAbstractReportByTypeOfWorkWise(searchRequest);
String queryParameters = messageSource.getMessage("msg.estimateabstractreport.by.typeofworkwise", null, null);
if (spillOverFlag)
queryParameters = messageSource.getMessage("msg.estimateabstractreport.by.typeofworkwise.for.spillover", null, null);
if (adminSanctionFromDate != null
|| adminSanctionToDate != null)
queryParameters += "for ";
if (adminSanctionFromDate != null && adminSanctionToDate != null)
queryParameters += messageSource.getMessage("msg.daterange", null, null) + sdf.format(adminSanctionFromDate) + " - "
+ sdf.format(adminSanctionToDate)
+ ", ";
if (adminSanctionFromDate != null && adminSanctionToDate == null)
queryParameters += messageSource.getMessage("msg.adminsanctionfromdate", null, null) + adminSanctionFromDate + ", ";
if (adminSanctionToDate != null && adminSanctionFromDate == null)
queryParameters += messageSource.getMessage("msg.adminsanctiontodate", null, null) + adminSanctionToDate + ", ";
if (typeOfWork != null)
queryParameters += messageSource.getMessage("msg.typeofwork", null, null)
+ egwTypeOfWorkHibernateDAO.getTypeOfWorkById(typeOfWork).getDescription() + ", ";
if (subTypeOfWork != null)
queryParameters += messageSource.getMessage("msg.subtypeofwork", null, null)
+ egwTypeOfWorkHibernateDAO.getTypeOfWorkById(typeOfWork).getDescription() + ", ";
if (departments != null && !departments.toString().equalsIgnoreCase("[null]")) {
String departmentNames = "";
for (Department dept : departments) {
departmentNames = departmentNames + dept.getName() + ",";
}
departmentNames = departmentNames.substring(0, departmentNames.length() - 1);
queryParameters += messageSource.getMessage("msg.departments", null, null) + departmentNames + ", ";
}
if (scheme != null)
queryParameters += messageSource.getMessage("msg.scheme", null, null)
+ schemeService.findById(scheme, false).getName() + ", ";
if (subScheme != null)
queryParameters += messageSource.getMessage("msg.subscheme", null, null)
+ subSchemeService.findById(subScheme, false).getName() + ", ";
if (workCategory != null) {
queryParameters += messageSource.getMessage("msg.workcategory", null, null) + workCategory.replace('_',' ') + ", ";
}
if (beneficiary != null) {
queryParameters += messageSource.getMessage("msg.beneficiary", null, null) + beneficiary.replaceAll("_C", "/C").replace("_", " ") + ", ";
}
if (natureOfWork != null) {
queryParameters += messageSource.getMessage("msg.natureofwork", null, null)
+ natureOfWorkService.findById(natureOfWork).getName() + ", ";
}
if (queryParameters.endsWith(", "))
queryParameters = queryParameters.substring(0, queryParameters.length() - 2);
reportParams.put("queryParameters", queryParameters);
return generateReportTypeOfWorkWise(estimateAbstractReports, request, session, contentType, departments);
}
private ResponseEntity<byte[]> generateReportTypeOfWorkWise(final List<EstimateAbstractReport> estimateAbstractReports,
final HttpServletRequest request,
final HttpSession session, final String contentType, final Set<Department> departments) {
final List<EstimateAbstractReport> estimateAbstractReportPdfList = new ArrayList<EstimateAbstractReport>();
final SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
String dataRunDate = "";
if (estimateAbstractReports != null && !estimateAbstractReports.isEmpty())
for (final EstimateAbstractReport eadwr : estimateAbstractReports) {
final EstimateAbstractReport pdf = new EstimateAbstractReport();
if (eadwr.getDepartmentName() != null)
pdf.setDepartmentName(eadwr.getDepartmentName());
else
pdf.setDepartmentName("");
if (eadwr.getTypeOfWorkName() != null)
pdf.setTypeOfWorkName(eadwr.getTypeOfWorkName());
else
pdf.setTypeOfWorkName("");
if (eadwr.getSubTypeOfWorkName() != null)
pdf.setSubTypeOfWorkName(eadwr.getSubTypeOfWorkName());
else
pdf.setTypeOfWorkName("");
if (eadwr.getLineEstimates() != null)
pdf.setLineEstimates(eadwr.getLineEstimates());
else
pdf.setLineEstimates(null);
if (eadwr.getAdminSanctionedEstimates() != null)
pdf.setAdminSanctionedEstimates(eadwr.getAdminSanctionedEstimates());
else
pdf.setAdminSanctionedEstimates(null);
if (eadwr.getAdminSanctionedAmountInCrores() != null)
pdf.setAdminSanctionedAmountInCrores(new BigDecimal(eadwr.getAdminSanctionedAmountInCrores())
.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString());
else
pdf.setAdminSanctionedAmountInCrores("NA");
if (eadwr.getTechnicalSanctionedEstimates() != null)
pdf.setTechnicalSanctionedEstimates(eadwr.getTechnicalSanctionedEstimates());
else
pdf.setTechnicalSanctionedEstimates(null);
if (eadwr.getLoaCreated() != null)
pdf.setLoaCreated(eadwr.getLoaCreated());
else
pdf.setLoaCreated(null);
if (eadwr.getAgreementValueInCrores() != null)
pdf.setAgreementValueInCrores(new BigDecimal(eadwr.getAgreementValueInCrores())
.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString());
else
pdf.setAgreementValueInCrores("NA");
if (eadwr.getWorkInProgress() != null)
pdf.setWorkInProgress(eadwr.getWorkInProgress());
else
pdf.setWorkInProgress(null);
if (eadwr.getWorkCompleted() != null)
pdf.setWorkCompleted(eadwr.getWorkCompleted());
else
pdf.setWorkCompleted(null);
if (eadwr.getBillsCreated() != null)
pdf.setBillsCreated(eadwr.getBillsCreated());
else
pdf.setBillsCreated(null);
if (eadwr.getBillValueInCrores() != null)
pdf.setBillValueInCrores(new BigDecimal(eadwr.getBillValueInCrores())
.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString());
else
pdf.setBillValueInCrores("NA");
dataRunDate = formatter.format(workProgressRegisterService.getReportSchedulerRunDate());
estimateAbstractReportPdfList.add(pdf);
}
reportParams.put("heading", messageSource.getMessage("msg.estimateabstractreport.by.typeofworkwise", null, null));
reportParams.put("reportRunDate", formatter.format(new Date()));
reportParams.put("dataRunDate", dataRunDate);
if (departments != null && !departments.toString().equalsIgnoreCase("[null]"))
reportInput = new ReportRequest(messageSource.getMessage("msg.estimateabstractreportbytypeofworkwisewithdeptpdf",
null, null), estimateAbstractReportPdfList,
reportParams);
else
reportInput = new ReportRequest(
messageSource.getMessage("msg.estimateabstractreportbytypeofworkwisepdf", null, null),
estimateAbstractReportPdfList,
reportParams);
final HttpHeaders headers = new HttpHeaders();
if (contentType.equalsIgnoreCase("pdf")) {
reportInput.setReportFormat(FileFormat.PDF);
headers.setContentType(MediaType.parseMediaType("application/pdf"));
headers.add("content-disposition", "inline;filename=EstimateAbstractReportByTypeOfWorkWise.pdf");
} else {
reportInput.setReportFormat(FileFormat.XLS);
headers.setContentType(MediaType.parseMediaType("application/vnd.ms-excel"));
headers.add("content-disposition", "inline;filename=EstimateAbstractReportByTypeOfWorkWise.xls");
}
reportOutput = reportService.createReport(reportInput);
return new ResponseEntity<byte[]>(reportOutput.getReportOutputData(), headers, HttpStatus.CREATED);
}
}