1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.module.purap.batch;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.ole.integration.purap.CapitalAssetLocation;
20  import org.kuali.ole.module.purap.PurapConstants;
21  import org.kuali.ole.module.purap.PurapConstants.POCostSources;
22  import org.kuali.ole.module.purap.PurapConstants.POTransmissionMethods;
23  import org.kuali.ole.module.purap.PurapConstants.RequisitionSources;
24  import org.kuali.ole.module.purap.PurapConstants.RequisitionStatuses;
25  import org.kuali.ole.module.purap.businessobject.*;
26  import org.kuali.ole.module.purap.document.ContractManagerAssignmentDocument;
27  import org.kuali.ole.module.purap.document.PurchaseOrderDocument;
28  import org.kuali.ole.module.purap.document.RequisitionDocument;
29  import org.kuali.ole.module.purap.document.service.PurapService;
30  import org.kuali.ole.module.purap.document.service.RequisitionService;
31  import org.kuali.ole.sys.OLEConstants;
32  import org.kuali.ole.sys.batch.AbstractStep;
33  import org.kuali.ole.sys.batch.Job;
34  import org.kuali.ole.sys.batch.TestingStep;
35  import org.kuali.ole.sys.context.SpringContext;
36  import org.kuali.rice.core.api.util.type.KualiDecimal;
37  import org.kuali.rice.coreservice.api.parameter.EvaluationOperator;
38  import org.kuali.rice.coreservice.api.parameter.Parameter;
39  import org.kuali.rice.coreservice.api.parameter.Parameter.Builder;
40  import org.kuali.rice.coreservice.api.parameter.ParameterType;
41  import org.kuali.rice.coreservice.framework.parameter.ParameterService;
42  import org.kuali.rice.kew.api.exception.WorkflowException;
43  import org.kuali.rice.krad.UserSession;
44  import org.kuali.rice.krad.bo.DocumentHeader;
45  import org.kuali.rice.krad.document.Document;
46  import org.kuali.rice.krad.exception.ValidationException;
47  import org.kuali.rice.krad.service.BusinessObjectService;
48  import org.kuali.rice.krad.service.DocumentService;
49  import org.kuali.rice.krad.service.PersistenceStructureService;
50  import org.kuali.rice.krad.util.GlobalVariables;
51  
52  import java.math.BigDecimal;
53  import java.util.*;
54  
55  public class PurapMassRequisitionStep extends AbstractStep implements TestingStep {
56      private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurapMassRequisitionStep.class);
57  
58      private DocumentService documentService;
59      private RequisitionService requisitionService;
60      private PurapService purapService;
61      private BusinessObjectService boService;
62      private PersistenceStructureService psService;
63  
64      private final int NUM_DOCS_TO_CREATE = 25; 
65      private final int ROUTE_TO_FINAL_SECONDS_LIMIT = 240; 
66      private final String RUN_INDICATOR_PARAMETER_NAMESPACE_STEP = "PurapMassRequisitionStep";
67      private final String RUN_INDICATOR_PARAMETER_VALUE = "N";
68      private final String RUN_INDICATOR_PARAMETER_ALLOWED = "A";
69      private final String RUN_INDICATOR_PARAMETER_DESCRIPTION = "Tells the job framework whether to run this job or not; because the PurapMassRequisitionJob needs to only be run once after database initialization.";
70      private final String RUN_INDICATOR_PARAMETER_TYPE = "CONFG";
71  
72      @Override
73      public boolean execute(String jobName, Date jobRunDate) throws InterruptedException {
74          LOG.debug("Starting execution of PurapMassRequisitionStep");
75  
76          Parameter runIndicatorParameter = SpringContext.getBean(ParameterService.class).getParameter(PurapMassRequisitionStep.class, Job.STEP_RUN_PARM_NM);
77  
78          if (runIndicatorParameter == null || "Y".equals(runIndicatorParameter.getValue())) {
79              
80              setInitiatedRunParameter();
81  
82              for (int i = 0; i < NUM_DOCS_TO_CREATE; i++) {
83  
84                  try {
85                      LOG.info("Setting user session for routing of quantity document.");
86                      GlobalVariables.setUserSession(new UserSession("khuntley"));
87                      
88                      RequisitionDocument reqDoc = populateQuantityDocument();
89  
90                      LOG.info("Blanket approving quantity requisition document.");
91                      
92                      documentService.blanketApproveDocument(reqDoc, "auto-routing: Test Requisition Job.", null);
93                  } catch (WorkflowException e) {
94                      e.printStackTrace();
95                  }
96                  Thread.sleep(5000);
97              }
98  
99              for (int i = 0; i < NUM_DOCS_TO_CREATE; i++) {
100 
101                 try {
102                     LOG.info("Setting user session for routing of non-quantity document.");
103                     GlobalVariables.setUserSession(new UserSession("khuntley"));
104                     
105                     RequisitionDocument reqDoc = populateNonQuantityDocument();
106                     LOG.info("Blanket approving non-quantity requisition document.");
107                     
108                     documentService.blanketApproveDocument(reqDoc, "auto-routing: Test Requisition Job.", null);
109                 } catch (WorkflowException e) {
110                     e.printStackTrace();
111                 }
112                 Thread.sleep(5000);
113             }
114 
115 
116             
117             
118             
119             
120             
121             
122             
123             
124             
125             
126             
127             
128             
129             
130             
131             
132             
133             
134             
135             
136             
137             
138             
139             
140             
141             
142             
143             
144             
145             
146             
147             
148             
149             
150             
151             
152             
153             
154             
155             
156             
157             
158             
159             
160             
161             
162             
163             
164             
165             
166             
167             
168             
169             
170             
171             
172             
173             
174             
175             
176             
177             
178             
179             
180             
181             
182             
183             
184         }
185 
186         Thread.sleep(60000);
187         return true;
188     }
189 
190     private RequisitionDocument populateQuantityDocument() {
191         LOG.debug("Creating a new requisition.");
192         RequisitionDocument reqDoc = null;
193         try {
194             reqDoc = (RequisitionDocument) documentService.getNewDocument(RequisitionDocument.class);
195             LOG.info("Populating a new requisition.");
196             
197             
198             reqDoc.getDocumentHeader().setExplanation("batch created quantity document");
199             DocumentHeader documentHeader = reqDoc.getDocumentHeader();
200             documentHeader.setDocumentDescription("batch created quantity document");
201             reqDoc.setDocumentFundingSourceCode("INST");
202             reqDoc.setRequisitionSourceCode(RequisitionSources.STANDARD_ORDER);
203             reqDoc.setPurchaseOrderTransmissionMethodCode(POTransmissionMethods.NOPRINT);
204             reqDoc.setPurchaseOrderCostSourceCode(POCostSources.ESTIMATE);
205             reqDoc.setChartOfAccountsCode("KO");
206             reqDoc.setOrganizationCode("SBSC");
207             reqDoc.setDeliveryCampusCode("KO");
208             reqDoc.setRequestorPersonName("WATSON,TERRENCE G");
209             reqDoc.setRequestorPersonEmailAddress("tw@localhost.localhost");
210             reqDoc.setRequestorPersonPhoneNumber("812-555-5555");
211             reqDoc.setDeliveryBuildingCode("ADMN");
212             reqDoc.setDeliveryBuildingName("Administration");
213             reqDoc.setDeliveryBuildingRoomNumber("100");
214             reqDoc.setDeliveryBuildingLine1Address("98 smart street");
215             reqDoc.setDeliveryCityName("brainy");
216             reqDoc.setDeliveryStateCode("CA");
217             reqDoc.setDeliveryPostalCode("46202");
218             reqDoc.setDeliveryCountryCode("US");
219             reqDoc.setDeliveryToName("front desk");
220             reqDoc.setBillingName("THE UNIVERSITY");
221             reqDoc.setBillingLine1Address("ACCOUNTS PAYABLE");
222             reqDoc.setBillingCityName("BUTTER NUT");
223             reqDoc.setBillingStateCode("SC");
224             reqDoc.setBillingPostalCode("47402");
225             reqDoc.setBillingCountryCode("US");
226             reqDoc.setBillingPhoneNumber("111-111-1111");
227             reqDoc.setPurchaseOrderAutomaticIndicator(false);
228             reqDoc.setApplicationDocumentStatus(RequisitionStatuses.APPDOC_IN_PROCESS);
229             reqDoc.setVendorHeaderGeneratedIdentifier(1002);
230             reqDoc.setVendorDetailAssignedIdentifier(0);
231             reqDoc.setVendorName("MK CORPORATION ACTIVE");
232             reqDoc.setVendorLine1Address("3894 SOUTH ST");
233             reqDoc.setVendorLine2Address("P.O. BOX 3455");
234             reqDoc.setVendorCityName("SPRINGFIELD");
235             reqDoc.setVendorStateCode("IL");
236             reqDoc.setVendorPostalCode("33555");
237             reqDoc.setVendorCountryCode("US");
238             reqDoc.setUseTaxIndicator(false);
239 
240             
241             RequisitionItem item1 = new RequisitionItem();
242             item1.setItemLineNumber(new Integer(1));
243             item1.setItemUnitOfMeasureCode("PCS");
244             item1.setItemCatalogNumber("P10M980");
245             item1.setItemDescription("Copy Paper - 8 1/2 x 11, White, 92, 20lb");
246             item1.setItemUnitPrice(new BigDecimal(30.20));
247             item1.setItemTypeCode("ITEM");
248             item1.setItemQuantity(new KualiDecimal(20));
249             item1.setExtendedPrice(new KualiDecimal(604));
250             item1.setItemAssignedToTradeInIndicator(false);
251 
252             
253             RequisitionAccount account1 = new RequisitionAccount();
254             account1.setPostingYear(2004);
255             account1.setChartOfAccountsCode("BL");
256             account1.setAccountNumber("1023200");
257             account1.setFinancialObjectCode("4100");
258             account1.setDebitCreditCode(OLEConstants.GL_DEBIT_CODE);
259             account1.setAmount(new KualiDecimal("100"));
260             account1.setAccountLinePercent(new BigDecimal("100"));
261 
262             item1.getSourceAccountingLines().add(account1);
263             reqDoc.getItems().add(item1);
264             reqDoc.fixItemReferences();
265         } catch (WorkflowException e1) {
266             e1.printStackTrace();
267         }
268         return reqDoc;
269     }
270 
271     private RequisitionDocument populateNonQuantityDocument() {
272         RequisitionDocument reqDoc = null;
273         try {
274             reqDoc = (RequisitionDocument) documentService.getNewDocument(RequisitionDocument.class);
275 
276             
277             
278             reqDoc.getDocumentHeader().setExplanation("batch created non-quantity document");
279             DocumentHeader documentHeader = reqDoc.getDocumentHeader();
280             documentHeader.setDocumentDescription("batch created non-quantity document");
281             reqDoc.setDocumentFundingSourceCode("INST");
282             reqDoc.setRequisitionSourceCode(RequisitionSources.STANDARD_ORDER);
283             reqDoc.setPurchaseOrderTransmissionMethodCode(POTransmissionMethods.NOPRINT);
284             reqDoc.setPurchaseOrderCostSourceCode(POCostSources.ESTIMATE);
285             reqDoc.setChartOfAccountsCode("KO");
286             reqDoc.setOrganizationCode("SBSC");
287             reqDoc.setDeliveryCampusCode("KO");
288             reqDoc.setDeliveryCountryCode("US");
289             reqDoc.setRequestorPersonName("WATSON,TERRENCE G");
290             reqDoc.setRequestorPersonEmailAddress("tw@localhost.localhost");
291             reqDoc.setRequestorPersonPhoneNumber("812-555-5555");
292             reqDoc.setDeliveryBuildingCode("ADMN");
293             reqDoc.setDeliveryBuildingName("Administration");
294             reqDoc.setDeliveryBuildingRoomNumber("100");
295             reqDoc.setDeliveryBuildingLine1Address("98 smart street");
296             reqDoc.setDeliveryCityName("brainy");
297             reqDoc.setDeliveryStateCode("CA");
298             reqDoc.setDeliveryPostalCode("46202");
299             reqDoc.setDeliveryToName("front desk");
300             reqDoc.setBillingName("THE UNIVERSITY");
301             reqDoc.setBillingLine1Address("ACCOUNTS PAYABLE");
302             reqDoc.setBillingCityName("BUTTER NUT");
303             reqDoc.setBillingStateCode("SC");
304             reqDoc.setBillingPostalCode("47402");
305             reqDoc.setBillingCountryCode("US");
306             reqDoc.setBillingPhoneNumber("111-111-1111");
307             reqDoc.setPurchaseOrderAutomaticIndicator(false);
308             reqDoc.setApplicationDocumentStatus(RequisitionStatuses.APPDOC_IN_PROCESS);
309             reqDoc.setVendorHeaderGeneratedIdentifier(1016);
310             reqDoc.setVendorDetailAssignedIdentifier(0);
311             reqDoc.setVendorName("PHYSIK INSTRUMENT L.P.");
312             reqDoc.setVendorLine1Address("16 AUBURN ST");
313             reqDoc.setVendorCityName("AUBURN");
314             reqDoc.setVendorStateCode("MA");
315             reqDoc.setVendorPostalCode("01501");
316             reqDoc.setVendorCountryCode("US");
317             reqDoc.setUseTaxIndicator(false);
318 
319             
320             RequisitionItem item1 = new RequisitionItem();
321             item1.setItemLineNumber(new Integer(1));
322             item1.setItemUnitOfMeasureCode("");
323             item1.setItemCatalogNumber("");
324             item1.setItemDescription("consulting");
325             item1.setItemUnitPrice(new BigDecimal(5000));
326             item1.setItemTypeCode("SRVC");
327             item1.setItemQuantity(null);
328             item1.setExtendedPrice(new KualiDecimal(5000));
329             item1.setItemAssignedToTradeInIndicator(false);
330 
331             
332             RequisitionAccount account1 = new RequisitionAccount();
333             account1.setPostingYear(2004);
334             account1.setChartOfAccountsCode("BL");
335             account1.setAccountNumber("1023200");
336             account1.setFinancialObjectCode("4078");
337             account1.setDebitCreditCode(OLEConstants.GL_DEBIT_CODE);
338             account1.setAmount(new KualiDecimal("100"));
339             account1.setAccountLinePercent(new BigDecimal("100"));
340 
341             item1.getSourceAccountingLines().add(account1);
342             reqDoc.getItems().add(item1);
343             reqDoc.fixItemReferences();
344         } catch (WorkflowException e1) {
345             e1.printStackTrace();
346         }
347         return reqDoc;
348     }
349 
350     public RequisitionDocument populateCapitalAsset_Individual_WithAddresses_Document() {
351         RequisitionDocument reqDoc = null;
352         try {
353             reqDoc = (RequisitionDocument) documentService.getNewDocument(RequisitionDocument.class);
354 
355             
356             reqDoc.getDocumentHeader().setExplanation("batch created quantity document for cams");
357             DocumentHeader documentHeader = reqDoc.getDocumentHeader();
358             documentHeader.setDocumentDescription("batch created quantity document for cams");
359             reqDoc.setDocumentFundingSourceCode("INST");
360             reqDoc.setRequisitionSourceCode(RequisitionSources.STANDARD_ORDER);
361             reqDoc.setPurchaseOrderTransmissionMethodCode(POTransmissionMethods.NOPRINT);
362             reqDoc.setPurchaseOrderCostSourceCode(POCostSources.ESTIMATE);
363             reqDoc.setChartOfAccountsCode("UA");
364             reqDoc.setOrganizationCode("VPIT");
365             reqDoc.setDeliveryCampusCode("KO");
366             reqDoc.setRequestorPersonName("WATSON,TERRENCE G");
367             reqDoc.setRequestorPersonEmailAddress("tw@localhost.localhost");
368             reqDoc.setRequestorPersonPhoneNumber("812-555-5555");
369             reqDoc.setDeliveryBuildingCode("ADMN");
370             reqDoc.setDeliveryBuildingName("Administration");
371             reqDoc.setDeliveryBuildingRoomNumber("100");
372             reqDoc.setDeliveryBuildingLine1Address("98 smart street");
373             reqDoc.setDeliveryCityName("brainy");
374             reqDoc.setDeliveryStateCode("CA");
375             reqDoc.setDeliveryPostalCode("46202");
376             reqDoc.setDeliveryToName("front desk");
377             reqDoc.setBillingName("THE UNIVERSITY");
378             reqDoc.setBillingLine1Address("ACCOUNTS PAYABLE");
379             reqDoc.setBillingCityName("BUTTER NUT");
380             reqDoc.setBillingStateCode("SC");
381             reqDoc.setBillingPostalCode("47402");
382             reqDoc.setBillingCountryCode("US");
383             reqDoc.setBillingPhoneNumber("111-111-1111");
384             reqDoc.setPurchaseOrderAutomaticIndicator(false);
385             reqDoc.setApplicationDocumentStatus(RequisitionStatuses.APPDOC_IN_PROCESS);
386             reqDoc.setVendorHeaderGeneratedIdentifier(1002);
387             reqDoc.setVendorDetailAssignedIdentifier(0);
388             reqDoc.setVendorName("MK CORPORATION ACTIVE");
389             reqDoc.setVendorLine1Address("3984 SOUTH ST");
390             reqDoc.setVendorCityName("SPRINGFIELD");
391             reqDoc.setVendorStateCode("IL");
392             reqDoc.setVendorPostalCode("33555");
393             reqDoc.setVendorCountryCode("US");
394             reqDoc.setUseTaxIndicator(false);
395 
396             
397             RequisitionItem item1 = new RequisitionItem();
398             item1.setItemLineNumber(new Integer(1));
399             item1.setItemUnitOfMeasureCode("EA");
400             item1.setItemCatalogNumber("P10M980");
401             item1.setItemDescription("Gas Chromatograph");
402             item1.setItemUnitPrice(new BigDecimal(5000));
403             item1.setItemTypeCode("ITEM");
404             item1.setItemQuantity(new KualiDecimal(2.00));
405             item1.setExtendedPrice(new KualiDecimal(10000));
406             item1.setItemAssignedToTradeInIndicator(false);
407             item1.refreshReferenceObject("itemType");
408 
409             
410             RequisitionAccount account1 = new RequisitionAccount();
411             account1.setPostingYear(2004);
412             account1.setChartOfAccountsCode("BL");
413             account1.setAccountNumber("1023200");
414             account1.setFinancialObjectCode("7000");
415             account1.setDebitCreditCode(OLEConstants.GL_DEBIT_CODE);
416             account1.setAmount(new KualiDecimal("10000"));
417             account1.setAccountLinePercent(new BigDecimal("100"));
418 
419             item1.getSourceAccountingLines().add(account1);
420             reqDoc.getItems().add(item1);
421             reqDoc.fixItemReferences();
422 
423             reqDoc.setCapitalAssetSystemStateCode("NEW");
424             reqDoc.setCapitalAssetSystemTypeCode("IND");
425 
426             
427             purapService.saveDocumentNoValidation(reqDoc);
428             List<PurchasingCapitalAssetItem> purchasingCapitalAssetItems = new ArrayList();
429             RequisitionCapitalAssetItem capitalAssetItem = (RequisitionCapitalAssetItem) requisitionService.createCamsItem(reqDoc, item1);
430             capitalAssetItem.setCapitalAssetTransactionTypeCode("NEW");
431 
432             RequisitionCapitalAssetSystem system = (RequisitionCapitalAssetSystem) capitalAssetItem.getPurchasingCapitalAssetSystem();
433             system.setCapitalAssetNoteText("CA Notes go here");
434             system.setCapitalAssetNotReceivedCurrentFiscalYearIndicator(false);
435             system.setCapitalAssetManufacturerName("MK CORPORATION ACTIVE");
436             system.setCapitalAssetTypeCode("07034");
437             system.setCapitalAssetModelDescription("XXYYZZ");
438 
439             List<CapitalAssetLocation> locations = new ArrayList();
440 
441             RequisitionCapitalAssetLocation loc1 = new RequisitionCapitalAssetLocation();
442             loc1.setCapitalAssetSystemIdentifier(system.getCapitalAssetSystemIdentifier());
443             loc1.setItemQuantity(new KualiDecimal("1.00"));
444             loc1.setCampusCode("BL");
445             loc1.setBuildingCode("BL001");
446             loc1.setCapitalAssetLine1Address("211 S Indiana Ave");
447             loc1.setBuildingRoomNumber("001");
448             loc1.setCapitalAssetCityName("Bloomington");
449             loc1.setCapitalAssetStateCode("IN");
450             loc1.setCapitalAssetPostalCode("47405-7001");
451             loc1.setCapitalAssetCountryCode("US");
452             locations.add(loc1);
453 
454             RequisitionCapitalAssetLocation loc2 = new RequisitionCapitalAssetLocation();
455             loc2.setCapitalAssetSystemIdentifier(system.getCapitalAssetSystemIdentifier());
456             loc2.setItemQuantity(new KualiDecimal("1.00"));
457             loc2.setCampusCode("BL");
458             loc2.setBuildingCode("BL001");
459             loc2.setCapitalAssetLine1Address("211 S Indiana Ave");
460             loc2.setBuildingRoomNumber("001A");
461             loc2.setCapitalAssetCityName("Bloomington");
462             loc2.setCapitalAssetStateCode("IN");
463             loc2.setCapitalAssetPostalCode("47405-7001");
464             loc2.setCapitalAssetCountryCode("US");
465             locations.add(loc2);
466 
467             system.setCapitalAssetLocations(locations);
468 
469             purchasingCapitalAssetItems.add(capitalAssetItem);
470             reqDoc.setPurchasingCapitalAssetItems(purchasingCapitalAssetItems);
471         } catch (WorkflowException e1) {
472             e1.printStackTrace();
473         }
474         return reqDoc;
475     }
476 
477     private RequisitionDocument populateCapitalAsset_Individual_Unfilled_Document() {
478         RequisitionDocument reqDoc = null;
479         try {
480             reqDoc = (RequisitionDocument) documentService.getNewDocument(RequisitionDocument.class);
481 
482             
483             reqDoc.getDocumentHeader().setExplanation("batch created quantity document BAS");
484             DocumentHeader documentHeader = reqDoc.getDocumentHeader();
485             documentHeader.setDocumentDescription("batch created quantity document BAS");
486             reqDoc.setDocumentFundingSourceCode("INST");
487             reqDoc.setRequisitionSourceCode(RequisitionSources.STANDARD_ORDER);
488             reqDoc.setPurchaseOrderTransmissionMethodCode(POTransmissionMethods.NOPRINT);
489             reqDoc.setPurchaseOrderCostSourceCode(POCostSources.ESTIMATE);
490             reqDoc.setChartOfAccountsCode("UA");
491             reqDoc.setOrganizationCode("VPIT");
492             reqDoc.setDeliveryCampusCode("KO");
493             reqDoc.setRequestorPersonName("WATSON,TERRENCE G");
494             reqDoc.setRequestorPersonEmailAddress("tw@localhost.localhost");
495             reqDoc.setRequestorPersonPhoneNumber("812-555-5555");
496             reqDoc.setDeliveryBuildingCode("ADMN");
497             reqDoc.setDeliveryBuildingName("Administration");
498             reqDoc.setDeliveryBuildingRoomNumber("100");
499             reqDoc.setDeliveryBuildingLine1Address("98 smart street");
500             reqDoc.setDeliveryCityName("brainy");
501             reqDoc.setDeliveryStateCode("CA");
502             reqDoc.setDeliveryPostalCode("46202");
503             reqDoc.setDeliveryToName("front desk");
504             reqDoc.setBillingName("THE UNIVERSITY");
505             reqDoc.setBillingLine1Address("ACCOUNTS PAYABLE");
506             reqDoc.setBillingCityName("BUTTER NUT");
507             reqDoc.setBillingStateCode("SC");
508             reqDoc.setBillingPostalCode("47402");
509             reqDoc.setBillingCountryCode("US");
510             reqDoc.setBillingPhoneNumber("111-111-1111");
511             reqDoc.setPurchaseOrderAutomaticIndicator(false);
512             reqDoc.setApplicationDocumentStatus(RequisitionStatuses.APPDOC_IN_PROCESS);
513             reqDoc.setVendorHeaderGeneratedIdentifier(1002);
514             reqDoc.setVendorDetailAssignedIdentifier(0);
515             reqDoc.setVendorName("MK CORPORATION ACTIVE");
516             reqDoc.setVendorLine1Address("3984 SOUTH ST");
517             reqDoc.setVendorCityName("SPRINGFIELD");
518             reqDoc.setVendorStateCode("IL");
519             reqDoc.setVendorPostalCode("33555");
520             reqDoc.setVendorCountryCode("US");
521             reqDoc.setUseTaxIndicator(false);
522 
523             
524             RequisitionItem item1 = new RequisitionItem();
525             item1.setItemLineNumber(new Integer(1));
526             item1.setItemUnitOfMeasureCode("EA");
527             item1.setItemCatalogNumber("");
528             item1.setItemDescription("Gas Chromatograph");
529             item1.setItemUnitPrice(new BigDecimal(6000));
530             item1.setItemTypeCode("ITEM");
531             item1.setItemQuantity(new KualiDecimal(1.00));
532             item1.setExtendedPrice(new KualiDecimal(6000));
533             item1.setItemAssignedToTradeInIndicator(false);
534 
535             
536             RequisitionAccount account1 = new RequisitionAccount();
537             account1.setPostingYear(2004);
538             account1.setChartOfAccountsCode("BL");
539             account1.setAccountNumber("1023200");
540             account1.setFinancialObjectCode("7000");
541             account1.setDebitCreditCode(OLEConstants.GL_DEBIT_CODE);
542             account1.setAmount(new KualiDecimal("10000"));
543             account1.setAccountLinePercent(new BigDecimal("100"));
544 
545             item1.getSourceAccountingLines().add(account1);
546             reqDoc.getItems().add(item1);
547             reqDoc.fixItemReferences();
548 
549             reqDoc.setCapitalAssetSystemStateCode("NEW");
550             reqDoc.setCapitalAssetSystemTypeCode("IND");
551 
552             
553             purapService.saveDocumentNoValidation(reqDoc);
554             List<PurchasingCapitalAssetItem> purchasingCapitalAssetItems = new ArrayList();
555             RequisitionCapitalAssetItem capitalAssetItem = (RequisitionCapitalAssetItem) requisitionService.createCamsItem(reqDoc, item1);
556             capitalAssetItem.setCapitalAssetTransactionTypeCode("NEW");
557 
558             RequisitionCapitalAssetSystem system = (RequisitionCapitalAssetSystem) capitalAssetItem.getPurchasingCapitalAssetSystem();
559             system.setCapitalAssetNoteText("");
560             system.setCapitalAssetNotReceivedCurrentFiscalYearIndicator(false);
561             system.setCapitalAssetManufacturerName("");
562             system.setCapitalAssetTypeCode("");
563             system.setCapitalAssetModelDescription("");
564 
565             purchasingCapitalAssetItems.add(capitalAssetItem);
566             reqDoc.setPurchasingCapitalAssetItems(purchasingCapitalAssetItems);
567         } catch (WorkflowException e1) {
568             e1.printStackTrace();
569         }
570         return reqDoc;
571     }
572 
573     
574 
575 
576     private void setInitiatedRunParameter() {
577         
578         Parameter runIndicatorParameter = SpringContext.getBean(ParameterService.class).getParameter(PurapMassRequisitionStep.class, Job.STEP_RUN_PARM_NM);
579         if (runIndicatorParameter == null) {
580             Parameter.Builder newParameter = Builder.create(OLEConstants.APPLICATION_NAMESPACE_CODE, PurapConstants.PURAP_NAMESPACE, RUN_INDICATOR_PARAMETER_NAMESPACE_STEP, Job.STEP_RUN_PARM_NM, ParameterType.Builder.create("CONFG"));
581             newParameter.setDescription(RUN_INDICATOR_PARAMETER_DESCRIPTION);
582             newParameter.setEvaluationOperator(EvaluationOperator.ALLOW);
583             newParameter.setValue(RUN_INDICATOR_PARAMETER_VALUE);
584             SpringContext.getBean(ParameterService.class).createParameter(newParameter.build());
585         } else {
586             Parameter.Builder newParameter = Builder.create(runIndicatorParameter);
587             newParameter.setValue(RUN_INDICATOR_PARAMETER_VALUE);
588             SpringContext.getBean(ParameterService.class).updateParameter(newParameter.build());
589         }
590     }
591 
592     
593 
594 
595 
596 
597     private Map<String, Object> buildRunParameterSearchKeyMap() {
598         Map<String, Object> pkMapForParameter = new HashMap<String, Object>();
599 
600         
601         Map<String, Object> fieldNamesValuesForParameter = new HashMap<String, Object>();
602         fieldNamesValuesForParameter.put("parameterNamespaceCode", PurapConstants.PURAP_NAMESPACE);
603         fieldNamesValuesForParameter.put("parameterDetailTypeCode", RUN_INDICATOR_PARAMETER_NAMESPACE_STEP);
604         fieldNamesValuesForParameter.put("parameterName", Job.STEP_RUN_PARM_NM);
605         fieldNamesValuesForParameter.put("parameterConstraintCode", RUN_INDICATOR_PARAMETER_ALLOWED);
606         fieldNamesValuesForParameter.put("parameterTypeCode", RUN_INDICATOR_PARAMETER_TYPE);
607 
608         
609         List<String> parameterPKFields = psService.getPrimaryKeys(Parameter.class);
610         for (String pkFieldName : parameterPKFields) {
611             pkMapForParameter.put(pkFieldName, fieldNamesValuesForParameter.get(pkFieldName));
612         }
613         return pkMapForParameter;
614     }
615 
616     private ContractManagerAssignmentDocument createAndRouteContractManagerAssignmentDocument(RequisitionDocument reqDoc) {
617         ContractManagerAssignmentDocument acmDoc = null;
618         try {
619             acmDoc = (ContractManagerAssignmentDocument) documentService.getNewDocument(ContractManagerAssignmentDocument.class);
620             List<ContractManagerAssignmentDetail> contractManagerAssignmentDetails = new ArrayList<ContractManagerAssignmentDetail>();
621             ContractManagerAssignmentDetail detail = new ContractManagerAssignmentDetail(acmDoc, reqDoc);
622             detail.setContractManagerCode(new Integer("10"));
623             detail.refreshReferenceObject("contractManager");
624             contractManagerAssignmentDetails.add(detail);
625             acmDoc.setContractManagerAssignmentDetailss(contractManagerAssignmentDetails);
626             acmDoc.getDocumentHeader().setDocumentDescription("batch-created");
627             documentService.routeDocument(acmDoc, "Routing batch-created Contract Manager Assignment Document", null);
628             ChangeWaiter waiter = new ChangeWaiter(documentService, acmDoc.getDocumentNumber(), "F");
629             try {
630                 waiter.waitUntilChange(waiter, ROUTE_TO_FINAL_SECONDS_LIMIT, 5);
631             } catch (Exception e) {
632                 throw new RuntimeException("ContractManagerAssignmentDocument timed out in routing to final.");
633             }
634         } catch (WorkflowException we) {
635             we.printStackTrace();
636         } catch (ValidationException ve) {
637             ve.printStackTrace();
638         }
639         return acmDoc;
640     }
641 
642     private void createAndRoutePurchaseOrderDocument(RequisitionDocument reqDoc, ContractManagerAssignmentDocument acmDoc) {
643 
644         List<PurchaseOrderView> poViews = reqDoc.getRelatedViews().getRelatedPurchaseOrderViews();
645         if ((poViews != null) && (poViews.size() >= 1)) {
646             
647             PurchaseOrderView poView = poViews.get(0);
648             String relatedPOWorkflowDocumentId = poView.getDocumentNumber();
649             PurchaseOrderDocument poDoc = null;
650             try {
651                 poDoc = (PurchaseOrderDocument) documentService.getByDocumentHeaderId(relatedPOWorkflowDocumentId);
652                 documentService.blanketApproveDocument(poDoc, "auto-routing: Test Requisition Job", null);
653                 ChangeWaiter waiter = new ChangeWaiter(documentService, poDoc.getDocumentNumber(), "F");
654                 try {
655                     waiter.waitUntilChange(waiter, ROUTE_TO_FINAL_SECONDS_LIMIT, 5);
656                 } catch (Exception e) {
657                     throw new RuntimeException("ContractManagerAssignmentDocument timed out in routing to final.");
658                 }
659             } catch (WorkflowException e) {
660                 e.printStackTrace();
661             } catch (ValidationException ve) {
662                 ve.printStackTrace();
663             }
664         }
665     }
666 
667     public DocumentService getDocumentService() {
668         return documentService;
669     }
670 
671     public void setDocumentService(DocumentService documentService) {
672         this.documentService = documentService;
673     }
674 
675     public RequisitionService getRequisitionService() {
676         return requisitionService;
677     }
678 
679     public void setRequisitionService(RequisitionService requisitionService) {
680         this.requisitionService = requisitionService;
681     }
682 
683     public PurapService getPurapService() {
684         return purapService;
685     }
686 
687     public void setPurapService(PurapService purapService) {
688         this.purapService = purapService;
689     }
690 
691     public BusinessObjectService getBoService() {
692         return boService;
693     }
694 
695     public void setBoService(BusinessObjectService boService) {
696         this.boService = boService;
697     }
698 
699     public PersistenceStructureService getPsService() {
700         return psService;
701     }
702 
703     public void setPsService(PersistenceStructureService psService) {
704         this.psService = psService;
705     }
706 
707     
708 
709 
710 
711     private class ChangeWaiter {
712 
713         final DocumentService documentService;
714         final private String docHeaderId;
715         final private String[] desiredWorkflowStates;
716 
717         public ChangeWaiter(DocumentService documentService, String docHeaderId, String desiredWorkflowStatus) {
718             this.documentService = documentService;
719             this.docHeaderId = docHeaderId;
720             this.desiredWorkflowStates = new String[]{desiredWorkflowStatus};
721         }
722 
723         public boolean valueChanged() throws Exception {
724             Document d = documentService.getByDocumentHeaderId(docHeaderId.toString());
725 
726             String currentStatus = d.getDocumentHeader().getWorkflowDocument().getStatus().toString();
727 
728             for (String desiredWorkflowState : desiredWorkflowStates) {
729                 if (StringUtils.equals(desiredWorkflowState, currentStatus)) {
730                     return true;
731                 }
732             }
733             return false;
734         }
735 
736         public boolean waitUntilChange(ChangeWaiter monitor, int maxWaitSeconds, int pauseSeconds) throws Exception {
737             long maxWaitMs = maxWaitSeconds * 1000;
738             long pauseMs = pauseSeconds * 1000;
739 
740             boolean valueChanged = false;
741             boolean interrupted = false;
742             long startTimeMs = System.currentTimeMillis();
743             long endTimeMs = startTimeMs + maxWaitMs;
744 
745             Thread.sleep(pauseMs / 10); 
746             valueChanged = monitor.valueChanged();
747             LOG.debug("starting wait loop");
748             while (!interrupted && !valueChanged && (System.currentTimeMillis() < endTimeMs)) {
749                 try {
750                     if (LOG.isDebugEnabled()) {
751                         LOG.debug("sleeping for " + pauseMs + " ms");
752                     }
753                     Thread.sleep(pauseMs);
754                 } catch (InterruptedException e) {
755                     interrupted = true;
756                 }
757                 LOG.debug("checking wait loop sentinel");
758                 valueChanged = monitor.valueChanged();
759             }
760             if (LOG.isDebugEnabled()) {
761                 LOG.debug("finished wait loop (" + valueChanged + ")");
762             }
763 
764             return valueChanged;
765         }
766     }
767 
768 }