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.cab.document.service;
017
018 import java.util.List;
019 import java.util.Set;
020
021 import org.kuali.kfs.module.cab.businessobject.Pretag;
022 import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableActionHistory;
023 import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableDocument;
024 import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableItemAsset;
025 import org.kuali.kfs.module.cab.document.web.PurApLineSession;
026
027
028 /**
029 * This class declares methods used by CAB PurAp Line process
030 */
031 public interface PurApLineService {
032
033 /**
034 * Check the payments in given asset lines have different object sub types.
035 *
036 * @param selectedLines
037 * @return
038 */
039 boolean allocateLinesHasDifferentObjectSubTypes(List<PurchasingAccountsPayableItemAsset> targetLines, PurchasingAccountsPayableItemAsset sourceLine);
040
041 /**
042 * Check the payments in given asset lines have different object sub types.
043 *
044 * @param selectedLines
045 * @return
046 */
047 boolean mergeLinesHasDifferentObjectSubTypes(List<PurchasingAccountsPayableItemAsset> mergeLines);
048
049 /**
050 * Changes percent quantities to a quantity of 1 for selected line item.
051 *
052 * @param itemAsset Selected line item.
053 * @param actionsTake Action taken history.
054 */
055 void processPercentPayment(PurchasingAccountsPayableItemAsset itemAsset, List<PurchasingAccountsPayableActionHistory> actionsTaken);
056
057 /**
058 * Split the selected line item quantity and create a new line item.
059 *
060 * @param itemAsset Selected line item.
061 * @param actionsTaken Action taken history.
062 * @return
063 */
064 void processSplit(PurchasingAccountsPayableItemAsset splitItemAsset, List<PurchasingAccountsPayableActionHistory> actionsTakeHistory);
065
066 /**
067 * Save purApDoc, item assets and account lines for persistence
068 *
069 * @param purApDocs
070 * @param purApLineSession
071 */
072 void processSaveBusinessObjects(List<PurchasingAccountsPayableDocument> purApDocs, PurApLineSession purApLineSession);
073
074 /**
075 * Build PurAp document collection and line item collection.
076 *
077 * @param purApDocs
078 */
079 void buildPurApItemAssetList(List<PurchasingAccountsPayableDocument> purApDocs);
080
081 /**
082 * Handle additional charge allocate in the same document.
083 *
084 * @param selectedLineItem
085 * @param allocateTargetLines
086 * @param purApLineSession
087 * @param purApDocs
088 * @return
089 */
090 boolean processAllocate(PurchasingAccountsPayableItemAsset selectedLineItem, List<PurchasingAccountsPayableItemAsset> allocateTargetLines, List<PurchasingAccountsPayableActionHistory> actionsTakeHistory, List<PurchasingAccountsPayableDocument> purApDocs, boolean initiateFromBatch);
091
092 /**
093 * Get the target lines based on allocation line type
094 *
095 * @param selectedLineItem
096 * @param purApDocs
097 * @return
098 */
099 List<PurchasingAccountsPayableItemAsset> getAllocateTargetLines(PurchasingAccountsPayableItemAsset selectedLineItem, List<PurchasingAccountsPayableDocument> purApDocs);
100
101 /**
102 * Get the selected merge lines.
103 *
104 * @param isMergeAll
105 * @param purApDocs
106 * @return
107 */
108 List<PurchasingAccountsPayableItemAsset> getSelectedMergeLines(boolean isMergeAll, List<PurchasingAccountsPayableDocument> purApDocs);
109
110 /**
111 * Reset selectedValue for all line items
112 *
113 * @param purApDocs
114 */
115 void resetSelectedValue(List<PurchasingAccountsPayableDocument> purApDocs);
116
117 /**
118 * Merge line items.
119 *
120 * @param mergeLines
121 * @param purApLineSession
122 * @param isMergeAll
123 */
124 void processMerge(List<PurchasingAccountsPayableItemAsset> mergeLines, List<PurchasingAccountsPayableActionHistory> actionsTakeHistory, boolean isMergeAll);
125
126 /**
127 * Check if the merge action is merge all.
128 *
129 * @param purApDocs
130 * @return
131 */
132 boolean isMergeAllAction(List<PurchasingAccountsPayableDocument> purApDocs);
133
134 /**
135 * For line items in itemAssets if they are not in the same PurAp document, check if there is pending additional charges
136 * allocation.
137 *
138 * @param itemAssets
139 * @return
140 */
141 boolean isAdditionalChargePending(List<PurchasingAccountsPayableItemAsset> itemAssets);
142
143 /**
144 * Check if there is TI indicator exists in the given itemAssets List.
145 *
146 * @param itemAssets
147 * @return
148 */
149 boolean isTradeInIndExistInSelectedLines(List<PurchasingAccountsPayableItemAsset> itemAssets);
150
151 /**
152 * Check if there is trade-in allowance not allocated yet.
153 *
154 * @param purApDocs
155 * @return
156 */
157 boolean isTradeInAllowanceExist(List<PurchasingAccountsPayableDocument> purApDocs);
158
159 /**
160 * Check if there is additional charge line exist in all lines.
161 *
162 * @param purApDocs
163 * @return
164 */
165 boolean isAdditionalChargeExistInAllLines(List<PurchasingAccountsPayableDocument> purApDocs);
166
167 /**
168 * Get preTag if exists for give line item.
169 *
170 * @param purchaseOrderIdentifier
171 * @param lineItemNumber
172 * @return
173 */
174 Pretag getPreTagLineItem(Integer purchaseOrderIdentifier, Integer lineItemNumber);
175
176 /**
177 * In-activate document when all the associated items are inactive.
178 *
179 * @param selectedDoc
180 */
181 void conditionallyUpdateDocumentStatusAsProcessed(PurchasingAccountsPayableDocument selectedDoc);
182
183 /**
184 * Check if more than one pre-tagging exists for given itemLineNumber and PO_ID.
185 *
186 * @param purchaseOrderIdentifier
187 * @param itemLineNumbers
188 * @return
189 */
190 boolean isMultipleTagExisting(Integer purchaseOrderIdentifier, Set<Integer> itemLineNumbers);
191
192 /**
193 * Check pretag existing
194 *
195 * @param newTag
196 * @return
197 */
198 boolean isPretaggingExisting(Pretag newTag);
199 }