/* * 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.budget; import java.io.InputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.apache.commons.lang.StringUtils; 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.apache.struts2.interceptor.validation.SkipValidation; import org.egov.commons.CFinancialYear; import org.egov.commons.CFunction; import org.egov.commons.Fund; import org.egov.commons.dao.EgwStatusHibernateDAO; import org.egov.commons.dao.FinancialYearHibernateDAO; import org.egov.eis.entity.Assignment; import org.egov.eis.entity.Employee; import org.egov.eis.service.AssignmentService; import org.egov.eis.service.EisCommonService; import org.egov.eis.service.EmployeeService; import org.egov.eis.web.actions.workflow.GenericWorkFlowAction; import org.egov.infra.admin.master.entity.AppConfigValues; import org.egov.infra.admin.master.entity.Department; import org.egov.infra.admin.master.service.AppConfigValueService; import org.egov.infra.config.core.ApplicationThreadLocals; import org.egov.infra.exception.ApplicationRuntimeException; import org.egov.infra.reporting.engine.ReportService; import org.egov.infra.validation.exception.ValidationException; import org.egov.infra.workflow.entity.State; import org.egov.infra.workflow.entity.StateAware; import org.egov.infra.workflow.service.WorkflowService; import org.egov.infstr.services.PersistenceService; import org.egov.infstr.utils.EgovMasterDataCaching; import org.egov.model.budget.Budget; import org.egov.model.budget.BudgetDetail; import org.egov.model.budget.BudgetGroup; import org.egov.model.budget.BudgetProposalBean; import org.egov.model.voucher.WorkflowBean; import org.egov.pims.commons.Designation; import org.egov.pims.commons.Position; import org.egov.pims.service.EisUtilService; import org.egov.services.budget.BudgetDetailService; import org.egov.services.budget.BudgetService; import org.egov.services.voucher.VoucherService; import org.egov.utils.BudgetDetailHelper; import org.egov.utils.Constants; import org.egov.utils.FinancialConstants; import org.egov.utils.ReportHelper; import org.hibernate.HibernateException; import org.hibernate.Query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @ParentPackage("egov") @Results({ @Result(name = BudgetProposalAction.REPORTVIEW, location = "budgetProposal-reportview.jsp"), @Result(name = BudgetProposalAction.FAILURE, location = "budgetProposal-message.jsp"), @Result(name = Constants.DETAILLIST, location = "budgetProposal-" + Constants.DETAILLIST + ".jsp"), @Result(name = BudgetProposalAction.FAILURE, location = "budgetProposal-failure.jsp"), @Result(name = BudgetProposalAction.REPORTVIEW, type = "stream", location = "inputStream", params = { "contentType", "${contentType}", "contentDisposition", "attachment; filename=${fileName}" }) }) public class BudgetProposalAction extends GenericWorkFlowAction { private static final long serialVersionUID = 1L; private static final String ACTIONNAME = "actionName"; public static final String REPORTVIEW = "reportview"; private static final Logger LOGGER = Logger.getLogger(BudgetProposalAction.class); private BudgetProposalBean bpBean = new BudgetProposalBean(); private BudgetDetail budgetDetail; private Budget topBudget; private VoucherService voucherService; protected FinancialYearHibernateDAO financialYearDAO; protected String currentfinYearRange = ""; protected String nextfinYearRange = ""; protected String previousfinYearRange = ""; protected String twopreviousfinYearRange = ""; private List<BudgetDetail> budgetDetailList = new ArrayList<BudgetDetail>(); protected List<BudgetDetail> savedbudgetDetailList = new ArrayList<BudgetDetail>(); protected WorkflowBean workflowBean = new WorkflowBean(); @Autowired @Qualifier("budgetDetailService") protected BudgetDetailService budgetDetailService; protected BudgetService budgetService; private BudgetDetailHelper budgetDetailHelper; private Map<Long, String> previuosYearBudgetDetailMap = new HashMap<Long, String>(); private Map<Long, String> beforePreviousYearBudgetDetailMap = new HashMap<Long, String>(); private Map<String, BigDecimal> budgetDetailIdsAndAmount = new HashMap<String, BigDecimal>(); private Map<String, BigDecimal> previousYearBudgetDetailIdsAndAmount = new HashMap<String, BigDecimal>(); private Map<String, BigDecimal> twopreviousYearBudgetDetailIdsAndAmount = new HashMap<String, BigDecimal>(); private final Map<String, BigDecimal> uniqueNoAndBEMap = new HashMap<String, BigDecimal>(); private final Map<String, BigDecimal> uniqueNoAndApprMap = new HashMap<String, BigDecimal>(); private final Map<String, String> majorCodeAndNameMap = new TreeMap<String, String>(); private String wfitemstate; private Integer defaultDept; private Department department; private List<BudgetProposalBean> bpBeanList = new ArrayList<BudgetProposalBean>(); private static final String HEADING = "heading"; private static final String MAJORCODE = "majorcode"; private static final String DETAIL = "detail"; private static final String TOTAL = "total"; public static final String FAILURE = "failure"; private static final String SUCCESSFUL = "successful"; private Date asOndate; @Autowired @Qualifier("persistenceService") private PersistenceService persistenceService; @Autowired private AppConfigValueService appConfigValuesService; @Autowired private AssignmentService assignmentService; @Autowired private EmployeeService employeeService; @Autowired private EgwStatusHibernateDAO egwStatusHibernateDAO; private InputStream inputStream; private ReportHelper reportHelper; private Long docNo; protected WorkflowService<Budget> budgetWorkflowService; protected EisCommonService eisCommonService; private boolean consolidatedScreen; private boolean allfunctionsArrived; private Integer approverUserId; private Integer userId; private String comment; private String actionName = ""; private CFinancialYear financialYear; private CFinancialYear prevFinancialYear; private CFinancialYear nextFinancialYear; private CFinancialYear beforeLastFinancialYear; private boolean hod; private boolean asstFMU; private boolean functionHeading = true; private boolean deptHeading = true; private String functionsNotYetReceiced; private Map<Long, BudgetGroup> budgetGroupMap; private Map<Integer, Fund> fundMap; private Map<Long, CFunction> functionMap; private Map<Long, Department> deptMap; private List<AppConfigValues> excludelist = new ArrayList<AppConfigValues>(); protected EisUtilService eisService; // report private String contentType; private String fileName; private String amountField; private BigDecimal amount; private Long detailId; private String factor; private Long validId; private final BigDecimal bigThousand = new BigDecimal(1000); @Autowired private EgovMasterDataCaching masterDataCache; public void setReportService(final ReportService reportService) { } @Override public String execute() { try { super.execute(); } catch (final Exception e) { e.printStackTrace(); } return update(); } @Override public StateAware getModel() { return budgetDetail; } public void prepare() { super.prepare(); } @Action(value = "/budget/budgetProposal-modifyDetailList") public String modifyDetailList() { loadToMasterDataMap(); if (LOGGER.isInfoEnabled()) LOGGER.info("starting modifyDetailList..."); if (parameters.get("budgetDetail.budget.id")[0] != null) { budgetDetail = (BudgetDetail) persistenceService.find("from BudgetDetail where budget.id=?", Long.valueOf(parameters.get("budgetDetail.budget.id")[0])); setTopBudget(budgetDetail.getBudget()); } /* * computePreviousYearRange(); computeTwopreviousYearRange(); */ financialYear = topBudget.getFinancialYear(); currentfinYearRange = financialYear.getFinYearRange(); nextFinancialYear = getFinancialYearDAO().getNextFinancialYearByDate(financialYear.getStartingDate()); nextfinYearRange = nextFinancialYear.getFinYearRange(); prevFinancialYear = getFinancialYearDAO().getPreviousFinancialYearByDate(financialYear.getStartingDate()); previousfinYearRange = prevFinancialYear.getFinYearRange(); beforeLastFinancialYear = getFinancialYearDAO().getTwoPreviousYearByDate(financialYear.getStartingDate()); twopreviousfinYearRange = beforeLastFinancialYear.getFinYearRange(); budgetDetailApprove(); // loadApproverUser(savedbudgetDetailList); if (LOGGER.isInfoEnabled()) LOGGER.info("completed modifyDetailList"); /* return Constants.DETAILLIST; */ setDocNo(budgetDetail.getDocumentNumber()); return Constants.DETAILLIST; } @Action(value = "/budget/budgetProposal-modifyBudgetDetailList") public String modifyBudgetDetailList() { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting modifyBudgetDetailList.............."); populateBudgetDetailReport(); loadApproverUser(budgetDetailList); return Constants.DETAILLIST; } private void populateBudgetDetailReport() { loadToMasterDataMap(); if (budgetDetail.getBudget().getId() != null) /* topBudget = budgetService.find("from Budget where id=?", budgetDetail.getBudget().getId()); */ budgetDetail = (BudgetDetail) persistenceService.find("from BudgetDetail where budget.id=?", Long.valueOf(parameters.get("budgetDetail.budget.id")[0])); consolidatedScreen = budgetDetailService.toBeConsolidated(); hod = isHOD(); if (hod) allfunctionsArrived = validateForAllFunctionsMappedForDept(topBudget, getPosition()); financialYear = topBudget.getFinancialYear(); currentfinYearRange = financialYear.getFinYearRange(); nextFinancialYear = getFinancialYearDAO().getNextFinancialYearByDate(financialYear.getStartingDate()); nextfinYearRange = nextFinancialYear.getFinYearRange(); prevFinancialYear = getFinancialYearDAO().getPreviousFinancialYearByDate(financialYear.getStartingDate()); previousfinYearRange = prevFinancialYear.getFinYearRange(); beforeLastFinancialYear = getFinancialYearDAO().getTwoPreviousYearByDate(financialYear.getStartingDate()); twopreviousfinYearRange = beforeLastFinancialYear.getFinYearRange(); budgetApprove(); loadApproverUser(budgetDetailList); } @Override public List<String> getValidActions() { List<String> validActions = Collections.emptyList(); if ((budgetDetail.getId() == null) || (budgetDetail.getId() == 0)) validActions = Arrays.asList(FinancialConstants.BUTTONSAVE, FinancialConstants.BUTTONFORWARD); else if (budgetDetail.getCurrentState() != null) validActions = customizedWorkFlowService.getNextValidActions(budgetDetail.getStateType(), getWorkFlowDepartment(), getAmountRule(), getAdditionalRule(), budgetDetail.getCurrentState().getValue(), getPendingActions(), budgetDetail.getCreatedDate()); else if ((budgetDetail.getId() == null) || (budgetDetail.getId() == 0) || budgetDetail.getCurrentState().getValue().endsWith("NEW")) // read from constant validActions = Arrays.asList(FinancialConstants.BUTTONFORWARD); return validActions; } private void loadToMasterDataMap() { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting loadToMasterDataMap...... "); final List<BudgetGroup> bgList = masterDataCache.get("egf-budgetGroup"); budgetGroupMap = new HashMap<Long, BudgetGroup>(); for (final BudgetGroup bg : bgList) budgetGroupMap.put(bg.getId(), bg); final List<CFunction> fnList = masterDataCache.get("egi-function"); functionMap = new HashMap<Long, CFunction>(); for (final CFunction fn : fnList) functionMap.put(fn.getId(), fn); final List<Fund> fundList = masterDataCache.get("egi-fund"); fundMap = new HashMap<Integer, Fund>(); for (final Fund f : fundList) fundMap.put(f.getId(), f); final List<Department> deptList = masterDataCache.get("egi-department"); deptMap = new HashMap<Long, Department>(); for (final Department d : deptList) deptMap.put(d.getId().longValue(), d); excludelist = appConfigValuesService.getConfigValuesByModuleAndKey(Constants.EGF, "exclude_status_forbudget_actual"); if (excludelist.isEmpty()) throw new ValidationException("", "exclude_status_forbudget_actual is not defined in AppConfig"); if (LOGGER.isInfoEnabled()) LOGGER.info("Finished loadToMasterDataMap...... "); } @SkipValidation public String ajaxUpdateBudgetDetail() { if (validateOwner()) { if (factor.equalsIgnoreCase(bigThousand.toString())) amount = amount.multiply(bigThousand); final String query = "update egf_budgetdetail set " + amountField + "=:amount,Modifiedby=:modifiedby,modifieddate=:modifiedate where id=:detailId"; if (LOGGER.isInfoEnabled()) LOGGER.info(query); final Query updateQuery = persistenceService.getSession().createSQLQuery(query) .setBigDecimal("amount", amount).setLong("detailId", detailId) .setDate("modifiedate", new java.sql.Date(new Date().getTime())) .setInteger("modifiedby", ApplicationThreadLocals.getUserId().intValue()); final int executeUpdate = updateQuery.executeUpdate(); if (executeUpdate == 1) return SUCCESSFUL; else return FAILURE; } else return FAILURE; } @Action(value = "/budget/budgetProposal-ajaxDeleteBudgetDetail") public String ajaxDeleteBudgetDetail() { try { if ((bpBean.getId() != null) && (bpBean.getNextYrId() != null)) { persistenceService.getSession().createSQLQuery("delete from egf_budgetdetail where id in (" + bpBean.getId() + "," + bpBean.getNextYrId() + ")").executeUpdate(); persistenceService.getSession().flush(); } } catch (final HibernateException e) { if (LOGGER.isDebugEnabled()) LOGGER.debug("error while deleting"); return FAILURE; } return SUCCESSFUL; } public boolean isHod() { return hod; } public void setHod(final boolean hod) { this.hod = hod; } public void budgetDetailApprove() { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting budgetDetailApprove().............."); // if u want only selected function centre filter here by owner fecthing // logic to be changed only final String query = " from BudgetDetail bd where bd.budget=? and (state.value='END' or state.ownerPosition=?) and bd.function=" + budgetDetail.getFunction().getId() + " order by bd.function.name,bd.budgetGroup.name"; savedbudgetDetailList = budgetDetailService.findAllBy(query, topBudget, getPosition()); // check what actuals needs to be shown for next year be AND possible // remove if /* * CFinancialYear previousYearFor = budgetDetailHelper.getPreviousYearFor(topBudget.getFinancialYear()); */ if (!savedbudgetDetailList.isEmpty()) { populateMajorCodewiseData(); populateNextYrBEinBudgetDetailList(); populateMajorCodewiseDetailData(); } if (LOGGER.isInfoEnabled()) LOGGER.info("finished loading detail List--------------------------------------------------------------"); } public void budgetApprove() { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting budgetApprove.............."); final List<CFunction> functionList = persistenceService.findAllBy( "select distinct f from BudgetDetail bd inner join bd.function as f where budget=? order by f.name ", topBudget); populateMajorCodewiseDataAcrossFunction(); int i = 0; for (final CFunction function : functionList) { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting budgetDetailApprove...for functin ....centre......." + function.getName() + " count " + ++i); budgetDetail = (BudgetDetail) persistenceService.find( "from BudgetDetail where budget=? and function=? order by budgetGroup.name", topBudget, function); budgetDetailApprove(); if (LOGGER.isInfoEnabled()) LOGGER.info("Finished budgetDetailApprove...for functin ....centre......." + function.getName()); } if (LOGGER.isInfoEnabled()) LOGGER.info("Finished budgetApprove"); } private void populateMajorCodewiseData() { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting populateMajorCodewiseData()..........."); final Map<String, BigDecimal> majorCodeAndCurrentActuals = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndPreviousActuals = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndBeforePreviousActuals = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndBEMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndAppropriationMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndAnticipatoryMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndOriginalMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndBENextYrMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndApprovedMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndBENextYrApprovedMap = new HashMap<String, BigDecimal>(); final Position pos = getPosition(); majorCodeAndNameMap.clear(); final List<Object[]> resultMajorCode = budgetDetailService.fetchMajorCodeAndName(topBudget, budgetDetail, budgetDetail.getFunction(), pos); addToMap(resultMajorCode, majorCodeAndNameMap); final List<Object[]> resultCurrentActuals = budgetDetailService.fetchMajorCodeAndActuals(financialYear, topBudget, asOndate, budgetDetail.getFunction(), budgetDetail.getExecutingDepartment(), pos); addToMapStringBigDecimal(resultCurrentActuals, majorCodeAndCurrentActuals); final List<Object[]> resultPreviousActuals = budgetDetailService.fetchMajorCodeAndActuals(prevFinancialYear, topBudget, null, budgetDetail.getFunction(), budgetDetail.getExecutingDepartment(), pos); addToMapStringBigDecimal(resultPreviousActuals, majorCodeAndPreviousActuals); final List<Object[]> resultBeforePreviousActuals = budgetDetailService.fetchMajorCodeAndActuals( beforeLastFinancialYear, topBudget, null, budgetDetail.getFunction(), budgetDetail.getExecutingDepartment(), pos); addToMapStringBigDecimal(resultBeforePreviousActuals, majorCodeAndBeforePreviousActuals); final List<Object[]> resultMajorCodeBE = budgetDetailService.fetchMajorCodeAndBEAmount(topBudget, budgetDetail, budgetDetail.getFunction(), pos); addToMapStringBigDecimal(resultMajorCodeBE, majorCodeAndBEMap); final List<Object[]> resultMajorCodeAppropriation = budgetDetailService .fetchMajorCodeAndAppropriation(topBudget, budgetDetail, budgetDetail.getFunction(), pos, asOndate); addToMapStringBigDecimal(resultMajorCodeAppropriation, majorCodeAndAppropriationMap); final List<Object[]> resultMajorCodeAncipatory = budgetDetailService.fetchMajorCodeAndAnticipatory(topBudget, budgetDetail, budgetDetail.getFunction(), pos); // addToMapStringBigDecimal(resultMajorCodeAncipatory,majorCodeAndAnticipatoryMap,majorCodeAndOriginalMap,majorCodeAndApprovedMap); for (final Object[] row : resultMajorCodeAncipatory) { majorCodeAndAnticipatoryMap.put(row[0].toString(), ((BigDecimal) row[1]).setScale(2)); majorCodeAndOriginalMap.put(row[0].toString(), ((BigDecimal) row[2]).setScale(2)); majorCodeAndApprovedMap.put(row[0].toString(), ((BigDecimal) row[3]).setScale(2)); } // List<Object[]> resultMajorCodeOriginal = // budgetDetailService.fetchMajorCodeAndOriginalAmount(topBudget, // budgetDetail, // budgetDetail.getFunction(), pos); // addToMapStringBigDecimal(resultMajorCodeOriginal,majorCodeAndOriginalMap); final List<Object[]> resultMajorCodeBENextYr = budgetDetailService.fetchMajorCodeAndBENextYr(topBudget, budgetDetail, budgetDetail.getFunction(), pos); // addToMapStringBigDecimal(resultMajorCodeBENextYr,majorCodeAndBENextYrMap,majorCodeAndBENextYrApprovedMap); for (final Object[] row : resultMajorCodeBENextYr) { majorCodeAndBENextYrMap.put(row[0].toString(), ((BigDecimal) row[1]).setScale(2)); majorCodeAndBENextYrApprovedMap.put(row[0].toString(), ((BigDecimal) row[2]).setScale(2)); } // List<Object[]> resultMajorCodeApproved = // budgetDetailService.fetchMajorCodeAndApprovedAmount(topBudget, // budgetDetail, // budgetDetail.getFunction(), pos); // addToMapStringBigDecimal(resultMajorCodeApproved,majorCodeAndApprovedMap); // List<Object[]> resultMajorCodeBENextYrApproved = // budgetDetailService.fetchMajorCodeAndBENextYrApproved(topBudget, // budgetDetail, budgetDetail.getFunction(), pos); // addToMapStringBigDecimal(resultMajorCodeBENextYrApproved,majorCodeAndBENextYrApprovedMap); if (deptHeading) { bpBeanList.add(new BudgetProposalBean(budgetDetail.getExecutingDepartment().getName(), HEADING)); deptHeading = false; } if (functionHeading) { bpBeanList.add(new BudgetProposalBean("FUNCTIONWISE BUDGET SUMMARY", HEADING)); functionHeading = false; } bpBeanList.add(new BudgetProposalBean("FUNCTION CENTRE-" + budgetDetail.getFunction().getName(), HEADING)); final BudgetProposalBean bpbeanTotal = new BudgetProposalBean(); for (final Map.Entry<String, String> entry : majorCodeAndNameMap.entrySet()) { final String formValue = getAppConfigValueByKey("functionWiseBudgetReport-" + entry.getKey()); final BudgetProposalBean bpbean = new BudgetProposalBean(); bpbean.setReference(formValue); bpbean.setRowType(MAJORCODE); bpbean.setBudgetGroup(entry.getValue()); bpbean.setCurrentYearActuals( majorCodeAndCurrentActuals.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndCurrentActuals.get(entry.getKey()).toString()); bpbean.setPreviousYearActuals( majorCodeAndPreviousActuals.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndPreviousActuals.get(entry.getKey()).toString()); bpbean.setTwoPreviousYearActuals(majorCodeAndBeforePreviousActuals.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndBeforePreviousActuals.get(entry.getKey()).toString()); bpbean.setCurrentYearBE(majorCodeAndBEMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndBEMap.get(entry.getKey()).toString()); bpbean.setReappropriation( majorCodeAndAppropriationMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndAppropriationMap.get(entry.getKey()).toString()); bpbean.setTotal(new BigDecimal(bpbean.getCurrentYearBE()).add(new BigDecimal(bpbean.getReappropriation())) .toString()); bpbean.setAnticipatory( majorCodeAndAnticipatoryMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndAnticipatoryMap.get(entry.getKey()).toString()); bpbean.setProposedRE(majorCodeAndOriginalMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2) : majorCodeAndOriginalMap.get(entry.getKey())); bpbean.setProposedBE(majorCodeAndBENextYrMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2) : majorCodeAndBENextYrMap.get(entry.getKey())); bpbean.setApprovedRE(majorCodeAndApprovedMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2) : majorCodeAndApprovedMap.get(entry.getKey())); bpbean.setApprovedBE(majorCodeAndBENextYrApprovedMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2) : majorCodeAndBENextYrApprovedMap.get(entry.getKey())); bpBeanList.add(bpbean); computeTotal(bpbeanTotal, bpbean); } bpBeanList.add(bpbeanTotal); if (LOGGER.isInfoEnabled()) LOGGER.info("Finished populateMajorCodewiseData()"); } void populateMajorCodewiseDataAcrossFunction() { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting populateMajorCodewiseDataAcrossFunction.............."); final Map<String, BigDecimal> majorCodeAndCurrentActuals = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndPreviousActuals = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndBeforePreviousActuals = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndBEMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndAppropriationMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndAnticipatoryMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndOriginalMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndBENextYrMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndApprovedMap = new HashMap<String, BigDecimal>(); final Map<String, BigDecimal> majorCodeAndBENextYrApprovedMap = new HashMap<String, BigDecimal>(); final Position pos = getPosition(); final List<Object[]> resultMajorCode = budgetDetailService.fetchMajorCodeAndName(topBudget, budgetDetail, null, pos); addToMap(resultMajorCode, majorCodeAndNameMap); final List<Object[]> resultCurrentActuals = budgetDetailService.fetchMajorCodeAndActuals(financialYear, topBudget, asOndate, null, budgetDetail.getExecutingDepartment(), pos); addToMapStringBigDecimal(resultCurrentActuals, majorCodeAndCurrentActuals); final List<Object[]> resultPreviousActuals = budgetDetailService.fetchMajorCodeAndActuals(prevFinancialYear, topBudget, null, null, budgetDetail.getExecutingDepartment(), pos); addToMapStringBigDecimal(resultPreviousActuals, majorCodeAndPreviousActuals); final List<Object[]> resultBeforePreviousActuals = budgetDetailService.fetchMajorCodeAndActuals( beforeLastFinancialYear, topBudget, null, null, budgetDetail.getExecutingDepartment(), pos); addToMapStringBigDecimal(resultBeforePreviousActuals, majorCodeAndBeforePreviousActuals); final List<Object[]> resultMajorCodeBE = budgetDetailService.fetchMajorCodeAndBEAmount(topBudget, budgetDetail, null, pos); addToMapStringBigDecimal(resultMajorCodeBE, majorCodeAndBEMap); final List<Object[]> resultMajorCodeAppropriation = budgetDetailService .fetchMajorCodeAndAppropriation(topBudget, budgetDetail, null, pos, asOndate); addToMapStringBigDecimal(resultMajorCodeAppropriation, majorCodeAndAppropriationMap); budgetDetailService.fetchMajorCodeAndAnticipatory(topBudget, budgetDetail, null, pos); addToMapStringBigDecimal(resultMajorCodeAppropriation, majorCodeAndAnticipatoryMap); final List<Object[]> resultMajorCodeOriginal = budgetDetailService.fetchMajorCodeAndOriginalAmount(topBudget, budgetDetail, null, pos); addToMapStringBigDecimal(resultMajorCodeOriginal, majorCodeAndOriginalMap); final List<Object[]> resultMajorCodeBENextYr = budgetDetailService.fetchMajorCodeAndBENextYr(topBudget, budgetDetail, null, pos); addToMapStringBigDecimal(resultMajorCodeBENextYr, majorCodeAndBENextYrMap); final List<Object[]> resultMajorCodeApproved = budgetDetailService.fetchMajorCodeAndApprovedAmount(topBudget, budgetDetail, null, pos); addToMapStringBigDecimal(resultMajorCodeApproved, majorCodeAndApprovedMap); final List<Object[]> resultMajorCodeBENextYrApproved = budgetDetailService .fetchMajorCodeAndBENextYrApproved(topBudget, budgetDetail, null, pos); addToMapStringBigDecimal(resultMajorCodeBENextYrApproved, majorCodeAndBENextYrApprovedMap); bpBeanList.add(new BudgetProposalBean(budgetDetail.getExecutingDepartment().getName(), HEADING)); deptHeading = false; bpBeanList.add(new BudgetProposalBean("DEPARTMENTWISE BUDGET SUMMARY", HEADING)); // bpBeanList.add(new BudgetProposalBean("FUNCTIONWISE EXPENSE BUDGET // SUMMARY", this.HEADING)); // bpBeanList.add(new BudgetProposalBean("FUNCTION // CENTRE-"+budgetDetail.getFunction().getName(), this.HEADING)); final BudgetProposalBean bpbeanTotal = new BudgetProposalBean(); for (final Map.Entry<String, String> entry : majorCodeAndNameMap.entrySet()) { final String formValue = getAppConfigValueByKey("functionWiseBudgetReport-" + entry.getKey()); final BudgetProposalBean bpbean = new BudgetProposalBean(); bpbean.setReference(formValue); bpbean.setRowType(MAJORCODE); bpbean.setBudgetGroup(entry.getValue()); bpbean.setCurrentYearActuals( majorCodeAndCurrentActuals.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndCurrentActuals.get(entry.getKey()).toString()); bpbean.setPreviousYearActuals( majorCodeAndPreviousActuals.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndPreviousActuals.get(entry.getKey()).toString()); bpbean.setTwoPreviousYearActuals(majorCodeAndBeforePreviousActuals.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndBeforePreviousActuals.get(entry.getKey()).toString()); bpbean.setCurrentYearBE(majorCodeAndBEMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndBEMap.get(entry.getKey()).toString()); bpbean.setReappropriation( majorCodeAndAppropriationMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndAppropriationMap.get(entry.getKey()).toString()); bpbean.setTotal(new BigDecimal(bpbean.getCurrentYearBE()).add(new BigDecimal(bpbean.getReappropriation())) .toString()); bpbean.setAnticipatory( majorCodeAndAnticipatoryMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2).toString() : majorCodeAndAnticipatoryMap.get(entry.getKey()).toString()); bpbean.setProposedRE(majorCodeAndOriginalMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2) : majorCodeAndOriginalMap.get(entry.getKey())); bpbean.setProposedBE(majorCodeAndBENextYrMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2) : majorCodeAndBENextYrMap.get(entry.getKey())); bpbean.setApprovedRE(majorCodeAndApprovedMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2) : majorCodeAndApprovedMap.get(entry.getKey())); bpbean.setApprovedBE(majorCodeAndBENextYrApprovedMap.get(entry.getKey()) == null ? BigDecimal.ZERO.setScale(2) : majorCodeAndBENextYrApprovedMap.get(entry.getKey())); bpBeanList.add(bpbean); computeTotal(bpbeanTotal, bpbean); } bpBeanList.add(bpbeanTotal); if (LOGGER.isInfoEnabled()) LOGGER.info("Finished populateMajorCodewiseDataAcrossFunction"); } void populateMajorCodewiseDetailData() { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting populateMajorCodewiseDetailData()................"); final List<String> mandatoryFields = new ArrayList<String>(); mandatoryFields.add("fund"); mandatoryFields.add("function"); mandatoryFields.add("executingDepartment"); final Position pos = getPosition(); final CFinancialYear financialYear = topBudget.getFinancialYear(); final CFinancialYear lastFinancialYearByDate = getFinancialYearDAO() .getPreviousFinancialYearByDate(financialYear.getStartingDate()); final CFinancialYear beforeLastFinancialYearByDate = getFinancialYearDAO() .getTwoPreviousYearByDate(financialYear.getStartingDate()); final List<Object[]> resultCurrentActuals = budgetDetailService.fetchActualsForFinYear(financialYear, mandatoryFields, topBudget, null, asOndate, budgetDetail.getExecutingDepartment().getId().intValue(), budgetDetail.getFunction().getId(), excludelist); addToMapStringBigDecimal(resultCurrentActuals, budgetDetailIdsAndAmount); final List<Object[]> resultPreviousActuals = budgetDetailService.fetchActualsForFinYear(lastFinancialYearByDate, mandatoryFields, topBudget, null, null, budgetDetail.getExecutingDepartment().getId().intValue(), budgetDetail.getFunction().getId(), excludelist); addToMapStringBigDecimal(resultPreviousActuals, previousYearBudgetDetailIdsAndAmount); final List<Object[]> resultTwoPreviousActuals = budgetDetailService.fetchActualsForFinYear( beforeLastFinancialYearByDate, mandatoryFields, topBudget, null, null, budgetDetail.getExecutingDepartment().getId().intValue(), budgetDetail.getFunction().getId(), excludelist); addToMapStringBigDecimal(resultTwoPreviousActuals, twopreviousYearBudgetDetailIdsAndAmount); final List<Object[]> resultUniqueNoBE = budgetDetailService.fetchUniqueNoAndBEAmount(topBudget, budgetDetail, budgetDetail.getFunction(), pos); addToMapStringBigDecimal(resultUniqueNoBE, uniqueNoAndBEMap); final List<Object[]> resultUniqueNoAppr = budgetDetailService.fetchUniqueNoAndApprAmount(topBudget, budgetDetail, budgetDetail.getFunction(), pos); addToMapStringBigDecimal(resultUniqueNoAppr, uniqueNoAndApprMap); for (final Map.Entry<String, String> entry : majorCodeAndNameMap.entrySet()) { final String formValue = getAppConfigValueByKey("functionWiseBudgetReport-" + entry.getKey()); boolean detailExist = false; boolean headerAdded = false; final BudgetProposalBean bpbeanTotal = new BudgetProposalBean(); for (final BudgetDetail bd : savedbudgetDetailList) if (entry.getKey().equals(bd.getBudgetGroup().getMinCode().getMajorCode())) { detailExist = true; if (!headerAdded) { bpBeanList.add(new BudgetProposalBean(entry.getValue(), HEADING, formValue)); headerAdded = true; } final BudgetProposalBean bpbean = new BudgetProposalBean(); populateBudgetProposalBean(bpbean, bd); if (LOGGER.isDebugEnabled()) LOGGER.debug(bd.getUniqueNo() + "---" + budgetDetailIdsAndAmount.get(bd.getUniqueNo())); bpBeanList.add(bpbean); computeTotal(bpbeanTotal, bpbean); } if (detailExist) bpBeanList.add(bpbeanTotal); } if (LOGGER.isInfoEnabled()) LOGGER.info("Finished populateMajorCodewiseDetailData()"); } private void populateBudgetProposalBean(final BudgetProposalBean bpbean, final BudgetDetail bd) { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting populateBudgetProposalBean..... "); bpbean.setRowType(DETAIL); bpbean.setId(bd.getId()); bpbean.setNextYrId(bd.getNextYrId()); bpbean.setBudget(topBudget.getName()); bpbean.setFund(fundMap.get(bd.getFund().getId()).getName()); bpbean.setFunction(functionMap.get(bd.getFunction().getId()).getName()); bpbean.setBudgetGroup(budgetGroupMap.get(bd.getBudgetGroup().getId()).getName()); bpbean.setExecutingDepartment(deptMap.get(bd.getExecutingDepartment().getId()).getCode()); bpbean.setPreviousYearActuals(previousYearBudgetDetailIdsAndAmount.get(bd.getUniqueNo()) == null ? BigDecimal.ZERO.setScale(2).toString() : previousYearBudgetDetailIdsAndAmount.get(bd.getUniqueNo()).toString()); bpbean.setTwoPreviousYearActuals(twopreviousYearBudgetDetailIdsAndAmount.get(bd.getUniqueNo()) == null ? BigDecimal.ZERO.setScale(2).toString() : twopreviousYearBudgetDetailIdsAndAmount.get(bd.getUniqueNo()).toString()); bpbean.setCurrentYearActuals(budgetDetailIdsAndAmount.get(bd.getUniqueNo()) == null ? BigDecimal.ZERO.setScale(2).toString() : budgetDetailIdsAndAmount.get(bd.getUniqueNo()).toString()); final BigDecimal lastBEAmount = uniqueNoAndBEMap.get(bd.getUniqueNo()) == null ? BigDecimal.ZERO.setScale(2) : uniqueNoAndBEMap.get(bd.getUniqueNo()); final BigDecimal approvedReAppropriationsTotal = uniqueNoAndApprMap.get(bd.getUniqueNo()) == null ? BigDecimal.ZERO.setScale(2) : uniqueNoAndApprMap.get(bd.getUniqueNo()); bpbean.setCurrentYearBE(lastBEAmount.toString()); bpbean.setReappropriation(approvedReAppropriationsTotal.toString()); bpbean.setTotal(lastBEAmount.add(approvedReAppropriationsTotal).toString()); bpbean.setAnticipatory(bd.getAnticipatoryAmount().setScale(2).toString()); bpbean.setProposedRE(bd.getOriginalAmount().setScale(2)); bpbean.setProposedBE(bd.getNextYroriginalAmount().setScale(2)); bpbean.setApprovedRE(bd.getApprovedAmount().setScale(2)); bpbean.setApprovedBE(bd.getNextYrapprovedAmount().setScale(2)); if (LOGGER.isInfoEnabled()) LOGGER.info("before bd.getstate().getExtraInfo1()"); // bpbean.setRemarks(bd.getstate().getExtraInfo1()); if (LOGGER.isInfoEnabled()) LOGGER.info("Finished populateBudgetProposalBean..... "); } private Map<String, String> addToMap(final List<Object[]> tempList, final Map<String, String> resultMap) { for (final Object[] row : tempList) resultMap.put(row[0].toString(), row[1].toString()); return resultMap; } private Map<String, BigDecimal> addToMapStringBigDecimal(final List<Object[]> tempList, final Map<String, BigDecimal> resultMap) { for (final Object[] row : tempList) resultMap.put(row[0].toString(), ((BigDecimal) row[1]).setScale(2)); return resultMap; } public void populateNextYrBEinBudgetDetailList() { if (LOGGER.isInfoEnabled()) LOGGER.info("starting populateNextYrBEinBudgetDetailList.................."); if (!savedbudgetDetailList.isEmpty()) for (final BudgetDetail budgetDetail : savedbudgetDetailList) { final BudgetDetail nextYrbudgetDetail = (BudgetDetail) persistenceService.find( "from BudgetDetail where uniqueNo=? and budget.referenceBudget=?", budgetDetail.getUniqueNo(), budgetDetail.getBudget()); // budgetDetail.setNextYrId(nextYrbudgetDetail.getId()); budgetDetail.setNextYroriginalAmount(nextYrbudgetDetail.getOriginalAmount()); budgetDetail.setNextYrapprovedAmount(nextYrbudgetDetail.getApprovedAmount()); budgetDetail.setNextYrId(nextYrbudgetDetail.getId()); } if (LOGGER.isInfoEnabled()) LOGGER.info("Completed populateNextYrBEinBudgetDetailList"); } @SkipValidation private void loadApproverUser(final List<BudgetDetail> budgetDetailList) { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting loadApproverUser....."); final Map<String, Object> map = voucherService.getDesgBYPassingWfItem("BudgetDetail.nextDesg", null, budgetDetail.getExecutingDepartment().getId().intValue()); addDropdownData("departmentList", masterDataCache.get("egi-department")); addDropdownData("designationList", Collections.EMPTY_LIST); addDropdownData("userList", Collections.EMPTY_LIST); final List<Map<String, Object>> desgList = (List<Map<String, Object>>) map.get("designationList"); String strDesgId = "", dName = ""; boolean bDefaultDeptId = false; final List<Map<String, Object>> designationList = new ArrayList<Map<String, Object>>(); Map<String, Object> desgFuncryMap; for (final Map<String, Object> desgIdAndName : desgList) { desgFuncryMap = new HashMap<String, Object>(); if (desgIdAndName.get("designationName") != null) desgFuncryMap.put("designationName", desgIdAndName.get("designationName")); if (desgIdAndName.get("designationId") != null) { strDesgId = (String) desgIdAndName.get("designationId"); if (strDesgId.indexOf("~") != -1) { strDesgId = strDesgId.substring(0, strDesgId.indexOf('~')); dName = (String) desgIdAndName.get("designationId"); dName = dName.substring(dName.indexOf('~') + 1); bDefaultDeptId = true; } desgFuncryMap.put("designationId", strDesgId); } designationList.add(desgFuncryMap); } map.put("designationList", designationList); addDropdownData("designationList", (List<Designation>) map.get("designationList")); if (bDefaultDeptId && !dName.equals("")) { final Department dept = (Department) persistenceService .find("from Department where deptName like '%" + dName + "' "); defaultDept = dept.getId().intValue(); } wfitemstate = map.get("wfitemstate") != null ? map.get("wfitemstate").toString() : ""; if (LOGGER.isInfoEnabled()) LOGGER.info("finished loadApproverUser....."); } public boolean isConsolidatedScreen() { return consolidatedScreen; } public void setConsolidatedScreen(final boolean consolidated) { consolidatedScreen = consolidated; } public boolean isAllfunctionsArrived() { return allfunctionsArrived; } public void setAllfunctionsArrived(final boolean allfunctionsArrived) { this.allfunctionsArrived = allfunctionsArrived; } public Integer getApproverUserId() { return approverUserId; } public void setApproverUserId(final Integer approverUserId) { this.approverUserId = approverUserId; } public String getComment() { return comment; } public void setComment(final String comment) { this.comment = comment; } public String getActionName() { return actionName; } public void setActionName(final String actionName) { this.actionName = actionName; } public void setBudgetWorkflowService(final WorkflowService<Budget> budgetWorkflowService) { this.budgetWorkflowService = budgetWorkflowService; } public void setEisCommonService(final EisCommonService eisCommonService) { this.eisCommonService = eisCommonService; } public Date subtractYear(final Date date) { final Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.YEAR, -1); return cal.getTime(); } private String getAppConfigValueByKey(final String key) { final List<AppConfigValues> appList = appConfigValuesService.getConfigValuesByModuleAndKey("EGF", key); String appValue = "-1"; if (appList.isEmpty()) appValue = " "; else appValue = appList.get(0).getValue(); return appValue; } void computeTotal(final BudgetProposalBean bpbeanTotal, final BudgetProposalBean bpbean) { if (LOGGER.isInfoEnabled()) LOGGER.info("Starting computeTotal................"); bpbeanTotal .setPreviousYearActuals(bpbeanTotal.getPreviousYearActuals() == null ? bpbean.getPreviousYearActuals() : new BigDecimal(bpbeanTotal.getPreviousYearActuals()) .add(new BigDecimal(bpbean.getPreviousYearActuals())).toString()); bpbeanTotal.setTwoPreviousYearActuals( bpbeanTotal.getTwoPreviousYearActuals() == null ? bpbean.getTwoPreviousYearActuals() : new BigDecimal(bpbeanTotal.getTwoPreviousYearActuals()) .add(new BigDecimal(bpbean.getTwoPreviousYearActuals())).toString()); bpbeanTotal.setCurrentYearActuals(bpbeanTotal.getCurrentYearActuals() == null ? bpbean.getCurrentYearActuals() : new BigDecimal(bpbeanTotal.getCurrentYearActuals()) .add(new BigDecimal(bpbean.getCurrentYearActuals())).toString()); bpbeanTotal.setCurrentYearBE(bpbeanTotal.getCurrentYearBE() == null ? bpbean.getCurrentYearBE() : new BigDecimal(bpbeanTotal.getCurrentYearBE()).add(new BigDecimal(bpbean.getCurrentYearBE())) .toString()); bpbeanTotal.setReappropriation(bpbeanTotal.getReappropriation() == null ? bpbean.getReappropriation() : new BigDecimal(bpbeanTotal.getReappropriation()).add(new BigDecimal(bpbean.getReappropriation())) .toString()); bpbeanTotal.setTotal(bpbeanTotal.getTotal() == null ? bpbean.getTotal() : new BigDecimal(bpbeanTotal.getTotal()).add(new BigDecimal(bpbean.getTotal())).toString()); bpbeanTotal.setAnticipatory(bpbeanTotal.getAnticipatory() == null ? bpbean.getAnticipatory() : new BigDecimal(bpbeanTotal.getAnticipatory()).add(new BigDecimal(bpbean.getAnticipatory())) .toString()); bpbeanTotal.setProposedRE(bpbeanTotal.getProposedRE() == null ? bpbean.getProposedRE() : bpbeanTotal.getProposedRE().add(bpbean.getProposedRE()).setScale(2)); bpbeanTotal.setProposedBE(bpbeanTotal.getProposedBE() == null ? bpbean.getProposedBE() : bpbeanTotal.getProposedBE().add(bpbean.getProposedBE()).setScale(2)); bpbeanTotal.setApprovedRE(bpbeanTotal.getApprovedRE() == null ? bpbean.getApprovedRE() : bpbeanTotal.getApprovedRE().add(bpbean.getApprovedRE()).setScale(2)); bpbeanTotal.setApprovedBE(bpbeanTotal.getApprovedBE() == null ? bpbean.getApprovedBE() : bpbeanTotal.getApprovedBE().add(bpbean.getApprovedBE()).setScale(2)); bpbeanTotal.setRowType(TOTAL); bpbeanTotal.setBudgetGroup("TOTAL"); if (LOGGER.isInfoEnabled()) LOGGER.info("Finished computeTotal"); } @SkipValidation @Action(value = "/budget/budgetProposal-update") public String update() { // Only save the items if (LOGGER.isDebugEnabled()) LOGGER.debug("Stating updation ....."); if ((approverUserId != null) && (approverUserId != -1)) userId = approverUserId; else userId = ApplicationThreadLocals.getUserId().intValue(); for (final BudgetProposalBean bpBean : bpBeanList) { if ((bpBean == null) || (bpBean.getId() == null)) continue; budgetDetail = budgetDetailService.find("from BudgetDetail where id=?", bpBean.getId()); break; } final List<Assignment> assignment = assignmentService.findAllAssignmentsByHODDeptAndDates( budgetDetail.getExecutingDepartment().getId(), budgetDetail.getBudget().getAsOnDate()); if (!assignment.isEmpty()) approverPositionId = assignment.get(0).getPosition().getId(); populateWorkflowBean(); eisCommonService.getPositionByUserId(userId.longValue()); final Employee empForCurrentUser = employeeService.getEmployeeById(userId.longValue()); if (empForCurrentUser != null) empForCurrentUser.getName(); saveWithForward(actionName, assignment); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed updation ....."); return "message"; } private void saveWithForward(final String actionName, final List<Assignment> assignment) { BudgetDetail bd = null; int i = 0; for (final BudgetProposalBean bpBean : bpBeanList) { if ((bpBean == null) || (bpBean.getId() == null)) continue; bd = budgetDetailService.find("from BudgetDetail where id=?", bpBean.getId()); bd.setOriginalAmount(bpBean.getProposedRE()); if (bpBean.getDocumentNumber() != null) bd.setDocumentNumber(bpBean.getDocumentNumber()); bd = budgetDetailService.transitionWorkFlow(bd, workflowBean); budgetDetailService.applyAuditing(bd.getState()); budgetDetailService.persist(bd); } // Save and Push the items if (actionName.contains("Forward")) { if (!assignment.isEmpty()) addActionMessage(getText("budgetdetail.forward", new String[] { assignment.get(0).getEmployee().getName() })); else throw new ValidationException(StringUtils.EMPTY, "Approver doesn't exists for the selected department"); } // Final approval else if (actionName.contains("Verify")) { for (final BudgetProposalBean bp : bpBeanList) { if ((bp == null) || (bp.getId() == null)) continue; budgetDetail = budgetDetailService.find("from BudgetDetail where id=?", bp.getNextYrId()); budgetDetail.setStatus(egwStatusHibernateDAO.getStatusByModuleAndCode(FinancialConstants.BUDGETDETAIL, FinancialConstants.WORKFLOW_STATE_APPROVED)); budgetDetailService.persist(budgetDetail); } addActionMessage(getText("budgetdetail.approve")); } else if (actionName.contains("Cancel")) addActionMessage(getText("budgetdetail.cancel")); else { final Assignment initiator = budgetDetailService.getWorkflowInitiator(budgetDetail); workflowBean.setApproverPositionId(initiator.getPosition().getId()); addActionMessage(getText("budgetdetail.reject", new String[] { initiator.getEmployee().getName() })); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Updated " + i + "record....."); i++; if ((i % 10) == 0) { persistenceService.getSession().flush(); if (LOGGER.isDebugEnabled()) LOGGER.debug("flushed for " + i + "record....."); } } protected void populateWorkflowBean() { workflowBean.setApproverPositionId(approverPositionId); workflowBean.setApproverComments(approverComments); workflowBean.setWorkFlowAction(actionName); workflowBean.setCurrentState(currentState); } public String modifyList() { if (budgetDetail.getBudget().getId() != null) topBudget = budgetService.find("from Budget where id=?", budgetDetail.getBudget().getId()); consolidatedScreen = budgetDetailService.toBeConsolidated(); if (isHOD()) allfunctionsArrived = validateForAllFunctionsMappedForDept(topBudget, getPosition()); return Constants.DETAILLIST; } private boolean isHOD() { final Assignment empAssignment = eisCommonService .getLatestAssignmentForEmployeeByToDate(ApplicationThreadLocals.getUserId(), new Date()); if (empAssignment.getDesignation().getName().equalsIgnoreCase("assistant")) { asstFMU = true; final BudgetDetail approvedBd = (BudgetDetail) persistenceService .find(" from BudgetDetail where budget=? and approvedAmount>0 ", topBudget); if (approvedBd != null) { } else { } } else if (empAssignment.getDesignation().getName().equalsIgnoreCase("CHIEF ACCOUNTS OFFICER")) asstFMU = true; return eisCommonService.isHod(empAssignment.getId()); } public Position getPosition() throws ApplicationRuntimeException { Position pos; pos = eisCommonService.getPrimaryAssignmentPositionForEmp(ApplicationThreadLocals.getUserId()); return pos; } private boolean validateForAllFunctionsMappedForDept(final Budget topBudget, final Position position) { final BudgetDetail bd = budgetDetailService.find("from BudgetDetail where budget.id=?", topBudget.getId()); final String Query = "select distinct(f.name) as functionid from eg_dept_functionmap m,function f where departmentid=" + bd.getExecutingDepartment().getId() + " and f.id= m.functionid and m.budgetaccount_Type='" + budgetDetailHelper.accountTypeForFunctionDeptMap(topBudget.getName()) + "'" + " minus " + " select distinct(f.name) as functionid from egf_budgetdetail bd,eg_wf_states s,function f where bd.budget=" + topBudget.getId() + " and bd.state_id=s.id and s.owner=" + position.getId() + " and bd.function=f.id order by functionid"; final Query functionsNotUsed = persistenceService.getSession().createSQLQuery(Query); final List<String> notUsedList = functionsNotUsed.list(); if (notUsedList.size() > 0) { functionsNotYetReceiced = ""; for (final String s : notUsedList) functionsNotYetReceiced = functionsNotYetReceiced + s + " ,"; return false; } else return true; } public String capitalize(final String value) { if ((value == null) || (value.length() == 0)) return value; return value.substring(0, 1).toUpperCase() + value.substring(1).toLowerCase(); } @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 ""; } protected Boolean validateOwner() { if (LOGGER.isDebugEnabled()) LOGGER.debug("validating owner for user " + ApplicationThreadLocals.getUserId()); List<Position> positionsForUser = null; positionsForUser = eisService.getPositionsForUser(Long.valueOf(ApplicationThreadLocals.getUserId()), new Date()); State state = null; if (factor.equalsIgnoreCase(bigThousand.toString())) state = (State) persistenceService.find( "select b.state from Budget b where b.id =(select bd.budget.id from BudgetDetail bd where bd.id=?) ", validId); else state = (State) persistenceService.find("select bd.state from BudgetDetail bd where bd.id=? ", validId); if ((state != null) && positionsForUser.contains(state.getOwnerPosition())) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Valid Owner :return true"); return true; } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("Invalid Owner :return false"); return false; } } public BudgetProposalBean getBpBean() { return bpBean; } public void setBpBean(final BudgetProposalBean bpBean) { this.bpBean = bpBean; } public BudgetDetail getBudgetDetail() { return budgetDetail; } public void setBudgetDetail(final BudgetDetail budgetDetail) { this.budgetDetail = budgetDetail; } public Budget getTopBudget() { return topBudget; } public void setTopBudget(final Budget topBudget) { this.topBudget = topBudget; } public VoucherService getVoucherService() { return voucherService; } public void setVoucherService(final VoucherService voucherService) { this.voucherService = voucherService; } public FinancialYearHibernateDAO getFinancialYearDAO() { return financialYearDAO; } public void setFinancialYearDAO(final FinancialYearHibernateDAO financialYearDAO) { this.financialYearDAO = financialYearDAO; } public String getCurrentfinYearRange() { return currentfinYearRange; } public void setCurrentfinYearRange(final String currentfinYearRange) { this.currentfinYearRange = currentfinYearRange; } public String getNextfinYearRange() { return nextfinYearRange; } public void setNextfinYearRange(final String nextfinYearRange) { this.nextfinYearRange = nextfinYearRange; } public String getPreviousfinYearRange() { return previousfinYearRange; } public void setPreviousfinYearRange(final String previousfinYearRange) { this.previousfinYearRange = previousfinYearRange; } public String getTwopreviousfinYearRange() { return twopreviousfinYearRange; } public void setTwopreviousfinYearRange(final String twopreviousfinYearRange) { this.twopreviousfinYearRange = twopreviousfinYearRange; } public List<BudgetDetail> getBudgetDetailList() { return budgetDetailList; } public void setBudgetDetailList(final List<BudgetDetail> budgetDetailList) { this.budgetDetailList = budgetDetailList; } public List<BudgetDetail> getSavedbudgetDetailList() { return savedbudgetDetailList; } public void setSavedbudgetDetailList(final List<BudgetDetail> savedbudgetDetailList) { this.savedbudgetDetailList = savedbudgetDetailList; } public BudgetDetailService getBudgetDetailService() { return budgetDetailService; } public void setBudgetDetailService(final BudgetDetailService budgetDetailService) { this.budgetDetailService = budgetDetailService; } public BudgetService getBudgetService() { return budgetService; } public void setBudgetService(final BudgetService budgetService) { this.budgetService = budgetService; } public Map<Long, String> getPreviuosYearBudgetDetailMap() { return previuosYearBudgetDetailMap; } public void setPreviuosYearBudgetDetailMap(final Map<Long, String> previuosYearBudgetDetailMap) { this.previuosYearBudgetDetailMap = previuosYearBudgetDetailMap; } public Map<Long, String> getBeforePreviousYearBudgetDetailMap() { return beforePreviousYearBudgetDetailMap; } public void setBeforePreviousYearBudgetDetailMap(final Map<Long, String> beforePreviousYearBudgetDetailMap) { this.beforePreviousYearBudgetDetailMap = beforePreviousYearBudgetDetailMap; } public Map<String, BigDecimal> getBudgetDetailIdsAndAmount() { return budgetDetailIdsAndAmount; } public void setBudgetDetailIdsAndAmount(final Map<String, BigDecimal> budgetDetailIdsAndAmount) { this.budgetDetailIdsAndAmount = budgetDetailIdsAndAmount; } public Map<String, BigDecimal> getPreviousYearBudgetDetailIdsAndAmount() { return previousYearBudgetDetailIdsAndAmount; } public void setPreviousYearBudgetDetailIdsAndAmount( final Map<String, BigDecimal> previousYearBudgetDetailIdsAndAmount) { this.previousYearBudgetDetailIdsAndAmount = previousYearBudgetDetailIdsAndAmount; } public Map<String, BigDecimal> getTwopreviousYearBudgetDetailIdsAndAmount() { return twopreviousYearBudgetDetailIdsAndAmount; } public void setTwopreviousYearBudgetDetailIdsAndAmount( final Map<String, BigDecimal> twopreviousYearBudgetDetailIdsAndAmount) { this.twopreviousYearBudgetDetailIdsAndAmount = twopreviousYearBudgetDetailIdsAndAmount; } public String getWfitemstate() { return wfitemstate; } public void setWfitemstate(final String wfitemstate) { this.wfitemstate = wfitemstate; } public Integer getDefaultDept() { return defaultDept; } /* * public void setHeaderAsOnDate(Date headerAsOnDate) { this.headerAsOnDate = headerAsOnDate; } */ public void setDefaultDept(final Integer defaultDept) { this.defaultDept = defaultDept; } public Department getDepartment() { return department; } public void setDepartment(final Department department) { this.department = department; } public static String getActionname() { return ACTIONNAME; } public List<BudgetProposalBean> getBpBeanList() { return bpBeanList; } public void setBpBeanList(final List<BudgetProposalBean> bpBeanList) { this.bpBeanList = bpBeanList; } public Date getAsOndate() { return asOndate; } public void setAsOndate(final Date asOndate) { this.asOndate = asOndate; } public String getFunctionsNotYetReceiced() { return functionsNotYetReceiced; } public void setFunctionsNotYetReceiced(final String functionsNotYetReceiced) { this.functionsNotYetReceiced = functionsNotYetReceiced; } public boolean isAsstFMU() { return asstFMU; } public void setAsstFMU(final boolean asstFMU) { this.asstFMU = asstFMU; } public void setBudgetDetailHelper(final BudgetDetailHelper budgetDetailHelper) { this.budgetDetailHelper = budgetDetailHelper; } 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 String getContentType() { return contentType; } public void setContentType(final String contentType) { this.contentType = contentType; } public String getFileName() { return fileName; } public void setFileName(final String fileName) { this.fileName = fileName; } public Long getDocNo() { return docNo; } public void setDocNo(final Long docNo) { this.docNo = docNo; } public String getAmountField() { return amountField; } public void setAmountField(final String amountField) { this.amountField = amountField; } public BigDecimal getAmount() { return amount; } public void setAmount(final BigDecimal amount) { this.amount = amount; } public String getFactor() { return factor; } public void setFactor(final String factor) { this.factor = factor; } public void setEisService(final EisUtilService eisService) { this.eisService = eisService; } public Long getDetailId() { return detailId; } public void setDetailId(final Long detailId) { this.detailId = detailId; } public Long getValidId() { return validId; } public void setValidId(final Long validId) { this.validId = validId; } public WorkflowBean getWorkflowBean() { return workflowBean; } public void setWorkflowBean(final WorkflowBean workflowBean) { this.workflowBean = workflowBean; } }