1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
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
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
87
88 @Override
89 public void addListenersTo(final TravelRelocationDocument relocation) {
90 if (relocation != null) {
91 relocation.setPropertyChangeListeners(getPropertyChangeListeners());
92 }
93 }
94
95
96
97
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
201
202
203
204 public void setPropertyChangeListeners(final List<PropertyChangeListener> propertyChangeListeners) {
205 this.propertyChangeListeners = propertyChangeListeners;
206 }
207
208
209
210
211
212
213 public List<PropertyChangeListener> getPropertyChangeListeners() {
214 return this.propertyChangeListeners;
215 }
216 }