/* * 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.abstractestimate.service; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.egov.commons.dao.EgwStatusHibernateDAO; import org.egov.commons.dao.FinancialYearHibernateDAO; import org.egov.infra.admin.master.entity.User; import org.egov.works.abstractestimate.entity.AbstractEstimate; import org.egov.works.abstractestimate.entity.EstimateTechnicalSanction; import org.egov.works.abstractestimate.entity.FinancialDetail; import org.egov.works.abstractestimate.entity.MultiYearEstimate; import org.egov.works.abstractestimate.repository.AbstractEstimateRepository; import org.egov.works.lineestimate.entity.LineEstimateDetails; import org.egov.works.utils.WorksConstants; import org.hibernate.Session; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional(readOnly = true) public class EstimateService { @PersistenceContext private EntityManager entityManager; private final AbstractEstimateRepository abstractEstimateRepository; @Autowired private EgwStatusHibernateDAO egwStatusHibernateDAO; @Autowired private FinancialYearHibernateDAO financialYearHibernateDAO; @Autowired private EstimateTechnicalSanctionService estimateTechnicalSanctionService; public Session getCurrentSession() { return entityManager.unwrap(Session.class); } @Autowired public EstimateService(final AbstractEstimateRepository abstractEstimateRepository) { this.abstractEstimateRepository = abstractEstimateRepository; } public AbstractEstimate getAbstractEstimateById(final Long id) { return abstractEstimateRepository.findOne(id); } @Transactional public AbstractEstimate createAbstractEstimateOnLineEstimateTechSanction(final LineEstimateDetails lineEstimateDetails, final int i) { final AbstractEstimate savedAbstractEstimate = abstractEstimateRepository .save(populateAbstractEstimate(lineEstimateDetails)); saveTechnicalSanction(savedAbstractEstimate, i); return savedAbstractEstimate; } private AbstractEstimate populateAbstractEstimate(final LineEstimateDetails lineEstimateDetails) { final AbstractEstimate abstractEstimate = new AbstractEstimate(); abstractEstimate.setEstimateDate(lineEstimateDetails.getLineEstimate().getLineEstimateDate()); abstractEstimate.setEstimateNumber(lineEstimateDetails.getEstimateNumber()); abstractEstimate.setName(lineEstimateDetails.getNameOfWork()); abstractEstimate.setDescription(lineEstimateDetails.getNameOfWork()); abstractEstimate.setWard(lineEstimateDetails.getLineEstimate().getWard()); abstractEstimate.setNatureOfWork(lineEstimateDetails.getLineEstimate().getNatureOfWork()); if(lineEstimateDetails.getLineEstimate().getLocation() != null) abstractEstimate.setLocation(lineEstimateDetails.getLineEstimate().getLocation().getName()); abstractEstimate.setParentCategory(lineEstimateDetails.getLineEstimate().getTypeOfWork()); abstractEstimate.setCategory(lineEstimateDetails.getLineEstimate().getSubTypeOfWork()); abstractEstimate.setExecutingDepartment(lineEstimateDetails.getLineEstimate().getExecutingDepartment()); abstractEstimate.setWorkValue(lineEstimateDetails.getActualEstimateAmount().doubleValue()); abstractEstimate.setEstimateValue(lineEstimateDetails.getActualEstimateAmount()); abstractEstimate.setEgwStatus(egwStatusHibernateDAO.getStatusByModuleAndCode(WorksConstants.ABSTRACTESTIMATE, AbstractEstimate.EstimateStatus.ADMIN_SANCTIONED.toString())); abstractEstimate.setProjectCode(lineEstimateDetails.getProjectCode()); abstractEstimate.setApprovedDate(lineEstimateDetails.getLineEstimate().getTechnicalSanctionDate()); abstractEstimate.setLineEstimateDetails(lineEstimateDetails); abstractEstimate.addFinancialDetails(populateEstimateFinancialDetails(abstractEstimate)); abstractEstimate.addMultiYearEstimate(populateMultiYearEstimate(abstractEstimate)); return abstractEstimate; } private FinancialDetail populateEstimateFinancialDetails(final AbstractEstimate abstractEstimate) { final FinancialDetail financialDetail = new FinancialDetail(); financialDetail.setAbstractEstimate(abstractEstimate); financialDetail.setFund(abstractEstimate.getLineEstimateDetails().getLineEstimate().getFund()); financialDetail.setFunction(abstractEstimate.getLineEstimateDetails().getLineEstimate().getFunction()); financialDetail.setBudgetGroup(abstractEstimate.getLineEstimateDetails().getLineEstimate().getBudgetHead()); financialDetail.setScheme(abstractEstimate.getLineEstimateDetails().getLineEstimate().getScheme()); financialDetail.setSubScheme(abstractEstimate.getLineEstimateDetails().getLineEstimate().getSubScheme()); return financialDetail; } private MultiYearEstimate populateMultiYearEstimate(final AbstractEstimate abstractEstimate) { final MultiYearEstimate multiYearEstimate = new MultiYearEstimate(); multiYearEstimate.setAbstractEstimate(abstractEstimate); multiYearEstimate.setFinancialYear(financialYearHibernateDAO.getFinYearByDate(abstractEstimate.getEstimateDate())); multiYearEstimate.setPercentage(100); return multiYearEstimate; } private EstimateTechnicalSanction saveTechnicalSanction(final AbstractEstimate abstractEstimate, final int i) { final EstimateTechnicalSanction estimateTechnicalSanction = new EstimateTechnicalSanction(); estimateTechnicalSanction.setAbstractEstimate(abstractEstimate); final StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(abstractEstimate.getLineEstimateDetails().getLineEstimate().getTechnicalSanctionNumber()); if (i > 0) { stringBuilder.append("/"); stringBuilder.append(i); } estimateTechnicalSanction.setTechnicalSanctionNumber(stringBuilder.toString()); estimateTechnicalSanction .setTechnicalSanctionDate(abstractEstimate.getLineEstimateDetails().getLineEstimate().getTechnicalSanctionDate()); estimateTechnicalSanction .setTechnicalSanctionBy(abstractEstimate.getLineEstimateDetails().getLineEstimate().getTechnicalSanctionBy()); // TODO: move to cascade save with AbstractEstimate object once AbstractEstimate entity converted to JPA return estimateTechnicalSanctionService.save(estimateTechnicalSanction); } public AbstractEstimate getAbstractEstimateByEstimateNumber(final String estimateNumber) { return abstractEstimateRepository.findByEstimateNumberAndEgwStatus_codeNotLike(estimateNumber, AbstractEstimate.EstimateStatus.CANCELLED.toString()); } public AbstractEstimate getAbstractEstimateByEstimateNumberAndStatus(final String estimateNumber) { return abstractEstimateRepository.findByLineEstimateDetails_EstimateNumberAndEgwStatus_codeEquals(estimateNumber, AbstractEstimate.EstimateStatus.ADMIN_SANCTIONED.toString()); } public AbstractEstimate getAbstractEstimateByLineEstimateDetailsForCancelLineEstimate(final Long id) { return abstractEstimateRepository.findByLineEstimateDetails_IdAndEgwStatus_codeEquals(id, AbstractEstimate.EstimateStatus.ADMIN_SANCTIONED.toString()); } public List<User> getCreatedByForEstimatePhotograph() { return abstractEstimateRepository.findCreatedByForEstimatePhotograph( AbstractEstimate.EstimateStatus.TECH_SANCTIONED.toString()); } }