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 }