/*
* 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.actions.estimate;
import net.sf.jasperreports.engine.JRException;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.egov.commons.Accountdetailtype;
import org.egov.commons.CChartOfAccounts;
import org.egov.commons.CFinancialYear;
import org.egov.commons.CFunction;
import org.egov.commons.Functionary;
import org.egov.commons.Fund;
import org.egov.commons.Fundsource;
import org.egov.commons.Scheme;
import org.egov.commons.SubScheme;
import org.egov.commons.dao.ChartOfAccountsHibernateDAO;
import org.egov.commons.dao.FinancialYearHibernateDAO;
import org.egov.commons.dao.FunctionHibernateDAO;
import org.egov.commons.dao.FunctionaryHibernateDAO;
import org.egov.commons.dao.FundHibernateDAO;
import org.egov.commons.dao.FundSourceHibernateDAO;
import org.egov.dao.budget.BudgetDetailsDAO;
import org.egov.dao.budget.BudgetGroupDAO;
import org.egov.infra.admin.master.entity.AppConfigValues;
import org.egov.infra.admin.master.entity.User;
import org.egov.infra.admin.master.service.UserService;
import org.egov.infra.exception.ApplicationException;
import org.egov.infra.exception.ApplicationRuntimeException;
import org.egov.infra.reporting.engine.ReportOutput;
import org.egov.infra.reporting.engine.ReportRequest;
import org.egov.infra.reporting.engine.ReportService;
import org.egov.infra.utils.DateUtils;
import org.egov.infra.validation.exception.ValidationError;
import org.egov.infra.validation.exception.ValidationException;
import org.egov.infra.web.struts.actions.BaseFormAction;
import org.egov.infra.web.struts.annotation.ValidationErrorPage;
import org.egov.infra.workflow.service.WorkflowService;
import org.egov.infstr.services.PersistenceService;
import org.egov.model.budget.BudgetGroup;
import org.egov.works.abstractestimate.entity.AbstractEstimate;
import org.egov.works.abstractestimate.entity.AbstractEstimateAppropriation;
import org.egov.works.abstractestimate.entity.FinancialDetail;
import org.egov.works.abstractestimate.entity.FinancingSource;
import org.egov.works.abstractestimate.entity.MultiYearEstimate;
import org.egov.works.models.estimate.BudgetFolioDetail;
import org.egov.works.models.masters.DepositCode;
import org.egov.works.services.AbstractEstimateService;
import org.egov.works.services.DepositWorksUsageService;
import org.egov.works.services.WorksService;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@Results({ @Result(name = FinancialDetailAction.PRINT, type = "stream", location = "budgetFolioPDF", params = {
"inputName", "budgetFolioPDF", "contentType", "application/pdf", "contentDisposition", "no-cache" }),
@Result(name = AbstractEstimateAction.NEW, location = "financialDetail-add.jsp")
})
public class FinancialDetailAction extends BaseFormAction {
private static final long serialVersionUID = -8120661601900686441L;
private static final String BUDGET_DETAILS_SAVE = "budget_details_save";
private static final Logger logger = Logger.getLogger(FinancialDetailAction.class);
private static final String BUDGET_GROUP_LIST = "budgetGroupList";
private FinancialDetail financialDetail = new FinancialDetail();
private AbstractEstimateService abstractEstimateService;
@Autowired
private UserService userService;
private WorkflowService<AbstractEstimate> estimateWorkflowService;
private static final String MODULE_NAME = "Works";
private static final String KEY_NAME = "SKIP_BUDGET_CHECK";
private AbstractEstimate abstractEstimate;
private List<FinancingSource> financingSourceList = new LinkedList<FinancingSource>();
private List<MultiYearEstimate> actionMultiYearEstimateValues = new LinkedList<MultiYearEstimate>();
private List<Fundsource> fundSourceList;
private Long estimateId;
private Long id;
@Autowired
private FinancialYearHibernateDAO finHibernateDao;
private String status = "TECH_SANCTIONED";
public static final String ADD = "add";
private BudgetGroupDAO budgetGroupDAO;
private Date financialYearStartDate;
private Integer approverUserId;
private Long departmentId;
private Integer designationId;
private String approverComments;
private boolean skipBudget = false;
private String isEnableSelect = "false";
private String source = " ";
@Autowired
private ChartOfAccountsHibernateDAO chartOfAccountsHibernateDAO;
/*
* added by prashanth on 2nd nov 09 for disp user and desgination in success page
*/
String employeeName;
String designation;
private WorksService worksService;
public static final String PRINT = "print";
private List<BudgetFolioDetail> approvedBudgetFolioDetails;
private BigDecimal totalGrant = BigDecimal.ZERO;
private BigDecimal totalGrantPerc = BigDecimal.ZERO;
private InputStream budgetFolioPDF;
private ReportService reportService;
private Double latestCumulative = 0.00D;
private BigDecimal latestBalance = BigDecimal.ZERO;
private BigDecimal totalDepositAmount = BigDecimal.ZERO;
private Double latestCumulativeExpense = 0.00D;
private static final String SEARCH_BUDGET_FOLIO = "searchBudgetFolio";
private static final String SEARCH_DEPOSIT_WORKS_FOLIO = "searchDepositWorksFolio";
private static final String BUDGET_GROUP_SEARCH_LIST = "budgetHeadList";
private Map<String, Object> queryParamMap = new HashMap<String, Object>();
private Long userDepartment;
private Date reportDate;
private BudgetDetailsDAO budgetDetailsDAO;
private Map<String, String> mandatoryFields = new HashMap<String, String>();
private String option;
private String deptName = "";
private static final String Fund = "fund";
private static final String FUNCTION = "function";
private static final String COA_LIST = "coaList";
private static final String APP = "app";
private static final String KEY_DEPOSIT = "WORKS_DEPOSIT_OTHER_WORKS";
private static final String SOURCE_INBOX = "inbox";
private Long depositCodeId;
private String sourcepage;
private String appValue;
private String appValueLabel;
private DepositWorksUsageService depositWorksUsageService;
private PersistenceService<DepositCode, Long> depositCodeService;
public static final String RESULTS = "searchResult";
private Date asOnDate;
private String code;
private Integer fundId;
private Long glcodeId;
private Integer functionId;
private String roadCutDepCodeFlag;
public Integer finYearId;
private String finYearRangeStr;
private String currentFinancialYearId;
@Autowired
private FundSourceHibernateDAO fundSourceDAO;
@Autowired
private FundHibernateDAO fundDao;
@Autowired
private FunctionHibernateDAO functionHibDao;
@Autowired
private FunctionaryHibernateDAO functionaryDao;
private static final String SCHEME_MANDATORYCHECK_BUDGETHEAD = "SCHEME_MANDATORYCHECK_BUDGETHEAD";
private String budgetHeadGlcode;
public FinancialDetail getFinancialDetail() {
return financialDetail;
}
public void setFinancialDetail(final FinancialDetail financialDetail) {
this.financialDetail = financialDetail;
}
public Long getEstimateId() {
return estimateId;
}
public void setEstimateId(final Long estimateId) {
this.estimateId = estimateId;
}
public FinancialDetailAction() {
addRelatedEntity(Fund, Fund.class);
addRelatedEntity(FUNCTION, CFunction.class);
addRelatedEntity("functionary", Functionary.class);
addRelatedEntity("scheme", Scheme.class);
addRelatedEntity("subScheme", SubScheme.class);
addRelatedEntity("budgetGroup", BudgetGroup.class);
addRelatedEntity("coa", CChartOfAccounts.class);
}
@Override
public String execute() {
return ADD;
}
@Action(value = "/estimate/financialDetail-add")
public String add() {
if (SOURCE_INBOX.equalsIgnoreCase(sourcepage)) {
final User user = userService.getUserById(worksService.getCurrentLoggedInUserId());
final boolean isValidUser = worksService.validateWorkflowForUser(abstractEstimate, user);
if (isValidUser)
throw new ApplicationRuntimeException("Error: Invalid Owner - No permission to view this page.");
} else if (StringUtils.isEmpty(sourcepage))
sourcepage = "search";
return ADD;
}
public String edit() {
setBudgetHeadGlcode(worksService.getWorksConfigValue(SCHEME_MANDATORYCHECK_BUDGETHEAD));
if (SOURCE_INBOX.equalsIgnoreCase(sourcepage)) {
final User user = userService.getUserById(worksService.getCurrentLoggedInUserId());
final boolean isValidUser = worksService.validateWorkflowForUser(abstractEstimate, user);
if (isValidUser)
throw new ApplicationRuntimeException("Error: Invalid Owner - No permission to view this page.");
} else if (StringUtils.isEmpty(sourcepage))
sourcepage = "search";
return ADD;
}
public String save() {
setBudgetHeadGlcode(worksService.getWorksConfigValue(SCHEME_MANDATORYCHECK_BUDGETHEAD));
populateFinancialDetail();
persistFinancialDetail();
if (financialDetail.getAbstractEstimate() != null
&& financialDetail.getAbstractEstimate().getMultiYearEstimates() != null
&& actionMultiYearEstimateValues.size() != 0)
populateMultiYearEstimates();
addActionMessage("The financial details for estimate " + abstractEstimate.getEstimateNumber()
+ " was saved successfully");
return EDIT;
}
public String saveAndSubmit() {
setBudgetHeadGlcode(worksService.getWorksConfigValue(SCHEME_MANDATORYCHECK_BUDGETHEAD));
populateFinancialDetail();
persistFinancialDetail();
if (financialDetail.getAbstractEstimate() != null
&& financialDetail.getAbstractEstimate().getMultiYearEstimates() != null
&& actionMultiYearEstimateValues.size() != 0)
populateMultiYearEstimates();
final String actionName = parameters.get("actionName")[0];
abstractEstimate.setApproverUserId(approverUserId);
Long finYearId = null;
Boolean isApprYearEntry = Boolean.FALSE;
if (abstractEstimateService.isPreviousYearApprRequired(abstractEstimate.getFinancialDetails().get(0)))
finYearId = Long.parseLong(finHibernateDao.getPrevYearFiscalId());
else
finYearId = Long.parseLong(finHibernateDao.getCurrYearFiscalId());
if (!isSkipBudgetCheck()) {
for (final MultiYearEstimate multiYearEstimate : financialDetail.getAbstractEstimate()
.getMultiYearEstimates())
if (multiYearEstimate != null && multiYearEstimate.getFinancialYear().getId().compareTo(finYearId) == 0
&& multiYearEstimate.getPercentage() > 0)
isApprYearEntry = Boolean.TRUE;
} else
isApprYearEntry = Boolean.TRUE;
if (!isApprYearEntry)
throw new ValidationException(Arrays.asList(new ValidationError(
"There is no entry in the year wise estimate for selected appropriation year",
"There is no entry in the year wise estimate for selected appropriation year")));
try {
abstractEstimate = estimateWorkflowService.transition(actionName, abstractEstimate, approverComments);
} catch (final ValidationException exp) {
final List<ValidationError> errorList = exp.getErrors();
for (final ValidationError error : errorList) {
if (error.getMessage().contains("DatabaseSequenceFirstTimeException")) {
abstractEstimate = abstractEstimateService.findById(estimateId, false);
financialDetail.setAbstractEstimate(abstractEstimate);
prepare();
throw new ValidationException(Arrays.asList(new ValidationError("error", error.getMessage())));
}
throw new ValidationException(Arrays.asList(new ValidationError("error", error.getMessage())));
}
throw exp;
}
addActionMessage("The financial details for estimate " + abstractEstimate.getEstimateNumber()
+ " was submitted successfully.");
/* start for customizing workflow message display */
if (abstractEstimate.getEgwStatus() != null
&& !"NEW".equalsIgnoreCase(abstractEstimate.getEgwStatus().getCode())) {
final String result = worksService.getEmpNameDesignation(abstractEstimate.getState().getOwnerPosition(),
abstractEstimate.getState().getCreatedDate());
if (result != null && !"@".equalsIgnoreCase(result)) {
final String empName = result.substring(0, result.lastIndexOf('@'));
final String designation = result.substring(result.lastIndexOf('@') + 1, result.length());
setEmployeeName(empName);
setDesignation(designation);
}
}
/* end */
return SUCCESS;
}
private void populateFinancialDetail() {
financialDetail.getFinancingSources().clear();
populateFinancingSourceDetails();
// Clear budget group if it is deposit works else clear the COA
if (isSkipBudget())
financialDetail.setBudgetGroup(null);
else
financialDetail.setCoa(null);
}
private void persistFinancialDetail() {
if (depositCodeId != null && depositCodeId != -1)
abstractEstimate.setDepositCode(depositCodeService.findById(depositCodeId, false));
if (getMaxFinancingSource(financingSourceList).getFundSource() != null
&& fundSourceDAO.fundsourceById(getMaxFinancingSource(financingSourceList).getFundSource().getId().intValue()) != null)
abstractEstimate.setFundSource(fundSourceDAO.fundsourceById(getMaxFinancingSource(financingSourceList)
.getFundSource().getId().intValue()));
abstractEstimate = abstractEstimateService.persistFinancialDetail(financialDetail, abstractEstimate);
// to lazy load the financial detail id.
abstractEstimate.getFinancialDetails().get(0).getId();
financialDetail = abstractEstimate.getFinancialDetails().get(0);
}
public boolean getIsPreviousApprAllowed() {
return "yes".equalsIgnoreCase(worksService.getWorksConfigValue("PREVIOUS_YEAR_APPROPRIATION_ALLOWED"));
}
@Override
public void prepare() {
final AjaxFinancialDetailAction ajaxFinancialDetailAction = new AjaxFinancialDetailAction();
ajaxFinancialDetailAction.setPersistenceService(getPersistenceService());
ajaxFinancialDetailAction.setBudgetGroupDAO(budgetGroupDAO);
abstractEstimateService.setBudgetGroupDAO(budgetGroupDAO);
abstractEstimate = abstractEstimateService.findById(estimateId, false);
if (abstractEstimate != null) {
// Incase of revision estimate, get the parent's financial details
if (abstractEstimate.getParent() != null)
financialDetail = abstractEstimate.getParent().getFinancialDetails().get(0);
if (abstractEstimate.getFinancialDetails() != null && abstractEstimate.getFinancialDetails().size() > 0)
financialDetail = abstractEstimate.getFinancialDetails().get(0);
financialDetail.setAbstractEstimate(abstractEstimate);
}
super.prepare();
if (financialDetail.getApprYear() == null)
financialDetail.setApprYear("running");
setupDropdownDataExcluding(Fund, FUNCTION, "functionary", "scheme", "subScheme", "budgetGroup", "coa");
addDropdownData("fundList", fundDao.findAllActiveIsLeafFunds());
addDropdownData("functionList", functionHibDao.getAllActiveFunctions());
addDropdownData("functionaryList", functionaryDao.findAllActiveFunctionary());
final List departmentList = getPersistenceService().findAllBy("from DepartmentImpl");
addDropdownData("userDepartmentList", departmentList);
addDropdownData("executingDepartmentList", departmentList);
addDropdownData("financialYearList", getPersistenceService().findAllBy("from CFinancialYear where isActive=true"));
final List<CFinancialYear> finYrList = worksService.getAllFinancialYearsForWorks();
addDropdownData("finYearList", finYrList);
finYearRangeStr = generateFinYrList(finYrList);
final CFinancialYear financialYear = finHibernateDao.getFinYearByDate(new Date());
if (financialYear != null)
currentFinancialYearId = financialYear.getId().toString();
try {
addDropdownData(BUDGET_GROUP_LIST, Collections.EMPTY_LIST);
addDropdownData(BUDGET_GROUP_SEARCH_LIST, new ArrayList<BudgetGroup>());
} catch (final Exception e) {
logger.error("---Budgetunavailable : Unable to load budget information---" + e.getMessage());
addFieldError("budgetunavailable", "Unable to load budget information");
}
populateSchemeList(ajaxFinancialDetailAction, financialDetail.getFund() != null,
financialDetail.getAbstractEstimate() != null);
populateSubSchemeList(ajaxFinancialDetailAction, financialDetail.getScheme() != null,
financialDetail.getAbstractEstimate() != null);
try {
populateBudgetGroupList(ajaxFinancialDetailAction, financialDetail.getFunction() != null,
financialDetail.getAbstractEstimate() != null);
populateBudgetHeadList(ajaxFinancialDetailAction, financialDetail.getFunction() != null,
getReportDate() != null);
} catch (final ApplicationException e) {
logger.error("---Budgetunavailable: Unable to load budget data---" + e.getMessage());
addFieldError("budgetunavailable", "Unable to load budget data");
} catch (final Exception e) {
logger.error("---Budgetunavailable: Unable to load budget data from database---" + e.getMessage());
addFieldError("budgetunavailable", "Unable to load budget data from database");
}
if (getDropdownData().get(BUDGET_GROUP_LIST) == null)
addDropdownData(BUDGET_GROUP_LIST, new ArrayList<BudgetGroup>());
fundSourceList = fundSourceDAO.findAllActiveIsLeafFundSources();
if (abstractEstimateService.getLatestAssignmentForCurrentLoginUser() != null)
departmentId = abstractEstimateService.getLatestAssignmentForCurrentLoginUser().getDepartment().getId();
checkMandataryFields();
if (isSkipBudgetCheck())
if (StringUtils.isNotBlank(worksService.getWorksConfigValue(KEY_DEPOSIT)))
addDropdownData(COA_LIST, chartOfAccountsHibernateDAO.getAccountCodeByPurpose(Integer.valueOf(worksService
.getWorksConfigValue(KEY_DEPOSIT))));
else
addDropdownData(COA_LIST, Collections.EMPTY_LIST);
else
addDropdownData(COA_LIST, Collections.EMPTY_LIST);
if (!StringUtils.isBlank(option)
&& ("input".equalsIgnoreCase(option) || "searchDepositWorksFolioDetails".equalsIgnoreCase(option))) {
asOnDate = new Date();
try {
final String config = worksService.getWorksConfigValue("SLDEPOSITCODE_SHOW_FUNDS");
final List<String> code = new ArrayList<String>();
if (config == null)
addDropdownData("fundList", code);
else {
for (int i = 0; i < config.split(",").length; i++)
code.add(config.split(",")[i]);
addDropdownData("fundList",
getPersistenceService().findAllByNamedQuery("getListOfFundsForCodes", code));
}
} catch (final Exception v) {
logger.error("---Unable to load funds for Deposit Works folio Reports---" + v.getMessage());
addFieldError("Fund.notfound", "depositWorksFolioReport.loadFund.error");
}
if (StringUtils.isNotBlank(worksService.getWorksConfigValue(KEY_DEPOSIT)))
addDropdownData(COA_LIST, chartOfAccountsHibernateDAO.getAccountCodeByPurpose(Integer.valueOf(worksService
.getWorksConfigValue(KEY_DEPOSIT))));
else
addDropdownData(COA_LIST, Collections.EMPTY_LIST);
}
budgetHeadGlcode = worksService.getWorksConfigValue(SCHEME_MANDATORYCHECK_BUDGETHEAD);
}
public void checkMandataryFields() {
final List<AppConfigValues> appConfigList = worksService.getAppConfigValue("EGF",
"budgetaryCheck_groupby_values");
AppConfigValues appConfigValues = null;
if (appConfigList != null)
appConfigValues = appConfigList.get(0);
if (appConfigValues != null)
if (appConfigValues.getValue().indexOf(",") == -1)
mandatoryFields.put(appConfigValues.getValue(), "M");
else {
final String[] values = StringUtils.split(appConfigValues.getValue(), ",");
for (final String value : values)
mandatoryFields.put(value, "M");
}
}
protected void populateSubSchemeList(final AjaxFinancialDetailAction ajaxFinancialDetailAction,
final boolean schemePopulated, final boolean datePresent) {
if (schemePopulated && datePresent) {
ajaxFinancialDetailAction.setSchemeId(financialDetail.getScheme().getId());
ajaxFinancialDetailAction.setEstimateDate(financialDetail.getAbstractEstimate().getEstimateDate());
ajaxFinancialDetailAction.loadSubSchemes();
addDropdownData("subSchemeList", ajaxFinancialDetailAction.getSubSchemes());
} else
addDropdownData("subSchemeList", Collections.emptyList());
}
protected void populateSchemeList(final AjaxFinancialDetailAction ajaxFinancialDetailAction,
final boolean fundPopulated, final boolean datePresent) {
if (fundPopulated && datePresent) {
ajaxFinancialDetailAction.setFundId(financialDetail.getFund().getId());
ajaxFinancialDetailAction.setEstimateDate(financialDetail.getAbstractEstimate().getEstimateDate());
ajaxFinancialDetailAction.loadSchemes();
addDropdownData("schemeList", ajaxFinancialDetailAction.getSchemes());
} else
addDropdownData("schemeList", Collections.emptyList());
}
protected void populateBudgetGroupList(final AjaxFinancialDetailAction ajaxFinancialDetailAction,
final boolean functionPopulated, final boolean datePresent) throws Exception {
if (functionPopulated && datePresent) {
ajaxFinancialDetailAction.setFunctionId(financialDetail.getFunction().getId());
ajaxFinancialDetailAction.setEstimateDate(financialDetail.getAbstractEstimate().getEstimateDate());
ajaxFinancialDetailAction.loadBudgetGroups();
addDropdownData(BUDGET_GROUP_LIST, ajaxFinancialDetailAction.getBudgetGroups());
} else if (!functionPopulated)
try {
addDropdownData(BUDGET_GROUP_LIST, budgetGroupDAO.getBudgetGroupList());
} catch (final ApplicationRuntimeException e) {
logger.error("---Unable to load budget head---" + e.getMessage());
addFieldError("budgetheadexception", "Unable to load budget head ");
}
}
protected void populateBudgetHeadList(final AjaxFinancialDetailAction ajaxFinancialDetailAction,
final boolean functionPopulated, final boolean datePresent) throws Exception {
if (functionPopulated && datePresent) {
ajaxFinancialDetailAction.setFunctionId(financialDetail.getFunction().getId());
ajaxFinancialDetailAction.setEstimateDate(getReportDate());
ajaxFinancialDetailAction.loadBudgetGroups();
addDropdownData(BUDGET_GROUP_SEARCH_LIST, ajaxFinancialDetailAction.getBudgetGroups());
} else
addDropdownData(BUDGET_GROUP_SEARCH_LIST, new ArrayList<BudgetGroup>());
}
protected void populateFinancingSourceDetails() {
for (final FinancingSource finSource : financingSourceList)
if (validFinancingSource(finSource)) {
finSource.setFundSource((Fundsource) getPersistenceService().find("from Fundsource where id = ? ",
finSource.getFundSource().getId()));
financialDetail.addFinancingSource(finSource);
}
}
protected void populateMultiYearEstimates() {
financialDetail.getAbstractEstimate().getMultiYearEstimates().clear();
final List<ValidationError> multiYearErrors = new ArrayList<ValidationError>();
double totalPerc = 0.0;
Boolean isPercError = Boolean.FALSE;
Boolean isFinYearError = Boolean.FALSE;
for (final MultiYearEstimate multiYearEstimate : actionMultiYearEstimateValues)
if (multiYearEstimate != null) {
if (multiYearEstimate.getFinancialYear() != null
&& multiYearEstimate.getFinancialYear().getId() != null
&& multiYearEstimate.getFinancialYear().getId() != -1)
multiYearEstimate.setFinancialYear((CFinancialYear) getPersistenceService().find(
"from CFinancialYear where id = ?", multiYearEstimate.getFinancialYear().getId()));
multiYearEstimate.setAbstractEstimate(financialDetail.getAbstractEstimate());
totalPerc = totalPerc + multiYearEstimate.getPercentage();
financialDetail.getAbstractEstimate().addMultiYearEstimate(multiYearEstimate);
if (!isPercError && multiYearEstimate != null && multiYearEstimate.getPercentage() <= 0) {
multiYearErrors.add(new ValidationError("percentage",
"multiYearEstimate.percentage.percentage_greater_than_0"));
isPercError = Boolean.TRUE;
}
if (!isFinYearError
&& (multiYearEstimate.getFinancialYear() == null || multiYearEstimate.getFinancialYear() != null
&& (multiYearEstimate.getFinancialYear().getId() == null || multiYearEstimate
.getFinancialYear().getId() == -1))) {
multiYearErrors.add(new ValidationError("financialYear", "multiYeareEstimate.financialYear.null"));
isFinYearError = Boolean.TRUE;
}
}
if (totalPerc < 100)
multiYearErrors
.add(new ValidationError("percentage", "multiYearEstimate.percentage.percentage_equals_100"));
if (totalPerc > 100)
multiYearErrors.add(new ValidationError("percentage",
"multiYearEstimate.percentage.percentage_greater_than_100"));
if (multiYearErrors.size() != 0)
throw new ValidationException(multiYearErrors);
}
protected boolean validFinancingSource(final FinancingSource finSource) {
if (finSource != null && finSource.getFundSource() != null && finSource.getFundSource().getId() != null)
return true;
return false;
}
@Override
public Object getModel() {
return financialDetail;
}
protected void setModel(final FinancialDetail financialDetail) {
this.financialDetail = financialDetail;
}
public AbstractEstimate getAbstractEstimate() {
return abstractEstimate;
}
public void setAbstractEstimate(final AbstractEstimate abstractEstimate) {
this.abstractEstimate = abstractEstimate;
}
public void setAbstractEstimateService(final AbstractEstimateService abstractEstimateService) {
this.abstractEstimateService = abstractEstimateService;
}
public String getStatus() {
return status;
}
public void setStatus(final String status) {
this.status = status;
}
public List getEstimateStatuses() {
return persistenceService.findAllBy(
"from EgwStatus s where moduletype=? and s.code<> 'BUDGETARY_APPR_VALIDATED' " + "order by orderId",
AbstractEstimate.class.getSimpleName());
}
public void setBudgetGroupDAO(final BudgetGroupDAO budgetGroupDAO) {
this.budgetGroupDAO = budgetGroupDAO;
}
public BudgetGroupDAO getBudgetGroupDAO() {
return budgetGroupDAO;
}
public Long getId() {
return id;
}
public void setId(final Long id) {
this.id = id;
}
public List<FinancingSource> getFinancingSourceList() {
return financingSourceList;
}
public void setFinancingSourceList(final List<FinancingSource> financingSourceList) {
this.financingSourceList = financingSourceList;
}
public List<Fundsource> getFundSourceList() {
return fundSourceList;
}
public void setFundSourceList(final List<Fundsource> fundSourceList) {
this.fundSourceList = fundSourceList;
}
public void setEstimateWorkflowService(final WorkflowService<AbstractEstimate> workflow) {
estimateWorkflowService = workflow;
}
/**
* @return the employeeName
*/
public String getEmployeeName() {
return employeeName;
}
/**
* @param employeeName the employeeName to set
*/
public void setEmployeeName(final String employeeName) {
this.employeeName = employeeName;
}
/**
* @return the designation
*/
public String getDesignation() {
return designation;
}
/**
* @param designation the designation to set
*/
public void setDesignation(final String designation) {
this.designation = designation;
}
/**
* @param worksService the worksService to set
*/
public void setWorksService(final WorksService worksService) {
this.worksService = worksService;
}
public Date getFinancialYearStartDate() {
financialYearStartDate = finHibernateDao.getFinancialYearByFinYearRange(
worksService.getWorksConfigValue("FINANCIAL_YEAR_RANGE")).getStartingDate();
return financialYearStartDate;
}
public void setFinancialYearStartDate(final Date financialYearStartDate) {
this.financialYearStartDate = financialYearStartDate;
}
public Integer getApproverUserId() {
return approverUserId;
}
public void setApproverUserId(final Integer approverUserId) {
this.approverUserId = approverUserId;
}
public Long getDepartmentId() {
return departmentId;
}
public void setDepartmentId(final Long departmentId) {
this.departmentId = departmentId;
}
public Integer getDesignationId() {
return designationId;
}
public void setDesignationId(final Integer designationId) {
this.designationId = designationId;
}
public String getApproverComments() {
return approverComments;
}
public void setApproverComments(final String approverComments) {
this.approverComments = approverComments;
}
@ValidationErrorPage(value = "searchBudgetFolio")
public String searchBudgetFolio() {
if (!StringUtils.isBlank(option) && "searchdetails".equalsIgnoreCase(option))
search("menu");
return SEARCH_BUDGET_FOLIO;
}
// Added for Deposit Works Folio Report
public String searchDepositWorksFolio() {
if (!StringUtils.isBlank(option) && "searchDepositWorksFolioDetails".equalsIgnoreCase(option))
viewDepositWorksFolioReport();
return SEARCH_DEPOSIT_WORKS_FOLIO;
}
public String viewDepositFolio() {
final Fund fund = fundDao.fundById(fundId, false);
final DepositCode depositCode = depositCodeService.findById(depositCodeId, false);
final CChartOfAccounts coa = chartOfAccountsHibernateDAO.findById(glcodeId, false);
financialDetail.setCoa(coa);
financialDetail.setFund(fund);
code = depositCode.getCode() + "-" + depositCode.getCodeName();
asOnDate = new Date();
isEnableSelect = "true";
return SEARCH_DEPOSIT_WORKS_FOLIO;
}
public String viewDepositWorksFolio() {
// Incase of revision estimate, get the parent's financial details
if (abstractEstimate.getParent() != null)
financialDetail = abstractEstimate.getParent().getFinancialDetails().get(0);
else
financialDetail = abstractEstimate.getFinancialDetails().get(0);
code = abstractEstimate.getDepositCode().getCode() + "-" + abstractEstimate.getDepositCode().getCodeName();
depositCodeId = abstractEstimate.getDepositCode().getId();
final AbstractEstimateAppropriation astractEstimateAppropriation = abstractEstimateService
.getEstimateAppropriationService().findByNamedQuery("getLatestDepositWorksUsageForEstimate",
abstractEstimate.getId());
if (astractEstimateAppropriation != null)
asOnDate = astractEstimateAppropriation.getDepositWorksUsage().getAppropriationDate();
isEnableSelect = "true";
/*
* if(!StringUtils.isBlank(option) && "searchDepositWorksFolioDetails".equalsIgnoreCase(option)){
* viewDepositWorksFolioReport(); }
*/return SEARCH_DEPOSIT_WORKS_FOLIO;
}
public String viewDepositWorksFolioReport() throws ValidationException {
Fund fund = null;
CChartOfAccounts coa = null;
try {
final AbstractEstimate abstractEstimate = new AbstractEstimate();
final Accountdetailtype accountdetailtype = (Accountdetailtype) persistenceService.find(
"from Accountdetailtype where name=?", "DEPOSITCODE");
fund = (Fund) persistenceService.find("from Fund where id=?", financialDetail.getFund().getId());
coa = (CChartOfAccounts) persistenceService.find("from CChartOfAccounts where id=?", financialDetail
.getCoa().getId());
final Map<String, Object> reportParams = getDepositFolioDetails(abstractEstimate, fund, coa,
accountdetailtype, depositCodeId, asOnDate);
totalDepositAmount = (BigDecimal) reportParams.get("totalDeposit");
if (latestCumulative != 0.00D || totalDepositAmount != BigDecimal.ZERO) {
final BudgetFolioDetail e = new BudgetFolioDetail();
e.setSrlNo(Integer.getInteger(""));
e.setBudgetApprNo("<b>Latest Status :</b>");
e.setEstimateNo("");
e.setNameOfWork("");
e.setEstimateDate("");
e.setCumulativeTotal(latestCumulative);
e.setBalanceAvailable(totalDepositAmount);
e.setCumulativeExpensesIncurred(latestCumulativeExpense);
e.setActualBalanceAvailable(totalDepositAmount.doubleValue() - latestCumulativeExpense);
final List<BudgetFolioDetail> tempList = new ArrayList<BudgetFolioDetail>();
tempList.add(e);
if (approvedBudgetFolioDetails == null || approvedBudgetFolioDetails.isEmpty())
approvedBudgetFolioDetails = new ArrayList<BudgetFolioDetail>();
else
approvedBudgetFolioDetails.add(e);
} else
approvedBudgetFolioDetails = new ArrayList<BudgetFolioDetail>();
} catch (final ValidationException e) {
logger.error("GlCodeValidation >>" + e.getErrors().get(0).getMessage());
addFieldError("glCodeValidate", e.getErrors().get(0).getMessage());
}
return RESULTS;
}
public void search(final String src) {
if (APP.equalsIgnoreCase(src) && abstractEstimate != null
&& abstractEstimate.getFinancialDetails().get(0) != null)
financialDetail = abstractEstimate.getFinancialDetails().get(0);
if (financialDetail != null && financialDetail.getFund() != null && financialDetail.getFund().getId() != null
&& financialDetail.getFund().getId() != -1)
queryParamMap.put("fundid", financialDetail.getFund().getId());
if (financialDetail != null && financialDetail.getFunction() != null
&& financialDetail.getFunction().getId() != null && financialDetail.getFunction().getId() != -1)
queryParamMap.put("functionid", financialDetail.getFunction().getId());
if (financialDetail != null && financialDetail.getBudgetGroup() != null
&& financialDetail.getBudgetGroup().getId() != null && financialDetail.getBudgetGroup().getId() != -1) {
final List<BudgetGroup> budgetheadid = new ArrayList<BudgetGroup>();
budgetheadid.add(financialDetail.getBudgetGroup());
queryParamMap.put("budgetheadid", budgetheadid);
}
if (APP.equalsIgnoreCase(src) && financialDetail != null
&& financialDetail.getAbstractEstimate().getUserDepartment() != null)
queryParamMap.put("deptid", financialDetail.getAbstractEstimate().getUserDepartment().getId());
else if (getUserDepartment() != null && getUserDepartment() != -1)
queryParamMap.put("deptid", getUserDepartment());
if (APP.equalsIgnoreCase(src) && abstractEstimate != null
&& abstractEstimate.getLeastFinancialYearForEstimate() != null
&& abstractEstimate.getLeastFinancialYearForEstimate().getId() != null) {
queryParamMap.put("financialyearid", financialDetail.getAbstractEstimate()
.getLeastFinancialYearForEstimate().getId());
queryParamMap.put("fromDate", financialDetail.getAbstractEstimate().getLeastFinancialYearForEstimate()
.getStartingDate());
queryParamMap.put("toDate", new Date());
} else if (getReportDate() != null) {
if (!DateUtils.compareDates(new Date(), getReportDate()))
throw new ValidationException(Arrays.asList(new ValidationError("greaterthan.currentDate.reportDate",
getText("greaterthan.currentDate.reportDate"))));
CFinancialYear finyear = null;
try {
finyear = abstractEstimateService.getCurrentFinancialYear(getReportDate());
} catch (final ApplicationRuntimeException noFinYearExp) {
if (noFinYearExp.getMessage().equals("Financial Year Id does not exist."))
throw new ValidationException(Arrays.asList(new ValidationError(noFinYearExp.getMessage(),
noFinYearExp.getMessage())));
else
throw noFinYearExp;
}
if (finyear != null && finyear.getId() != null)
queryParamMap.put("financialyearid", finyear.getId());
queryParamMap.put("toDate", getReportDate());
}
if (!queryParamMap.isEmpty() && getFieldErrors().isEmpty()) {
BigDecimal planningBudgetPerc = new BigDecimal(0);
try {
totalGrant = budgetDetailsDAO.getBudgetedAmtForYear(queryParamMap);
planningBudgetPerc = getPlanningBudgetPercentage(queryParamMap);
} catch (final ValidationException valEx) {
logger.error(valEx);
}
// String appValue =
// worksService.getWorksConfigValue(PERCENTAGE_GRANT);
if (planningBudgetPerc != null && !planningBudgetPerc.equals(0)) {
setAppValueLabel(planningBudgetPerc.toString());
totalGrantPerc = totalGrant.multiply(planningBudgetPerc.divide(new BigDecimal(100)));
queryParamMap.put("totalGrantPerc", totalGrantPerc);
}
final Map<String, List> approvedBudgetFolioDetailsMap = abstractEstimateService
.getApprovedAppropriationDetailsForBugetHead(queryParamMap);
approvedBudgetFolioDetails = new ArrayList<BudgetFolioDetail>();
if (approvedBudgetFolioDetailsMap != null && !approvedBudgetFolioDetailsMap.isEmpty()) {
approvedBudgetFolioDetails = approvedBudgetFolioDetailsMap.get("budgetFolioList");
setReportLatestValues(approvedBudgetFolioDetailsMap);
}
}
}
private BigDecimal getPlanningBudgetPercentage(final Map<String, Object> queryParamMap) {
return budgetDetailsDAO.getPlanningPercentForYear(queryParamMap);
}
/**
* This method display report screen for budgetFolio
*/
// @SkipValidation
public String viewBudgetFolio() {
// Incase of revision estimate, get the parent's financial details
if (abstractEstimate.getParent() != null)
financialDetail = abstractEstimate.getParent().getFinancialDetails().get(0);
else
financialDetail = abstractEstimate.getFinancialDetails().get(0);
setUserDepartment(abstractEstimate.getUserDepartment().getId());
addDropdownData(BUDGET_GROUP_SEARCH_LIST, dropdownData.get(BUDGET_GROUP_LIST));
final AbstractEstimateAppropriation astractEstimateAppropriation = abstractEstimateService
.getEstimateAppropriationService().findByNamedQuery("getLatestBudgetUsageForEstimate",
abstractEstimate.getId());
if (astractEstimateAppropriation != null)
reportDate = new Date(astractEstimateAppropriation.getBudgetUsage().getUpdatedTime().getTime());
isEnableSelect = "true";
return SEARCH_BUDGET_FOLIO;
}
/*
* public void getTotalGrantAppValue() throws NumberFormatException{ if(StringUtils
* .isNotBlank(worksService.getWorksConfigValue(PERCENTAGE_GRANT)))
* appValue=worksService.getWorksConfigValue(PERCENTAGE_GRANT); if(StringUtils.isNotBlank(appValue)){ Double
* appValueDbl=Double.parseDouble(appValue); appValueDbl=appValueDbl.doubleValue() *100; appValueLabel=appValueDbl.toString();
* setAppValueLabel(appValueLabel); } }
*/
/**
* print pdf
*
* @throws JRException ,Exception
*/
// @SkipValidation
public String viewBudgetFolioPdf() throws JRException, Exception {
Map reportParams = new HashMap();
if (!StringUtils.isBlank(option) && "searchPdf".equalsIgnoreCase(option)) {
search("menu");
if (getUserDepartment() != null && getUserDepartment() != -1)
reportParams.put("departmentName", deptName);
if (financialDetail != null && financialDetail.getFunction() != null
&& financialDetail.getFunction() != null && financialDetail.getFunction().getName() != null)
reportParams.put("functionCenter", financialDetail.getFunction().getName());
if (financialDetail != null && financialDetail.getBudgetGroup() != null
&& financialDetail.getBudgetGroup().getId() != null
&& financialDetail.getBudgetGroup().getId() != -1)
reportParams.put("budgetHead", financialDetail.getBudgetGroup().getName());
if (financialDetail != null && financialDetail.getFund() != null
&& financialDetail.getFund().getId() != null && financialDetail.getFund().getId() != -1)
reportParams.put(Fund, financialDetail.getFund().getName());
reportParams.put("totalGrant", totalGrant);
reportParams.put("totalGrantPer", totalGrantPerc);
// reportParams.put("appValue", totalGrantPerc);
// getTotalGrantAppValue();
reportParams.put("appValueLabel", appValueLabel);
} else {
search(APP);
reportParams = abstractEstimateService.createBudgetFolioHeaderJasperObject(abstractEstimate, totalGrant,
totalGrantPerc);
// getTotalGrantAppValue();
reportParams.put("appValueLabel", appValueLabel);
}
reportParams.put("latestCumulative", latestCumulative);
reportParams.put("latestBalance", latestBalance);
final ReportRequest reportRequest = new ReportRequest("BudgetFolio", approvedBudgetFolioDetails, reportParams);
final ReportOutput reportOutput = reportService.createReport(reportRequest);
if (reportOutput != null && reportOutput.getReportOutputData() != null)
budgetFolioPDF = new ByteArrayInputStream(reportOutput.getReportOutputData());
return PRINT;
}
public String viewDepositFolioPDF() throws ParseException {
Map<String, Object> reportParams = null;
Fund fund = null;
CChartOfAccounts coa = null;
CFunction function = null;
Date appropriationDate = new Date();
final Accountdetailtype accountdetailtype = (Accountdetailtype) persistenceService.find(
"from Accountdetailtype where name=?", "DEPOSITCODE");
if (abstractEstimate != null && abstractEstimate.getFinancialDetails() != null
&& !abstractEstimate.getFinancialDetails().isEmpty()
&& abstractEstimate.getFinancialDetails().get(0) != null && parameters.get("fundId") == null) {
fund = abstractEstimate.getFinancialDetails().get(0).getFund();
coa = abstractEstimate.getFinancialDetails().get(0).getCoa();
if (abstractEstimate.getDepositCode() != null)
depositCodeId = abstractEstimate.getDepositCode().getId();
function = abstractEstimate.getFinancialDetails().get(0).getFunction();
} else {
Integer fundId = 0;
Long glcodeId = null;
Long functionId = null;
if (parameters.get("fundId") != null)
fundId = Integer.parseInt(parameters.get("fundId")[0]);
if (parameters.get("glcodeId") != null)
glcodeId = Long.valueOf(parameters.get("glcodeId")[0]);
if (parameters.get("depositCodeId") != null)
depositCodeId = Long.valueOf(parameters.get("depositCodeId")[0]);
if (parameters.get("functionId") != null) {
functionId = Long.valueOf(parameters.get("functionId")[0]);
function = (CFunction) persistenceService.find("from CFunction where id=?", functionId);
}
if (parameters.get("asOnDate") != null) {
final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", new Locale("en", "IN"));
appropriationDate = sdf.parse(parameters.get("asOnDate")[0]);
}
fund = (Fund) persistenceService.find("from Fund where id=?", fundId);
coa = (CChartOfAccounts) persistenceService.find("from CChartOfAccounts where id=?", glcodeId);
}
reportParams = getDepositFolioDetails(abstractEstimate, fund, coa, accountdetailtype, depositCodeId,
appropriationDate);
if (function != null)
reportParams.put(FUNCTION, function.getName());
reportParams.put("ABSTRACT_ESTIMATE", abstractEstimate);
final ReportRequest reportRequest = new ReportRequest("DepositFolio", approvedBudgetFolioDetails, reportParams);
final ReportOutput reportOutput = reportService.createReport(reportRequest);
if (reportOutput != null && reportOutput.getReportOutputData() != null)
budgetFolioPDF = new ByteArrayInputStream(reportOutput.getReportOutputData());
return PRINT;
}
public Map<String, Object> getDepositFolioDetails(final AbstractEstimate abstractEstimate, final Fund fund,
final CChartOfAccounts coa, final Accountdetailtype accountdetailtype, final Long depositCodeId,
final Date appropriationDate) {
final DepositCode depositCode = (DepositCode) persistenceService.find("from DepositCode where id=?",
depositCodeId);
final HashMap<String, Object> reportParams = new HashMap<String, Object>();
final Map<String, List> approvedBudgetFolioDetailsMap = depositWorksUsageService.getDepositFolioDetails(
abstractEstimate, fund, coa, accountdetailtype, depositCodeId, appropriationDate);
final BigDecimal getTotalDepositAmount = depositWorksUsageService.getTotalDepositWorksAmount(fund, coa,
accountdetailtype, depositCodeId, appropriationDate);
if (approvedBudgetFolioDetailsMap.isEmpty()) {
latestCumulative = 0.0D;
latestCumulativeExpense = 0.0D;
} else {
approvedBudgetFolioDetails = new ArrayList<BudgetFolioDetail>();
approvedBudgetFolioDetails = approvedBudgetFolioDetailsMap.get("depositFolioList");
final List calculatedValuesList = approvedBudgetFolioDetailsMap.get("calculatedValues");
latestCumulative = (Double) calculatedValuesList.get(0);
latestCumulativeExpense = (Double) approvedBudgetFolioDetailsMap.get("totalCumulativeExpensesIncurred")
.get(0);
}
reportParams.put("fund", fund.getName());
reportParams.put("depositCode", depositCode.getCode());
reportParams.put("depositworksName", depositCode.getCodeName());
reportParams.put("totalDeposit", getTotalDepositAmount);
reportParams.put("latestCumulative", latestCumulative);
reportParams.put("latestBalance", new BigDecimal(getTotalDepositAmount.doubleValue() - latestCumulative));
reportParams.put("latestCumulativeExpense", latestCumulativeExpense);
reportParams.put("totalActualBalanceAvailable", getTotalDepositAmount.doubleValue() - latestCumulativeExpense);
return reportParams;
}
public void setReportLatestValues(final Map<String, List> approvedBudgetFolioDetailsMap) {
final List calculatedValuesList = approvedBudgetFolioDetailsMap.get("calculatedValues");
latestCumulative = (Double) calculatedValuesList.get(0);
latestBalance = (BigDecimal) calculatedValuesList.get(1);
}
public BigDecimal getTotalGrant() {
return totalGrant;
}
public BigDecimal getTotalGrantPerc() {
return totalGrantPerc;
}
public List<BudgetFolioDetail> getApprovedBudgetFolioDetails() {
return approvedBudgetFolioDetails;
}
public InputStream getBudgetFolioPDF() {
return budgetFolioPDF;
}
public void setReportService(final ReportService reportService) {
this.reportService = reportService;
}
public void setApprovedBudgetFolioDetails(final List<BudgetFolioDetail> approvedBudgetFolioDetails) {
this.approvedBudgetFolioDetails = approvedBudgetFolioDetails;
}
public Double getLatestCumulative() {
return latestCumulative;
}
public BigDecimal getLatestBalance() {
return latestBalance;
}
public Map<String, Object> getQueryParamMap() {
return queryParamMap;
}
public void setQueryParamMap(final Map<String, Object> queryParamMap) {
this.queryParamMap = queryParamMap;
}
public Date getReportDate() {
return reportDate;
}
public void setReportDate(final Date reportDate) {
this.reportDate = reportDate;
}
public void setBudgetDetailsDAO(final BudgetDetailsDAO budgetDetailsDAO) {
this.budgetDetailsDAO = budgetDetailsDAO;
}
public String getOption() {
return option;
}
public void setOption(final String option) {
this.option = option;
}
public Map<String, String> getMandatoryFields() {
return mandatoryFields;
}
public void setMandatoryFields(final Map<String, String> mandatoryFields) {
this.mandatoryFields = mandatoryFields;
}
@Override
public void validate() {
if (skipBudget && parameters.get("actionName") != null) {
if (financialDetail.getCoa() == null || financialDetail.getCoa() != null
&& (financialDetail.getCoa().getId() == null || financialDetail.getCoa().getId() == -1))
addFieldError("depoist.accountCode", getText("estimate.deposit.accountCode.mandatory"));
if (depositCodeId == null || depositCodeId == -1)
addFieldError("depoistCode", getText("estimate.depositCode.mandatory"));
}
if (parameters.get("actionName") != null && parameters.get("actionName")[0] != null
&& parameters.get("actionName")[0].equals(BUDGET_DETAILS_SAVE))
if (financialDetail.getBudgetGroup() != null && financialDetail.getBudgetGroup().getId() != null
&& financialDetail.getBudgetGroup().getId() != -1)
if (financialDetail.getBudgetGroup().getMaxCode().getGlcode()
.startsWith(worksService.getWorksConfigValue(SCHEME_MANDATORYCHECK_BUDGETHEAD))) {
if (financialDetail.getScheme() == null || financialDetail.getScheme() != null
&& financialDetail.getScheme().getId() == null || financialDetail.getScheme() != null
&& financialDetail.getScheme().getId() == -1)
addActionError(getText("mandatory.scheme"));
if (financialDetail.getSubScheme() == null || financialDetail.getSubScheme() != null
&& financialDetail.getSubScheme().getId() == null || financialDetail.getSubScheme() != null
&& financialDetail.getSubScheme().getId() == -1)
addActionError(getText("mandatory.subScheme"));
}
if ("searchdetails".equalsIgnoreCase(option)) {
if (!StringUtils.isBlank(mandatoryFields.get(Fund))
&& (financialDetail.getFund() == null || financialDetail.getFund().getId() == null || financialDetail
.getFund().getId() == -1))
addFieldError(Fund, getText("budgetfolio.fund.mandatory"));
if (!StringUtils.isBlank(mandatoryFields.get("department"))
&& (userDepartment == null || userDepartment == -1))
addFieldError("userDepartment", getText("budgetfolio.user.department.mandatory"));
if (financialDetail.getFunction() == null || financialDetail.getFunction().getId() == null
|| financialDetail.getFunction().getId() == -1)
addFieldError(FUNCTION, getText("budgetfolio.function.mandatory"));
if (financialDetail.getBudgetGroup() == null || financialDetail.getBudgetGroup().getId() == null
|| financialDetail.getBudgetGroup().getId() == -1)
addFieldError("budgetGroup", getText("budgetfolio.budgetGroup.mandatory"));
if (finYearId == null || finYearId == -1)
addFieldError("finYearId", getText("budgetfolio.finYear.mandatory"));
}
}
public Boolean isSkipBudgetCheck() {
final List<String> depositTypeList = getAppConfigValuesToSkipBudget();
logger.info("lenght of appconfig values>>>>>> " + depositTypeList.size());
if (abstractEstimate != null && abstractEstimate.getId() != null)
for (final String type : depositTypeList)
if (type.equals(abstractEstimate.getNatureOfWork().getName()))
skipBudget = true;
return skipBudget;
}
private FinancingSource getMaxFinancingSource(final List<FinancingSource> financingSources) {
double max = 0.0;
FinancingSource maxFinSource = null;
for (final FinancingSource finSource : financingSources)
if (finSource != null)
if (finSource.getPercentage() > max) {
max = finSource.getPercentage();
maxFinSource = finSource;
}
return maxFinSource;
}
private String generateFinYrList(final List<CFinancialYear> finYrList) {
final Date todaysDate = new Date();
final StringBuffer finStrBfr = new StringBuffer();
for (final CFinancialYear yr : finYrList)
if (yr.getStartingDate().compareTo(todaysDate) <= 0 && yr.getEndingDate().compareTo(todaysDate) >= 0)
finStrBfr.append("id:" + yr.getId() + "--"
+ DateUtils.getFormattedDate(yr.getStartingDate(), "dd/MM/yyyy") + "--"
+ DateUtils.getFormattedDate(todaysDate, "dd/MM/yyyy"));
else
finStrBfr.append("id:" + yr.getId() + "--"
+ DateUtils.getFormattedDate(yr.getStartingDate(), "dd/MM/yyyy") + "--"
+ DateUtils.getFormattedDate(yr.getEndingDate(), "dd/MM/yyyy"));
return finStrBfr.toString();
}
public String getDeptName() {
return deptName;
}
public void setDeptName(final String deptName) {
this.deptName = deptName;
}
public List<String> getAppConfigValuesToSkipBudget() {
return worksService.getNatureOfWorkAppConfigValues(MODULE_NAME, KEY_NAME);
}
public String getAppValue() {
return appValue;
}
public void setAppValue(final String appValue) {
this.appValue = appValue;
}
public AbstractEstimateService getAbstractEstimateService() {
return abstractEstimateService;
}
public String getAppValueLabel() {
return appValueLabel;
}
public void setAppValueLabel(final String appValueLabel) {
this.appValueLabel = appValueLabel;
}
public void setDepositWorksUsageService(final DepositWorksUsageService depositWorksUsageService) {
this.depositWorksUsageService = depositWorksUsageService;
}
public boolean isSkipBudget() {
return skipBudget;
}
public void setSkipBudget(final boolean skipBudget) {
this.skipBudget = skipBudget;
}
public Long getDepositCodeId() {
return depositCodeId;
}
public void setDepositCodeId(final Long depositCodeId) {
this.depositCodeId = depositCodeId;
}
public void setDepositCodeService(final PersistenceService<DepositCode, Long> depositCodeService) {
this.depositCodeService = depositCodeService;
}
public Date getAsOnDate() {
return asOnDate;
}
public void setAsOnDate(final Date asOnDate) {
this.asOnDate = asOnDate;
}
public void setLatestCumulative(final Double latestCumulative) {
this.latestCumulative = latestCumulative;
}
public BigDecimal getTotalDepositAmount() {
return totalDepositAmount;
}
public void setTotalDepositAmount(final BigDecimal totalDepositAmount) {
this.totalDepositAmount = totalDepositAmount;
}
public void setLatestBalance(final BigDecimal latestBalance) {
this.latestBalance = latestBalance;
}
public String getCode() {
return code;
}
public void setCode(final String code) {
this.code = code;
}
public String getIsEnableSelect() {
return isEnableSelect;
}
public void setIsEnableSelect(final String isEnableSelect) {
this.isEnableSelect = isEnableSelect;
}
public Integer getFundId() {
return fundId;
}
public void setFundId(final Integer fundId) {
this.fundId = fundId;
}
public Long getGlcodeId() {
return glcodeId;
}
public void setGlcodeId(final Long glcodeId) {
this.glcodeId = glcodeId;
}
public Integer getFunctionId() {
return functionId;
}
public void setFunctionId(final Integer functionId) {
this.functionId = functionId;
}
public void setUserService(final UserService userService) {
this.userService = userService;
}
public String getSourcepage() {
return sourcepage;
}
public void setSourcepage(final String sourcepage) {
this.sourcepage = sourcepage;
}
public String getSource() {
return source;
}
public void setSource(final String source) {
this.source = source;
}
public List<MultiYearEstimate> getActionMultiYearEstimateValues() {
return actionMultiYearEstimateValues;
}
public void setActionMultiYearEstimateValues(final List<MultiYearEstimate> actionMultiYearEstimateValues) {
this.actionMultiYearEstimateValues = actionMultiYearEstimateValues;
}
public String getRoadCutDepCodeFlag() {
return roadCutDepCodeFlag;
}
public void setRoadCutDepCodeFlag(final String roadCutDepCodeFlag) {
this.roadCutDepCodeFlag = roadCutDepCodeFlag;
}
public Long getUserDepartment() {
return userDepartment;
}
public void setUserDepartment(final Long userDepartment) {
this.userDepartment = userDepartment;
}
public String getCurrentFinancialYearId() {
return currentFinancialYearId;
}
public void setCurrentFinancialYearId(final String currentFinancialYearId) {
this.currentFinancialYearId = currentFinancialYearId;
}
public String getFinYearRangeStr() {
return finYearRangeStr;
}
public Integer getFinYearId() {
return finYearId;
}
public void setFinYearId(final Integer finYearId) {
this.finYearId = finYearId;
}
public String getBudgetHeadGlcode() {
return budgetHeadGlcode;
}
public void setBudgetHeadGlcode(final String budgetHeadGlcode) {
this.budgetHeadGlcode = budgetHeadGlcode;
}
}