1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.select.document.validation.impl;
17  
18  import org.kuali.ole.module.purap.PurapConstants.PREQDocumentsStrings;
19  import org.kuali.ole.module.purap.PurapPropertyConstants;
20  import org.kuali.ole.module.purap.document.PurchaseOrderDocument;
21  import org.kuali.ole.module.purap.document.service.PurchaseOrderService;
22  import org.kuali.ole.select.OleSelectConstant;
23  import org.kuali.ole.select.document.OleInvoiceDocument;
24  import org.kuali.ole.select.document.OlePaymentRequestDocument;
25  import org.kuali.ole.select.document.service.OleInvoiceService;
26  import org.kuali.ole.sys.OLEConstants;
27  import org.kuali.ole.sys.OLEKeyConstants;
28  import org.kuali.ole.sys.OLEPropertyConstants;
29  import org.kuali.ole.sys.context.SpringContext;
30  import org.kuali.ole.sys.document.validation.GenericValidation;
31  import org.kuali.ole.sys.document.validation.event.AttributedDocumentEvent;
32  import org.kuali.ole.vnd.businessobject.OleExchangeRate;
33  import org.kuali.rice.core.api.util.type.KualiDecimal;
34  import org.kuali.rice.krad.service.KRADServiceLocator;
35  import org.kuali.rice.krad.util.GlobalVariables;
36  import org.kuali.rice.krad.util.ObjectUtils;
37  
38  import java.math.RoundingMode;
39  import java.util.HashMap;
40  import java.util.Iterator;
41  import java.util.List;
42  import java.util.Map;
43  
44  public class OlePaymentRequestInvoiceValidation extends GenericValidation {
45      private boolean currencyTypeIndicator = true;
46  
47      public boolean validate(AttributedDocumentEvent event) {
48          boolean valid = true;
49          OlePaymentRequestDocument document = (OlePaymentRequestDocument) event.getDocument();
50          GlobalVariables.getMessageMap().clearErrorPath();
51          GlobalVariables.getMessageMap().addToErrorPath(OLEPropertyConstants.DOCUMENT);
52          PurchaseOrderDocument po = null;
53          if (ObjectUtils.isNull(document.getPurchaseOrderIdentifier())) {
54              GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, OLEKeyConstants.ERROR_REQUIRED, PREQDocumentsStrings.PURCHASE_ORDER_ID);
55              valid &= false;
56          } else {
57              po = SpringContext.getBean(PurchaseOrderService.class).getCurrentPurchaseOrder(document.getPurchaseOrderIdentifier());
58          }
59          if (ObjectUtils.isNull(document.getInvoiceDate())) {
60              GlobalVariables.getMessageMap().putError(PurapPropertyConstants.INVOICE_DATE, OLEKeyConstants.ERROR_REQUIRED, PREQDocumentsStrings.INVOICE_DATE);
61              valid &= false;
62          }
63          
64  
65  
66  
67          if (po.getVendorDetail().getCurrencyType()!=null){
68              Integer invoiceIdentifier = document.getInvoiceIdentifier();
69              Map invoiceIdentifierMap = new HashMap();
70              invoiceIdentifierMap.put(OLEConstants.PUR_DOC_IDENTIFIER, invoiceIdentifier);
71              OleInvoiceDocument oleInvoiceDocument = (OleInvoiceDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OleInvoiceDocument.class, invoiceIdentifierMap);
72              if (ObjectUtils.isNotNull(oleInvoiceDocument)) {
73                  Long invoiceCurrencyTypeId = oleInvoiceDocument.getInvoiceCurrencyTypeId();
74                  String currencyType = SpringContext.getBean(OleInvoiceService.class).getCurrencyType(invoiceCurrencyTypeId.toString());
75                  if(currencyType.equalsIgnoreCase(OleSelectConstant.CURRENCY_TYPE_NAME)){
76                      currencyTypeIndicator=true;
77                  }
78                  else{
79                      currencyTypeIndicator=false;
80                  }
81              }
82          }
83  
84          if (po != null && (!currencyTypeIndicator)) {
85              if (ObjectUtils.isNull(document.getForeignVendorInvoiceAmount())) {
86                  GlobalVariables.getMessageMap().putError(OleSelectConstant.FOREIGN_VENDOR_INVOICE_AMOUNT, OLEKeyConstants.ERROR_REQUIRED, OleSelectConstant.FOREIGN_VENDOR_INVOICE_AMOUNT_STRING);
87                  valid &= false;
88              } else {
89                  Long currencyTypeId = po.getVendorDetail().getCurrencyType().getCurrencyTypeId();
90                  Map documentNumberMap = new HashMap();
91                  documentNumberMap.put(OleSelectConstant.CURRENCY_TYPE_ID, currencyTypeId);
92                  org.kuali.rice.krad.service.BusinessObjectService businessObjectService = SpringContext.getBean(org.kuali.rice.krad.service.BusinessObjectService.class);
93                  List<OleExchangeRate> exchangeRateList = (List) businessObjectService.findMatchingOrderBy(OleExchangeRate.class, documentNumberMap, OleSelectConstant.EXCHANGE_RATE_DATE, false);
94                  Iterator iterator = exchangeRateList.iterator();
95                  if (iterator.hasNext()) {
96                      OleExchangeRate tempOleExchangeRate = (OleExchangeRate) iterator.next();
97                      document.setVendorInvoiceAmount(new KualiDecimal(document.getForeignVendorInvoiceAmount().divide(tempOleExchangeRate.getExchangeRate(), 4, RoundingMode.HALF_UP)));
98                  }
99  
100             }
101         }
102         if (ObjectUtils.isNull(document.getVendorInvoiceAmount())) {
103             GlobalVariables.getMessageMap().putError(PurapPropertyConstants.VENDOR_INVOICE_AMOUNT, OLEKeyConstants.ERROR_REQUIRED, PREQDocumentsStrings.VENDOR_INVOICE_AMOUNT);
104             valid &= false;
105         }
106         GlobalVariables.getMessageMap().clearErrorPath();
107         return valid;
108     }
109 
110 }