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.purap.document; 017 018 import java.util.LinkedHashMap; 019 import java.util.List; 020 021 import org.apache.commons.lang.StringUtils; 022 import org.apache.log4j.Logger; 023 import org.kuali.kfs.module.purap.PurapConstants; 024 import org.kuali.kfs.module.purap.document.service.BulkReceivingService; 025 import org.kuali.kfs.module.purap.document.service.RequisitionService; 026 import org.kuali.kfs.module.purap.document.validation.event.AttributedContinuePurapEvent; 027 import org.kuali.kfs.module.purap.util.PurapSearchUtils; 028 import org.kuali.kfs.sys.context.SpringContext; 029 import org.kuali.kfs.vnd.VendorConstants; 030 import org.kuali.kfs.vnd.businessobject.VendorAddress; 031 import org.kuali.kfs.vnd.businessobject.VendorDetail; 032 import org.kuali.kfs.vnd.document.service.VendorService; 033 import org.kuali.rice.kim.bo.Person; 034 import org.kuali.rice.kim.service.PersonService; 035 import org.kuali.rice.kns.bo.Country; 036 import org.kuali.rice.kns.bo.DocumentHeader; 037 import org.kuali.rice.kns.rule.event.KualiDocumentEvent; 038 import org.kuali.rice.kns.service.CountryService; 039 import org.kuali.rice.kns.service.DataDictionaryService; 040 import org.kuali.rice.kns.service.DateTimeService; 041 import org.kuali.rice.kns.util.GlobalVariables; 042 import org.kuali.rice.kns.util.KNSPropertyConstants; 043 044 public class BulkReceivingDocument extends ReceivingDocumentBase{ 045 046 protected static final Logger LOG = Logger.getLogger(BulkReceivingDocument.class); 047 048 protected String shipmentWeight; 049 protected Integer noOfCartons; 050 protected String trackingNumber; 051 protected String vendorAddressInternationalProvinceName; 052 protected String vendorNoteText; 053 054 /** 055 * Goods delivered vendor 056 */ 057 protected Integer goodsDeliveredVendorHeaderGeneratedIdentifier; 058 protected Integer goodsDeliveredVendorDetailAssignedIdentifier; 059 protected String goodsDeliveredVendorNumber; 060 protected String deliveryAdditionalInstructionText; 061 062 protected String requestorPersonName; 063 protected String requestorPersonPhoneNumber; 064 protected String requestorPersonEmailAddress; 065 066 protected String preparerPersonName; 067 protected String preparerPersonPhoneNumber; 068 069 protected String deliveryCampusName; 070 protected String institutionContactName; 071 protected String institutionContactPhoneNumber; 072 protected String institutionContactEmailAddress; 073 074 protected VendorDetail alternateVendorDetail; 075 076 /** 077 * Not persisted in DB 078 */ 079 protected String goodsDeliveredVendorName; 080 protected String vendorContact; 081 082 public BulkReceivingDocument() { 083 super(); 084 } 085 086 public void initiateDocument(){ 087 setShipmentReceivedDate(SpringContext.getBean(DateTimeService.class).getCurrentSqlDate()); 088 } 089 090 public void populateBulkReceivingFromPurchaseOrder(PurchaseOrderDocument po){ 091 092 setPurchaseOrderIdentifier( po.getPurapDocumentIdentifier() ); 093 getDocumentHeader().setOrganizationDocumentNumber( po.getDocumentHeader().getOrganizationDocumentNumber() ); 094 setAccountsPayablePurchasingDocumentLinkIdentifier( po.getAccountsPayablePurchasingDocumentLinkIdentifier() ); 095 096 //copy vendor 097 setVendorHeaderGeneratedIdentifier( po.getVendorHeaderGeneratedIdentifier() ); 098 setVendorDetailAssignedIdentifier( po.getVendorDetailAssignedIdentifier() ); 099 setVendorName( po.getVendorName() ); 100 setVendorNumber( po.getVendorNumber() ); 101 setVendorLine1Address( po.getVendorLine1Address() ); 102 setVendorLine2Address( po.getVendorLine2Address() ); 103 setVendorCityName( po.getVendorCityName() ); 104 setVendorStateCode( po.getVendorStateCode() ); 105 setVendorPostalCode( po.getVendorPostalCode() ); 106 setVendorCountryCode( po.getVendorCountryCode() ); 107 setVendorDetail(po.getVendorDetail()); 108 setVendorNumber(po.getVendorNumber()); 109 setVendorAddressInternationalProvinceName(po.getVendorAddressInternationalProvinceName()); 110 setVendorNoteText(po.getVendorNoteText()); 111 setVendorAddressGeneratedIdentifier(po.getVendorAddressGeneratedIdentifier()); 112 113 //copy alternate vendor 114 setAlternateVendorName( po.getAlternateVendorName() ); 115 setAlternateVendorNumber( StringUtils.isEmpty(po.getAlternateVendorNumber()) ? null : po.getAlternateVendorNumber()); 116 setAlternateVendorDetailAssignedIdentifier( po.getAlternateVendorDetailAssignedIdentifier() ); 117 setAlternateVendorHeaderGeneratedIdentifier( po.getAlternateVendorHeaderGeneratedIdentifier() ); 118 119 //copy delivery 120 setDeliveryBuildingCode( po.getDeliveryBuildingCode() ); 121 setDeliveryBuildingLine1Address( po.getDeliveryBuildingLine1Address() ); 122 setDeliveryBuildingLine2Address( po.getDeliveryBuildingLine2Address() ); 123 setDeliveryBuildingName( po.getDeliveryBuildingName() ); 124 setDeliveryBuildingRoomNumber( po.getDeliveryBuildingRoomNumber() ); 125 setDeliveryCampusCode( po.getDeliveryCampusCode() ); 126 setDeliveryCityName( po.getDeliveryCityName() ); 127 setDeliveryCountryCode( po.getDeliveryCountryCode() ); 128 setDeliveryInstructionText( po.getDeliveryInstructionText() ); 129 setDeliveryPostalCode( po.getDeliveryPostalCode() ); 130 setDeliveryStateCode( po.getDeliveryStateCode() ); 131 setDeliveryToEmailAddress( po.getDeliveryToEmailAddress() ); 132 setDeliveryToName( po.getDeliveryToName() ); 133 setDeliveryToPhoneNumber( po.getDeliveryToPhoneNumber() ); 134 setInstitutionContactName(po.getInstitutionContactName()); 135 setInstitutionContactPhoneNumber(po.getInstitutionContactPhoneNumber()); 136 setInstitutionContactEmailAddress(po.getInstitutionContactEmailAddress()); 137 138 //Requestor and Requisition preparer 139 setRequestorPersonName(po.getRequestorPersonName()); 140 setRequestorPersonPhoneNumber(po.getRequestorPersonPhoneNumber()); 141 setRequestorPersonEmailAddress(po.getRequestorPersonEmailAddress()); 142 143 RequisitionDocument reqDoc = SpringContext.getBean(RequisitionService.class).getRequisitionById(po.getRequisitionIdentifier()); 144 if (reqDoc != null){ // reqDoc is null when called from unit test 145 String requisitionPreparer = reqDoc.getDocumentHeader().getWorkflowDocument().getInitiatorNetworkId(); 146 /** 147 * This is to get the user name for display 148 */ 149 Person initiatorUser = SpringContext.getBean(PersonService.class).getPersonByPrincipalName(requisitionPreparer); 150 setPreparerPersonName(initiatorUser.getName()); 151 } 152 153 if (getVendorNumber() != null){ 154 setGoodsDeliveredVendorHeaderGeneratedIdentifier(getVendorHeaderGeneratedIdentifier()); 155 setGoodsDeliveredVendorDetailAssignedIdentifier(getVendorDetailAssignedIdentifier()); 156 setGoodsDeliveredVendorNumber(getVendorNumber()); 157 setGoodsDeliveredVendorName(getVendorName()); 158 } 159 160 populateVendorDetails(); 161 populateDocumentDescription(po); 162 163 } 164 165 protected void populateVendorDetails(){ 166 167 if (getVendorHeaderGeneratedIdentifier() != null && 168 getVendorDetailAssignedIdentifier() != null){ 169 VendorDetail tempVendor = new VendorDetail(); 170 tempVendor.setVendorHeaderGeneratedIdentifier(getVendorHeaderGeneratedIdentifier()); 171 tempVendor.setVendorDetailAssignedIdentifier(getVendorDetailAssignedIdentifier()); 172 setVendorNumber(tempVendor.getVendorNumber()); 173 } 174 175 if (getAlternateVendorHeaderGeneratedIdentifier() != null && 176 getAlternateVendorDetailAssignedIdentifier() != null){ 177 178 VendorDetail vendorDetail = SpringContext.getBean(VendorService.class).getVendorDetail(getAlternateVendorHeaderGeneratedIdentifier(), 179 getAlternateVendorDetailAssignedIdentifier()); 180 //copied from creditmemocreateserviceimpl.populatedocumentfromvendor 181 String userCampus = GlobalVariables.getUserSession().getPerson().getCampusCode(); 182 VendorAddress vendorAddress = SpringContext.getBean(VendorService.class).getVendorDefaultAddress(getAlternateVendorHeaderGeneratedIdentifier(), 183 getAlternateVendorDetailAssignedIdentifier(), 184 VendorConstants.AddressTypes.REMIT, 185 userCampus); 186 if (vendorAddress == null) { 187 // pick up the default vendor po address type 188 vendorAddress = SpringContext.getBean(VendorService.class).getVendorDefaultAddress(getAlternateVendorHeaderGeneratedIdentifier(), 189 getAlternateVendorDetailAssignedIdentifier(), 190 VendorConstants.AddressTypes.PURCHASE_ORDER, 191 userCampus); 192 } 193 194 if (vendorAddress != null){ 195 setAlternateVendorName(vendorDetail.getVendorName()); 196 setAlternateVendorNumber(vendorDetail.getVendorNumber()); 197 vendorDetail.setDefaultAddressLine1(vendorAddress.getVendorLine1Address()); 198 vendorDetail.setDefaultAddressLine2(vendorAddress.getVendorLine2Address()); 199 vendorDetail.setDefaultAddressCity(vendorAddress.getVendorCityName()); 200 vendorDetail.setDefaultAddressCountryCode(vendorAddress.getVendorCountryCode()); 201 vendorDetail.setDefaultAddressPostalCode(vendorAddress.getVendorZipCode()); 202 vendorDetail.setDefaultAddressStateCode(vendorAddress.getVendorStateCode()); 203 vendorDetail.setDefaultAddressInternationalProvince(vendorAddress.getVendorAddressInternationalProvinceName()); 204 } 205 206 setAlternateVendorDetail(vendorDetail); 207 } 208 209 if (getGoodsDeliveredVendorHeaderGeneratedIdentifier() != null && 210 getGoodsDeliveredVendorDetailAssignedIdentifier() != null){ 211 VendorDetail tempVendor = new VendorDetail(); 212 tempVendor.setVendorHeaderGeneratedIdentifier(getGoodsDeliveredVendorHeaderGeneratedIdentifier()); 213 tempVendor.setVendorDetailAssignedIdentifier(getGoodsDeliveredVendorDetailAssignedIdentifier()); 214 setGoodsDeliveredVendorNumber(tempVendor.getVendorNumber()); 215 if (StringUtils.equals(getVendorNumber(),getGoodsDeliveredVendorNumber())){ 216 setGoodsDeliveredVendorName(getVendorName()); 217 }else { 218 setGoodsDeliveredVendorName(getAlternateVendorName()); 219 } 220 } 221 } 222 223 /** 224 * Perform logic needed to clear the initial fields on a Receiving Line Document 225 */ 226 public void clearInitFields() { 227 // Clearing document overview fields 228 getDocumentHeader().setDocumentDescription(null); 229 getDocumentHeader().setExplanation(null); 230 getDocumentHeader().setFinancialDocumentTotalAmount(null); 231 getDocumentHeader().setOrganizationDocumentNumber(null); 232 233 setPurchaseOrderIdentifier(null); 234 235 setShipmentReceivedDate(SpringContext.getBean(DateTimeService.class).getCurrentSqlDate()); 236 setShipmentPackingSlipNumber(null); 237 setShipmentBillOfLadingNumber(null); 238 setCarrierCode(null); 239 } 240 241 @Override 242 public void processAfterRetrieve() { 243 super.processAfterRetrieve(); 244 refreshNonUpdateableReferences(); 245 populateVendorDetails(); 246 } 247 248 @Override 249 public void prepareForSave(KualiDocumentEvent event) { 250 251 if (event instanceof AttributedContinuePurapEvent) { 252 SpringContext.getBean(BulkReceivingService.class).populateBulkReceivingFromPurchaseOrder(this); 253 if (getPurchaseOrderIdentifier() == null){ 254 getDocumentHeader().setDocumentDescription(PurapConstants.BulkReceivingDocumentStrings.MESSAGE_BULK_RECEIVING_DEFAULT_DOC_DESCRIPTION);; 255 } 256 }else{ 257 if (getGoodsDeliveredVendorNumber() != null){ 258 VendorDetail tempVendor = new VendorDetail(); 259 tempVendor.setVendorNumber(getGoodsDeliveredVendorNumber()); 260 setGoodsDeliveredVendorHeaderGeneratedIdentifier(tempVendor.getVendorHeaderGeneratedIdentifier()); 261 setGoodsDeliveredVendorDetailAssignedIdentifier(tempVendor.getVendorDetailAssignedIdentifier()); 262 } 263 } 264 265 super.prepareForSave(event); 266 } 267 268 protected void populateDocumentDescription(PurchaseOrderDocument poDocument) { 269 String description = "PO: " + poDocument.getPurapDocumentIdentifier() + " Vendor: " + poDocument.getVendorName(); 270 int noteTextMaxLength = SpringContext.getBean(DataDictionaryService.class).getAttributeMaxLength(DocumentHeader.class, KNSPropertyConstants.DOCUMENT_DESCRIPTION).intValue(); 271 if (noteTextMaxLength < description.length()) { 272 description = description.substring(0, noteTextMaxLength); 273 } 274 getDocumentHeader().setDocumentDescription(description); 275 } 276 277 public String getDeliveryCountryName() { 278 Country country = SpringContext.getBean(CountryService.class).getByPrimaryId(getDeliveryCountryCode()); 279 if (country != null) 280 return country.getPostalCountryName(); 281 return null; 282 } 283 284 public String getGoodsDeliveredVendorNumber() { 285 return goodsDeliveredVendorNumber; 286 } 287 288 public void setGoodsDeliveredVendorNumber(String goodsDeliveredVendorNumber) { 289 this.goodsDeliveredVendorNumber = goodsDeliveredVendorNumber; 290 } 291 292 public Integer getNoOfCartons() { 293 return noOfCartons; 294 } 295 296 public void setNoOfCartons(Integer noOfCartons) { 297 this.noOfCartons = noOfCartons; 298 } 299 300 public String getVendorContact() { 301 return vendorContact; 302 } 303 304 public void setVendorContact(String vendorContact) { 305 this.vendorContact = vendorContact; 306 } 307 308 public VendorDetail getAlternateVendorDetail() { 309 return alternateVendorDetail; 310 } 311 312 public void setAlternateVendorDetail(VendorDetail alternateVendorDetail) { 313 this.alternateVendorDetail = alternateVendorDetail; 314 } 315 316 public String getShipmentWeight() { 317 return shipmentWeight; 318 } 319 320 public void setShipmentWeight(String shipmentWeight) { 321 this.shipmentWeight = shipmentWeight; 322 } 323 324 public String getGoodsDeliveredVendorName() { 325 return goodsDeliveredVendorName; 326 } 327 328 public void setGoodsDeliveredVendorName(String goodsDeliveredVendorName) { 329 this.goodsDeliveredVendorName = goodsDeliveredVendorName; 330 } 331 332 public String getVendorAddressInternationalProvinceName() { 333 return vendorAddressInternationalProvinceName; 334 } 335 336 public void setVendorAddressInternationalProvinceName(String vendorAddressInternationalProvinceName) { 337 this.vendorAddressInternationalProvinceName = vendorAddressInternationalProvinceName; 338 } 339 340 public String getDeliveryCampusName() { 341 return deliveryCampusName; 342 } 343 344 public void setDeliveryCampusName(String deliveryCampusName) { 345 this.deliveryCampusName = deliveryCampusName; 346 } 347 348 public String getRequestorPersonName() { 349 return requestorPersonName; 350 } 351 352 public void setRequestorPersonName(String requestorPersonName) { 353 this.requestorPersonName = requestorPersonName; 354 } 355 356 public String getRequestorPersonPhoneNumber() { 357 return requestorPersonPhoneNumber; 358 } 359 360 public void setRequestorPersonPhoneNumber(String requestorPersonPhoneNumber) { 361 this.requestorPersonPhoneNumber = requestorPersonPhoneNumber; 362 } 363 364 public String getPreparerPersonName() { 365 return preparerPersonName; 366 } 367 368 public void setPreparerPersonName(String preparerPersonName) { 369 this.preparerPersonName = preparerPersonName; 370 } 371 372 public String getPreparerPersonPhoneNumber() { 373 return preparerPersonPhoneNumber; 374 } 375 376 public void setPreparerPersonPhoneNumber(String preparerPersonPhoneNumber) { 377 this.preparerPersonPhoneNumber = preparerPersonPhoneNumber; 378 } 379 380 public String getTrackingNumber() { 381 return trackingNumber; 382 } 383 384 public void setTrackingNumber(String trackingNumber) { 385 this.trackingNumber = trackingNumber; 386 } 387 388 public String getVendorNoteText() { 389 return vendorNoteText; 390 } 391 392 public void setVendorNoteText(String vendorNoteText) { 393 this.vendorNoteText = vendorNoteText; 394 } 395 396 public String getRequestorPersonEmailAddress() { 397 return requestorPersonEmailAddress; 398 } 399 400 public void setRequestorPersonEmailAddress(String requestorPersonEmailAddress) { 401 this.requestorPersonEmailAddress = requestorPersonEmailAddress; 402 } 403 404 public String getInstitutionContactEmailAddress() { 405 return institutionContactEmailAddress; 406 } 407 408 public void setInstitutionContactEmailAddress(String institutionContactEmailAddress) { 409 this.institutionContactEmailAddress = institutionContactEmailAddress; 410 } 411 412 public String getInstitutionContactName() { 413 return institutionContactName; 414 } 415 416 public void setInstitutionContactName(String institutionContactName) { 417 this.institutionContactName = institutionContactName; 418 } 419 420 public String getInstitutionContactPhoneNumber() { 421 return institutionContactPhoneNumber; 422 } 423 424 public void setInstitutionContactPhoneNumber(String institutionContactPhoneNumber) { 425 this.institutionContactPhoneNumber = institutionContactPhoneNumber; 426 } 427 428 public String getDeliveryAdditionalInstructionText() { 429 return deliveryAdditionalInstructionText; 430 } 431 432 public void setDeliveryAdditionalInstructionText(String deliveryAdditionalInstructionText) { 433 this.deliveryAdditionalInstructionText = deliveryAdditionalInstructionText; 434 } 435 436 public Integer getGoodsDeliveredVendorDetailAssignedIdentifier() { 437 return goodsDeliveredVendorDetailAssignedIdentifier; 438 } 439 440 public void setGoodsDeliveredVendorDetailAssignedIdentifier(Integer goodsDeliveredVendorDetailAssignedIdentifier) { 441 this.goodsDeliveredVendorDetailAssignedIdentifier = goodsDeliveredVendorDetailAssignedIdentifier; 442 } 443 444 public Integer getGoodsDeliveredVendorHeaderGeneratedIdentifier() { 445 return goodsDeliveredVendorHeaderGeneratedIdentifier; 446 } 447 448 public void setGoodsDeliveredVendorHeaderGeneratedIdentifier(Integer goodsDeliveredVendorHeaderGeneratedIdentifier) { 449 this.goodsDeliveredVendorHeaderGeneratedIdentifier = goodsDeliveredVendorHeaderGeneratedIdentifier; 450 } 451 452 @Override 453 public boolean isBoNotesSupport() { 454 return true; 455 } 456 457 protected LinkedHashMap toStringMapper() { 458 LinkedHashMap m = new LinkedHashMap(); 459 m.put("documentNumber", this.documentNumber); 460 m.put("PO", getPurchaseOrderIdentifier()); 461 return m; 462 } 463 464 public String getWorkflowStatusForResult(){ 465 return PurapSearchUtils.getWorkFlowStatusString(getDocumentHeader()); 466 } 467 468 /** 469 * It's not needed to implement this method in this class since bulk receiving doesn't support items. 470 * Calling this method will throw an UnsupportedOperationException 471 * @throws UnsupportedOperationException 472 */ 473 @Override 474 public Class getItemClass() { 475 throw new UnsupportedOperationException("Items are not being handled in Bulk Receiving document"); 476 } 477 478 /** 479 * It's not needed to implement PurapItemOperations methods in this class since bulk receiving doesn't support items. 480 * Calling this method will throw an UnsupportedOperationException 481 * @throws UnsupportedOperationException 482 */ 483 public <T> T getItem(int pos) { 484 throw new UnsupportedOperationException("Items are not being handled in Bulk Receiving document"); 485 } 486 487 /** 488 * It's not needed to implement PurapItemOperations methods in this class since bulk receiving doesn't support items. 489 * Calling this method will throw an UnsupportedOperationException 490 * @throws UnsupportedOperationException 491 */ 492 public List getItems() { 493 throw new UnsupportedOperationException("Items are not being handled in Bulk Receiving document"); 494 } 495 496 /** 497 * It's not needed to implement PurapItemOperations methods in this class since bulk receiving doesn't support items. 498 * Calling this method will throw an UnsupportedOperationException 499 * @throws UnsupportedOperationException 500 */ 501 public void setItems(List items) { 502 throw new UnsupportedOperationException("Items are not being handled in Bulk Receiving document"); 503 } 504 505 }