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    
017    package org.kuali.kfs.module.purap.document.service.impl;
018    
019    import java.util.Collection;
020    import java.util.Iterator;
021    
022    import org.kuali.kfs.module.purap.PurapConstants;
023    import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
024    import org.kuali.kfs.module.purap.document.service.FaxBatchDocumentsService;
025    import org.kuali.kfs.module.purap.document.service.FaxService;
026    import org.kuali.kfs.module.purap.document.service.PurapService;
027    import org.kuali.kfs.module.purap.document.service.PurchaseOrderService;
028    import org.kuali.kfs.sys.context.SpringContext;
029    import org.kuali.rice.kew.exception.WorkflowException;
030    import org.kuali.rice.kns.service.DateTimeService;
031    import org.kuali.rice.kns.service.DocumentService;
032    import org.kuali.rice.kns.util.GlobalVariables;
033    
034    public class FaxBatchDocumentsServiceImpl implements FaxBatchDocumentsService {
035       private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(FaxBatchDocumentsServiceImpl.class);
036    
037       private PurchaseOrderService purchaseOrderService;
038       private FaxService faxService;
039       private PurapService purapService;
040       private DateTimeService dateTimeService;
041    
042       /**
043        * Faxes pending documents.  Currently only PO documents set to Pending Fax
044        * Status inside workflow.
045        * 
046        * @return Collection of ServiceError objects
047        */
048       public boolean faxPendingPurchaseOrders() {
049           
050         Collection<PurchaseOrderDocument> pendingPOs = purchaseOrderService.getPendingPurchaseOrderFaxes();
051         boolean result = true;
052         
053         for (Iterator<PurchaseOrderDocument> iter = pendingPOs.iterator(); iter.hasNext();) {
054    
055             PurchaseOrderDocument po =  iter.next();
056           
057             if (!po.getDocumentHeader().hasWorkflowDocument()){
058                 try {
059                     po = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(po.getDocumentNumber());
060                 }
061                 catch (WorkflowException e) {
062                     throw new RuntimeException(e);
063                 }
064             }
065             
066             GlobalVariables.getMessageMap().clear();
067             faxService.faxPurchaseOrderPdf(po,false);
068           
069             if (GlobalVariables.getMessageMap().isEmpty()){
070                 po.setStatusCode(PurapConstants.PurchaseOrderStatuses.OPEN);
071                 po.setPurchaseOrderInitialOpenTimestamp(dateTimeService.getCurrentTimestamp());
072                 po.setPurchaseOrderLastTransmitTimestamp(dateTimeService.getCurrentTimestamp());
073                 purapService.saveDocumentNoValidation(po);
074             }else{
075                 result = false;
076             }
077         }
078         
079         return result;
080       }
081       
082       public void setPurchaseOrderService(PurchaseOrderService purchaseOrderService) {
083           this.purchaseOrderService = purchaseOrderService;
084       }
085    
086       public void setFaxService(FaxService faxService) {
087           this.faxService = faxService;
088       }
089    
090       public void setPurapService(PurapService purapService) {
091           this.purapService = purapService;
092       }
093    
094       public void setDateTimeService(DateTimeService dateTimeService) {
095           this.dateTimeService = dateTimeService;
096       }
097        
098    }