View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.module.tem.document.service.impl;
20  
21  import static org.kuali.kfs.module.tem.TemConstants.TravelParameters.TRAVEL_COVERSHEET_INSTRUCTIONS;
22  import static org.kuali.kfs.module.tem.TemPropertyConstants.TRAVEL_DOCUMENT_IDENTIFIER;
23  import static org.kuali.kfs.sys.KFSConstants.EXTERNALIZABLE_HELP_URL_KEY;
24  
25  import java.beans.PropertyChangeListener;
26  import java.math.BigDecimal;
27  import java.text.SimpleDateFormat;
28  import java.util.ArrayList;
29  import java.util.Collection;
30  import java.util.HashMap;
31  import java.util.List;
32  import java.util.Map;
33  
34  import org.apache.commons.lang.StringUtils;
35  import org.apache.log4j.Logger;
36  import org.kuali.kfs.module.tem.TemParameterConstants;
37  import org.kuali.kfs.module.tem.TemPropertyConstants;
38  import org.kuali.kfs.module.tem.businessobject.ActualExpense;
39  import org.kuali.kfs.module.tem.businessobject.TravelerDetail;
40  import org.kuali.kfs.module.tem.document.TravelRelocationDocument;
41  import org.kuali.kfs.module.tem.document.service.TravelDocumentService;
42  import org.kuali.kfs.module.tem.document.service.TravelRelocationService;
43  import org.kuali.kfs.module.tem.pdf.Coversheet;
44  import org.kuali.rice.core.api.config.property.ConfigurationService;
45  import org.kuali.rice.core.api.util.type.KualiDecimal;
46  import org.kuali.rice.coreservice.framework.parameter.ParameterService;
47  import org.kuali.rice.kew.api.exception.WorkflowException;
48  import org.kuali.rice.kim.api.identity.Person;
49  import org.kuali.rice.kim.api.identity.PersonService;
50  import org.kuali.rice.krad.service.BusinessObjectService;
51  import org.kuali.rice.krad.service.DocumentService;
52  
53  public class TravelRelocationServiceImpl implements TravelRelocationService{
54  
55      protected static Logger LOG = Logger.getLogger(TravelRelocationServiceImpl.class);
56  
57      private BusinessObjectService businessObjectService;
58      private DocumentService documentService;
59      private ConfigurationService ConfigurationService;
60      private PersonService personService;
61      private TravelDocumentService travelDocumentService;
62      private ParameterService parameterService;
63      private List<PropertyChangeListener> propertyChangeListeners;
64  
65      /**
66       * @see org.kuali.kfs.module.tem.document.service.TravelRelocationService#findByIdentifier(java.lang.String)
67       */
68      @Override
69      public Collection<TravelRelocationDocument> findByIdentifier(final String travelDocumentIdentifier) {
70          final Map<String, Object> criteria = new HashMap<String, Object>();
71          criteria.put(TRAVEL_DOCUMENT_IDENTIFIER, travelDocumentIdentifier);
72          return getBusinessObjectService().findMatching(TravelRelocationDocument.class, criteria);
73      }
74  
75      /**
76       * @see org.kuali.kfs.module.tem.document.service.TravelRelocationService#find(java.lang.String)
77       */
78      @Override
79      public TravelRelocationDocument find(final String documentNumber) throws WorkflowException {
80          final TravelRelocationDocument retval = (TravelRelocationDocument) getDocumentService().getByDocumentHeaderId(documentNumber);
81          addListenersTo(retval);
82          return retval;
83      }
84  
85      /**
86       * @see org.kuali.kfs.module.tem.document.service.TravelRelocationService#addListenersTo(org.kuali.kfs.module.tem.document.TravelRelocationDocument)
87       */
88      @Override
89      public void addListenersTo(final TravelRelocationDocument relocation) {
90          if (relocation != null) {
91              relocation.setPropertyChangeListeners(getPropertyChangeListeners());
92          }
93      }
94  
95      /**
96       * @see org.kuali.kfs.module.tem.service.TravelRelocationService#generateCoversheetFor(java.lang.String, java.lang.String,
97       *      org.kuali.kfs.module.tem.document.TravelRelocationDocument, java.io.OutputStream)
98       */
99      @Override
100     public Coversheet generateCoversheetFor(final TravelRelocationDocument document) throws Exception {
101         final String docNumber = document.getDocumentNumber();
102         final String initiatorId = document.getDocumentHeader().getWorkflowDocument().getInitiatorPrincipalId();
103         final String instructions = getParameterService().getParameterValueAsString(TemParameterConstants.TEM_DOCUMENT.class, TRAVEL_COVERSHEET_INSTRUCTIONS);
104         final String mailTo = travelDocumentService.retrieveAddressFromLocationCode(document.getTravelPayment().getDocumentationLocationCode());
105         final String destination = document.getToCity();
106 
107         final String directory = getConfigurationService().getPropertyValueAsString(EXTERNALIZABLE_HELP_URL_KEY);
108 
109         final Person initiator = getPersonService().getPerson(initiatorId);
110         final TravelerDetail traveler = document.getTraveler();
111         traveler.refreshReferenceObject(TemPropertyConstants.CUSTOMER);
112 
113         final Coversheet cover = new Coversheet();
114 
115         cover.setInstructions(instructions);
116         cover.setMailTo(mailTo);
117         cover.setTripId(document.getTravelDocumentIdentifier() + "");
118         cover.setDate(new SimpleDateFormat("MM/dd/yyyy").format(document.getTripBegin()));
119         cover.setInitiatorName(initiator.getFirstName() + " " + initiator.getLastName());
120         cover.setInitiatorPrincipalName(initiator.getPrincipalName());
121         cover.setInitiatorPhone(initiator.getPhoneNumber());
122         cover.setInitiatorEmail(initiator.getEmailAddress());
123         cover.setTravelerName(traveler.getCustomer().getCustomerName());
124         Person person = getPersonService().getPerson(traveler.getPrincipalId());
125         cover.setTravelerPrincipalName(StringUtils.defaultString(person.getPrincipalName()));
126         cover.setTravelerPhone(traveler.getPhoneNumber());
127         cover.setTravelerEmail(traveler.getEmailAddress());
128         cover.setDestination(destination);
129         cover.setDocumentNumber(docNumber);
130 
131         final Collection<Map<String, String>> expenses = new ArrayList<Map<String, String>>();
132         if (document.getActualExpenses() != null) {
133             for (final ActualExpense expense : document.getActualExpenses()) {
134                 final Map<String, String> expenseMap = new HashMap<String, String>();
135                 expense.refreshReferenceObject(TemPropertyConstants.EXPENSE_TYPE_OBJECT_CODE);
136                 expenseMap.put("expenseType", expense.getExpenseTypeObjectCode().getExpenseType().getName());
137 
138                 final BigDecimal rate = expense.getCurrencyRate();
139                 final KualiDecimal amount = expense.getExpenseAmount();
140 
141                 expenseMap.put("amount", new KualiDecimal(amount.bigDecimalValue().multiply(rate)).toString());
142                 expenseMap.put("receipt", "");
143                 expenses.add(expenseMap);
144             }
145         }
146         cover.setExpenses(expenses);
147 
148         return cover;
149     }
150 
151     public void setBusinessObjectService(final BusinessObjectService businessObjectService){
152         this.businessObjectService = businessObjectService;
153     }
154 
155     protected BusinessObjectService getBusinessObjectService(){
156         return this.businessObjectService;
157     }
158 
159     public void setDocumentService(final DocumentService documentService){
160         this.documentService = documentService;
161     }
162 
163     protected DocumentService getDocumentService(){
164         return this.documentService;
165     }
166 
167     public void setConfigurationService(final ConfigurationService ConfigurationService){
168         this.ConfigurationService = ConfigurationService;
169     }
170 
171     protected ConfigurationService getConfigurationService(){
172         return this.ConfigurationService;
173     }
174 
175     public void setPersonService(final PersonService personService) {
176         this.personService = personService;
177     }
178 
179     protected PersonService getPersonService() {
180         return personService;
181     }
182 
183     public void setTravelDocumentService(final TravelDocumentService travelDocumentService){
184         this.travelDocumentService = travelDocumentService;
185     }
186 
187     protected TravelDocumentService getTravelDocumentService(){
188         return this.travelDocumentService;
189     }
190 
191     public void setParameterService(final ParameterService parameterService){
192         this.parameterService = parameterService;
193     }
194 
195     protected ParameterService getParameterService(){
196         return this.parameterService;
197     }
198 
199     /**
200      * Sets the propertyChangeListener attribute value.
201      *
202      * @param propertyChangeListener The propertyChangeListener to set.
203      */
204     public void setPropertyChangeListeners(final List<PropertyChangeListener> propertyChangeListeners) {
205         this.propertyChangeListeners = propertyChangeListeners;
206     }
207 
208     /**
209      * Gets the propertyChangeListeners attribute.
210      *
211      * @return Returns the propertyChangeListenerDetailId.
212      */
213     public List<PropertyChangeListener> getPropertyChangeListeners() {
214         return this.propertyChangeListeners;
215     }
216 }