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
017 package org.kuali.kfs.module.purap.document;
018
019 import static org.kuali.kfs.sys.KFSConstants.GL_CREDIT_CODE;
020
021 import java.util.ArrayList;
022 import java.util.Iterator;
023 import java.util.List;
024
025 import org.kuali.kfs.module.purap.PurapConstants.PurapDocTypeCodes;
026 import org.kuali.kfs.module.purap.PurapConstants.PurchaseOrderStatuses;
027 import org.kuali.kfs.module.purap.document.service.PurapService;
028 import org.kuali.kfs.module.purap.document.service.PurchaseOrderService;
029 import org.kuali.kfs.module.purap.service.PurapGeneralLedgerService;
030 import org.kuali.kfs.sys.KFSConstants;
031 import org.kuali.kfs.sys.businessobject.AccountingLine;
032 import org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntry;
033 import org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntrySourceDetail;
034 import org.kuali.kfs.sys.context.SpringContext;
035 import org.kuali.rice.kew.dto.DocumentRouteStatusChangeDTO;
036 import org.kuali.rice.kns.rule.event.KualiDocumentEvent;
037
038 /**
039 * Purchase Order Close Document
040 */
041 public class PurchaseOrderCloseDocument extends PurchaseOrderDocument {
042 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchaseOrderCloseDocument.class);
043
044 /**
045 * Default constructor.
046 */
047 public PurchaseOrderCloseDocument() {
048 super();
049 }
050
051 /**
052 * General Ledger pending entries are not created on save for this document. They are created when the document has been finally
053 * processed. Overriding this method so that entries are not created yet.
054 *
055 * @see org.kuali.kfs.module.purap.document.PurchaseOrderDocument#prepareForSave(org.kuali.rice.kns.rule.event.KualiDocumentEvent)
056 */
057 @Override
058 public void prepareForSave(KualiDocumentEvent event) {
059 LOG.info("prepareForSave(KualiDocumentEvent) do not create gl entries");
060 setSourceAccountingLines(new ArrayList());
061 setGeneralLedgerPendingEntries(new ArrayList());
062 }
063
064 @Override
065 public List<Long> getWorkflowEngineDocumentIdsToLock() {
066 return super.getWorkflowEngineDocumentIdsToLock();
067 }
068
069 /**
070 * When Purchase Order Close document has been Processed through Workflow, the general ledger entries are created and the PO
071 * status changes to "CLOSED".
072 *
073 * @see org.kuali.kfs.module.purap.document.PurchaseOrderDocument#doRouteStatusChange()
074 */
075 @Override
076 public void doRouteStatusChange(DocumentRouteStatusChangeDTO statusChangeEvent) {
077 super.doRouteStatusChange(statusChangeEvent);
078
079 // DOCUMENT PROCESSED
080 if (getDocumentHeader().getWorkflowDocument().stateIsProcessed()) {
081 // generate GL entries
082 SpringContext.getBean(PurapGeneralLedgerService.class).generateEntriesClosePurchaseOrder(this);
083
084 // update indicators
085 SpringContext.getBean(PurchaseOrderService.class).setCurrentAndPendingIndicatorsForApprovedPODocuments(this);
086
087 // set purap status
088 SpringContext.getBean(PurapService.class).updateStatus(this, PurchaseOrderStatuses.CLOSED);
089 }
090 // DOCUMENT DISAPPROVED
091 else if (getDocumentHeader().getWorkflowDocument().stateIsDisapproved()) {
092 SpringContext.getBean(PurchaseOrderService.class).setCurrentAndPendingIndicatorsForDisapprovedChangePODocuments(this);
093 }
094 // DOCUMENT CANCELLED
095 else if (getDocumentHeader().getWorkflowDocument().stateIsCanceled()) {
096 SpringContext.getBean(PurchaseOrderService.class).setCurrentAndPendingIndicatorsForCancelledChangePODocuments(this);
097 }
098
099 }
100
101 /**
102 * @see org.kuali.module.purap.rules.PurapAccountingDocumentRuleBase#customizeExplicitGeneralLedgerPendingEntry(org.kuali.kfs.sys.document.AccountingDocument,
103 * org.kuali.kfs.sys.businessobject.AccountingLine, org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntry)
104 */
105 @Override
106 public void customizeExplicitGeneralLedgerPendingEntry(GeneralLedgerPendingEntrySourceDetail postable, GeneralLedgerPendingEntry explicitEntry) {
107 super.customizeExplicitGeneralLedgerPendingEntry(postable, explicitEntry);
108
109 SpringContext.getBean(PurapGeneralLedgerService.class).customizeGeneralLedgerPendingEntry(this, (AccountingLine)postable, explicitEntry, getPurapDocumentIdentifier(), GL_CREDIT_CODE, PurapDocTypeCodes.PO_DOCUMENT, true);
110
111 // don't think i should have to override this, but default isn't getting the right PO doc
112 explicitEntry.setFinancialDocumentTypeCode(PurapDocTypeCodes.PO_CLOSE_DOCUMENT);
113 explicitEntry.setFinancialDocumentApprovedCode(KFSConstants.PENDING_ENTRY_APPROVED_STATUS_CODE.APPROVED);
114 }
115
116 @Override
117 public List<GeneralLedgerPendingEntrySourceDetail> getGeneralLedgerPendingEntrySourceDetails() {
118 List<GeneralLedgerPendingEntrySourceDetail> accountingLines = new ArrayList<GeneralLedgerPendingEntrySourceDetail>();
119 if (getGlOnlySourceAccountingLines() != null) {
120 Iterator iter = getGlOnlySourceAccountingLines().iterator();
121 while (iter.hasNext()) {
122 accountingLines.add((GeneralLedgerPendingEntrySourceDetail) iter.next());
123 }
124 }
125 return accountingLines;
126 }
127
128
129 }