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.sql.Date;
019 import java.util.List;
020
021 import org.apache.commons.lang.StringUtils;
022 import org.kuali.kfs.module.purap.PurapPropertyConstants;
023 import org.kuali.kfs.module.purap.businessobject.Carrier;
024 import org.kuali.kfs.module.purap.businessobject.DeliveryRequiredDateReason;
025 import org.kuali.kfs.module.purap.businessobject.LineItemReceivingStatus;
026 import org.kuali.kfs.module.purap.businessobject.PurchaseOrderView;
027 import org.kuali.kfs.module.purap.businessobject.SensitiveData;
028 import org.kuali.kfs.module.purap.document.service.PurchaseOrderService;
029 import org.kuali.kfs.module.purap.document.service.ReceivingService;
030 import org.kuali.kfs.module.purap.service.SensitiveDataService;
031 import org.kuali.kfs.module.purap.util.PurApRelatedViews;
032 import org.kuali.kfs.module.purap.util.PurapSearchUtils;
033 import org.kuali.kfs.sys.KFSConstants;
034 import org.kuali.kfs.sys.context.SpringContext;
035 import org.kuali.kfs.sys.document.FinancialSystemTransactionalDocumentBase;
036 import org.kuali.kfs.vnd.businessobject.CampusParameter;
037 import org.kuali.kfs.vnd.businessobject.VendorDetail;
038 import org.kuali.rice.kew.dto.DocumentRouteStatusChangeDTO;
039 import org.kuali.rice.kew.exception.WorkflowException;
040 import org.kuali.rice.kew.util.KEWConstants;
041 import org.kuali.rice.kim.bo.entity.KimPrincipal;
042 import org.kuali.rice.kim.service.IdentityManagementService;
043 import org.kuali.rice.kns.bo.Country;
044 import org.kuali.rice.kns.service.CountryService;
045 import org.kuali.rice.kns.util.ObjectUtils;
046 import org.kuali.rice.kns.workflow.service.KualiWorkflowDocument;
047 import org.kuali.rice.kns.workflow.service.KualiWorkflowInfo;
048
049 public abstract class ReceivingDocumentBase extends FinancialSystemTransactionalDocumentBase implements ReceivingDocument {
050
051 protected String carrierCode;
052 protected String shipmentPackingSlipNumber;
053 protected String shipmentReferenceNumber;
054 protected String shipmentBillOfLadingNumber;
055 protected Date shipmentReceivedDate;
056 protected Integer vendorHeaderGeneratedIdentifier;
057 protected Integer vendorDetailAssignedIdentifier;
058 protected String vendorName;
059 protected String vendorLine1Address;
060 protected String vendorLine2Address;
061 protected String vendorCityName;
062 protected String vendorStateCode;
063 protected String vendorPostalCode;
064 protected String vendorCountryCode;
065 protected String deliveryCampusCode;
066 protected boolean deliveryBuildingOtherIndicator;
067 protected String deliveryBuildingCode;
068 protected String deliveryBuildingName;
069 protected String deliveryBuildingRoomNumber;
070 protected String deliveryBuildingLine1Address;
071 protected String deliveryBuildingLine2Address;
072 protected String deliveryCityName;
073 protected String deliveryStateCode;
074 protected String deliveryPostalCode;
075 protected String deliveryCountryCode;
076 protected String deliveryToName;
077 protected String deliveryToEmailAddress;
078 protected String deliveryToPhoneNumber;
079 protected Date deliveryRequiredDate;
080 protected String deliveryInstructionText;
081 protected String deliveryRequiredDateReasonCode;
082 protected String lineItemReceivingStatusCode;
083 protected String lineItemReceivingStatusDescription;
084
085 protected Integer alternateVendorHeaderGeneratedIdentifier;
086 protected Integer alternateVendorDetailAssignedIdentifier;
087 protected String alternateVendorName;
088
089 //not persisted in db
090 protected String vendorNumber;
091 protected Integer vendorAddressGeneratedIdentifier;
092 protected String alternateVendorNumber;
093 protected boolean sensitive;
094
095 protected CampusParameter deliveryCampus;
096 protected Country vendorCountry;
097 protected Carrier carrier;
098 protected VendorDetail vendorDetail;
099 protected DeliveryRequiredDateReason deliveryRequiredDateReason;
100 protected LineItemReceivingStatus lineItemReceivingStatus;
101 protected Integer purchaseOrderIdentifier;
102 protected Integer accountsPayablePurchasingDocumentLinkIdentifier;
103 protected transient PurchaseOrderDocument purchaseOrderDocument;
104
105 protected transient PurApRelatedViews relatedViews;
106
107 public ReceivingDocumentBase(){
108 super();
109 }
110
111 public boolean isSensitive() {
112 List<SensitiveData> sensitiveData = SpringContext.getBean(SensitiveDataService.class).getSensitiveDatasAssignedByRelatedDocId(getAccountsPayablePurchasingDocumentLinkIdentifier());
113 if (ObjectUtils.isNotNull(sensitiveData) && !sensitiveData.isEmpty()) {
114 return true;
115 }
116 return false;
117 }
118
119 public String getCarrierCode() {
120 return carrierCode;
121 }
122 public void setCarrierCode(String carrierCode) {
123 this.carrierCode = carrierCode;
124 }
125
126 public String getShipmentPackingSlipNumber() {
127 return shipmentPackingSlipNumber;
128 }
129
130 public void setShipmentPackingSlipNumber(String shipmentPackingSlipNumber) {
131 this.shipmentPackingSlipNumber = shipmentPackingSlipNumber;
132 }
133
134 public String getShipmentReferenceNumber() {
135 return shipmentReferenceNumber;
136 }
137
138 public void setShipmentReferenceNumber(String shipmentReferenceNumber) {
139 this.shipmentReferenceNumber = shipmentReferenceNumber;
140 }
141
142 public String getShipmentBillOfLadingNumber() {
143 return shipmentBillOfLadingNumber;
144 }
145
146 public void setShipmentBillOfLadingNumber(String shipmentBillOfLadingNumber) {
147 this.shipmentBillOfLadingNumber = shipmentBillOfLadingNumber;
148 }
149
150 public Date getShipmentReceivedDate() {
151 return shipmentReceivedDate;
152 }
153
154 public void setShipmentReceivedDate(Date shipmentReceivedDate) {
155 this.shipmentReceivedDate = shipmentReceivedDate;
156 }
157
158 public Integer getVendorHeaderGeneratedIdentifier() {
159 return vendorHeaderGeneratedIdentifier;
160 }
161
162 public void setVendorHeaderGeneratedIdentifier(Integer vendorHeaderGeneratedIdentifier) {
163 this.vendorHeaderGeneratedIdentifier = vendorHeaderGeneratedIdentifier;
164 }
165
166 public Integer getVendorDetailAssignedIdentifier() {
167 return vendorDetailAssignedIdentifier;
168 }
169
170 public void setVendorDetailAssignedIdentifier(Integer vendorDetailAssignedIdentifier) {
171 this.vendorDetailAssignedIdentifier = vendorDetailAssignedIdentifier;
172 }
173
174 public String getVendorName() {
175 return vendorName;
176 }
177
178 public void setVendorName(String vendorName) {
179 this.vendorName = vendorName;
180 }
181
182 public String getVendorLine1Address() {
183 return vendorLine1Address;
184 }
185
186 public void setVendorLine1Address(String vendorLine1Address) {
187 this.vendorLine1Address = vendorLine1Address;
188 }
189
190 public String getVendorLine2Address() {
191 return vendorLine2Address;
192 }
193
194 public void setVendorLine2Address(String vendorLine2Address) {
195 this.vendorLine2Address = vendorLine2Address;
196 }
197
198 public String getVendorCityName() {
199 return vendorCityName;
200 }
201
202 public void setVendorCityName(String vendorCityName) {
203 this.vendorCityName = vendorCityName;
204 }
205
206 public String getVendorStateCode() {
207 return vendorStateCode;
208 }
209
210 public void setVendorStateCode(String vendorStateCode) {
211 this.vendorStateCode = vendorStateCode;
212 }
213
214 public String getVendorPostalCode() {
215 return vendorPostalCode;
216 }
217
218 public void setVendorPostalCode(String vendorPostalCode) {
219 this.vendorPostalCode = vendorPostalCode;
220 }
221
222 public String getVendorCountryCode() {
223 return vendorCountryCode;
224 }
225
226 public void setVendorCountryCode(String vendorCountryCode) {
227 this.vendorCountryCode = vendorCountryCode;
228 }
229
230 public String getDeliveryCampusCode() {
231 return deliveryCampusCode;
232 }
233
234 public void setDeliveryCampusCode(String deliveryCampusCode) {
235 this.deliveryCampusCode = deliveryCampusCode;
236 }
237
238 public String getDeliveryBuildingCode() {
239 return deliveryBuildingCode;
240 }
241
242 public void setDeliveryBuildingCode(String deliveryBuildingCode) {
243 this.deliveryBuildingCode = deliveryBuildingCode;
244 }
245
246 public String getDeliveryBuildingName() {
247 return deliveryBuildingName;
248 }
249
250 public void setDeliveryBuildingName(String deliveryBuildingName) {
251 this.deliveryBuildingName = deliveryBuildingName;
252 }
253
254 public String getDeliveryBuildingRoomNumber() {
255 return deliveryBuildingRoomNumber;
256 }
257
258 public void setDeliveryBuildingRoomNumber(String deliveryBuildingRoomNumber) {
259 this.deliveryBuildingRoomNumber = deliveryBuildingRoomNumber;
260 }
261
262 public String getDeliveryBuildingLine1Address() {
263 return deliveryBuildingLine1Address;
264 }
265
266 public void setDeliveryBuildingLine1Address(String deliveryBuildingLine1Address) {
267 this.deliveryBuildingLine1Address = deliveryBuildingLine1Address;
268 }
269
270 public String getDeliveryBuildingLine2Address() {
271 return deliveryBuildingLine2Address;
272 }
273
274 public void setDeliveryBuildingLine2Address(String deliveryBuildingLine2Address) {
275 this.deliveryBuildingLine2Address = deliveryBuildingLine2Address;
276 }
277
278 public String getDeliveryCityName() {
279 return deliveryCityName;
280 }
281
282 public void setDeliveryCityName(String deliveryCityName) {
283 this.deliveryCityName = deliveryCityName;
284 }
285
286 public String getDeliveryStateCode() {
287 return deliveryStateCode;
288 }
289
290 public void setDeliveryStateCode(String deliveryStateCode) {
291 this.deliveryStateCode = deliveryStateCode;
292 }
293
294 public String getDeliveryPostalCode() {
295 return deliveryPostalCode;
296 }
297
298 public void setDeliveryPostalCode(String deliveryPostalCode) {
299 this.deliveryPostalCode = deliveryPostalCode;
300 }
301
302 public String getDeliveryCountryCode() {
303 return deliveryCountryCode;
304 }
305
306 public void setDeliveryCountryCode(String deliveryCountryCode) {
307 this.deliveryCountryCode = deliveryCountryCode;
308 }
309
310 public String getDeliveryCountryName() {
311 Country country = SpringContext.getBean(CountryService.class).getByPrimaryId(getDeliveryCountryCode());
312 if (country != null)
313 return country.getPostalCountryName();
314 return null;
315 }
316
317 public String getDeliveryToName() {
318 return deliveryToName;
319 }
320
321 public void setDeliveryToName(String deliveryToName) {
322 this.deliveryToName = deliveryToName;
323 }
324
325 public String getDeliveryToEmailAddress() {
326 return deliveryToEmailAddress;
327 }
328
329 public void setDeliveryToEmailAddress(String deliveryToEmailAddress) {
330 this.deliveryToEmailAddress = deliveryToEmailAddress;
331 }
332
333 public String getDeliveryToPhoneNumber() {
334 return deliveryToPhoneNumber;
335 }
336
337 public void setDeliveryToPhoneNumber(String deliveryToPhoneNumber) {
338 this.deliveryToPhoneNumber = deliveryToPhoneNumber;
339 }
340
341 public Date getDeliveryRequiredDate() {
342 return deliveryRequiredDate;
343 }
344
345 public void setDeliveryRequiredDate(Date deliveryRequiredDate) {
346 this.deliveryRequiredDate = deliveryRequiredDate;
347 }
348
349 public String getDeliveryInstructionText() {
350 return deliveryInstructionText;
351 }
352
353 public void setDeliveryInstructionText(String deliveryInstructionText) {
354 this.deliveryInstructionText = deliveryInstructionText;
355 }
356
357 public String getDeliveryRequiredDateReasonCode() {
358 return deliveryRequiredDateReasonCode;
359 }
360
361 public void setDeliveryRequiredDateReasonCode(String deliveryRequiredDateReasonCode) {
362 this.deliveryRequiredDateReasonCode = deliveryRequiredDateReasonCode;
363 }
364
365 public CampusParameter getDeliveryCampus() {
366 return deliveryCampus;
367 }
368
369 /**
370 * @deprecated
371 */
372 public void setDeliveryCampus(CampusParameter deliveryCampus) {
373 this.deliveryCampus = deliveryCampus;
374 }
375
376 public Carrier getCarrier() {
377 return carrier;
378 }
379
380 /**
381 * @deprecated
382 */
383 public void setCarrier(Carrier carrier) {
384 this.carrier = carrier;
385 }
386
387 public DeliveryRequiredDateReason getDeliveryRequiredDateReason() {
388 return deliveryRequiredDateReason;
389 }
390
391 /**
392 * @deprecated
393 */
394 public void setDeliveryRequiredDateReason(DeliveryRequiredDateReason deliveryRequiredDateReason) {
395 this.deliveryRequiredDateReason = deliveryRequiredDateReason;
396 }
397
398 public Country getVendorCountry() {
399 vendorCountry = SpringContext.getBean(CountryService.class).getByPrimaryIdIfNecessary(vendorCountryCode, vendorCountry);
400 return vendorCountry;
401 }
402
403 /**
404 * @deprecated
405 */
406 public void setVendorCountry(Country vendorCountry) {
407 this.vendorCountry = vendorCountry;
408 }
409
410 public VendorDetail getVendorDetail() {
411 return vendorDetail;
412 }
413
414 /**
415 * @deprecated
416 */
417 public void setVendorDetail(VendorDetail vendorDetail) {
418 this.vendorDetail = vendorDetail;
419 }
420
421 public String getVendorNumber() {
422 if (StringUtils.isNotEmpty(vendorNumber)) {
423 return vendorNumber;
424 }
425 else if (ObjectUtils.isNotNull(vendorDetail)) {
426 return vendorDetail.getVendorNumber();
427 }
428 else
429 return "";
430 }
431
432 public void setVendorNumber(String vendorNumber) {
433 this.vendorNumber = vendorNumber;
434 }
435
436 public Integer getVendorAddressGeneratedIdentifier() {
437 return vendorAddressGeneratedIdentifier;
438 }
439
440 public void setVendorAddressGeneratedIdentifier(Integer vendorAddressGeneratedIdentifier) {
441 this.vendorAddressGeneratedIdentifier = vendorAddressGeneratedIdentifier;
442 }
443
444 public Integer getAlternateVendorDetailAssignedIdentifier() {
445 return alternateVendorDetailAssignedIdentifier;
446 }
447
448 public void setAlternateVendorDetailAssignedIdentifier(Integer alternateVendorDetailAssignedIdentifier) {
449 this.alternateVendorDetailAssignedIdentifier = alternateVendorDetailAssignedIdentifier;
450 }
451
452 public Integer getAlternateVendorHeaderGeneratedIdentifier() {
453 return alternateVendorHeaderGeneratedIdentifier;
454 }
455
456 public void setAlternateVendorHeaderGeneratedIdentifier(Integer alternateVendorHeaderGeneratedIdentifier) {
457 this.alternateVendorHeaderGeneratedIdentifier = alternateVendorHeaderGeneratedIdentifier;
458 }
459
460 public String getAlternateVendorName() {
461 return alternateVendorName;
462 }
463
464 public void setAlternateVendorName(String alternateVendorName) {
465 this.alternateVendorName = alternateVendorName;
466 }
467
468 public String getAlternateVendorNumber() {
469 return alternateVendorNumber;
470 }
471
472 public void setAlternateVendorNumber(String alternateVendorNumber) {
473 this.alternateVendorNumber = alternateVendorNumber;
474 }
475
476 public boolean isDeliveryBuildingOtherIndicator() {
477 return deliveryBuildingOtherIndicator;
478 }
479
480 public void setDeliveryBuildingOtherIndicator(boolean deliveryBuildingOtherIndicator) {
481 this.deliveryBuildingOtherIndicator = deliveryBuildingOtherIndicator;
482 }
483
484 @Override
485 public void doRouteStatusChange(DocumentRouteStatusChangeDTO statusChangeEvent) {
486 super.doRouteStatusChange(statusChangeEvent);
487 if(!(this instanceof BulkReceivingDocument)){
488 if(this.getDocumentHeader().getWorkflowDocument().stateIsProcessed()) {
489 //delete unentered items and update po totals and save po
490 SpringContext.getBean(ReceivingService.class).completeReceivingDocument(this);
491 }
492 }
493 }
494
495 public abstract Class getItemClass();
496
497 public Integer getPurchaseOrderIdentifier() {
498 return purchaseOrderIdentifier;
499 }
500
501 public void setPurchaseOrderIdentifier(Integer purchaseOrderIdentifier) {
502 this.purchaseOrderIdentifier = purchaseOrderIdentifier;
503 }
504
505 public Integer getAccountsPayablePurchasingDocumentLinkIdentifier() {
506 return accountsPayablePurchasingDocumentLinkIdentifier;
507 }
508
509 public void setAccountsPayablePurchasingDocumentLinkIdentifier(Integer accountsPayablePurchasingDocumentLinkIdentifier) {
510 this.accountsPayablePurchasingDocumentLinkIdentifier = accountsPayablePurchasingDocumentLinkIdentifier;
511 }
512
513 public PurchaseOrderDocument getPurchaseOrderDocument() {
514 if ((ObjectUtils.isNull(this.purchaseOrderDocument) || ObjectUtils.isNull(this.purchaseOrderDocument.getPurapDocumentIdentifier())) && (ObjectUtils.isNotNull(getPurchaseOrderIdentifier()))) {
515 setPurchaseOrderDocument(SpringContext.getBean(PurchaseOrderService.class).getCurrentPurchaseOrder(this.getPurchaseOrderIdentifier()));
516 }
517 return this.purchaseOrderDocument;
518 }
519
520 public void setPurchaseOrderDocument(PurchaseOrderDocument purchaseOrderDocument) {
521 if (ObjectUtils.isNull(purchaseOrderDocument)) {
522 this.purchaseOrderDocument = null;
523 }
524 else {
525 if (ObjectUtils.isNotNull(purchaseOrderDocument.getPurapDocumentIdentifier())) {
526 setPurchaseOrderIdentifier(purchaseOrderDocument.getPurapDocumentIdentifier());
527 }
528 this.purchaseOrderDocument = purchaseOrderDocument;
529 }
530 }
531
532 public PurApRelatedViews getRelatedViews() {
533 if (relatedViews == null) {
534 relatedViews = new PurApRelatedViews(this.documentNumber, this.accountsPayablePurchasingDocumentLinkIdentifier);
535 }
536 return relatedViews;
537 }
538
539 public void setRelatedViews(PurApRelatedViews relatedViews) {
540 this.relatedViews = relatedViews;
541 }
542
543 public void initiateDocument(){
544 //initiate code
545 }
546
547 /**
548 * FIXME: this is same as PurchaseOrderDoc please move somewhere appropriate
549 * Sends FYI workflow request to the given user on this document.
550 *
551 * @param workflowDocument the associated workflow document.
552 * @param userNetworkId the network ID of the user to be sent to.
553 * @param annotation the annotation notes contained in this document.
554 * @param responsibility the responsibility specified in the request.
555 * @throws WorkflowException
556 */
557 public void appSpecificRouteDocumentToUser(KualiWorkflowDocument workflowDocument, String userNetworkId, String annotation, String responsibility) throws WorkflowException {
558 if (ObjectUtils.isNotNull(workflowDocument)) {
559 String annotationNote = (ObjectUtils.isNull(annotation)) ? "" : annotation;
560 String responsibilityNote = (ObjectUtils.isNull(responsibility)) ? "" : responsibility;
561 String currentNodeName = getCurrentRouteNodeName(workflowDocument);
562 KimPrincipal principal = SpringContext.getBean(IdentityManagementService.class).getPrincipalByPrincipalName(userNetworkId);
563 workflowDocument.adHocRouteDocumentToPrincipal(KEWConstants.ACTION_REQUEST_FYI_REQ, currentNodeName, annotationNote, principal.getPrincipalId(), responsibilityNote, true);
564 }
565 }
566 /**
567 * FIXME: this is same as PurchaseOrderDoc please move somewhere appropriate
568 * Returns the name of the current route node.
569 *
570 * @param wd the current workflow document.
571 * @return the name of the current route node.
572 * @throws WorkflowException
573 */
574 protected String getCurrentRouteNodeName(KualiWorkflowDocument wd) throws WorkflowException {
575 String[] nodeNames = wd.getNodeNames();
576 if ((nodeNames == null) || (nodeNames.length == 0)) {
577 return null;
578 }
579 else {
580 return nodeNames[0];
581 }
582 }
583
584 @Override
585 public boolean isBoNotesSupport() {
586 return true;
587 }
588
589 public LineItemReceivingStatus getLineItemReceivingStatus() {
590 if (ObjectUtils.isNull(this.lineItemReceivingStatus) && StringUtils.isNotEmpty(this.getLineItemReceivingStatusCode())) {
591 this.refreshReferenceObject(PurapPropertyConstants.LINE_ITEM_RECEIVING_STATUS);
592 }
593 return lineItemReceivingStatus;
594 }
595
596 public void setLineItemReceivingStatus(LineItemReceivingStatus receivingLineStatus) {
597 this.lineItemReceivingStatus = receivingLineStatus;
598 }
599
600 public String getLineItemReceivingStatusCode() {
601 return lineItemReceivingStatusCode;
602 }
603
604 public void setLineItemReceivingStatusCode(String lineItemReceivingStatusCode) {
605 this.lineItemReceivingStatusCode = lineItemReceivingStatusCode;
606 }
607
608 public String getLineItemReceivingStatusDescription() {
609 return lineItemReceivingStatusDescription;
610 }
611
612 public void setLineItemReceivingStatusDescription(String lineItemReceivingStatusDescription) {
613 this.lineItemReceivingStatusDescription = lineItemReceivingStatusDescription;
614 }
615
616 /**
617 * Always returns true.
618 * This method is needed here because it's called by some tag files shared with PurAp documents.
619 */
620 public boolean getIsATypeOfPurAPRecDoc() {
621 return true;
622 }
623
624 /**
625 * Always returns false.
626 * This method is needed here because it's called by some tag files shared with PurAp documents.
627 */
628 public boolean getIsATypeOfPurDoc() {
629 return false;
630 }
631
632 /**
633 * Always returns false.
634 * This method is needed here because it's called by some tag files shared with PurAp documents.
635 */
636 public boolean getIsATypeOfPODoc() {
637 return false;
638 }
639
640 /**
641 * Always returns false.
642 * This method is needed here because it's called by some tag files shared with PurAp documents.
643 */
644 public boolean getIsPODoc() {
645 return false;
646 }
647
648 /**
649 * Always returns false.
650 * This method is needed here because it's called by some tag files shared with PurAp documents.
651 */
652 public boolean getIsReqsDoc() {
653 return false;
654 }
655
656 public String getWorkflowStatusForResult(){
657 return PurapSearchUtils.getWorkFlowStatusString(getDocumentHeader());
658 }
659
660 public java.util.Date getCreateDateForResult() {
661 return new java.util.Date(getDocumentHeader().getWorkflowDocument().getCreateDate().getTime());
662 }
663
664 public String getDocumentTitleForResult() throws WorkflowException{
665 return SpringContext.getBean(KualiWorkflowInfo.class).getDocType(this.getDocumentHeader().getWorkflowDocument().getDocumentType()).getDocTypeLabel();
666 }
667
668 /**
669 * Checks whether the related purchase order views need a warning to be displayed,
670 * i.e. if at least one of the purchase orders has never been opened.
671 * @return true if at least one related purchase order needs a warning; false otherwise
672 */
673 public boolean getNeedWarningRelatedPOs() {
674 List<PurchaseOrderView> poViews = getRelatedViews().getRelatedPurchaseOrderViews();
675 for (PurchaseOrderView poView : poViews) {
676 if (poView.getNeedWarning())
677 return true;
678 }
679 return false;
680 }
681
682 }