/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.ar.businessobject;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import org.kuali.kfs.coa.businessobject.AccountingPeriod;
import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument;
import org.kuali.kfs.module.ar.document.service.SystemInformationService;
import org.kuali.kfs.sys.businessobject.FinancialSystemDocumentHeader;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.service.UniversityDateService;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.kew.api.exception.WorkflowException;
import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
import org.kuali.rice.krad.service.DocumentService;
/**
* @author Kuali Nervous System Team (kualidev@oncourse.iu.edu)
*/
public class InvoicePaidApplied extends PersistableBusinessObjectBase {
private String documentNumber; // document the payment is being applied FROM
private Integer paidAppliedItemNumber;
private String financialDocumentReferenceInvoiceNumber; // document the payment is being applied TO
private Integer invoiceItemNumber;
private Integer universityFiscalYear;
private String universityFiscalPeriodCode;
private KualiDecimal invoiceItemAppliedAmount = KualiDecimal.ZERO;
private CustomerInvoiceDetail invoiceDetail;
private AccountingPeriod universityFiscalPeriod;
private FinancialSystemDocumentHeader documentHeader;
transient private DocumentService documentService;
private KualiDecimal paidAppiedDistributionAmount = KualiDecimal.ZERO;
private Collection<NonInvoicedDistribution> nonInvoicedDistributions;
private Collection<NonAppliedDistribution> nonAppliedDistributions;
private transient CustomerInvoiceDocument customerInvoiceDocument;
public InvoicePaidApplied() {
super();
}
public InvoicePaidApplied(String documentNumber, String refInvoiceDocNumber, Integer invoiceSequenceNumber, KualiDecimal appliedAmount, Integer paidAppliedItemNumber, Integer universityFiscalYear, String universityFiscalPeriodCode) {
this.documentNumber = documentNumber;
this.financialDocumentReferenceInvoiceNumber = refInvoiceDocNumber;
this.invoiceItemNumber = invoiceSequenceNumber;
this.paidAppliedItemNumber = paidAppliedItemNumber;
this.invoiceItemAppliedAmount = appliedAmount;
this.universityFiscalYear = universityFiscalYear;
this.universityFiscalPeriodCode = universityFiscalPeriodCode;
}
/**
* Constructs a InvoicePaidApplied object, and assumes the current Fiscal Year and FiscalPeriodCode.
*
* @param documentNumber
* @param refInvoiceDocNumber
* @param invoiceSequenceNumber
* @param appliedAmount
* @param paidAppliedItemNumber
*/
public InvoicePaidApplied(String documentNumber, String refInvoiceDocNumber, Integer invoiceSequenceNumber, KualiDecimal appliedAmount, Integer paidAppliedItemNumber) {
this.documentNumber = documentNumber;
this.financialDocumentReferenceInvoiceNumber = refInvoiceDocNumber;
this.invoiceItemNumber = invoiceSequenceNumber;
this.paidAppliedItemNumber = paidAppliedItemNumber;
this.invoiceItemAppliedAmount = appliedAmount;
UniversityDateService universityDateService = SpringContext.getBean(UniversityDateService.class);
this.universityFiscalYear = universityDateService.getCurrentFiscalYear();
this.universityFiscalPeriodCode = universityDateService.getCurrentUniversityDate().getAccountingPeriod().getUniversityFiscalPeriodCode();
}
public DocumentService getDocumentService() {
if (null == documentService) {
documentService = SpringContext.getBean(DocumentService.class);
}
return documentService;
}
public void setDocumentService(DocumentService documentService) {
this.documentService = documentService;
}
public CustomerInvoiceDocument getCustomerInvoiceDocument() {
CustomerInvoiceDocument customerInvoiceDocument = null;
try {
customerInvoiceDocument = (CustomerInvoiceDocument) getDocumentService().getByDocumentHeaderId(getFinancialDocumentReferenceInvoiceNumber());
}
catch (WorkflowException e) {
throw new RuntimeException("WorkflowException thrown when trying to retrieve Invoice document [" + getFinancialDocumentReferenceInvoiceNumber() + "]", e);
}
return customerInvoiceDocument;
}
public SystemInformation getSystemInformation() {
String processingOrgCode = getCustomerInvoiceDocument().getAccountsReceivableDocumentHeader().getProcessingOrganizationCode();
String processingChartCode = getCustomerInvoiceDocument().getAccountsReceivableDocumentHeader().getProcessingChartOfAccountCode();
SystemInformationService sysInfoService = SpringContext.getBean(SystemInformationService.class);
Integer currentFiscalYear = SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear();
SystemInformation systemInformation = sysInfoService.getByProcessingChartOrgAndFiscalYear(processingChartCode, processingOrgCode, currentFiscalYear);
if (systemInformation == null) {
throw new RuntimeException("The InvoicePaidApplied doesnt have an associated SystemInformation. This should never happen.");
}
return systemInformation;
}
/**
* Gets the documentNumber attribute.
*
* @return Returns the documentNumber
*/
public String getDocumentNumber() {
return documentNumber;
}
/**
* Sets the documentNumber attribute.
*
* @param documentNumber The documentNumber to set.
*/
public void setDocumentNumber(String documentNumber) {
this.documentNumber = documentNumber;
}
/**
* Gets the paidAppliedItemNumber attribute.
*
* @return Returns the paidAppliedItemNumber
*/
public Integer getPaidAppliedItemNumber() {
return paidAppliedItemNumber;
}
/**
* Sets the paidAppliedItemNumber attribute.
*
* @param paidAppliedItemNumber The paidAppliedItemNumber to set.
*/
public void setPaidAppliedItemNumber(Integer paidAppliedItemNumber) {
this.paidAppliedItemNumber = paidAppliedItemNumber;
}
/**
* Gets the financialDocumentReferenceInvoiceNumber attribute.
*
* @return Returns the financialDocumentReferenceInvoiceNumber
*/
public String getFinancialDocumentReferenceInvoiceNumber() {
return financialDocumentReferenceInvoiceNumber;
}
/**
* Sets the financialDocumentReferenceInvoiceNumber attribute.
*
* @param financialDocumentReferenceInvoiceNumber The financialDocumentReferenceInvoiceNumber to set.
*/
public void setFinancialDocumentReferenceInvoiceNumber(String financialDocumentReferenceInvoiceNumber) {
this.financialDocumentReferenceInvoiceNumber = financialDocumentReferenceInvoiceNumber;
}
/**
* Gets the invoiceItemNumber attribute.
*
* @return Returns the invoiceItemNumber
*/
public Integer getInvoiceItemNumber() {
return invoiceItemNumber;
}
/**
* Sets the invoiceItemNumber attribute.
*
* @param invoiceItemNumber The invoiceItemNumber to set.
*/
public void setInvoiceItemNumber(Integer invoiceItemNumber) {
this.invoiceItemNumber = invoiceItemNumber;
}
/**
* Gets the universityFiscalYear attribute.
*
* @return Returns the universityFiscalYear
*/
public Integer getUniversityFiscalYear() {
return universityFiscalYear;
}
/**
* Sets the universityFiscalYear attribute.
*
* @param universityFiscalYear The universityFiscalYear to set.
*/
public void setUniversityFiscalYear(Integer universityFiscalYear) {
this.universityFiscalYear = universityFiscalYear;
}
/**
* Gets the universityFiscalPeriodCode attribute.
*
* @return Returns the universityFiscalPeriodCode
*/
public String getUniversityFiscalPeriodCode() {
return universityFiscalPeriodCode;
}
/**
* Sets the universityFiscalPeriodCode attribute.
*
* @param universityFiscalPeriodCode The universityFiscalPeriodCode to set.
*/
public void setUniversityFiscalPeriodCode(String universityFiscalPeriodCode) {
this.universityFiscalPeriodCode = universityFiscalPeriodCode;
}
public FinancialSystemDocumentHeader getDocumentHeader() {
return documentHeader;
}
public void setDocumentHeader(FinancialSystemDocumentHeader documentHeader) {
this.documentHeader = documentHeader;
}
/**
* Gets the invoiceItemAppliedAmount attribute.
*
* @return Returns the invoiceItemAppliedAmount
*/
public KualiDecimal getInvoiceItemAppliedAmount() {
return invoiceItemAppliedAmount;
}
/**
* Sets the invoiceItemAppliedAmount attribute.
*
* @param invoiceItemAppliedAmount The invoiceItemAppliedAmount to set.
*/
public void setInvoiceItemAppliedAmount(KualiDecimal invoiceItemAppliedAmount) {
this.invoiceItemAppliedAmount = invoiceItemAppliedAmount;
}
/**
* Gets the invoiceItem attribute.
*
* @return Returns the invoiceItem
*/
public CustomerInvoiceDetail getInvoiceDetail() {
return invoiceDetail;
}
/**
* Gets the universityFiscalPeriod attribute.
*
* @return Returns the universityFiscalPeriod
*/
public AccountingPeriod getUniversityFiscalPeriod() {
return universityFiscalPeriod;
}
/**
* Sets the universityFiscalPeriod attribute.
*
* @param universityFiscalPeriod The universityFiscalPeriod to set.
* @deprecated
*/
@Deprecated
public void setUniversityFiscalPeriod(AccountingPeriod universityFiscalPeriod) {
this.universityFiscalPeriod = universityFiscalPeriod;
}
/**
* @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper()
*/
@SuppressWarnings("unchecked")
protected LinkedHashMap toStringMapper_RICE20_REFACTORME() {
LinkedHashMap m = new LinkedHashMap();
m.put("documentNumber", this.documentNumber);
if (this.paidAppliedItemNumber != null) {
m.put("paidAppliedItemNumber", this.paidAppliedItemNumber.toString());
}
return m;
}
/**
* Get the paidAppiedDistributionAmount attribute.
*
* @return Returns the paidAppiedDistributionAmount
*/
public KualiDecimal getPaidAppiedDistributionAmount() {
return paidAppiedDistributionAmount;
}
/**
* Set the paidAppiedDistributionAmount attribute.
*
* @param paidAppiedDistributionAmount The paidAppiedDistributionAmount to set.
*/
public void setPaidAppiedDistributionAmount(KualiDecimal paidAppiedDistributionAmount) {
this.paidAppiedDistributionAmount = paidAppiedDistributionAmount;
}
/**
* Gets the nonInvoicedDistributions attribute.
*
* @return Returns the nonInvoicedDistributions.
*/
public Collection<NonInvoicedDistribution> getNonInvoicedDistributions() {
return nonInvoicedDistributions;
}
/**
* Sets the nonInvoicedDistributions attribute value.
*
* @param nonInvoicedDistributions The nonInvoicedDistributions to set.
*/
public void setNonInvoicedDistributions(Collection<NonInvoicedDistribution> nonInvoicedDistributions) {
this.nonInvoicedDistributions = nonInvoicedDistributions;
}
/**
* Gets the nonAppliedDistributions attribute.
*
* @return Returns the nonAppliedDistributions.
*/
public Collection<NonAppliedDistribution> getNonAppliedDistributions() {
return nonAppliedDistributions;
}
/**
* Sets the nonAppliedDistributions attribute value.
*
* @param nonAppliedDistributions The nonAppliedDistributions to set.
*/
public void setNonAppliedDistributions(List<NonAppliedDistribution> nonAppliedDistributions) {
this.nonAppliedDistributions = nonAppliedDistributions;
}
/**
* Sets the customerInvoiceDocument attribute value.
*
* @param customerInvoiceDocument The customerInvoiceDocument to set.
*/
public void setCustomerInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument) {
this.customerInvoiceDocument = customerInvoiceDocument;
}
}