View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.module.ar.businessobject;
20  
21  import java.util.Collection;
22  import java.util.LinkedHashMap;
23  import java.util.List;
24  
25  import org.kuali.kfs.coa.businessobject.AccountingPeriod;
26  import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument;
27  import org.kuali.kfs.module.ar.document.service.SystemInformationService;
28  import org.kuali.kfs.sys.businessobject.FinancialSystemDocumentHeader;
29  import org.kuali.kfs.sys.context.SpringContext;
30  import org.kuali.kfs.sys.service.UniversityDateService;
31  import org.kuali.rice.core.api.util.type.KualiDecimal;
32  import org.kuali.rice.kew.api.exception.WorkflowException;
33  import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
34  import org.kuali.rice.krad.service.DocumentService;
35  
36  /**
37   * @author Kuali Nervous System Team (kualidev@oncourse.iu.edu)
38   */
39  public class InvoicePaidApplied extends PersistableBusinessObjectBase {
40  
41      private String documentNumber; // document the payment is being applied FROM
42      private Integer paidAppliedItemNumber;
43      private String financialDocumentReferenceInvoiceNumber; // document the payment is being applied TO
44      private Integer invoiceItemNumber;
45      private Integer universityFiscalYear;
46      private String universityFiscalPeriodCode;
47      private KualiDecimal invoiceItemAppliedAmount = KualiDecimal.ZERO;
48  
49      private CustomerInvoiceDetail invoiceDetail;
50      private AccountingPeriod universityFiscalPeriod;
51      private FinancialSystemDocumentHeader documentHeader;
52      transient private DocumentService documentService;
53      private KualiDecimal paidAppiedDistributionAmount = KualiDecimal.ZERO;
54      private Collection<NonInvoicedDistribution> nonInvoicedDistributions;
55      private Collection<NonAppliedDistribution> nonAppliedDistributions;
56      private transient CustomerInvoiceDocument customerInvoiceDocument;
57  
58      public InvoicePaidApplied() {
59          super();
60      }
61  
62      public InvoicePaidApplied(String documentNumber, String refInvoiceDocNumber, Integer invoiceSequenceNumber, KualiDecimal appliedAmount, Integer paidAppliedItemNumber, Integer universityFiscalYear, String universityFiscalPeriodCode) {
63          this.documentNumber = documentNumber;
64          this.financialDocumentReferenceInvoiceNumber = refInvoiceDocNumber;
65          this.invoiceItemNumber = invoiceSequenceNumber;
66          this.paidAppliedItemNumber = paidAppliedItemNumber;
67          this.invoiceItemAppliedAmount = appliedAmount;
68          this.universityFiscalYear = universityFiscalYear;
69          this.universityFiscalPeriodCode = universityFiscalPeriodCode;
70      }
71  
72      /**
73       * Constructs a InvoicePaidApplied object, and assumes the current Fiscal Year and FiscalPeriodCode.
74       *
75       * @param documentNumber
76       * @param refInvoiceDocNumber
77       * @param invoiceSequenceNumber
78       * @param appliedAmount
79       * @param paidAppliedItemNumber
80       */
81      public InvoicePaidApplied(String documentNumber, String refInvoiceDocNumber, Integer invoiceSequenceNumber, KualiDecimal appliedAmount, Integer paidAppliedItemNumber) {
82          this.documentNumber = documentNumber;
83          this.financialDocumentReferenceInvoiceNumber = refInvoiceDocNumber;
84          this.invoiceItemNumber = invoiceSequenceNumber;
85          this.paidAppliedItemNumber = paidAppliedItemNumber;
86          this.invoiceItemAppliedAmount = appliedAmount;
87  
88          UniversityDateService universityDateService = SpringContext.getBean(UniversityDateService.class);
89          this.universityFiscalYear = universityDateService.getCurrentFiscalYear();
90          this.universityFiscalPeriodCode = universityDateService.getCurrentUniversityDate().getAccountingPeriod().getUniversityFiscalPeriodCode();
91      }
92  
93      public DocumentService getDocumentService() {
94          if (null == documentService) {
95              documentService = SpringContext.getBean(DocumentService.class);
96          }
97          return documentService;
98      }
99  
100     public void setDocumentService(DocumentService documentService) {
101         this.documentService = documentService;
102     }
103 
104     public CustomerInvoiceDocument getCustomerInvoiceDocument() {
105         CustomerInvoiceDocument customerInvoiceDocument = null;
106         try {
107             customerInvoiceDocument = (CustomerInvoiceDocument) getDocumentService().getByDocumentHeaderId(getFinancialDocumentReferenceInvoiceNumber());
108         }
109         catch (WorkflowException e) {
110             throw new RuntimeException("WorkflowException thrown when trying to retrieve Invoice document [" + getFinancialDocumentReferenceInvoiceNumber() + "]", e);
111         }
112         return customerInvoiceDocument;
113     }
114 
115     public SystemInformation getSystemInformation() {
116         String processingOrgCode = getCustomerInvoiceDocument().getAccountsReceivableDocumentHeader().getProcessingOrganizationCode();
117         String processingChartCode = getCustomerInvoiceDocument().getAccountsReceivableDocumentHeader().getProcessingChartOfAccountCode();
118 
119         SystemInformationService sysInfoService = SpringContext.getBean(SystemInformationService.class);
120         Integer currentFiscalYear = SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear();
121         SystemInformation systemInformation = sysInfoService.getByProcessingChartOrgAndFiscalYear(processingChartCode, processingOrgCode, currentFiscalYear);
122 
123         if (systemInformation == null) {
124             throw new RuntimeException("The InvoicePaidApplied doesnt have an associated SystemInformation.  This should never happen.");
125         }
126         return systemInformation;
127     }
128 
129     /**
130      * Gets the documentNumber attribute.
131      *
132      * @return Returns the documentNumber
133      */
134     public String getDocumentNumber() {
135         return documentNumber;
136     }
137 
138     /**
139      * Sets the documentNumber attribute.
140      *
141      * @param documentNumber The documentNumber to set.
142      */
143     public void setDocumentNumber(String documentNumber) {
144         this.documentNumber = documentNumber;
145     }
146 
147 
148     /**
149      * Gets the paidAppliedItemNumber attribute.
150      *
151      * @return Returns the paidAppliedItemNumber
152      */
153     public Integer getPaidAppliedItemNumber() {
154         return paidAppliedItemNumber;
155     }
156 
157     /**
158      * Sets the paidAppliedItemNumber attribute.
159      *
160      * @param paidAppliedItemNumber The paidAppliedItemNumber to set.
161      */
162     public void setPaidAppliedItemNumber(Integer paidAppliedItemNumber) {
163         this.paidAppliedItemNumber = paidAppliedItemNumber;
164     }
165 
166 
167     /**
168      * Gets the financialDocumentReferenceInvoiceNumber attribute.
169      *
170      * @return Returns the financialDocumentReferenceInvoiceNumber
171      */
172     public String getFinancialDocumentReferenceInvoiceNumber() {
173         return financialDocumentReferenceInvoiceNumber;
174     }
175 
176     /**
177      * Sets the financialDocumentReferenceInvoiceNumber attribute.
178      *
179      * @param financialDocumentReferenceInvoiceNumber The financialDocumentReferenceInvoiceNumber to set.
180      */
181     public void setFinancialDocumentReferenceInvoiceNumber(String financialDocumentReferenceInvoiceNumber) {
182         this.financialDocumentReferenceInvoiceNumber = financialDocumentReferenceInvoiceNumber;
183     }
184 
185     /**
186      * Gets the invoiceItemNumber attribute.
187      *
188      * @return Returns the invoiceItemNumber
189      */
190     public Integer getInvoiceItemNumber() {
191         return invoiceItemNumber;
192     }
193 
194     /**
195      * Sets the invoiceItemNumber attribute.
196      *
197      * @param invoiceItemNumber The invoiceItemNumber to set.
198      */
199     public void setInvoiceItemNumber(Integer invoiceItemNumber) {
200         this.invoiceItemNumber = invoiceItemNumber;
201     }
202 
203     /**
204      * Gets the universityFiscalYear attribute.
205      *
206      * @return Returns the universityFiscalYear
207      */
208     public Integer getUniversityFiscalYear() {
209         return universityFiscalYear;
210     }
211 
212     /**
213      * Sets the universityFiscalYear attribute.
214      *
215      * @param universityFiscalYear The universityFiscalYear to set.
216      */
217     public void setUniversityFiscalYear(Integer universityFiscalYear) {
218         this.universityFiscalYear = universityFiscalYear;
219     }
220 
221     /**
222      * Gets the universityFiscalPeriodCode attribute.
223      *
224      * @return Returns the universityFiscalPeriodCode
225      */
226     public String getUniversityFiscalPeriodCode() {
227         return universityFiscalPeriodCode;
228     }
229 
230     /**
231      * Sets the universityFiscalPeriodCode attribute.
232      *
233      * @param universityFiscalPeriodCode The universityFiscalPeriodCode to set.
234      */
235     public void setUniversityFiscalPeriodCode(String universityFiscalPeriodCode) {
236         this.universityFiscalPeriodCode = universityFiscalPeriodCode;
237     }
238 
239     public FinancialSystemDocumentHeader getDocumentHeader() {
240         return documentHeader;
241     }
242 
243     public void setDocumentHeader(FinancialSystemDocumentHeader documentHeader) {
244         this.documentHeader = documentHeader;
245     }
246 
247     /**
248      * Gets the invoiceItemAppliedAmount attribute.
249      *
250      * @return Returns the invoiceItemAppliedAmount
251      */
252     public KualiDecimal getInvoiceItemAppliedAmount() {
253         return invoiceItemAppliedAmount;
254     }
255 
256     /**
257      * Sets the invoiceItemAppliedAmount attribute.
258      *
259      * @param invoiceItemAppliedAmount The invoiceItemAppliedAmount to set.
260      */
261     public void setInvoiceItemAppliedAmount(KualiDecimal invoiceItemAppliedAmount) {
262         this.invoiceItemAppliedAmount = invoiceItemAppliedAmount;
263     }
264 
265     /**
266      * Gets the invoiceItem attribute.
267      *
268      * @return Returns the invoiceItem
269      */
270     public CustomerInvoiceDetail getInvoiceDetail() {
271         return invoiceDetail;
272     }
273 
274     /**
275      * Gets the universityFiscalPeriod attribute.
276      *
277      * @return Returns the universityFiscalPeriod
278      */
279     public AccountingPeriod getUniversityFiscalPeriod() {
280         return universityFiscalPeriod;
281     }
282 
283     /**
284      * Sets the universityFiscalPeriod attribute.
285      *
286      * @param universityFiscalPeriod The universityFiscalPeriod to set.
287      * @deprecated
288      */
289     @Deprecated
290     public void setUniversityFiscalPeriod(AccountingPeriod universityFiscalPeriod) {
291         this.universityFiscalPeriod = universityFiscalPeriod;
292     }
293 
294     /**
295      * @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper()
296      */
297     @SuppressWarnings("unchecked")
298     protected LinkedHashMap toStringMapper_RICE20_REFACTORME() {
299         LinkedHashMap m = new LinkedHashMap();
300         m.put("documentNumber", this.documentNumber);
301         if (this.paidAppliedItemNumber != null) {
302             m.put("paidAppliedItemNumber", this.paidAppliedItemNumber.toString());
303         }
304         return m;
305     }
306 
307     /**
308      * Get the paidAppiedDistributionAmount attribute.
309      *
310      * @return Returns the paidAppiedDistributionAmount
311      */
312     public KualiDecimal getPaidAppiedDistributionAmount() {
313         return paidAppiedDistributionAmount;
314     }
315 
316     /**
317      * Set the paidAppiedDistributionAmount attribute.
318      *
319      * @param paidAppiedDistributionAmount The paidAppiedDistributionAmount to set.
320      */
321     public void setPaidAppiedDistributionAmount(KualiDecimal paidAppiedDistributionAmount) {
322         this.paidAppiedDistributionAmount = paidAppiedDistributionAmount;
323     }
324 
325     /**
326      * Gets the nonInvoicedDistributions attribute.
327      *
328      * @return Returns the nonInvoicedDistributions.
329      */
330     public Collection<NonInvoicedDistribution> getNonInvoicedDistributions() {
331         return nonInvoicedDistributions;
332     }
333 
334     /**
335      * Sets the nonInvoicedDistributions attribute value.
336      *
337      * @param nonInvoicedDistributions The nonInvoicedDistributions to set.
338      */
339     public void setNonInvoicedDistributions(Collection<NonInvoicedDistribution> nonInvoicedDistributions) {
340         this.nonInvoicedDistributions = nonInvoicedDistributions;
341     }
342 
343     /**
344      * Gets the nonAppliedDistributions attribute.
345      *
346      * @return Returns the nonAppliedDistributions.
347      */
348     public Collection<NonAppliedDistribution> getNonAppliedDistributions() {
349         return nonAppliedDistributions;
350     }
351 
352     /**
353      * Sets the nonAppliedDistributions attribute value.
354      *
355      * @param nonAppliedDistributions The nonAppliedDistributions to set.
356      */
357     public void setNonAppliedDistributions(List<NonAppliedDistribution> nonAppliedDistributions) {
358         this.nonAppliedDistributions = nonAppliedDistributions;
359     }
360 
361     /**
362      * Sets the customerInvoiceDocument attribute value.
363      *
364      * @param customerInvoiceDocument The customerInvoiceDocument to set.
365      */
366     public void setCustomerInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument) {
367         this.customerInvoiceDocument = customerInvoiceDocument;
368     }
369 }