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.module.purap.document.web.struts;
017
018 import java.util.Map;
019
020 import javax.servlet.http.HttpServletRequest;
021 import javax.servlet.http.HttpServletResponse;
022
023 import org.apache.commons.lang.StringUtils;
024 import org.apache.struts.action.ActionForm;
025 import org.apache.struts.action.ActionForward;
026 import org.apache.struts.action.ActionMapping;
027 import org.kuali.kfs.module.purap.PurapKeyConstants;
028 import org.kuali.kfs.module.purap.businessobject.DefaultPrincipalAddress;
029 import org.kuali.kfs.module.purap.businessobject.RequisitionItem;
030 import org.kuali.kfs.module.purap.document.RequisitionDocument;
031 import org.kuali.kfs.module.purap.document.service.PurapService;
032 import org.kuali.kfs.sys.KFSConstants;
033 import org.kuali.kfs.sys.context.SpringContext;
034 import org.kuali.rice.kew.exception.WorkflowException;
035 import org.kuali.rice.kns.service.BusinessObjectService;
036 import org.kuali.rice.kns.service.PersistenceService;
037 import org.kuali.rice.kns.util.GlobalVariables;
038 import org.kuali.rice.kns.util.ObjectUtils;
039 import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase;
040
041 /**
042 * Struts Action for Requisition document.
043 */
044 public class RequisitionAction extends PurchasingActionBase {
045 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(RequisitionAction.class);
046
047 /**
048 * Does initialization for a new requisition.
049 *
050 * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#createDocument(org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase)
051 */
052 @Override
053 protected void createDocument(KualiDocumentFormBase kualiDocumentFormBase) throws WorkflowException {
054 super.createDocument(kualiDocumentFormBase);
055 ((RequisitionDocument) kualiDocumentFormBase.getDocument()).initiateDocument();
056 }
057
058 public ActionForward setAsDefaultBuilding(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
059 RequisitionDocument req = (RequisitionDocument) ((RequisitionForm) form).getDocument();
060
061 if (ObjectUtils.isNotNull(req.getDeliveryCampusCode()) && ObjectUtils.isNotNull(req.getDeliveryBuildingCode())) {
062 DefaultPrincipalAddress defaultPrincipalAddress = new DefaultPrincipalAddress(GlobalVariables.getUserSession().getPerson().getPrincipalId());
063 Map addressKeys = SpringContext.getBean(PersistenceService.class).getPrimaryKeyFieldValues(defaultPrincipalAddress);
064 defaultPrincipalAddress = (DefaultPrincipalAddress) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(DefaultPrincipalAddress.class, addressKeys);
065
066 if (ObjectUtils.isNull(defaultPrincipalAddress)) {
067 defaultPrincipalAddress = new DefaultPrincipalAddress(GlobalVariables.getUserSession().getPerson().getPrincipalId());
068 }
069
070 defaultPrincipalAddress.setDefaultBuilding(req.getDeliveryCampusCode(), req.getDeliveryBuildingCode(), req.getDeliveryBuildingRoomNumber());
071 SpringContext.getBean(BusinessObjectService.class).save(defaultPrincipalAddress);
072 GlobalVariables.getMessageList().add(PurapKeyConstants.DEFAULT_BUILDING_SAVED);
073 }
074
075 return mapping.findForward(KFSConstants.MAPPING_BASIC);
076 }
077
078 /**
079 * @see org.kuali.rice.kns.web.struts.action.KualiAction#refresh(org.apache.struts.action.ActionMapping,
080 * org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
081 */
082 @Override
083 public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
084 ActionForward forward = super.refresh(mapping, form, request, response);
085 RequisitionForm rqForm = (RequisitionForm) form;
086 RequisitionDocument document = (RequisitionDocument) rqForm.getDocument();
087
088 // super.refresh() must occur before this line to get the correct APO limit
089 document.setOrganizationAutomaticPurchaseOrderLimit(SpringContext.getBean(PurapService.class).getApoLimit(document.getVendorContractGeneratedIdentifier(), document.getChartOfAccountsCode(), document.getOrganizationCode()));
090
091 return forward;
092 }
093
094 /**
095 * Adds a PurchasingItemCapitalAsset (a container for the Capital Asset Number) to the selected
096 * item's list.
097 *
098 * @param mapping An ActionMapping
099 * @param form The Form
100 * @param request An HttpServletRequest
101 * @param response The HttpServletResponse
102 * @return An ActionForward
103 * @throws Exception
104 */
105 public ActionForward addAsset(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
106 RequisitionForm rqForm = (RequisitionForm) form;
107 RequisitionDocument document = (RequisitionDocument) rqForm.getDocument();
108 RequisitionItem item = (RequisitionItem)document.getItemByLineNumber(getSelectedLine(request) + 1);
109 //TODO: Add a new way to add assets to the system.
110 //item.addAsset();
111 return mapping.findForward(KFSConstants.MAPPING_BASIC);
112 }
113
114 public ActionForward displayB2BRequisition(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
115 RequisitionForm reqForm = (RequisitionForm) form;
116 reqForm.setDocId((String) request.getSession().getAttribute("docId"));
117 loadDocument(reqForm);
118 String multipleB2BReqs = (String) request.getSession().getAttribute("multipleB2BRequisitions");
119 if (StringUtils.isNotEmpty(multipleB2BReqs)) {
120 GlobalVariables.getMessageList().add(PurapKeyConstants.B2B_MULTIPLE_REQUISITIONS);
121 }
122 request.getSession().removeAttribute("docId");
123 request.getSession().removeAttribute("multipleB2BRequisitions");
124 return mapping.findForward(KFSConstants.MAPPING_BASIC);
125 }
126
127 /**
128 * Clears the vendor selection from the Requisition. NOTE, this functionality is only available on Requisition and not PO.
129 *
130 * @param mapping An ActionMapping
131 * @param form An ActionForm
132 * @param request A HttpServletRequest
133 * @param response A HttpServletResponse
134 * @return An ActionForward
135 * @throws Exception
136 */
137 public ActionForward clearVendor(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
138 PurchasingFormBase baseForm = (PurchasingFormBase) form;
139 RequisitionDocument document = (RequisitionDocument) baseForm.getDocument();
140
141 document.setVendorHeaderGeneratedIdentifier(null);
142 document.setVendorDetailAssignedIdentifier(null);
143 document.setVendorDetail(null);
144 document.setVendorName("");
145 document.setVendorLine1Address("");
146 document.setVendorLine2Address("");
147 document.setVendorAddressInternationalProvinceName("");
148 document.setVendorCityName("");
149 document.setVendorStateCode("");
150 document.setVendorPostalCode("");
151 document.setVendorCountryCode("");
152 document.setVendorContractGeneratedIdentifier(null);
153 document.setVendorContract(null);
154 document.setVendorFaxNumber("");
155 document.setVendorCustomerNumber("");
156 document.setVendorAttentionName("");
157 return mapping.findForward(KFSConstants.MAPPING_BASIC);
158 }
159
160 /**
161 * Set up blanket approve indicator which will be used to decide if need to run accounting line validation at the time of
162 * blanket approve.
163 *
164 * @see org.kuali.kfs.module.purap.document.web.struts.PurchasingActionBase#blanketApprove(org.apache.struts.action.ActionMapping,
165 * org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
166 */
167 @Override
168 public ActionForward blanketApprove(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
169 RequisitionDocument document = (RequisitionDocument) ((PurchasingFormBase) form).getDocument();
170 document.setBlanketApproveRequest(true);
171 return super.blanketApprove(mapping, form, request, response);
172 }
173 }