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.ArrayList; 019 import java.util.List; 020 import java.util.Map; 021 import java.util.Properties; 022 023 import javax.servlet.http.HttpServletRequest; 024 025 import org.kuali.kfs.module.purap.businessobject.PurApAccountingLine; 026 import org.kuali.kfs.module.purap.businessobject.PurApItem; 027 import org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocument; 028 import org.kuali.kfs.module.purap.service.PurapAccountingService; 029 import org.kuali.kfs.module.purap.util.SummaryAccount; 030 import org.kuali.kfs.pdp.PdpPropertyConstants; 031 import org.kuali.kfs.pdp.businessobject.PurchasingPaymentDetail; 032 import org.kuali.kfs.sys.KFSConstants; 033 import org.kuali.kfs.sys.KFSParameterKeyConstants; 034 import org.kuali.kfs.sys.KFSPropertyConstants; 035 import org.kuali.kfs.sys.businessobject.AccountingLine; 036 import org.kuali.kfs.sys.context.SpringContext; 037 import org.kuali.kfs.sys.service.impl.KfsParameterConstants; 038 import org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase; 039 import org.kuali.rice.kns.service.DataDictionaryService; 040 import org.kuali.rice.kns.service.KualiConfigurationService; 041 import org.kuali.rice.kns.service.ParameterService; 042 import org.kuali.rice.kns.util.KNSConstants; 043 import org.kuali.rice.kns.util.ObjectUtils; 044 import org.kuali.rice.kns.util.TypedArrayList; 045 import org.kuali.rice.kns.util.UrlFactory; 046 import org.kuali.rice.kns.web.ui.ExtraButton; 047 048 /** 049 * Struts Action Form for Purchasing and Accounts Payable documents. 050 */ 051 public class PurchasingAccountsPayableFormBase extends KualiAccountingDocumentFormBase { 052 053 protected transient List<SummaryAccount> summaryAccounts; 054 055 /** 056 * Constructs a PurchasingAccountsPayableFormBase instance and initializes summary accounts. 057 */ 058 public PurchasingAccountsPayableFormBase() { 059 super(); 060 clearSummaryAccounts(); 061 } 062 063 /** 064 * Updates the summaryAccounts that are contained in the form. Currently we are only calling this on load and when 065 * refreshAccountSummary is called. 066 */ 067 public void refreshAccountSummmary() { 068 clearSummaryAccounts(); 069 PurchasingAccountsPayableDocument purapDocument = (PurchasingAccountsPayableDocument) getDocument(); 070 summaryAccounts.addAll(SpringContext.getBean(PurapAccountingService.class).generateSummaryAccounts(purapDocument)); 071 } 072 073 /** 074 * Initializes summary accounts. 075 */ 076 public void clearSummaryAccounts() { 077 summaryAccounts = new TypedArrayList(SummaryAccount.class); 078 } 079 080 /** 081 * @see org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase#getBaselineSourceAccountingLines() 082 */ 083 public List getBaselineSourceAccountingLines() { 084 List<AccountingLine> accounts = new ArrayList<AccountingLine>(); 085 if (ObjectUtils.isNull(accounts) || accounts.isEmpty()) { 086 accounts = new ArrayList<AccountingLine>(); 087 for (PurApItem item : ((PurchasingAccountsPayableDocument) getDocument()).getItems()) { 088 List<PurApAccountingLine> lines = item.getBaselineSourceAccountingLines(); 089 for (PurApAccountingLine line : lines) { 090 accounts.add(line); 091 } 092 093 } 094 } 095 return accounts; 096 } 097 098 @Override 099 public void populate(HttpServletRequest request) { 100 super.populate(request); 101 PurchasingAccountsPayableDocument purapDoc = (PurchasingAccountsPayableDocument)this.getDocument(); 102 103 //fix document item/account references if necessary 104 purapDoc.fixItemReferences(); 105 } 106 107 public List<SummaryAccount> getSummaryAccounts() { 108 if (summaryAccounts == null) { 109 refreshAccountSummmary(); 110 } 111 return summaryAccounts; 112 } 113 114 public void setSummaryAccounts(List<SummaryAccount> summaryAccounts) { 115 this.summaryAccounts = summaryAccounts; 116 } 117 118 protected void addExtraButton(String property, String source, String altText) { 119 120 ExtraButton newButton = new ExtraButton(); 121 122 newButton.setExtraButtonProperty(property); 123 newButton.setExtraButtonSource(source); 124 newButton.setExtraButtonAltText(altText); 125 126 extraButtons.add(newButton); 127 } 128 129 /** 130 * This method builds the url for the disbursement info on the purap documents. 131 * @return the disbursement info url 132 */ 133 public String getDisbursementInfoUrl() { 134 String basePath = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.APPLICATION_URL_KEY); 135 ParameterService parameterService = SpringContext.getBean(ParameterService.class); 136 137 String orgCode = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_BATCH.class, KFSParameterKeyConstants.PurapPdpParameterConstants.PURAP_PDP_ORG_CODE); 138 String subUnitCode = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_BATCH.class, KFSParameterKeyConstants.PurapPdpParameterConstants.PURAP_PDP_SUB_UNIT_CODE); 139 140 Properties parameters = new Properties(); 141 parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.SEARCH_METHOD); 142 parameters.put(KFSConstants.BACK_LOCATION, basePath + "/" + KFSConstants.MAPPING_PORTAL + ".do"); 143 parameters.put(KNSConstants.DOC_FORM_KEY, "88888888"); 144 parameters.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, PurchasingPaymentDetail.class.getName()); 145 parameters.put(KFSConstants.HIDE_LOOKUP_RETURN_LINK, "true"); 146 parameters.put(KFSConstants.SUPPRESS_ACTIONS, "false"); 147 parameters.put(PdpPropertyConstants.PaymentDetail.PAYMENT_UNIT_CODE, orgCode); 148 parameters.put(PdpPropertyConstants.PaymentDetail.PAYMENT_SUBUNIT_CODE, subUnitCode); 149 150 String lookupUrl = UrlFactory.parameterizeUrl(basePath + "/" + KFSConstants.LOOKUP_ACTION, parameters); 151 152 return lookupUrl; 153 } 154 155 /** 156 * overridden to make sure accounting lines on items are repopulated 157 * @see org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase#populateAccountingLinesForResponse(java.lang.String, java.util.Map) 158 */ 159 @Override 160 protected void populateAccountingLinesForResponse(String methodToCall, Map parameterMap) { 161 super.populateAccountingLinesForResponse(methodToCall, parameterMap); 162 163 populateItemAccountingLines(parameterMap); 164 } 165 166 /** 167 * Populates accounting lines for each item on the Purchasing AP document 168 * @param parameterMap the map of parameters 169 */ 170 protected void populateItemAccountingLines(Map parameterMap) { 171 int itemCount = 0; 172 for (PurApItem item : ((PurchasingAccountsPayableDocument)getDocument()).getItems()) { 173 populateAccountingLine(item.getNewSourceLine(), KFSPropertyConstants.DOCUMENT+"."+KFSPropertyConstants.ITEM+"["+itemCount+"]."+KFSPropertyConstants.NEW_SOURCE_LINE, parameterMap); 174 175 int sourceLineCount = 0; 176 for (PurApAccountingLine purApLine : item.getSourceAccountingLines()) { 177 populateAccountingLine(purApLine, KFSPropertyConstants.DOCUMENT+"."+KFSPropertyConstants.ITEM+"["+itemCount+"]."+KFSPropertyConstants.SOURCE_ACCOUNTING_LINE+"["+sourceLineCount+"]", parameterMap); 178 sourceLineCount += 1; 179 } 180 } 181 } 182 }