1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.select.document.service.impl;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
20  import org.kuali.ole.docstore.common.document.*;
21  import org.kuali.ole.DocumentUniqueIDPrefix;
22  import org.kuali.ole.docstore.common.document.content.instance.xstream.HoldingOlemlRecordProcessor;
23  import org.kuali.ole.docstore.common.document.content.instance.xstream.InstanceOlemlRecordProcessor;
24  import org.kuali.ole.docstore.common.document.content.instance.xstream.ItemOlemlRecordProcessor;
25  import org.kuali.ole.integration.purap.CapitalAssetSystem;
26  import org.kuali.ole.module.purap.PurapConstants;
27  import org.kuali.ole.module.purap.PurapConstants.PurchaseOrderStatuses;
28  import org.kuali.ole.module.purap.businessobject.*;
29  import org.kuali.ole.module.purap.document.PurchaseOrderDocument;
30  import org.kuali.ole.module.purap.document.PurchasingAccountsPayableDocument;
31  import org.kuali.ole.module.purap.document.RequisitionDocument;
32  import org.kuali.ole.module.purap.document.service.OlePurapService;
33  import org.kuali.ole.select.OleSelectConstant;
34  import org.kuali.ole.select.OleSelectNotificationConstant;
35  import org.kuali.ole.select.businessobject.*;
36  import org.kuali.ole.select.document.OlePurchaseOrderDocument;
37  import org.kuali.ole.select.document.OleRequisitionDocument;
38  import org.kuali.ole.select.document.service.OlePurchaseOrderDocumentHelperService;
39  import org.kuali.ole.select.document.service.OleRequestorService;
40  import org.kuali.ole.select.document.service.OleSelectDocumentService;
41  import org.kuali.ole.select.service.BibInfoWrapperService;
42  import org.kuali.ole.select.service.FileProcessingService;
43  import org.kuali.ole.select.service.OleUrlResolver;
44  import org.kuali.ole.select.service.impl.BibInfoWrapperServiceImpl;
45  import org.kuali.ole.sys.OLEConstants;
46  import org.kuali.ole.sys.context.SpringContext;
47  import org.kuali.rice.core.api.config.property.ConfigurationService;
48  import org.kuali.rice.core.api.datetime.DateTimeService;
49  import org.kuali.rice.core.api.util.type.KualiDecimal;
50  import org.kuali.rice.core.api.util.type.KualiInteger;
51  import org.kuali.rice.kew.api.WorkflowDocument;
52  import org.kuali.rice.kew.api.exception.WorkflowException;
53  import org.kuali.rice.kim.api.identity.Person;
54  import org.kuali.rice.kim.api.identity.PersonService;
55  import org.kuali.rice.krad.UserSession;
56  import org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent;
57  import org.kuali.rice.krad.service.KRADServiceLocator;
58  import org.kuali.rice.krad.util.GlobalVariables;
59  import java.math.BigDecimal;
60  import java.util.*;
61  
62  public class OlePurchaseOrderDocumentHelperServiceImpl implements OlePurchaseOrderDocumentHelperService {
63  
64      protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OlePurchaseOrderDocumentHelperServiceImpl.class);
65      private final String UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING = "docAction=checkIn&stringContent=";
66      private final String CHECKOUT_DOCSTORE_RECORD_QUERY_STRING = "docAction=checkOut&uuid=";
67      private final String CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING = "docAction=ingestContent&stringContent=";
68      private ItemOlemlRecordProcessor itemOlemlRecordProcessor;
69      private HoldingOlemlRecordProcessor holdingOlemlRecordProcessor;
70      private InstanceOlemlRecordProcessor instanceOlemlRecordProcessor;
71      private transient OleUrlResolver oleUrlResolver;
72      private static transient OlePatronRecordHandler olePatronRecordHandler;
73      private static transient OlePatronDocumentList olePatronDocumentList;
74      private static transient OleSelectDocumentService oleSelectDocumentService;
75      private static transient OlePurapService olePurapService;
76      private DocstoreClientLocator docstoreClientLocator;
77      protected ConfigurationService kualiConfigurationService;
78  
79      public DocstoreClientLocator getDocstoreClientLocator() {
80          if (docstoreClientLocator == null) {
81              docstoreClientLocator = SpringContext.getBean(DocstoreClientLocator.class);
82          }
83          return docstoreClientLocator;
84      }
85      public static OleSelectDocumentService getOleSelectDocumentService() {
86          if (oleSelectDocumentService == null) {
87              oleSelectDocumentService = SpringContext.getBean(OleSelectDocumentService.class);
88          }
89          return oleSelectDocumentService;
90      }
91  
92      public static void setOleSelectDocumentService(OleSelectDocumentService oleSelectDocumentService) {
93          OlePurchaseOrderDocumentHelperServiceImpl.oleSelectDocumentService = oleSelectDocumentService;
94      }
95  
96      public static OlePatronDocumentList getOlePatronDocumentList() {
97          if (olePatronDocumentList == null) {
98              olePatronDocumentList = SpringContext.getBean(OlePatronDocumentList.class);
99          }
100         return olePatronDocumentList;
101     }
102 
103     public static void setOlePatronDocumentList(OlePatronDocumentList olePatronDocumentList) {
104         OlePurchaseOrderDocumentHelperServiceImpl.olePatronDocumentList = olePatronDocumentList;
105     }
106 
107 
108     public OlePatronRecordHandler getOlePatronRecordHandler() {
109         if (null == olePatronRecordHandler) {
110             olePatronRecordHandler = new OlePatronRecordHandler();
111         }
112         return olePatronRecordHandler;
113     }
114 
115     public void setOlePatronRecordHandler(OlePatronRecordHandler olePatronRecordHandler) {
116         this.olePatronRecordHandler = olePatronRecordHandler;
117     }
118 
119     public static OlePurapService getOlePurapService() {
120         if (olePurapService == null) {
121             olePurapService = SpringContext.getBean(OlePurapService.class);
122         }
123         return olePurapService;
124     }
125 
126     public static void setOlePurapService(OlePurapService olePurapService) {
127         OlePurchaseOrderDocumentHelperServiceImpl.olePurapService = olePurapService;
128     }
129 
130 
131     
132 
133 
134 
135 
136     @Override
137     public void populatePurchaseOrderFromRequisition(PurchaseOrderDocument purchaseOrderDoc, RequisitionDocument requisitionDoc) {
138         LOG.debug("Inside populatePurchaseOrderFromRequisition of OlePurchaseOrderDocumentHelperServiceImpl");
139         OlePurchaseOrderDocument purchaseOrderDocument = (OlePurchaseOrderDocument) purchaseOrderDoc;
140         OleRequisitionDocument requisitionDocument = (OleRequisitionDocument) requisitionDoc;
141         purchaseOrderDocument.setPurchaseOrderCreateTimestamp(SpringContext.getBean(DateTimeService.class).getCurrentTimestamp());
142         purchaseOrderDocument.getDocumentHeader().setOrganizationDocumentNumber(requisitionDocument.getDocumentHeader().getOrganizationDocumentNumber());
143         purchaseOrderDocument.getDocumentHeader().setDocumentDescription(requisitionDocument.getDocumentHeader().getDocumentDescription());
144         purchaseOrderDocument.getDocumentHeader().setExplanation(requisitionDocument.getDocumentHeader().getExplanation());
145         purchaseOrderDocument.setBillingName(requisitionDocument.getBillingName());
146         purchaseOrderDocument.setBillingLine1Address(requisitionDocument.getBillingLine1Address());
147         purchaseOrderDocument.setBillingLine2Address(requisitionDocument.getBillingLine2Address());
148         purchaseOrderDocument.setBillingCityName(requisitionDocument.getBillingCityName());
149         purchaseOrderDocument.setBillingStateCode(requisitionDocument.getBillingStateCode());
150         purchaseOrderDocument.setBillingPostalCode(requisitionDocument.getBillingPostalCode());
151         purchaseOrderDocument.setBillingCountryCode(requisitionDocument.getBillingCountryCode());
152         purchaseOrderDocument.setBillingPhoneNumber(requisitionDocument.getBillingPhoneNumber());
153 
154         purchaseOrderDocument.setReceivingName(requisitionDocument.getReceivingName());
155         purchaseOrderDocument.setReceivingCityName(requisitionDocument.getReceivingCityName());
156         purchaseOrderDocument.setReceivingLine1Address(requisitionDocument.getReceivingLine1Address());
157         purchaseOrderDocument.setReceivingLine2Address(requisitionDocument.getReceivingLine2Address());
158         purchaseOrderDocument.setReceivingStateCode(requisitionDocument.getReceivingStateCode());
159         purchaseOrderDocument.setReceivingPostalCode(requisitionDocument.getReceivingPostalCode());
160         purchaseOrderDocument.setReceivingCountryCode(requisitionDocument.getReceivingCountryCode());
161         purchaseOrderDocument.setAddressToVendorIndicator(requisitionDocument.getAddressToVendorIndicator());
162 
163         purchaseOrderDocument.setDeliveryBuildingCode(requisitionDocument.getDeliveryBuildingCode());
164         purchaseOrderDocument.setDeliveryBuildingRoomNumber(requisitionDocument.getDeliveryBuildingRoomNumber());
165         purchaseOrderDocument.setDeliveryBuildingName(requisitionDocument.getDeliveryBuildingName());
166         purchaseOrderDocument.setDeliveryCampusCode(requisitionDocument.getDeliveryCampusCode());
167         purchaseOrderDocument.setDeliveryCityName(requisitionDocument.getDeliveryCityName());
168         purchaseOrderDocument.setDeliveryCountryCode(requisitionDocument.getDeliveryCountryCode());
169         purchaseOrderDocument.setDeliveryInstructionText(requisitionDocument.getDeliveryInstructionText());
170         purchaseOrderDocument.setDeliveryBuildingLine1Address(requisitionDocument.getDeliveryBuildingLine1Address());
171         purchaseOrderDocument.setDeliveryBuildingLine2Address(requisitionDocument.getDeliveryBuildingLine2Address());
172         purchaseOrderDocument.setDeliveryPostalCode(requisitionDocument.getDeliveryPostalCode());
173         purchaseOrderDocument.setDeliveryRequiredDate(requisitionDocument.getDeliveryRequiredDate());
174         purchaseOrderDocument.setDeliveryRequiredDateReasonCode(requisitionDocument.getDeliveryRequiredDateReasonCode());
175         purchaseOrderDocument.setDeliveryStateCode(requisitionDocument.getDeliveryStateCode());
176         purchaseOrderDocument.setDeliveryToEmailAddress(requisitionDocument.getDeliveryToEmailAddress());
177         purchaseOrderDocument.setDeliveryToName(requisitionDocument.getDeliveryToName());
178         purchaseOrderDocument.setDeliveryToPhoneNumber(requisitionDocument.getDeliveryToPhoneNumber());
179         purchaseOrderDocument.setDeliveryBuildingOtherIndicator(requisitionDocument.isDeliveryBuildingOtherIndicator());
180         purchaseOrderDocument.setPurchaseOrderTypeId(requisitionDocument.getPurchaseOrderTypeId());
181         purchaseOrderDocument.setPurchaseOrderBeginDate(requisitionDocument.getPurchaseOrderBeginDate());
182         purchaseOrderDocument.setPurchaseOrderCostSourceCode(requisitionDocument.getPurchaseOrderCostSourceCode());
183         purchaseOrderDocument.setPostingYear(requisitionDocument.getPostingYear());
184         purchaseOrderDocument.setPurchaseOrderEndDate(requisitionDocument.getPurchaseOrderEndDate());
185         purchaseOrderDocument.setChartOfAccountsCode(requisitionDocument.getChartOfAccountsCode());
186         purchaseOrderDocument.setDocumentFundingSourceCode(requisitionDocument.getDocumentFundingSourceCode());
187         purchaseOrderDocument.setInstitutionContactEmailAddress(requisitionDocument.getInstitutionContactEmailAddress());
188         purchaseOrderDocument.setInstitutionContactName(requisitionDocument.getInstitutionContactName());
189         purchaseOrderDocument.setInstitutionContactPhoneNumber(requisitionDocument.getInstitutionContactPhoneNumber());
190         purchaseOrderDocument.setNonInstitutionFundAccountNumber(requisitionDocument.getNonInstitutionFundAccountNumber());
191         purchaseOrderDocument.setNonInstitutionFundChartOfAccountsCode(requisitionDocument.getNonInstitutionFundChartOfAccountsCode());
192         purchaseOrderDocument.setNonInstitutionFundOrgChartOfAccountsCode(requisitionDocument.getNonInstitutionFundOrgChartOfAccountsCode());
193         purchaseOrderDocument.setNonInstitutionFundOrganizationCode(requisitionDocument.getNonInstitutionFundOrganizationCode());
194         purchaseOrderDocument.setOrganizationCode(requisitionDocument.getOrganizationCode());
195         purchaseOrderDocument.setRecurringPaymentTypeCode(requisitionDocument.getRecurringPaymentTypeCode());
196         purchaseOrderDocument.setRequestorPersonEmailAddress(requisitionDocument.getRequestorPersonEmailAddress());
197         purchaseOrderDocument.setRequestorPersonName(requisitionDocument.getRequestorPersonName());
198         purchaseOrderDocument.setRequestorPersonPhoneNumber(requisitionDocument.getRequestorPersonPhoneNumber());
199         purchaseOrderDocument.setRequisitionIdentifier(requisitionDocument.getPurapDocumentIdentifier());
200         purchaseOrderDocument.setPurchaseOrderTotalLimit(requisitionDocument.getPurchaseOrderTotalLimit());
201         purchaseOrderDocument.setPurchaseOrderTransmissionMethodCode(requisitionDocument.getPurchaseOrderTransmissionMethodCode());
202         purchaseOrderDocument.setUseTaxIndicator(requisitionDocument.isUseTaxIndicator());
203         purchaseOrderDocument.setPurchaseOrderTypeId(requisitionDocument.getPurchaseOrderTypeId());
204         purchaseOrderDocument.setVendorCityName(requisitionDocument.getVendorCityName());
205         purchaseOrderDocument.setVendorContractGeneratedIdentifier(requisitionDocument.getVendorContractGeneratedIdentifier());
206         purchaseOrderDocument.setVendorCountryCode(requisitionDocument.getVendorCountryCode());
207         purchaseOrderDocument.setVendorCustomerNumber(requisitionDocument.getVendorCustomerNumber());
208         purchaseOrderDocument.setVendorAttentionName(requisitionDocument.getVendorAttentionName());
209         purchaseOrderDocument.setVendorDetailAssignedIdentifier(requisitionDocument.getVendorDetailAssignedIdentifier());
210         purchaseOrderDocument.setVendorFaxNumber(requisitionDocument.getVendorFaxNumber());
211         purchaseOrderDocument.setVendorHeaderGeneratedIdentifier(requisitionDocument.getVendorHeaderGeneratedIdentifier());
212         purchaseOrderDocument.setVendorLine1Address(requisitionDocument.getVendorLine1Address());
213         purchaseOrderDocument.setVendorLine2Address(requisitionDocument.getVendorLine2Address());
214         purchaseOrderDocument.setVendorAddressInternationalProvinceName(requisitionDocument.getVendorAddressInternationalProvinceName());
215         purchaseOrderDocument.setVendorName(requisitionDocument.getVendorName());
216         purchaseOrderDocument.setVendorNoteText(requisitionDocument.getVendorNoteText());
217         purchaseOrderDocument.setVendorPhoneNumber(requisitionDocument.getVendorPhoneNumber());
218         purchaseOrderDocument.setVendorPostalCode(requisitionDocument.getVendorPostalCode());
219         purchaseOrderDocument.setVendorStateCode(requisitionDocument.getVendorStateCode());
220         purchaseOrderDocument.setVendorRestrictedIndicator(requisitionDocument.getVendorRestrictedIndicator());
221         purchaseOrderDocument.setVendorPoNumber(requisitionDocument.getVendorPoNumber());
222         purchaseOrderDocument.setExternalOrganizationB2bSupplierIdentifier(requisitionDocument.getExternalOrganizationB2bSupplierIdentifier());
223         purchaseOrderDocument.setRequisitionSourceCode(requisitionDocument.getRequisitionSourceCode());
224         purchaseOrderDocument.setAccountsPayablePurchasingDocumentLinkIdentifier(requisitionDocument.getAccountsPayablePurchasingDocumentLinkIdentifier());
225         purchaseOrderDocument.setReceivingDocumentRequiredIndicator(requisitionDocument.isReceivingDocumentRequiredIndicator());
226         purchaseOrderDocument.setPaymentRequestPositiveApprovalIndicator(requisitionDocument.isPaymentRequestPositiveApprovalIndicator());
227         
228        
229 
230         purchaseOrderDocument.setStatusCode(PurapConstants.PurchaseOrderStatuses.APPDOC_IN_PROCESS);
231 
232         
233         List<OlePurchaseOrderItem> items = new ArrayList();
234         for (PurApItem reqItem : ((PurchasingAccountsPayableDocument) requisitionDocument).getItems()) {
235             RequisitionCapitalAssetItem reqCamsItem = (RequisitionCapitalAssetItem) requisitionDocument.getPurchasingCapitalAssetItemByItemIdentifier(reqItem.getItemIdentifier().intValue());
236             items.add(new OlePurchaseOrderItem((OleRequisitionItem) reqItem, purchaseOrderDocument, reqCamsItem));
237         }
238         purchaseOrderDocument.setItems(items);
239 
240         
241         purchaseOrderDocument.setCapitalAssetSystemTypeCode(requisitionDocument.getCapitalAssetSystemTypeCode());
242         purchaseOrderDocument.setCapitalAssetSystemStateCode(requisitionDocument.getCapitalAssetSystemStateCode());
243         for (CapitalAssetSystem capitalAssetSystem : requisitionDocument.getPurchasingCapitalAssetSystems()) {
244             purchaseOrderDocument.getPurchasingCapitalAssetSystems().add(new PurchaseOrderCapitalAssetSystem(capitalAssetSystem));
245         }
246 
247         purchaseOrderDocument.fixItemReferences();
248     }
249 
250     
251 
252 
253 
254 
255     @Override
256     public void prepareForSave(PurchaseOrderDocument purchaseOrderDocument, KualiDocumentEvent event) {
257         LOG.debug("Inside prepareForSave of OlePurchaseOrderDocumentHelperServiceImpl");
258         WorkflowDocument workFlowDocument = purchaseOrderDocument.getDocumentHeader().getWorkflowDocument();
259         try {
260             List<OlePurchaseOrderItem> items = purchaseOrderDocument.getItems();
261             Iterator iterator = items.iterator();
262             while (iterator.hasNext()) {
263                 Object object = iterator.next();
264                 if (object instanceof OlePurchaseOrderItem) {
265                     OlePurchaseOrderItem singleItem = (OlePurchaseOrderItem) object;
266                     if ((!StringUtils.isEmpty(singleItem.getInternalRequestorId()) || !StringUtils.isEmpty(singleItem
267                             .getRequestorId())) && singleItem.getRequestorTypeId() == null) {
268                         KualiInteger staffRequestorTypeId = getRequestorTypeId(OleSelectConstant.REQUESTOR_TYPE_STAFF);
269                         singleItem.setRequestorTypeId(staffRequestorTypeId.intValue());
270                     }
271                 }
272             }
273         } catch (Exception e) {
274             LOG.error("Exception in OlePurchaseOrderDocumentHelperServiceImpl:prepareForSave: " + e.getMessage());
275             throw new RuntimeException(e);
276         }
277         if (event instanceof org.kuali.rice.krad.rules.rule.event.RouteDocumentEvent &&
278                 purchaseOrderDocument.getRequisitionIdentifier() == null) {
279             try {
280                 UserSession userSession = GlobalVariables.getUserSession();
281                 
282                 
283                 String user = null;
284                 if (GlobalVariables.getUserSession() == null) {
285                     kualiConfigurationService = SpringContext.getBean(ConfigurationService.class);
286                     user = kualiConfigurationService.getPropertyValueAsString(getOleSelectDocumentService().getSelectParameterValue(OleSelectNotificationConstant.ACCOUNT_DOCUMENT_INTIATOR));
287                     GlobalVariables.setUserSession(new UserSession(user));
288                 }
289                 RequisitionDocument rdoc = SpringContext.getBean(org.kuali.ole.module.purap.document.service.RequisitionService.class)
290                         .generateRequisitionFromPurchaseOrder(purchaseOrderDocument);
291                 if (LOG.isDebugEnabled()) {
292                     LOG.debug("Requisition Document Status Code---->" + rdoc.getApplicationDocumentStatus());
293                 }
294                 rdoc.setRequisitionSourceCode("STAN");
295                 List adhocRouteRecipientList = new ArrayList();
296                 adhocRouteRecipientList.addAll(purchaseOrderDocument.getAdHocRoutePersons());
297                 adhocRouteRecipientList.addAll(purchaseOrderDocument.getAdHocRouteWorkgroups());
298                 SpringContext.getBean(org.kuali.rice.krad.service.DocumentService.class).blanketApproveDocument(rdoc, "Automatic Approval From PO", adhocRouteRecipientList);
299                 GlobalVariables.setUserSession(userSession);
300                 purchaseOrderDocument.setAccountsPayablePurchasingDocumentLinkIdentifier(rdoc.getPurapDocumentIdentifier());
301                 purchaseOrderDocument.setRequisitionIdentifier(rdoc.getPurapDocumentIdentifier());
302             } catch (WorkflowException e) {
303                 LOG.error("Exception in OlePurchaseOrderDocumentHelperServiceImpl:prepareForSave: " + e.getMessage());
304                 throw new RuntimeException("Error in OlePurchaseOrderDocumentHelperServiceImpl:prepareForSave: " + e.getMessage());
305             }
306 
307             purchaseOrderDocument.setStatusCode(PurchaseOrderStatuses.APPDOC_IN_PROCESS);
308         }
309     }
310 
311     private KualiInteger getRequestorTypeId(String requestorType) {
312         KualiInteger requestorTypeId = null;
313         Map<String, Object> criteria = new HashMap<String, Object>();
314         criteria.put(OleSelectConstant.REQUESTOR_TYPE, requestorType);
315         org.kuali.rice.krad.service.BusinessObjectService businessObjectService = SpringContext.getBean(org.kuali.rice.krad.service.BusinessObjectService.class);
316         Collection<OleRequestorType> requestorTypeList = businessObjectService.findMatching(OleRequestorType.class, criteria);
317         requestorTypeId = new KualiInteger(requestorTypeList.iterator().next().getRequestorTypeId());
318         return requestorTypeId;
319     }
320 
321     protected void setRequestorNameOnItem(OlePurchasingItem singleItem) {
322         String requestorFirstName = singleItem.getRequestorFirstName();
323         if ((singleItem.getRequestorId() != null) || (singleItem.getInternalRequestorId() != null)) {
324             int requestorTypeId = singleItem.getRequestorTypeId();
325             Map requestorTypeIdMap = new HashMap();
326             requestorTypeIdMap.put("requestorTypeId", requestorTypeId);
327             org.kuali.rice.krad.service.BusinessObjectService businessObjectService = SpringContext.getBean(org.kuali.rice.krad.service.BusinessObjectService.class);
328             List<OleRequestorType> oleRequestorTypeList = (List) businessObjectService.findMatching(OleRequestorType.class, requestorTypeIdMap);
329             for (int i = 0; i < oleRequestorTypeList.size(); i++) {
330                 if (oleRequestorTypeList.get(i).getRequestorType().equalsIgnoreCase(OleSelectConstant.REQUESTOR_TYPE_STAFF)) {
331                     Person personImpl = SpringContext.getBean(PersonService.class).getPerson(singleItem.getInternalRequestorId());
332                     if (singleItem.getRequestorId() == null && singleItem.getInternalRequestorId() != null) {
333                         if (personImpl != null) {
334                             singleItem.setRequestorFirstName(personImpl.getName());
335                         }
336                     }
337                 }
338                 
339 
340 
341 
342 
343             }
344         }
345     }
346 
347 
348     
349 
350 
351 
352 
353     @Override
354     public void processAfterRetrieve(PurchaseOrderDocument purchaseOrderDocument) {
355         
356         LOG.debug("Inside processAfterRetrieve of OlePurchaseOrderDocumentHelperServiceImpl");
357          
358         try {
359             PurchaseOrderType purchaseOrderTypeDoc = getOlePurapService().getPurchaseOrderType(purchaseOrderDocument.getPurchaseOrderTypeId());
360             if(purchaseOrderTypeDoc != null){
361                 purchaseOrderDocument.setOrderType(purchaseOrderTypeDoc);
362             }
363             List<OlePurchaseOrderItem> items = purchaseOrderDocument.getItems();
364             Iterator iterator = items.iterator();
365             while (iterator.hasNext()) {
366                 Object object = iterator.next();
367                 if (object instanceof OlePurchaseOrderItem) {
368                     OlePurchaseOrderItem singleItem = (OlePurchaseOrderItem) object;
369                     setItemDetailWhileProcessAfterRetrive(singleItem);
370                 }
371             }
372         } catch (Exception e) {
373             LOG.error("Exception in OlePurchaseOrderDocument:processAfterRetrieve for OlePurchaseOrderItem " + e.getMessage());
374             throw new RuntimeException(e);
375         }
376     
377     }
378 
379     
380 
381 
382 
383     private void setItemDetailWhileProcessAfterRetrive(OlePurchaseOrderItem olePurchaseOrderItem)throws Exception{
384         if(olePurchaseOrderItem.getRequestorId()!=null){
385             olePurchaseOrderItem.setRequestorFirstName(getOlePurapService().getPatronName(olePurchaseOrderItem.getRequestorId()));
386         }
387         
388         setRequestorNameOnItem(olePurchaseOrderItem);
389         HashMap<String, String> dataMap = new HashMap<String, String>();
390         if(olePurchaseOrderItem.getItemUnitPrice()!=null){
391             olePurchaseOrderItem.setItemUnitPrice(olePurchaseOrderItem.getItemUnitPrice().setScale(2, BigDecimal.ROUND_HALF_UP));
392         }
393         if (olePurchaseOrderItem.getItemTitleId() != null) {
394             Bib bib = new BibMarc();
395             if (olePurchaseOrderItem.getItemTitleId() != null && olePurchaseOrderItem.getItemTitleId() != "") {
396                 bib = getDocstoreClientLocator().getDocstoreClient().retrieveBib(olePurchaseOrderItem.getItemTitleId());
397             }
398             olePurchaseOrderItem.setBibUUID(bib.getId());
399             dataMap.put(OleSelectConstant.TITLE_ID, olePurchaseOrderItem.getItemTitleId());
400             dataMap.put(OleSelectConstant.DOC_CATEGORY_TYPE, OleSelectConstant.DOC_CATEGORY_TYPE_ITEMLINKS);
401             olePurchaseOrderItem.setDocFormat(DocumentUniqueIDPrefix.getBibFormatType(olePurchaseOrderItem.getItemTitleId()));
402             olePurchaseOrderItem.setItemDescription(getOlePurapService().getItemDescription(bib));
403         }
404         BibTree bibTree = new BibTree();
405         if(olePurchaseOrderItem.getItemTitleId() != null && olePurchaseOrderItem.getItemTitleId() != ""){
406             bibTree = getDocstoreClientLocator().getDocstoreClient().retrieveBibTree(olePurchaseOrderItem.getItemTitleId());
407         }
408         if (null != olePurchaseOrderItem.getItemTitleId()) {
409             if (olePurchaseOrderItem.getItemQuantity().isGreaterThan(new KualiDecimal(1))
410                     || olePurchaseOrderItem.getItemNoOfParts().isGreaterThan(new KualiInteger(1))) {
411                 List<OleCopies> copies = setCopiesToLineItem(olePurchaseOrderItem, bibTree);
412                 olePurchaseOrderItem.setItemTypeDescription(bibTree.getHoldingsTrees().get(bibTree.getHoldingsTrees().size() - 1)
413                         .getItems().get(0).getItemType());
414                 olePurchaseOrderItem.setCopies(copies);
415             }
416         }
417         if (olePurchaseOrderItem.getItemQuantity() != null && olePurchaseOrderItem.getItemNoOfParts() != null && !olePurchaseOrderItem.getItemQuantity().isGreaterThan(new KualiDecimal(1))
418                 && !olePurchaseOrderItem.getItemNoOfParts().isGreaterThan(new KualiInteger(1))&&olePurchaseOrderItem.getCopyList().size()>0) {
419             olePurchaseOrderItem.setSingleCopyNumber(olePurchaseOrderItem.getCopyList().get(0).getCopyNumber());
420         }
421     }
422 
423     public List<OleCopies> setCopiesToLineItem(OlePurchaseOrderItem singleItem, BibTree bibTree) {
424         List<HoldingsTree> instanceDocuments = bibTree.getHoldingsTrees();
425         List<OleCopies> copies = new ArrayList<OleCopies>();
426         for (HoldingsTree holdingsTree : instanceDocuments) {
427             List<Item> itemDocuments = holdingsTree.getItems();
428             StringBuffer enumeration = new StringBuffer();
429             for (int itemDocs = 0; itemDocs < itemDocuments.size(); itemDocs++) {
430                 if (itemDocs + 1 == itemDocuments.size()) {
431                     enumeration = enumeration.append(itemDocuments.get(itemDocs).getEnumeration());
432                 } else {
433                     enumeration = enumeration.append(itemDocuments.get(itemDocs).getEnumeration() + ";");
434                 }
435 
436             }
437             int startingCopy = 0;
438             if (singleItem.getItemNoOfParts().intValue() != 0 && null != enumeration) {
439                 String enumerationSplit = enumeration.substring(1, 2);
440                 boolean isint = checkIsEnumerationSplitIsIntegerOrNot(enumerationSplit);
441                 if (isint) {
442                     startingCopy = Integer.parseInt(enumerationSplit);
443                 }
444             }
445             if (singleItem.getItemQuantity().isGreaterThan(new KualiDecimal(1))
446                     || singleItem.getItemNoOfParts().isGreaterThan(new KualiInteger(1))) {
447                 int noOfCopies = holdingsTree.getItems().size()
448                         / singleItem.getItemNoOfParts().intValue();
449                 OleRequisitionCopies copy = new OleRequisitionCopies();
450                 copy.setParts(singleItem.getItemNoOfParts());
451                 copy.setLocationCopies(holdingsTree.getHoldings().getLocationName());
452                 copy.setItemCopies(new KualiDecimal(noOfCopies));
453                 copy.setPartEnumeration(enumeration.toString());
454                 copy.setStartingCopyNumber(new KualiInteger(startingCopy));
455                 copies.add(copy);
456             }
457         }
458         return copies;
459     }
460 
461     public boolean checkIsEnumerationSplitIsIntegerOrNot(String enumerationSplit) {
462         try {
463             int startingCopy = Integer.parseInt(enumerationSplit);
464         } catch (NumberFormatException e) {
465             return false;
466         }
467         return true;
468     }
469 
470     
471 
472 
473 
474 
475 
476 
477 
478 
479 
480 
481 
482 
483 
484 
485 
486 
487 
488 
489 
490 
491 
492 
493 
494 
495 
496     
497 
498     @Override
499     public void setBibInfoBean(BibInfoBean bibInfoBean, OlePurchaseOrderItem singleItem) {
500         bibInfoBean.setTitle(singleItem.getItemTitle());
501         bibInfoBean.setAuthor(singleItem.getItemAuthor());
502         bibInfoBean.setRequestor(singleItem.getRequestorId() == null ? null : singleItem.getRequestorId().toString());
503     }
504 
505     @Override
506     public void setBibInfoBean(BibInfoBean bibInfoBean, OleRequisitionItem singleItem) {
507         bibInfoBean.setTitle(singleItem.getBibInfoBean().getTitle());
508         bibInfoBean.setAuthor(singleItem.getBibInfoBean().getAuthor());
509         bibInfoBean.setRequestor(singleItem.getRequestorId() == null ? null : singleItem.getRequestorId().toString());
510     }
511 
512     
513 
514 
515 
516 
517     @Override
518     public boolean getIsFinalReqs(PurchaseOrderDocument purchaseOrderDocument) {
519         LOG.debug("Inside getIsFinalReqs of OlePurchaseOrderDocumentHelperServiceImpl");
520         if (purchaseOrderDocument.getDocumentHeader().getWorkflowDocument().isFinal()) {
521             return true;
522         }
523         return false;
524     }
525 
526 
527     @Override
528     public boolean getIsSplitPO(PurchaseOrderDocument purchaseOrderDocument) {
529         LOG.debug("Inside getIsSplitPO of OlePurchaseOrderDocumentHelperServiceImpl");
530         if (purchaseOrderDocument.getDocumentHeader().getWorkflowDocument().getDocumentTypeName().equalsIgnoreCase(OLEConstants.FinancialDocumentTypeCodes.PURCHASE_ORDER_SPLIT) && purchaseOrderDocument.getDocumentHeader().getWorkflowDocument().isSaved()) {
531             return true;
532         }
533         return false;
534     }
535 
536     @Override
537     public boolean getIsReOpenPO(PurchaseOrderDocument purchaseOrderDocument) {
538         LOG.debug("Inside getIsSplitPO of OlePurchaseOrderDocumentHelperServiceImpl");
539         if (purchaseOrderDocument.getDocumentHeader().getWorkflowDocument().getDocumentTypeName().equalsIgnoreCase(OLEConstants.FinancialDocumentTypeCodes.PURCHASE_ORDER_REOPEN) && purchaseOrderDocument.getDocumentHeader().getWorkflowDocument().isSaved()) {
540             return true;
541         }
542         return false;
543     }
544 
545     
546 
547 
548 
549 
550     @Override
551     public String getBibeditorCreateURL() {
552         String bibeditorCreateURL = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(OLEConstants.BIBEDITOR_CREATE_URL_KEY);
553         return bibeditorCreateURL;
554     }
555 
556     @Override
557     public String getBibSearchURL() {
558         String bibSearchURL = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(OLEConstants.BIBEDITOR_SEARCH_URL_KEY);
559         return bibSearchURL;
560     }
561 
562     
563 
564 
565 
566 
567     @Override
568     public String getBibeditorEditURL() {
569         String bibeditorEditURL = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(OLEConstants.BIBEDITOR_URL_KEY);
570         return bibeditorEditURL;
571     }
572 
573     
574 
575 
576 
577 
578     public String getDublinEditorEditURL() {
579         String dublinEditorEditURL = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(OLEConstants.DUBLINEDITOR_URL_KEY);
580         return dublinEditorEditURL;
581     }
582     
583 
584 
585 
586 
587     @Override
588     public String getBibeditorViewURL() {
589         String bibeditorViewURL = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(OLEConstants.DOCSTORE_APP_URL_KEY);
590         return bibeditorViewURL;
591     }
592     
593 
594 
595 
596 
597     public String getDublinEditorViewURL() {
598         String dublinEditorViewURL = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(OLEConstants.DOCSTORE_VIEW_URL_KEY);
599         return dublinEditorViewURL;
600     }
601     
602 
603 
604 
605 
606     @Override
607     public String getInstanceEditorURL() {
608         String instanceEditorURL = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(
609                 OLEConstants.INSTANCEEDITOR_URL_KEY);
610         return instanceEditorURL;
611     }
612 
613     
614 
615 
616 
617 
618     @Override
619     public String getMarcXMLFileDirLocation() throws Exception {
620         FileProcessingService fileProcessingService = SpringContext.getBean(FileProcessingService.class);
621         String externaleDirectory = fileProcessingService.getMarcXMLFileDirLocation();
622         return externaleDirectory;
623     }
624 
625 
626     @Override
627     public List getItemsActiveOnly(PurchaseOrderDocument purchaseOrderDocument) {
628         List returnList = new ArrayList();
629         for (Iterator iter = purchaseOrderDocument.getItems().iterator(); iter.hasNext(); ) {
630             OlePurchaseOrderItem item = (OlePurchaseOrderItem) iter.next();
631             if (item.isItemActiveIndicator()) {
632                 returnList.add(item);
633             }
634         }
635         return returnList;
636     }
637 
638     
639 
640 
641 
642 
643     @Override
644     public List getItemsActiveOnlySetupAlternateAmount(PurchaseOrderDocument purchaseOrderDocument) {
645         List returnList = new ArrayList();
646         for (Iterator iter = purchaseOrderDocument.getItems().iterator(); iter.hasNext(); ) {
647             OlePurchaseOrderItem item = (OlePurchaseOrderItem) iter.next();
648             if (item.isItemActiveIndicator()) {
649                 for (Object element : item.getSourceAccountingLines()) {
650                     PurchaseOrderAccount account = (PurchaseOrderAccount) element;
651                     account.setAlternateAmountForGLEntryCreation(account.getItemAccountOutstandingEncumbranceAmount());
652                 }
653                 returnList.add(item);
654             }
655         }
656         return returnList;
657     }
658 
659     @Override
660     public boolean getAdditionalChargesExist(PurchaseOrderDocument purchaseOrderDocument) {
661         List<OlePurchaseOrderItem> items = purchaseOrderDocument.getItems();
662         for (OlePurchaseOrderItem item : items) {
663             if ((item != null) &&
664                     (item.getItemType() != null) &&
665                     (item.getItemType().isAdditionalChargeIndicator()) &&
666                     (item.getExtendedPrice() != null) &&
667                     (!KualiDecimal.ZERO.equals(item.getExtendedPrice()))) {
668                 return true;
669             }
670         }
671         return false;
672     }
673 }