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.pdp.web.struts;
017
018 import java.util.ArrayList;
019 import java.util.Date;
020 import java.util.List;
021 import java.util.Properties;
022
023 import javax.servlet.http.HttpServletRequest;
024 import javax.servlet.http.HttpServletResponse;
025
026 import org.apache.struts.action.ActionForm;
027 import org.apache.struts.action.ActionForward;
028 import org.apache.struts.action.ActionMapping;
029 import org.kuali.kfs.pdp.PdpConstants;
030 import org.kuali.kfs.pdp.PdpKeyConstants;
031 import org.kuali.kfs.pdp.PdpParameterConstants;
032 import org.kuali.kfs.pdp.PdpPropertyConstants;
033 import org.kuali.kfs.pdp.businessobject.CustomerProfile;
034 import org.kuali.kfs.pdp.businessobject.FormatProcessSummary;
035 import org.kuali.kfs.pdp.businessobject.FormatSelection;
036 import org.kuali.kfs.pdp.businessobject.ProcessSummary;
037 import org.kuali.kfs.pdp.service.FormatService;
038 import org.kuali.kfs.pdp.service.PdpAuthorizationService;
039 import org.kuali.kfs.pdp.service.impl.exception.FormatException;
040 import org.kuali.kfs.sys.KFSConstants;
041 import org.kuali.kfs.sys.context.SpringContext;
042 import org.kuali.rice.kim.bo.Person;
043 import org.kuali.rice.kns.exception.AuthorizationException;
044 import org.kuali.rice.kns.service.DateTimeService;
045 import org.kuali.rice.kns.service.KualiConfigurationService;
046 import org.kuali.rice.kns.util.GlobalVariables;
047 import org.kuali.rice.kns.util.KNSConstants;
048 import org.kuali.rice.kns.util.KualiInteger;
049 import org.kuali.rice.kns.util.UrlFactory;
050 import org.kuali.rice.kns.web.struts.action.KualiAction;
051
052 /**
053 * This class provides actions for the format process
054 */
055 public class FormatAction extends KualiAction {
056
057 private FormatService formatService;
058
059 /**
060 * Constructs a FormatAction.java.
061 */
062 public FormatAction() {
063 formatService = SpringContext.getBean(FormatService.class);
064 }
065
066 /**
067 * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
068 */
069 @Override
070 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
071 PdpAuthorizationService authorizationService = SpringContext.getBean(PdpAuthorizationService.class);
072
073 Person kualiUser = GlobalVariables.getUserSession().getPerson();
074 String methodToCall = findMethodToCall(form, request);
075
076 if (!authorizationService.hasFormatPermission(kualiUser.getPrincipalId())) {
077 throw new AuthorizationException(kualiUser.getPrincipalName(), methodToCall, kualiUser.getCampusCode());
078 }
079
080 return super.execute(mapping, form, request, response);
081 }
082
083 /**
084 * This method prepares the data for the format process
085 *
086 * @param mapping
087 * @param form
088 * @param request
089 * @param response
090 * @return
091 * @throws Exception
092 */
093 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
094 FormatForm formatForm = (FormatForm) form;
095
096 Person kualiUser = GlobalVariables.getUserSession().getPerson();
097 FormatSelection formatSelection = formatService.getDataForFormat(kualiUser);
098 DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class);
099
100 formatForm.setCampus(kualiUser.getCampusCode());
101
102 // no data for format because another format process is already running
103 if (formatSelection.getStartDate() != null) {
104 GlobalVariables.getMessageMap().putError(KFSConstants.GLOBAL_ERRORS, PdpKeyConstants.Format.ERROR_PDP_FORMAT_PROCESS_ALREADY_RUNNING, dateTimeService.toDateTimeString(formatSelection.getStartDate()));
105 }
106 else {
107 List<CustomerProfile> customers = formatSelection.getCustomerList();
108
109 for (CustomerProfile element : customers) {
110
111 if (formatSelection.getCampus().equals(element.getDefaultPhysicalCampusProcessingCode())) {
112 element.setSelectedForFormat(Boolean.TRUE);
113 }
114 else {
115 element.setSelectedForFormat(Boolean.FALSE);
116 }
117 }
118
119 formatForm.setPaymentDate(dateTimeService.toDateString(dateTimeService.getCurrentTimestamp()));
120 formatForm.setPaymentTypes(PdpConstants.PaymentTypes.ALL);
121 formatForm.setCustomers(customers);
122 formatForm.setRanges(formatSelection.getRangeList());
123 }
124
125 return mapping.findForward(PdpConstants.MAPPING_SELECTION);
126 }
127
128 /**
129 * This method marks the payments for format
130 *
131 * @param mapping
132 * @param form
133 * @param request
134 * @param response
135 * @return
136 * @throws Exception
137 */
138 public ActionForward prepare(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
139 FormatForm formatForm = (FormatForm) form;
140
141 DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class);
142
143 if (formatForm.getCampus() == null) {
144 return mapping.findForward(PdpConstants.MAPPING_SELECTION);
145 }
146
147 // Figure out which ones they have selected
148 List selectedCustomers = new ArrayList();
149
150 for (CustomerProfile customer : formatForm.getCustomers()) {
151 if (customer.isSelectedForFormat()) {
152 selectedCustomers.add(customer);
153 }
154 }
155
156 Date paymentDate = dateTimeService.convertToSqlDate(formatForm.getPaymentDate());
157 Person kualiUser = GlobalVariables.getUserSession().getPerson();
158
159 FormatProcessSummary formatProcessSummary = formatService.startFormatProcess(kualiUser, formatForm.getCampus(), selectedCustomers, paymentDate, formatForm.getPaymentTypes());
160 if (formatProcessSummary.getProcessSummaryList().size() == 0) {
161 GlobalVariables.getMessageList().add(PdpKeyConstants.Format.ERROR_PDP_NO_MATCHING_PAYMENT_FOR_FORMAT);
162 return mapping.findForward(PdpConstants.MAPPING_SELECTION);
163 }
164
165 formatForm.setFormatProcessSummary(formatProcessSummary);
166
167 return mapping.findForward(PdpConstants.MAPPING_CONTINUE);
168 }
169
170 /**
171 * This method performs the format process.
172 *
173 * @param mapping
174 * @param form
175 * @param request
176 * @param response
177 * @return
178 * @throws Exception
179 */
180 public ActionForward continueFormat(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
181 FormatForm formatForm = (FormatForm) form;
182 KualiInteger processId = formatForm.getFormatProcessSummary().getProcessId();
183
184 try {
185 formatService.performFormat(processId.intValue());
186 }
187 catch (FormatException e) {
188 // errors added to global message map
189 return mapping.findForward(PdpConstants.MAPPING_CONTINUE);
190 }
191
192 String lookupUrl = buildUrl(String.valueOf(processId.intValue()));
193 return new ActionForward(lookupUrl, true);
194 }
195
196 /**
197 * This method clears all the customer checkboxes.
198 *
199 * @param mapping
200 * @param form
201 * @param request
202 * @param response
203 * @return
204 * @throws Exception
205 */
206 public ActionForward clear(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
207 FormatForm formatForm = (FormatForm) form;
208
209 List<CustomerProfile> customers = formatForm.getCustomers();
210 for (CustomerProfile customerProfile : customers) {
211 customerProfile.setSelectedForFormat(false);
212 }
213 formatForm.setCustomers(customers);
214
215 return mapping.findForward(PdpConstants.MAPPING_SELECTION);
216
217 }
218
219 /**
220 * This method cancels the format process
221 *
222 * @param mapping
223 * @param form
224 * @param request
225 * @param response
226 * @return
227 * @throws Exception
228 */
229 public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
230 FormatForm formatForm = (FormatForm) form;
231
232 KualiInteger processId = formatForm.getFormatProcessSummary().getProcessId();
233
234 if (processId != null) {
235 formatService.clearUnfinishedFormat(processId.intValue());
236 }
237 return mapping.findForward(KNSConstants.MAPPING_PORTAL);
238
239 }
240
241 /**
242 * This method clears the unfinished format process and is called from the FormatProcess lookup page.
243 *
244 * @param mapping
245 * @param form
246 * @param request
247 * @param response
248 * @return
249 * @throws Exception
250 */
251 public ActionForward clearUnfinishedFormat(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
252
253 String processIdParam = request.getParameter(PdpParameterConstants.FormatProcess.PROCESS_ID_PARAM);
254 Integer processId = Integer.parseInt(processIdParam);
255
256 if (processId != null) {
257 formatService.resetFormatPayments(processId);
258 }
259
260 return mapping.findForward(KNSConstants.MAPPING_PORTAL);
261
262 }
263
264 /**
265 * This method builds the forward url for the format summary lookup page.
266 *
267 * @param processId the batch id
268 * @return the built url
269 */
270 private String buildUrl(String processId) {
271 String basePath = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.APPLICATION_URL_KEY);
272
273 Properties parameters = new Properties();
274 parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.SEARCH_METHOD);
275 parameters.put(KFSConstants.BACK_LOCATION, basePath + "/" + KFSConstants.MAPPING_PORTAL + ".do");
276 parameters.put(KNSConstants.DOC_FORM_KEY, "88888888");
277 parameters.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, ProcessSummary.class.getName());
278 parameters.put(KFSConstants.HIDE_LOOKUP_RETURN_LINK, "true");
279 parameters.put(KFSConstants.SUPPRESS_ACTIONS, "false");
280 parameters.put(PdpPropertyConstants.ProcessSummary.PROCESS_SUMMARY_PROCESS_ID, processId);
281
282 String lookupUrl = UrlFactory.parameterizeUrl(basePath + "/" + KFSConstants.LOOKUP_ACTION, parameters);
283
284 return lookupUrl;
285 }
286 }