1 package org.kuali.ole.ingest; 2 3 import org.kuali.ole.OLEConstants; 4 import org.kuali.ole.ingest.pojo.ProfileAttributeBo; 5 import org.kuali.ole.pojo.OleTxRecord; 6 import org.kuali.ole.pojo.edi.*; 7 import org.kuali.ole.select.bo.OleVendorAccountInfo; 8 import org.kuali.ole.service.OverlayRetrivalService; 9 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader; 10 11 import java.util.*; 12 13 /** 14 * OleTxRecordBuilder is used to build the transaction information into a pojo which are extracted from the ingested marc and edi file. 15 */ 16 public class OleTxRecordBuilder { 17 private static OleTxRecordBuilder oleTxRecordBuilder; 18 private OverlayRetrivalService overlayRetrivalService; 19 20 /** 21 * default constructor of OleTxRecordBuilder. 22 */ 23 private OleTxRecordBuilder() { 24 25 } 26 27 /** 28 * Gets the instance of OleTxRecordBuilder. 29 * If OleTxRecordBuilder is null it returns new instance else it returns existing instance. 30 * @return 31 */ 32 public static OleTxRecordBuilder getInstance() { 33 if (null == oleTxRecordBuilder) { 34 oleTxRecordBuilder = new OleTxRecordBuilder(); 35 } 36 return oleTxRecordBuilder; 37 } 38 39 /** 40 * This method returns OleTxRecord. 41 * This method build the OleTxRecord based on lineItemOrder,list of profileAttribute,ediOrder 42 * @param lineItemOrder 43 * @param profileAttributeBos 44 * @param ediOrder 45 * @return oleTxRecord 46 */ 47 public OleTxRecord build(LineItemOrder lineItemOrder, EDIOrder ediOrder) throws Exception { 48 OleTxRecord oleTxRecord = new OleTxRecord(); 49 oleTxRecord.setListPrice(getListPrice(lineItemOrder)); 50 oleTxRecord.setQuantity(getQuantity(lineItemOrder)); 51 oleTxRecord.setVendorItemIdentifier(getVendorItemIdentifier(lineItemOrder)); 52 oleTxRecord.setVendorNumber(getVendorNumber(ediOrder)); 53 /*oleTxRecord.setChartCode(getChartCode(profileAttributeBos)); 54 oleTxRecord.setOrgCode(getAttributeValue(profileAttributeBos, OLEConstants.ORG_CODE)); 55 oleTxRecord.setReceivingRequired(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.RECV_REQUIRED))); 56 oleTxRecord.setContractManager(getAttributeValue(profileAttributeBos, OLEConstants.CONTRACT_MANAGER));*/ 57 //oleTxRecord.setAssignToUser(getAttributeValue(profileAttributeBos, OLEConstants.ASSIGN_TO_USER)); 58 //oleTxRecord.setUseTaxIndicator(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.USE_TAXIND))); 59 //oleTxRecord.setOrderType(getAttributeValue(profileAttributeBos, OLEConstants.ORDER_TYPE)); 60 /*oleTxRecord.setFundingSource(getAttributeValue(profileAttributeBos, OLEConstants.FUNDING_SOURCE)); 61 oleTxRecord.setPayReqPositiveApprovalReq(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.PAYREQ_POSITIVE_APPROVAL))); 62 oleTxRecord.setPurchaseOrderConfirmationIndicator(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.PURCHASE_CONFIRMATION_INDICATOR))); 63 oleTxRecord.setRequisitionSource(getAttributeValue(profileAttributeBos, OLEConstants.REQUISITION_SOURCE)); 64 oleTxRecord.setDeliveryCampusCode(getAttributeValue(profileAttributeBos, OLEConstants.DELIVERY_CAMPUS)); 65 oleTxRecord.setBuildingCode(getAttributeValue(profileAttributeBos, OLEConstants.BUILDING));*/ 66 //oleTxRecord.setVendorChoice(getAttributeValue(profileAttributeBos, OLEConstants.VENDOR_CHOICE)); 67 /*oleTxRecord.setItemType(getAttributeValue(profileAttributeBos, OLEConstants.ITEM_TYPE)); 68 oleTxRecord.setRouteToRequestor(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.ROUTE_RQUESTER))); 69 oleTxRecord.setRouteToRequestor(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.PUBLIC_VIEW))); 70 oleTxRecord.setMethodOfPOTransmission(getAttributeValue(profileAttributeBos, OLEConstants.PO_TRAMISSION_METHOD)); 71 oleTxRecord.setInternalPurchasingLimit(getAttributeValue(profileAttributeBos, OLEConstants.INTERNAL_PURCHASING_LIMIT)); 72 oleTxRecord.setCostSource(getAttributeValue(profileAttributeBos, OLEConstants.COST_SOURCE)); 73 oleTxRecord.setPercent(getAttributeValue(profileAttributeBos, OLEConstants.PERCENT)); 74 oleTxRecord.setDefaultLocation(getAttributeValue(profileAttributeBos, OLEConstants.DEFAULT_LOCATION));*/ 75 return oleTxRecord; 76 } 77 78 public OleTxRecord build(List<ProfileAttributeBo> profileAttributeBos) throws Exception { 79 OleTxRecord oleTxRecord = new OleTxRecord(); 80 /* oleTxRecord.setListPrice(getListPrice(lineItemOrder)); 81 oleTxRecord.setQuantity(getQuantity(lineItemOrder)); 82 oleTxRecord.setVendorItemIdentifier(getVendorItemIdentifier(lineItemOrder)); 83 oleTxRecord.setVendorNumber(getVendorNumber(ediOrder)); */ 84 /*oleTxRecord.setChartCode(getChartCode(profileAttributeBos)); 85 oleTxRecord.setOrgCode(getAttributeValue(profileAttributeBos, OLEConstants.ORG_CODE)); 86 oleTxRecord.setReceivingRequired(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.RECV_REQUIRED))); 87 oleTxRecord.setContractManager(getAttributeValue(profileAttributeBos, OLEConstants.CONTRACT_MANAGER));*/ 88 //oleTxRecord.setAssignToUser(getAttributeValue(profileAttributeBos, OLEConstants.ASSIGN_TO_USER)); 89 //oleTxRecord.setUseTaxIndicator(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.USE_TAXIND))); 90 //oleTxRecord.setOrderType(getAttributeValue(profileAttributeBos, OLEConstants.ORDER_TYPE)); 91 /*oleTxRecord.setFundingSource(getAttributeValue(profileAttributeBos, OLEConstants.FUNDING_SOURCE)); 92 oleTxRecord.setPayReqPositiveApprovalReq(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.PAYREQ_POSITIVE_APPROVAL))); 93 oleTxRecord.setPurchaseOrderConfirmationIndicator(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.PURCHASE_CONFIRMATION_INDICATOR))); 94 oleTxRecord.setRequisitionSource(getAttributeValue(profileAttributeBos, OLEConstants.REQUISITION_SOURCE)); 95 oleTxRecord.setDeliveryCampusCode(getAttributeValue(profileAttributeBos, OLEConstants.DELIVERY_CAMPUS)); 96 oleTxRecord.setBuildingCode(getAttributeValue(profileAttributeBos, OLEConstants.BUILDING));*/ 97 //oleTxRecord.setVendorChoice(getAttributeValue(profileAttributeBos, OLEConstants.VENDOR_CHOICE)); 98 /*oleTxRecord.setItemType(getAttributeValue(profileAttributeBos, OLEConstants.ITEM_TYPE)); 99 oleTxRecord.setRouteToRequestor(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.ROUTE_RQUESTER))); 100 oleTxRecord.setRouteToRequestor(Boolean.parseBoolean(getAttributeValue(profileAttributeBos, OLEConstants.PUBLIC_VIEW))); 101 oleTxRecord.setMethodOfPOTransmission(getAttributeValue(profileAttributeBos, OLEConstants.PO_TRAMISSION_METHOD)); 102 oleTxRecord.setInternalPurchasingLimit(getAttributeValue(profileAttributeBos, OLEConstants.INTERNAL_PURCHASING_LIMIT)); 103 oleTxRecord.setCostSource(getAttributeValue(profileAttributeBos, OLEConstants.COST_SOURCE)); 104 oleTxRecord.setPercent(getAttributeValue(profileAttributeBos, OLEConstants.PERCENT)); 105 oleTxRecord.setDefaultLocation(getAttributeValue(profileAttributeBos, OLEConstants.DEFAULT_LOCATION));*/ 106 return oleTxRecord; 107 } 108 109 110 /** 111 * This method returns chartCode from the List of profileAttributeBos. 112 * @param profileAttributeBos 113 * @return AttributeValue 114 */ 115 private String getChartCode(List<ProfileAttributeBo> profileAttributeBos) { 116 return getAttributeValue(profileAttributeBos, OLEConstants.OLE_CHART_CODE); 117 } 118 119 /** 120 * This method gets the vendorNumber from ediOrder. 121 * @param ediOrder 122 * @return 123 */ 124 private String getVendorNumber(EDIOrder ediOrder) { 125 return ediOrder.getMessage().getSupplierPartyQualifier().getSupplierInformation().getSupplierCodeIdentification(); 126 } 127 128 /** 129 * This method returns fundCode as AccountInfo, based on List of supplierReferenceInformation got from lineItemOrder. 130 * @param lineItemOrder 131 * @return AccountInfo 132 */ 133 public Map<String, String> getAccountInfo(LineItemOrder lineItemOrder) throws Exception { 134 List<SupplierReferenceInformation> supplierReferenceInformationList = lineItemOrder.getSupplierReferenceInformation(); 135 if (!supplierReferenceInformationList.isEmpty()) { 136 SupplierReferenceInformation supplierReferenceInformation = supplierReferenceInformationList.get(0); 137 List<SupplierLineItemReference> supplierLineItemReferenceList = supplierReferenceInformation.getSupplierLineItemReference(); 138 if (!supplierLineItemReferenceList.isEmpty()) { 139 SupplierLineItemReference supplierLineItemReference = supplierLineItemReferenceList.get(0); 140 if (supplierLineItemReference.getSuppliersOrderLine().equals("BFN")) { 141 return translateRefNumberToOLEAccountInfo(supplierLineItemReference.getVendorReferenceNumber()); 142 } 143 } 144 } 145 return null; 146 } 147 148 149 150 /** 151 * This method returns fundCode as AccountInfo, based on List of supplierReferenceInformation got from lineItemOrder. 152 * @param vendorReferenceNumber 153 * @return AccountInfo 154 */ 155 public Map<String, String> getAccountInfo(String vendorReferenceNumber) throws Exception { 156 return translateRefNumberToOLEAccountInfo(vendorReferenceNumber); 157 } 158 159 /** 160 * This method maps the vendorReferenceNumber and returns the fundCode. 161 * @param vendorReferenceNumber 162 * @return fundCodes 163 */ 164 private Map<String, String> translateRefNumberToOLEAccountInfo(String vendorReferenceNumber)throws Exception{ 165 //HashMap<String, String> fundCodes = new OLEAccountInfoExtractor().buildAccountInfoMap(vendorReferenceNumber); 166 HashMap<String, String> fundCodes = getVendorAccountObjectDetails(vendorReferenceNumber); 167 return fundCodes; 168 } 169 170 private HashMap<String,String> getVendorAccountObjectDetails(String vendorReferenceNumber)throws Exception{ 171 HashMap<String,String> criteriaMap=new HashMap<String,String>(); 172 criteriaMap.put("vendorRefNumber",vendorReferenceNumber); 173 OleVendorAccountInfo oleVendorAccountInfo = getOverlayRetrivalService().getAccountObjectForVendorRefNo(criteriaMap); 174 if(oleVendorAccountInfo==null) 175 return null; 176 HashMap<String,String> accountObjectMap=new HashMap<String, String>(); 177 accountObjectMap.put(oleVendorAccountInfo.getAccountNumber(), oleVendorAccountInfo.getObjectCode()); 178 return accountObjectMap; 179 180 } 181 182 /** 183 * This method returns vendorItemReference number from the List of buyerReferenceInformation got from lineItemOrder. 184 * @param lineItemOrder 185 * @return vendorItemReference 186 */ 187 public String getVendorItemIdentifier(LineItemOrder lineItemOrder) { 188 List<BuyerReferenceInformation> buyerReferenceInformationList = lineItemOrder.getBuyerReferenceInformation(); 189 if (buyerReferenceInformationList.size() > 0) { 190 BuyerReferenceInformation buyerReferenceInformation = buyerReferenceInformationList.get(0); 191 List<BuyerLineItemReference> buyerLineItemReferenceList = buyerReferenceInformation.getBuyerLineItemReference(); 192 if (buyerLineItemReferenceList.size() > 0) { 193 BuyerLineItemReference buyerLineItemReferenceRef = buyerLineItemReferenceList.get(0); 194 String buyersOrderLine = buyerLineItemReferenceRef.getBuyersOrderLine(); 195 String vendorItemReference = buyerLineItemReferenceRef.getOrderLineNumber(); 196 if (buyersOrderLine.equals("SLI")) { 197 return vendorItemReference; 198 } 199 } 200 } 201 return null; 202 } 203 204 /** 205 * This method returns the Quantity from the list of QuantityInformation got from lineItemOrder. 206 * If there are no QuantityInformation then it return null. 207 * @param lineItemOrder 208 * @return Quantity 209 */ 210 private String getQuantity(LineItemOrder lineItemOrder) { 211 List<QuantityInformation> quantityInformation = lineItemOrder.getQuantityInformation(); 212 if (quantityInformation.size() > 0) { 213 List<Qunatity> qunatity = quantityInformation.get(0).getQunatity(); 214 if (qunatity.size() > 0) { 215 return qunatity.get(0).getQuantity(); 216 } 217 } 218 return null; 219 } 220 221 /** 222 * This method returns ListPrice from the List of PriceInformation got from lineItemOrder. 223 * If there are no PriceInformation then it return null. 224 * @param lineItemOrder 225 * @return Price 226 */ 227 private String getListPrice(LineItemOrder lineItemOrder) { 228 List<PriceInformation> priceInformation = lineItemOrder.getPriceInformation(); 229 if (priceInformation.size() > 0) { 230 List<ItemPrice> itemPrice = priceInformation.get(0).getItemPrice(); 231 if (itemPrice.size() > 0) { 232 return itemPrice.get(0).getPrice(); 233 } 234 } 235 return null; 236 } 237 238 /** 239 * This method returns AttributeValue from List of profileAttribute with matching attributeName. 240 * If there are no profile attributes then it return null. 241 * @param profileAttributes 242 * @param attributeName 243 * @return attributeValue 244 */ 245 private String getAttributeValue(List<ProfileAttributeBo> profileAttributes, String attributeName) { 246 for (Iterator<ProfileAttributeBo> iterator = profileAttributes.iterator(); iterator.hasNext(); ) { 247 ProfileAttributeBo attribute = iterator.next(); 248 if (attribute.getAttributeName().equals(attributeName)) { 249 return attribute.getAttributeValue(); 250 } 251 } 252 return null; 253 } 254 255 public OverlayRetrivalService getOverlayRetrivalService() { 256 if(overlayRetrivalService == null){ 257 overlayRetrivalService = GlobalResourceLoader.getService(OLEConstants.OVERLAY_RETRIVAL_SERVICE); 258 } 259 return overlayRetrivalService; 260 } 261 262 public void setOverlayRetrivalService(OverlayRetrivalService overlayRetrivalService) { 263 this.overlayRetrivalService = overlayRetrivalService; 264 } 265 266 }