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.cab.document.web.struts; 017 018 import java.util.List; 019 020 import javax.servlet.http.HttpServletRequest; 021 022 import org.apache.commons.lang.StringUtils; 023 import org.apache.log4j.Logger; 024 import org.kuali.kfs.module.cab.CabConstants; 025 import org.kuali.kfs.module.cab.CabPropertyConstants; 026 import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableDocument; 027 import org.kuali.kfs.module.cab.document.service.GlAndPurApHelperService; 028 import org.kuali.kfs.module.cab.document.service.PurApInfoService; 029 import org.kuali.kfs.module.purap.document.PurchaseOrderDocument; 030 import org.kuali.kfs.sys.context.SpringContext; 031 import org.kuali.rice.kew.exception.WorkflowException; 032 import org.kuali.rice.kns.service.DocumentService; 033 import org.kuali.rice.kns.util.KNSConstants; 034 import org.kuali.rice.kns.util.KualiDecimal; 035 import org.kuali.rice.kns.util.ObjectUtils; 036 import org.kuali.rice.kns.util.TypedArrayList; 037 import org.kuali.rice.kns.web.struts.form.KualiForm; 038 039 public class PurApLineForm extends KualiForm { 040 private static final Logger LOG = Logger.getLogger(PurApLineAction.class); 041 private Integer purchaseOrderIdentifier; 042 private String purApContactEmailAddress; 043 private String purApContactPhoneNumber; 044 045 private List<PurchasingAccountsPayableDocument> purApDocs; 046 private int actionPurApDocIndex; 047 private int actionItemAssetIndex; 048 049 private KualiDecimal mergeQty; 050 private String mergeDesc; 051 052 private Integer requisitionIdentifier; 053 054 private String purchaseOrderInquiryUrl; 055 056 private boolean selectAll; 057 058 private String documentNumber; 059 060 061 public PurApLineForm() { 062 this.purApDocs = new TypedArrayList(PurchasingAccountsPayableDocument.class); 063 } 064 065 @Override 066 public boolean shouldMethodToCallParameterBeUsed(String methodToCallParameterName, String methodToCallParameterValue, HttpServletRequest request) { 067 if (StringUtils.equals(methodToCallParameterName, KNSConstants.DISPATCH_REQUEST_PARAMETER) && StringUtils.equals(methodToCallParameterValue, CabConstants.Actions.START)) { 068 return true; 069 } 070 return super.shouldMethodToCallParameterBeUsed(methodToCallParameterName, methodToCallParameterValue, request); 071 } 072 073 @Override 074 public void addRequiredNonEditableProperties() { 075 super.addRequiredNonEditableProperties(); 076 registerRequiredNonEditableProperty(CabPropertyConstants.PurchasingAccountsPayableDocument.PURCHASE_ORDER_IDENTIFIER); 077 } 078 079 080 /** 081 * Gets the documentNumber attribute. 082 * 083 * @return Returns the documentNumber. 084 */ 085 public String getDocumentNumber() { 086 return documentNumber; 087 } 088 089 090 /** 091 * Sets the documentNumber attribute value. 092 * 093 * @param documentNumber The documentNumber to set. 094 */ 095 public void setDocumentNumber(String documentNumber) { 096 this.documentNumber = documentNumber; 097 } 098 099 100 /** 101 * Gets the requisitionIdentifier attribute. 102 * 103 * @return Returns the requisitionIdentifier. 104 */ 105 public Integer getRequisitionIdentifier() { 106 return requisitionIdentifier; 107 } 108 109 110 /** 111 * Sets the requisitionIdentifier attribute value. 112 * 113 * @param requisitionIdentifier The requisitionIdentifier to set. 114 */ 115 public void setRequisitionIdentifier(Integer requisitionIdentifier) { 116 this.requisitionIdentifier = requisitionIdentifier; 117 } 118 119 /** 120 * Gets the mergeQty attribute. 121 * 122 * @return Returns the mergeQty. 123 */ 124 public KualiDecimal getMergeQty() { 125 return mergeQty; 126 } 127 128 129 /** 130 * Sets the mergeQty attribute value. 131 * 132 * @param mergeQty The mergeQty to set. 133 */ 134 public void setMergeQty(KualiDecimal mergeQty) { 135 this.mergeQty = mergeQty; 136 } 137 138 139 /** 140 * Gets the mergeDesc attribute. 141 * 142 * @return Returns the mergeDesc. 143 */ 144 public String getMergeDesc() { 145 return mergeDesc; 146 } 147 148 149 /** 150 * Sets the mergeDesc attribute value. 151 * 152 * @param mergeDesc The mergeDesc to set. 153 */ 154 public void setMergeDesc(String mergeDesc) { 155 this.mergeDesc = mergeDesc; 156 } 157 158 159 /** 160 * Gets the purApContactEmailAddress attribute. 161 * 162 * @return Returns the purApContactEmailAddress. 163 */ 164 public String getPurApContactEmailAddress() { 165 return purApContactEmailAddress; 166 } 167 168 169 /** 170 * Sets the purApContactEmailAddress attribute value. 171 * 172 * @param purApContactEmailAddress The purApContactEmailAddress to set. 173 */ 174 public void setPurApContactEmailAddress(String purApContactEmailAddress) { 175 this.purApContactEmailAddress = purApContactEmailAddress; 176 } 177 178 179 /** 180 * Gets the purApContactPhoneNumber attribute. 181 * 182 * @return Returns the purApContactPhoneNumber. 183 */ 184 public String getPurApContactPhoneNumber() { 185 return purApContactPhoneNumber; 186 } 187 188 189 /** 190 * Sets the purApContactPhoneNumber attribute value. 191 * 192 * @param purApContactPhoneNumber The purApContactPhoneNumber to set. 193 */ 194 public void setPurApContactPhoneNumber(String purApContactPhoneNumber) { 195 this.purApContactPhoneNumber = purApContactPhoneNumber; 196 } 197 198 199 /** 200 * Gets the actionPurApDocIndex attribute. 201 * 202 * @return Returns the actionPurApDocIndex. 203 */ 204 public int getActionPurApDocIndex() { 205 return actionPurApDocIndex; 206 } 207 208 209 /** 210 * Sets the actionPurApDocIndex attribute value. 211 * 212 * @param actionPurApDocIndex The actionPurApDocIndex to set. 213 */ 214 public void setActionPurApDocIndex(int actionPurApDocIndex) { 215 this.actionPurApDocIndex = actionPurApDocIndex; 216 } 217 218 219 /** 220 * Gets the actionItemAssetIndex attribute. 221 * 222 * @return Returns the actionItemAssetIndex. 223 */ 224 public int getActionItemAssetIndex() { 225 return actionItemAssetIndex; 226 } 227 228 229 /** 230 * Sets the actionItemAssetIndex attribute value. 231 * 232 * @param actionItemAssetIndex The actionItemAssetIndex to set. 233 */ 234 public void setActionItemAssetIndex(int actionItemAssetIndex) { 235 this.actionItemAssetIndex = actionItemAssetIndex; 236 } 237 238 239 /** 240 * Gets the purchaseOrderIdentifier attribute. 241 * 242 * @return Returns the purchaseOrderIdentifier. 243 */ 244 public Integer getPurchaseOrderIdentifier() { 245 return purchaseOrderIdentifier; 246 } 247 248 249 /** 250 * Sets the purchaseOrderIdentifier attribute value. 251 * 252 * @param purchaseOrderIdentifier The purchaseOrderIdentifier to set. 253 */ 254 public void setPurchaseOrderIdentifier(Integer purchaseOrderIdentifier) { 255 this.purchaseOrderIdentifier = purchaseOrderIdentifier; 256 } 257 258 259 /** 260 * Gets the purApDocs attribute. 261 * 262 * @return Returns the purApDocs. 263 */ 264 public List<PurchasingAccountsPayableDocument> getPurApDocs() { 265 return purApDocs; 266 } 267 268 269 /** 270 * Sets the purApDocs attribute value. 271 * 272 * @param purApDocs The purApDocs to set. 273 */ 274 public void setPurApDocs(List<PurchasingAccountsPayableDocument> purApDocs) { 275 this.purApDocs = purApDocs; 276 } 277 278 279 /** 280 * Gets the purchaseOrderInquiryUrl attribute. 281 * 282 * @return Returns the purchaseOrderInquiryUrl. 283 */ 284 public String getPurchaseOrderInquiryUrl() { 285 return purchaseOrderInquiryUrl; 286 } 287 288 289 @Override 290 public void populate(HttpServletRequest request) { 291 super.populate(request); 292 293 String parameterName = (String) request.getAttribute(KNSConstants.METHOD_TO_CALL_ATTRIBUTE); 294 if (StringUtils.isNotBlank(parameterName)) { 295 // populate collection index 296 String purApDocIndex = StringUtils.substringBetween(parameterName, CabConstants.DOT_DOC, "."); 297 if (StringUtils.isNotBlank(purApDocIndex)) { 298 this.setActionPurApDocIndex(Integer.parseInt(purApDocIndex)); 299 } 300 String itemAssetIndex = StringUtils.substringBetween(parameterName, CabConstants.DOT_LINE, "."); 301 if (StringUtils.isNotBlank(itemAssetIndex)) { 302 this.setActionItemAssetIndex(Integer.parseInt(itemAssetIndex)); 303 } 304 } 305 306 if (this.purchaseOrderIdentifier != null) { 307 PurchaseOrderDocument poDoc = this.getPurApInfoService().getCurrentDocumentForPurchaseOrderIdentifier(this.purchaseOrderIdentifier); 308 if (ObjectUtils.isNotNull(poDoc) && StringUtils.isNotBlank(poDoc.getDocumentNumber())) { 309 this.purchaseOrderInquiryUrl = "purapPurchaseOrder.do?methodToCall=docHandler&docId=" + poDoc.getDocumentNumber() + "&command=displayDocSearchView"; 310 } 311 } 312 313 // clear up the documentNumber saved when submit CAMS doc 314 this.setDocumentNumber(null); 315 } 316 317 private PurApInfoService getPurApInfoService() { 318 return SpringContext.getBean(PurApInfoService.class); 319 } 320 321 322 public boolean isSelectAll() { 323 return selectAll; 324 } 325 326 327 public void setSelectAll(boolean selectAll) { 328 this.selectAll = selectAll; 329 } 330 331 /** 332 * Return Asset Global forwarding URL. 333 * 334 * @param request 335 * @param documentNumber 336 * @return 337 */ 338 public String getDocHandlerForwardLink() { 339 String docHandlerLink = ""; 340 if (StringUtils.isNotBlank(this.documentNumber)) { 341 try { 342 String docTypeName = SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(this.documentNumber).getDocumentHeader().getWorkflowDocument().getDocumentType(); 343 docHandlerLink = SpringContext.getBean(GlAndPurApHelperService.class).getDocHandlerUrl(this.documentNumber, docTypeName); 344 } 345 catch (WorkflowException e) { 346 throw new RuntimeException("Caught WorkflowException trying to get document type name from Workflow", e); 347 } 348 } 349 return docHandlerLink; 350 } 351 352 public PurchasingAccountsPayableDocument getPurApDoc(int index) { 353 int size = getPurApDocs().size(); 354 while (size <= index || getPurApDocs().get(index) == null) { 355 getPurApDocs().add(size++, new PurchasingAccountsPayableDocument()); 356 } 357 return (PurchasingAccountsPayableDocument) getPurApDocs().get(index); 358 359 } 360 }