001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.module.ld.document.validation.impl;
017
018 import java.util.HashMap;
019 import java.util.List;
020 import java.util.Map;
021
022 import org.kuali.kfs.module.ld.LaborConstants;
023 import org.kuali.kfs.module.ld.LaborKeyConstants;
024 import org.kuali.kfs.module.ld.LaborPropertyConstants;
025 import org.kuali.kfs.module.ld.businessobject.ExpenseTransferAccountingLine;
026 import org.kuali.kfs.module.ld.document.LaborExpenseTransferDocumentBase;
027 import org.kuali.kfs.module.ld.document.SalaryExpenseTransferDocument;
028 import org.kuali.kfs.module.ld.service.LaborLedgerPendingEntryService;
029 import org.kuali.kfs.sys.KFSConstants;
030 import org.kuali.kfs.sys.KFSPropertyConstants;
031 import org.kuali.kfs.sys.context.SpringContext;
032 import org.kuali.kfs.sys.document.AccountingDocument;
033 import org.kuali.kfs.sys.document.validation.GenericValidation;
034 import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent;
035 import org.kuali.rice.kns.document.Document;
036 import org.kuali.rice.kns.util.GlobalVariables;
037 import org.kuali.rice.kns.util.KNSConstants;
038
039 /**
040 * Validates that an accounting document does not have any pending
041 * labor ledger entries with the same emplID, periodCode, accountNumber, objectCode
042 */
043 public class BenefitExpenseTransferPendingLegerEntryValidation extends GenericValidation {
044 private Document documentForValidation;
045
046 /**
047 * Validates that the accounting lines in the accounting document does not have
048 * any pending labor ledger entries with the same account, sub-account, object, sub-object, fiscal year, fiscal period
049 * @see org.kuali.kfs.validation.Validation#validate(java.lang.Object[])
050 */
051 public boolean validate(AttributedDocumentEvent event) {
052 boolean result = true;
053
054 Document documentForValidation = getDocumentForValidation();
055 AccountingDocument accountingDocument = (AccountingDocument) documentForValidation;
056
057 result = !hasPendingLedgerEntry(accountingDocument);
058 return result ;
059 }
060
061 /**
062 * Checks whether amounts by object codes are unchanged
063 *
064 * @param accountingDocumentForValidation The accounting document from which the Pending Entries are checked
065 * @return True if the given accounting documents Pending Entries do not conflict with current PEs, false otherwise.
066 */
067 protected boolean hasPendingLedgerEntry(AccountingDocument accountingDocument) {
068 boolean entriesExist = false ;
069
070 LaborExpenseTransferDocumentBase expenseTransferDocument = (LaborExpenseTransferDocumentBase) accountingDocument;
071 List<ExpenseTransferAccountingLine> sourceAccountingLines = expenseTransferDocument.getSourceAccountingLines();
072
073 Map<String, String> fieldValues = new HashMap<String, String>();
074 for (ExpenseTransferAccountingLine sourceAccountingLine : sourceAccountingLines) {
075 //account, sub-account, object and sub-object and the fiscal year and fiscal period
076
077 String subAccountNumber = sourceAccountingLine.getSubAccountNumber();
078 String accountNumber = sourceAccountingLine.getAccountNumber();
079 String objectCode = sourceAccountingLine.getFinancialObjectCode();
080 String subObjectCode = sourceAccountingLine.getFinancialSubObjectCode();
081 Integer fiscalYear = sourceAccountingLine.getPayrollEndDateFiscalYear();
082 String periodCode = sourceAccountingLine.getPayrollEndDateFiscalPeriodCode();
083 String documentNumber = accountingDocument.getDocumentNumber();
084
085 fieldValues.put(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_PERIOD_CODE, periodCode);
086 fieldValues.put(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_YEAR, fiscalYear+"");
087 fieldValues.put(KFSPropertyConstants.ACCOUNT_NUMBER, accountNumber);
088 fieldValues.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, subAccountNumber);
089 fieldValues.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, objectCode);
090 fieldValues.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, subObjectCode);
091 fieldValues.put(KFSPropertyConstants.DOCUMENT_NUMBER, KNSConstants.NOT_LOGICAL_OPERATOR + documentNumber);
092
093 if (SpringContext.getBean(LaborLedgerPendingEntryService.class).hasPendingLaborLedgerEntry(fieldValues)) {
094 GlobalVariables.getMessageMap().putError(LaborConstants.EMPLOYEE_LOOKUP_ERRORS, LaborKeyConstants.PENDING_BENEFIT_TRANSFER_ERROR, accountNumber, objectCode, periodCode, fiscalYear+"");
095 return true;
096 }
097 }
098 return entriesExist ;
099 }
100
101 /**
102 * Gets the documentForValidation attribute.
103 * @return Returns the documentForValidation.
104 */
105 public Document getDocumentForValidation() {
106 return documentForValidation;
107 }
108
109 /**
110 * Sets the accountingDocumentForValidation attribute value.
111 * @param documentForValidation The documentForValidation to set.
112 */
113 public void setDocumentForValidation(Document documentForValidation) {
114 this.documentForValidation = documentForValidation;
115 }
116 }