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.ar.businessobject; 017 018 import java.util.Collection; 019 import java.util.LinkedHashMap; 020 import java.util.List; 021 022 import org.kuali.kfs.coa.businessobject.AccountingPeriod; 023 import org.kuali.kfs.coa.businessobject.ObjectCode; 024 import org.kuali.kfs.module.ar.ArConstants; 025 import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument; 026 import org.kuali.kfs.module.ar.document.service.SystemInformationService; 027 import org.kuali.kfs.sys.businessobject.FinancialSystemDocumentHeader; 028 import org.kuali.kfs.module.ar.businessobject.NonAppliedDistribution; 029 import org.kuali.kfs.module.ar.businessobject.NonInvoicedDistribution; 030 import org.kuali.kfs.sys.context.SpringContext; 031 import org.kuali.kfs.sys.service.UniversityDateService; 032 import org.kuali.rice.kew.exception.WorkflowException; 033 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase; 034 import org.kuali.rice.kns.service.DocumentService; 035 import org.kuali.rice.kns.service.ParameterService; 036 import org.kuali.rice.kns.util.KualiDecimal; 037 038 /** 039 * @author Kuali Nervous System Team (kualidev@oncourse.iu.edu) 040 */ 041 public class InvoicePaidApplied extends PersistableBusinessObjectBase { 042 043 private String documentNumber; // document the payment is being applied FROM 044 private Integer paidAppliedItemNumber; 045 private String financialDocumentReferenceInvoiceNumber; // document the payment is being applied TO 046 private Integer invoiceItemNumber; 047 private Integer universityFiscalYear; 048 private String universityFiscalPeriodCode; 049 private KualiDecimal invoiceItemAppliedAmount = KualiDecimal.ZERO; 050 051 private CustomerInvoiceDetail invoiceDetail; 052 private AccountingPeriod universityFiscalPeriod; 053 private FinancialSystemDocumentHeader documentHeader; 054 transient private DocumentService documentService; 055 private KualiDecimal paidAppiedDistributionAmount = KualiDecimal.ZERO; 056 private Collection<NonInvoicedDistribution> nonInvoicedDistributions; 057 private Collection<NonAppliedDistribution> nonAppliedDistributions; 058 private transient CustomerInvoiceDocument customerInvoiceDocument; 059 060 /** 061 * Default constructor. 062 */ 063 public InvoicePaidApplied() { 064 } 065 066 public InvoicePaidApplied(String documentNumber, String refInvoiceDocNumber, Integer invoiceSequenceNumber, KualiDecimal appliedAmount, Integer paidAppliedItemNumber, Integer universityFiscalYear, String universityFiscalPeriodCode) { 067 this.documentNumber = documentNumber; 068 this.financialDocumentReferenceInvoiceNumber = refInvoiceDocNumber; 069 this.invoiceItemNumber = invoiceSequenceNumber; 070 this.paidAppliedItemNumber = paidAppliedItemNumber; 071 this.invoiceItemAppliedAmount = appliedAmount; 072 this.universityFiscalYear = universityFiscalYear; 073 this.universityFiscalPeriodCode = universityFiscalPeriodCode; 074 } 075 076 /** 077 * Constructs a InvoicePaidApplied object, and assumes the current Fiscal Year and FiscalPeriodCode. 078 * 079 * @param documentNumber 080 * @param refInvoiceDocNumber 081 * @param invoiceSequenceNumber 082 * @param appliedAmount 083 * @param paidAppliedItemNumber 084 */ 085 public InvoicePaidApplied(String documentNumber, String refInvoiceDocNumber, Integer invoiceSequenceNumber, KualiDecimal appliedAmount, Integer paidAppliedItemNumber) { 086 this.documentNumber = documentNumber; 087 this.financialDocumentReferenceInvoiceNumber = refInvoiceDocNumber; 088 this.invoiceItemNumber = invoiceSequenceNumber; 089 this.paidAppliedItemNumber = paidAppliedItemNumber; 090 this.invoiceItemAppliedAmount = appliedAmount; 091 092 UniversityDateService universityDateService = SpringContext.getBean(UniversityDateService.class); 093 this.universityFiscalYear = universityDateService.getCurrentFiscalYear(); 094 this.universityFiscalPeriodCode = universityDateService.getCurrentUniversityDate().getAccountingPeriod().getUniversityFiscalPeriodCode(); 095 } 096 097 public DocumentService getDocumentService() { 098 if (null == documentService) { 099 documentService = SpringContext.getBean(DocumentService.class); 100 } 101 return documentService; 102 } 103 104 public void setDocumentService(DocumentService documentService) { 105 this.documentService = documentService; 106 } 107 108 public CustomerInvoiceDocument getCustomerInvoiceDocument() { 109 CustomerInvoiceDocument _customerInvoiceDocument = null; 110 try { 111 _customerInvoiceDocument = (CustomerInvoiceDocument) getDocumentService().getByDocumentHeaderId(getFinancialDocumentReferenceInvoiceNumber()); 112 } 113 catch (WorkflowException e) { 114 throw new RuntimeException("WorkflowException thrown when trying to retrieve Invoice document [" + getFinancialDocumentReferenceInvoiceNumber() + "]", e); 115 } 116 return _customerInvoiceDocument; 117 } 118 119 public ObjectCode getAccountsReceivableObjectCode() { 120 121 // make sure its all re-connected with child objects 122 getInvoiceDetail().refresh(); 123 getInvoiceDetail().refreshNonUpdateableReferences(); 124 125 String parameterName = ArConstants.GLPE_RECEIVABLE_OFFSET_GENERATION_METHOD; 126 ParameterService parameterService = SpringContext.getBean(ParameterService.class); 127 String parameterValue = parameterService.getParameterValue(CustomerInvoiceDocument.class, parameterName); 128 129 ObjectCode objectCode = null; 130 if ("1".equals(parameterValue) || "2".equals(parameterValue)) { 131 getInvoiceDetail().refreshReferenceObject("objectCode"); 132 objectCode = getInvoiceDetail().getObjectCode(); 133 } 134 else if ("3".equals(parameterValue)) { 135 CustomerInvoiceDocument customerInvoiceDocument = getInvoiceDetail().getCustomerInvoiceDocument(); 136 customerInvoiceDocument.refreshReferenceObject("paymentFinancialObject"); 137 objectCode = getInvoiceDetail().getCustomerInvoiceDocument().getPaymentFinancialObject(); 138 } 139 else { 140 throw new RuntimeException("No AR ObjectCode was available for this InvoicePaidApplied, which should never happen."); 141 } 142 143 return objectCode; 144 } 145 146 public SystemInformation getSystemInformation() { 147 String processingOrgCode = getCustomerInvoiceDocument().getAccountsReceivableDocumentHeader().getProcessingOrganizationCode(); 148 String processingChartCode = getCustomerInvoiceDocument().getAccountsReceivableDocumentHeader().getProcessingChartOfAccountCode(); 149 150 SystemInformationService sysInfoService = SpringContext.getBean(SystemInformationService.class); 151 Integer currentFiscalYear = SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear(); 152 SystemInformation systemInformation = sysInfoService.getByProcessingChartOrgAndFiscalYear(processingChartCode, processingOrgCode, currentFiscalYear); 153 154 if (systemInformation == null) { 155 throw new RuntimeException("The InvoicePaidApplied doesnt have an associated SystemInformation. This should never happen."); 156 } 157 return systemInformation; 158 } 159 160 /** 161 * Gets the documentNumber attribute. 162 * 163 * @return Returns the documentNumber 164 */ 165 public String getDocumentNumber() { 166 return documentNumber; 167 } 168 169 /** 170 * Sets the documentNumber attribute. 171 * 172 * @param documentNumber The documentNumber to set. 173 */ 174 public void setDocumentNumber(String documentNumber) { 175 this.documentNumber = documentNumber; 176 } 177 178 179 /** 180 * Gets the paidAppliedItemNumber attribute. 181 * 182 * @return Returns the paidAppliedItemNumber 183 */ 184 public Integer getPaidAppliedItemNumber() { 185 return paidAppliedItemNumber; 186 } 187 188 /** 189 * Sets the paidAppliedItemNumber attribute. 190 * 191 * @param paidAppliedItemNumber The paidAppliedItemNumber to set. 192 */ 193 public void setPaidAppliedItemNumber(Integer paidAppliedItemNumber) { 194 this.paidAppliedItemNumber = paidAppliedItemNumber; 195 } 196 197 198 /** 199 * Gets the financialDocumentReferenceInvoiceNumber attribute. 200 * 201 * @return Returns the financialDocumentReferenceInvoiceNumber 202 */ 203 public String getFinancialDocumentReferenceInvoiceNumber() { 204 return financialDocumentReferenceInvoiceNumber; 205 } 206 207 /** 208 * Sets the financialDocumentReferenceInvoiceNumber attribute. 209 * 210 * @param financialDocumentReferenceInvoiceNumber The financialDocumentReferenceInvoiceNumber to set. 211 */ 212 public void setFinancialDocumentReferenceInvoiceNumber(String financialDocumentReferenceInvoiceNumber) { 213 this.financialDocumentReferenceInvoiceNumber = financialDocumentReferenceInvoiceNumber; 214 } 215 216 /** 217 * Gets the invoiceItemNumber attribute. 218 * 219 * @return Returns the invoiceItemNumber 220 */ 221 public Integer getInvoiceItemNumber() { 222 return invoiceItemNumber; 223 } 224 225 /** 226 * Sets the invoiceItemNumber attribute. 227 * 228 * @param invoiceItemNumber The invoiceItemNumber to set. 229 */ 230 public void setInvoiceItemNumber(Integer invoiceItemNumber) { 231 this.invoiceItemNumber = invoiceItemNumber; 232 } 233 234 /** 235 * Gets the universityFiscalYear attribute. 236 * 237 * @return Returns the universityFiscalYear 238 */ 239 public Integer getUniversityFiscalYear() { 240 return universityFiscalYear; 241 } 242 243 /** 244 * Sets the universityFiscalYear attribute. 245 * 246 * @param universityFiscalYear The universityFiscalYear to set. 247 */ 248 public void setUniversityFiscalYear(Integer universityFiscalYear) { 249 this.universityFiscalYear = universityFiscalYear; 250 } 251 252 /** 253 * Gets the universityFiscalPeriodCode attribute. 254 * 255 * @return Returns the universityFiscalPeriodCode 256 */ 257 public String getUniversityFiscalPeriodCode() { 258 return universityFiscalPeriodCode; 259 } 260 261 /** 262 * Sets the universityFiscalPeriodCode attribute. 263 * 264 * @param universityFiscalPeriodCode The universityFiscalPeriodCode to set. 265 */ 266 public void setUniversityFiscalPeriodCode(String universityFiscalPeriodCode) { 267 this.universityFiscalPeriodCode = universityFiscalPeriodCode; 268 } 269 270 public FinancialSystemDocumentHeader getDocumentHeader() { 271 return documentHeader; 272 } 273 274 public void setDocumentHeader(FinancialSystemDocumentHeader documentHeader) { 275 this.documentHeader = documentHeader; 276 } 277 278 /** 279 * Gets the invoiceItemAppliedAmount attribute. 280 * 281 * @return Returns the invoiceItemAppliedAmount 282 */ 283 public KualiDecimal getInvoiceItemAppliedAmount() { 284 return invoiceItemAppliedAmount; 285 } 286 287 /** 288 * Sets the invoiceItemAppliedAmount attribute. 289 * 290 * @param invoiceItemAppliedAmount The invoiceItemAppliedAmount to set. 291 */ 292 public void setInvoiceItemAppliedAmount(KualiDecimal invoiceItemAppliedAmount) { 293 this.invoiceItemAppliedAmount = invoiceItemAppliedAmount; 294 } 295 296 /** 297 * Gets the invoiceItem attribute. 298 * 299 * @return Returns the invoiceItem 300 */ 301 public CustomerInvoiceDetail getInvoiceDetail() { 302 return invoiceDetail; 303 } 304 305 /** 306 * Gets the universityFiscalPeriod attribute. 307 * 308 * @return Returns the universityFiscalPeriod 309 */ 310 public AccountingPeriod getUniversityFiscalPeriod() { 311 return universityFiscalPeriod; 312 } 313 314 /** 315 * Sets the universityFiscalPeriod attribute. 316 * 317 * @param universityFiscalPeriod The universityFiscalPeriod to set. 318 * @deprecated 319 */ 320 public void setUniversityFiscalPeriod(AccountingPeriod universityFiscalPeriod) { 321 this.universityFiscalPeriod = universityFiscalPeriod; 322 } 323 324 /** 325 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 326 */ 327 @SuppressWarnings("unchecked") 328 protected LinkedHashMap toStringMapper() { 329 LinkedHashMap m = new LinkedHashMap(); 330 m.put("documentNumber", this.documentNumber); 331 if (this.paidAppliedItemNumber != null) { 332 m.put("paidAppliedItemNumber", this.paidAppliedItemNumber.toString()); 333 } 334 return m; 335 } 336 337 /** 338 * Get the paidAppiedDistributionAmount attribute. 339 * 340 * @return Returns the paidAppiedDistributionAmount 341 */ 342 public KualiDecimal getPaidAppiedDistributionAmount() { 343 return paidAppiedDistributionAmount; 344 } 345 346 /** 347 * Set the paidAppiedDistributionAmount attribute. 348 * 349 * @param paidAppiedDistributionAmount The paidAppiedDistributionAmount to set. 350 */ 351 public void setPaidAppiedDistributionAmount(KualiDecimal paidAppiedDistributionAmount) { 352 this.paidAppiedDistributionAmount = paidAppiedDistributionAmount; 353 } 354 355 /** 356 * Gets the nonInvoicedDistributions attribute. 357 * 358 * @return Returns the nonInvoicedDistributions. 359 */ 360 public Collection<NonInvoicedDistribution> getNonInvoicedDistributions() { 361 return nonInvoicedDistributions; 362 } 363 364 /** 365 * Sets the nonInvoicedDistributions attribute value. 366 * 367 * @param nonInvoicedDistributions The nonInvoicedDistributions to set. 368 */ 369 public void setNonInvoicedDistributions(Collection<NonInvoicedDistribution> nonInvoicedDistributions) { 370 this.nonInvoicedDistributions = nonInvoicedDistributions; 371 } 372 373 /** 374 * Gets the nonAppliedDistributions attribute. 375 * 376 * @return Returns the nonAppliedDistributions. 377 */ 378 public Collection<NonAppliedDistribution> getNonAppliedDistributions() { 379 return nonAppliedDistributions; 380 } 381 382 /** 383 * Sets the nonAppliedDistributions attribute value. 384 * 385 * @param nonAppliedDistributions The nonAppliedDistributions to set. 386 */ 387 public void setNonAppliedDistributions(List<NonAppliedDistribution> nonAppliedDistributions) { 388 this.nonAppliedDistributions = nonAppliedDistributions; 389 } 390 391 /** 392 * Sets the customerInvoiceDocument attribute value. 393 * 394 * @param customerInvoiceDocument The customerInvoiceDocument to set. 395 */ 396 public void setCustomerInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument) { 397 this.customerInvoiceDocument = customerInvoiceDocument; 398 } 399 400 }