/* * 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.utils; import com.opensymphony.xwork2.util.ValueStack; import org.apache.commons.lang.StringUtils; import org.egov.commons.CFinancialYear; import org.egov.commons.dao.FinancialYearDAO; import org.egov.dao.budget.BudgetDetailsDAO; import org.egov.infra.exception.ApplicationRuntimeException; import org.egov.infra.validation.exception.ValidationException; import org.egov.model.budget.BudgetDetail; import org.egov.egf.model.BudgetAmountView; import org.springframework.beans.factory.annotation.Autowired; import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class BudgetDetailHelper { @Autowired private BudgetDetailsDAO budgetDetailsDAO; @Autowired private FinancialYearDAO financialYearDAO; public void setBudgetDetailsDAO(final BudgetDetailsDAO budgetDetailsDAO) { this.budgetDetailsDAO = budgetDetailsDAO; } public void setFinancialYearDAO(final FinancialYearDAO financialYearDAO) { this.financialYearDAO = financialYearDAO; } public Date getBudgetAsOnDate(final BudgetDetail detail) { if (detail.getBudget() != null && detail.getBudget().getAsOnDate() != null) return detail.getBudget().getAsOnDate(); return new Date(); } public void removeEmptyBudgetDetails(final List<BudgetDetail> budgetDetailList) { for (final Iterator<BudgetDetail> detail = budgetDetailList.iterator(); detail.hasNext();) if (detail.next() == null) detail.remove(); } public String getActualsFor(final Map<String, Object> paramMap, final Date asOn) { paramMap.put(Constants.ASONDATE, asOn); try { return budgetDetailsDAO.getActualBudgetUtilized(paramMap).setScale(0, BigDecimal.ROUND_CEILING).toString(); } catch (final ValidationException e) { return "0.0"; } catch (final ArithmeticException e) { return "0.0"; } } // gives actuals from bill and voucher public BigDecimal getTotalActualsFor(final Map<String, Object> paramMap, final Date asOn) { BigDecimal actuals = BigDecimal.ZERO; paramMap.put(Constants.ASONDATE, asOn); try { actuals = budgetDetailsDAO.getActualBudgetUtilized(paramMap); actuals = actuals == null ? BigDecimal.ZERO : actuals; actuals = actuals.add(budgetDetailsDAO.getBillAmountForBudgetCheck(paramMap)); } catch (final ValidationException e) { return BigDecimal.ZERO; } return actuals; } public void populateData(final BudgetAmountView amountDisplay, final Map<String, Object> paramMap, final Date asOnDate, final boolean isRe) { final Date previousYear = subtractYear(asOnDate); final String actualsFor = getActualsFor(paramMap, previousYear); amountDisplay.setPreviousYearActuals(actualsFor == null ? BigDecimal.ZERO.setScale(0, BigDecimal.ROUND_CEILING) : new BigDecimal(actualsFor).setScale(0, BigDecimal.ROUND_CEILING)); amountDisplay.setOldActuals(getActualsFor(paramMap, subtractYear(previousYear))); final String currentYearActuals = getActualsFor(paramMap, asOnDate); amountDisplay.setCurrentYearBeActuals(currentYearActuals == null ? BigDecimal.ZERO.setScale(2) : new BigDecimal( currentYearActuals).setScale(0, BigDecimal.ROUND_CEILING)); } public String getPreviousActualData(final Map<String, Object> paramMap, final Date asOnDate) { return getActualsFor(paramMap, subtractYear(asOnDate)); } public BigDecimal getTotalPreviousActualData(final Map<String, Object> paramMap, final Date asOnDate) { return getTotalActualsFor(paramMap, subtractYear(asOnDate)); } protected Date subtractYear(final Date date) { final Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.YEAR, -1); return cal.getTime(); } public Long getFinancialYear() { return Long.valueOf(financialYearDAO.getCurrYearFiscalId()); } public Map<String, Object> constructParamMap(final ValueStack valueStack, final BudgetDetail detail) { final Map<String, Object> paramMap = new HashMap<String, Object>(); valueStack.setValue("budgetDetail", detail); paramMap.put(Constants.DEPTID, Constants.INT_ZERO.equals(valueStack.findValue("budgetDetail.executingDepartment.id")) ? null : valueStack.findValue("budgetDetail.executingDepartment.id")); paramMap.put( Constants.FUNCTIONID, Constants.LONG_ZERO.equals(valueStack.findValue("budgetDetail.function.id")) ? null : valueStack .findValue("budgetDetail.function.id")); paramMap.put(Constants.FUNCTIONARYID, Constants.INT_ZERO.equals(valueStack .findValue("budgetDetail.functionary.id")) ? null : valueStack.findValue("budgetDetail.functionary.id")); paramMap.put( Constants.SCHEMEID, Constants.INT_ZERO.equals(valueStack.findValue("budgetDetail.scheme.id")) ? null : valueStack .findValue("budgetDetail.scheme.id")); paramMap.put( Constants.SUBSCHEMEID, Constants.INT_ZERO.equals(valueStack.findValue("budgetDetail.subScheme.id")) ? null : valueStack .findValue("budgetDetail.subScheme.id")); paramMap.put( "budgetheadid", Constants.LONG_ZERO.equals(valueStack.findValue("budgetDetail.budgetGroup.id")) ? null : valueStack .findValue("budgetDetail.budgetGroup.id")); paramMap.put("glcodeid", Constants.LONG_ZERO.equals(valueStack.findValue("budgetDetail.budgetGroup.minCode.id")) ? null : valueStack.findValue("budgetDetail.budgetGroup.minCode.id")); paramMap.put( Constants.BOUNDARYID, Constants.INT_ZERO.equals(valueStack.findValue("budgetDetail.boundary.id")) ? null : valueStack .findValue("budgetDetail.boundary.id")); paramMap.put(Constants.FUNDID, Constants.INT_ZERO.equals(valueStack.findValue("budgetDetail.fund.id")) ? null : valueStack.findValue("budgetDetail.fund.id")); return paramMap; } public BigDecimal getBillAmountForBudgetCheck(final Map<String, Object> constructParamMap) { return budgetDetailsDAO.getBillAmountForBudgetCheck(constructParamMap); } public String computePreviousYearRange(final String currentYearRange) { if (StringUtils.isNotBlank(currentYearRange)) { final String[] list = currentYearRange.split("-"); return subtract(list[0]) + "-" + subtract(list[1]); } return ""; } public String computeNextYearRange(final String currentYearRange) { if (StringUtils.isNotBlank(currentYearRange)) { final String[] list = currentYearRange.split("-"); return add(list[0]) + "-" + add(list[1]); } return ""; } protected String subtract(final String value) { final int val = Integer.parseInt(value) - 1; if (val < 10) return "0" + val; return String.valueOf(val); } protected String add(final String value) { final int val = Integer.parseInt(value) + 1; if (val < 10) return "0" + val; return String.valueOf(val); } public CFinancialYear getPreviousYearFor(final CFinancialYear financialYear) { try { return financialYearDAO.getFinancialYearByDate(subtractYear(financialYear.getStartingDate())); } catch (final ApplicationRuntimeException e) { return null; } } /** * * @param budgetName * @return rewrite this api when u load receipt budgets */ public String accountTypeForFunctionDeptMap(final String budgetName) { String accountType; if (budgetName.toLowerCase().contains("cap")) accountType = "CAPITAL_EXPENDITURE"; else accountType = "REVENUE_EXPENDITURE"; return accountType; } }