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    
017    package org.kuali.kfs.gl.businessobject;
018    
019    import java.sql.Date;
020    import java.util.HashMap;
021    import java.util.LinkedHashMap;
022    import java.util.Map;
023    
024    import org.kuali.kfs.coa.businessobject.Account;
025    import org.kuali.kfs.coa.businessobject.AccountingPeriod;
026    import org.kuali.kfs.coa.businessobject.BalanceType;
027    import org.kuali.kfs.coa.businessobject.Chart;
028    import org.kuali.kfs.coa.businessobject.ObjectCode;
029    import org.kuali.kfs.coa.businessobject.ObjectType;
030    import org.kuali.kfs.coa.businessobject.ProjectCode;
031    import org.kuali.kfs.coa.businessobject.SubAccount;
032    import org.kuali.kfs.coa.businessobject.SubObjectCode;
033    import org.kuali.kfs.sys.KFSPropertyConstants;
034    import org.kuali.kfs.sys.businessobject.SystemOptions;
035    import org.kuali.kfs.sys.businessobject.UniversityDate;
036    import org.kuali.kfs.sys.context.SpringContext;
037    import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO;
038    import org.kuali.rice.kew.service.impl.KEWModuleService;
039    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
040    import org.kuali.rice.kns.util.KualiDecimal;
041    
042    /**
043     * This class represents a reversal of a transaction
044     */
045    public class Reversal extends PersistableBusinessObjectBase implements Transaction {
046    
047        private Date financialDocumentReversalDate;
048        private Integer universityFiscalYear;
049        private String chartOfAccountsCode;
050        private String accountNumber;
051        private String subAccountNumber;
052        private String financialObjectCode;
053        private String financialSubObjectCode;
054        private String financialBalanceTypeCode;
055        private String financialObjectTypeCode;
056        private String universityFiscalPeriodCode;
057        private String financialDocumentTypeCode;
058        private String financialSystemOriginationCode;
059        private String documentNumber;
060        private Integer transactionLedgerEntrySequenceNumber;
061        private String transactionLedgerEntryDescription;
062        private KualiDecimal transactionLedgerEntryAmount;
063        private String transactionDebitCreditCode;
064        private Date transactionDate;
065        private String organizationDocumentNumber;
066        private String projectCode;
067        private String organizationReferenceId;
068        private String referenceFinancialDocumentTypeCode;
069        private String referenceFinancialSystemOriginationCode;
070        private String referenceFinancialDocumentNumber;
071        private String transactionEncumbranceUpdateCode;
072        private Date transactionPostingDate;
073    
074        // bo references
075        private Account account;
076        private SubAccount subAccount;
077        private BalanceType balanceType;
078        private Chart chart;
079        private ObjectCode financialObject;
080        private SubObjectCode financialSubObject;
081        private ObjectType objectType;
082        private ProjectCode project;
083        private DocumentTypeEBO financialSystemDocumentTypeCode;
084        private UniversityDate universityDate;
085        private SystemOptions option;
086        private AccountingPeriod accountingPeriod;
087        private UniversityDate reversalDate;
088    
089        /**
090         * Default constructor.
091         */
092        public Reversal() {
093    
094        }
095    
096        public Reversal(Transaction t) {
097            setUniversityFiscalYear(t.getUniversityFiscalYear());
098            setChartOfAccountsCode(t.getChartOfAccountsCode());
099            setAccountNumber(t.getAccountNumber());
100            setSubAccountNumber(t.getSubAccountNumber());
101            setFinancialObjectCode(t.getFinancialObjectCode());
102            setFinancialSubObjectCode(t.getFinancialSubObjectCode());
103            setFinancialBalanceTypeCode(t.getFinancialBalanceTypeCode());
104            setFinancialObjectTypeCode(t.getFinancialObjectTypeCode());
105            setUniversityFiscalPeriodCode(t.getUniversityFiscalPeriodCode());
106            setFinancialDocumentTypeCode(t.getFinancialDocumentTypeCode());
107            setFinancialSystemOriginationCode(t.getFinancialSystemOriginationCode());
108            setDocumentNumber(t.getDocumentNumber());
109            setTransactionLedgerEntrySequenceNumber(t.getTransactionLedgerEntrySequenceNumber());
110            setTransactionLedgerEntryDescription(t.getTransactionLedgerEntryDescription());
111            setTransactionLedgerEntryAmount(t.getTransactionLedgerEntryAmount());
112            setTransactionDebitCreditCode(t.getTransactionDebitCreditCode());
113            setTransactionDate(t.getTransactionDate());
114            setOrganizationDocumentNumber(t.getOrganizationDocumentNumber());
115            setProjectCode(t.getProjectCode());
116            setOrganizationReferenceId(t.getOrganizationReferenceId());
117            setReferenceFinancialDocumentTypeCode(t.getReferenceFinancialDocumentTypeCode());
118            setReferenceFinancialSystemOriginationCode(t.getReferenceFinancialSystemOriginationCode());
119            setReferenceFinancialDocumentNumber(t.getReferenceFinancialDocumentNumber());
120            setFinancialDocumentReversalDate(t.getFinancialDocumentReversalDate());
121            setTransactionEncumbranceUpdateCode(t.getTransactionEncumbranceUpdateCode());
122            if (transactionPostingDate != null) {
123                setTransactionPostingDate(new Date(transactionPostingDate.getTime()));
124            }
125        }
126    
127        /**
128         * Gets the financialDocumentReversalDate attribute.
129         * 
130         * @return Returns the financialDocumentReversalDate
131         */
132        public Date getFinancialDocumentReversalDate() {
133            return financialDocumentReversalDate;
134        }
135    
136        /**
137         * Sets the financialDocumentReversalDate attribute.
138         * 
139         * @param financialDocumentReversalDate The financialDocumentReversalDate to set.
140         */
141        public void setFinancialDocumentReversalDate(Date financialDocumentReversalDate) {
142            this.financialDocumentReversalDate = financialDocumentReversalDate;
143        }
144    
145        /**
146         * Gets the universityFiscalYear attribute.
147         * 
148         * @return Returns the universityFiscalYear
149         */
150        public Integer getUniversityFiscalYear() {
151            return universityFiscalYear;
152        }
153    
154        /**
155         * Sets the universityFiscalYear attribute.
156         * 
157         * @param universityFiscalYear The universityFiscalYear to set.
158         */
159        public void setUniversityFiscalYear(Integer universityFiscalYear) {
160            this.universityFiscalYear = universityFiscalYear;
161        }
162    
163        /**
164         * Gets the chartOfAccountsCode attribute.
165         * 
166         * @return Returns the chartOfAccountsCode
167         */
168        public String getChartOfAccountsCode() {
169            return chartOfAccountsCode;
170        }
171    
172        /**
173         * Sets the chartOfAccountsCode attribute.
174         * 
175         * @param chartOfAccountsCode The chartOfAccountsCode to set.
176         */
177        public void setChartOfAccountsCode(String chartOfAccountsCode) {
178            this.chartOfAccountsCode = chartOfAccountsCode;
179        }
180    
181        /**
182         * Gets the accountNumber attribute.
183         * 
184         * @return Returns the accountNumber
185         */
186        public String getAccountNumber() {
187            return accountNumber;
188        }
189    
190        /**
191         * Sets the accountNumber attribute.
192         * 
193         * @param accountNumber The accountNumber to set.
194         */
195        public void setAccountNumber(String accountNumber) {
196            this.accountNumber = accountNumber;
197        }
198    
199        /**
200         * Gets the subAccountNumber attribute.
201         * 
202         * @return Returns the subAccountNumber
203         */
204        public String getSubAccountNumber() {
205            return subAccountNumber;
206        }
207    
208        /**
209         * Sets the subAccountNumber attribute.
210         * 
211         * @param subAccountNumber The subAccountNumber to set.
212         */
213        public void setSubAccountNumber(String subAccountNumber) {
214            this.subAccountNumber = subAccountNumber;
215        }
216    
217        /**
218         * Gets the financialObjectCode attribute.
219         * 
220         * @return Returns the financialObjectCode
221         */
222        public String getFinancialObjectCode() {
223            return financialObjectCode;
224        }
225    
226        /**
227         * Sets the financialObjectCode attribute.
228         * 
229         * @param financialObjectCode The financialObjectCode to set.
230         */
231        public void setFinancialObjectCode(String financialObjectCode) {
232            this.financialObjectCode = financialObjectCode;
233        }
234    
235        /**
236         * Gets the financialSubObjectCode attribute.
237         * 
238         * @return Returns the financialSubObjectCode
239         */
240        public String getFinancialSubObjectCode() {
241            return financialSubObjectCode;
242        }
243    
244        /**
245         * Sets the financialSubObjectCode attribute.
246         * 
247         * @param financialSubObjectCode The financialSubObjectCode to set.
248         */
249        public void setFinancialSubObjectCode(String financialSubObjectCode) {
250            this.financialSubObjectCode = financialSubObjectCode;
251        }
252    
253        /**
254         * Gets the financialBalanceTypeCode attribute.
255         * 
256         * @return Returns the financialBalanceTypeCode
257         */
258        public String getFinancialBalanceTypeCode() {
259            return financialBalanceTypeCode;
260        }
261    
262        /**
263         * Sets the financialBalanceTypeCode attribute.
264         * 
265         * @param financialBalanceTypeCode The financialBalanceTypeCode to set.
266         */
267        public void setFinancialBalanceTypeCode(String financialBalanceTypeCode) {
268            this.financialBalanceTypeCode = financialBalanceTypeCode;
269        }
270    
271        /**
272         * Gets the financialObjectTypeCode attribute.
273         * 
274         * @return Returns the financialObjectTypeCode
275         */
276        public String getFinancialObjectTypeCode() {
277            return financialObjectTypeCode;
278        }
279    
280        /**
281         * Sets the financialObjectTypeCode attribute.
282         * 
283         * @param financialObjectTypeCode The financialObjectTypeCode to set.
284         */
285        public void setFinancialObjectTypeCode(String financialObjectTypeCode) {
286            this.financialObjectTypeCode = financialObjectTypeCode;
287        }
288    
289        /**
290         * Gets the universityFiscalPeriodCode attribute.
291         * 
292         * @return Returns the universityFiscalPeriodCode
293         */
294        public String getUniversityFiscalPeriodCode() {
295            return universityFiscalPeriodCode;
296        }
297    
298        /**
299         * Sets the universityFiscalPeriodCode attribute.
300         * 
301         * @param universityFiscalPeriodCode The universityFiscalPeriodCode to set.
302         */
303        public void setUniversityFiscalPeriodCode(String universityFiscalPeriodCode) {
304            this.universityFiscalPeriodCode = universityFiscalPeriodCode;
305        }
306    
307        /**
308         * Gets the financialDocumentTypeCode attribute.
309         * 
310         * @return Returns the financialDocumentTypeCode
311         */
312        public String getFinancialDocumentTypeCode() {
313            return financialDocumentTypeCode;
314        }
315    
316        /**
317         * Sets the financialDocumentTypeCode attribute.
318         * 
319         * @param financialDocumentTypeCode The financialDocumentTypeCode to set.
320         */
321        public void setFinancialDocumentTypeCode(String financialDocumentTypeCode) {
322            this.financialDocumentTypeCode = financialDocumentTypeCode;
323        }
324    
325        /**
326         * Gets the financialSystemOriginationCode attribute.
327         * 
328         * @return Returns the financialSystemOriginationCode
329         */
330        public String getFinancialSystemOriginationCode() {
331            return financialSystemOriginationCode;
332        }
333    
334        /**
335         * Sets the financialSystemOriginationCode attribute.
336         * 
337         * @param financialSystemOriginationCode The financialSystemOriginationCode to set.
338         */
339        public void setFinancialSystemOriginationCode(String financialSystemOriginationCode) {
340            this.financialSystemOriginationCode = financialSystemOriginationCode;
341        }
342    
343        /**
344         * Gets the documentNumber attribute.
345         * 
346         * @return Returns the documentNumber
347         */
348        public String getDocumentNumber() {
349            return documentNumber;
350        }
351    
352        /**
353         * Sets the documentNumber attribute.
354         * 
355         * @param documentNumber The documentNumber to set.
356         */
357        public void setDocumentNumber(String documentNumber) {
358            this.documentNumber = documentNumber;
359        }
360    
361        /**
362         * Gets the transactionLedgerEntrySequenceNumber attribute.
363         * 
364         * @return Returns the transactionLedgerEntrySequenceNumber
365         */
366        public Integer getTransactionLedgerEntrySequenceNumber() {
367            return transactionLedgerEntrySequenceNumber;
368        }
369    
370        /**
371         * Sets the transactionLedgerEntrySequenceNumber attribute.
372         * 
373         * @param transactionLedgerEntrySequenceNumber The transactionLedgerEntrySequenceNumber to set.
374         */
375        public void setTransactionLedgerEntrySequenceNumber(Integer transactionLedgerEntrySequenceNumber) {
376            this.transactionLedgerEntrySequenceNumber = transactionLedgerEntrySequenceNumber;
377        }
378    
379        /**
380         * Gets the transactionLedgerEntryDescription attribute.
381         * 
382         * @return Returns the transactionLedgerEntryDescription
383         */
384        public String getTransactionLedgerEntryDescription() {
385            return transactionLedgerEntryDescription;
386        }
387    
388        /**
389         * Sets the transactionLedgerEntryDescription attribute.
390         * 
391         * @param transactionLedgerEntryDescription The transactionLedgerEntryDescription to set.
392         */
393        public void setTransactionLedgerEntryDescription(String transactionLedgerEntryDescription) {
394            this.transactionLedgerEntryDescription = transactionLedgerEntryDescription;
395        }
396    
397        /**
398         * Gets the transactionLedgerEntryAmount attribute.
399         * 
400         * @return Returns the transactionLedgerEntryAmount
401         */
402        public KualiDecimal getTransactionLedgerEntryAmount() {
403            return transactionLedgerEntryAmount;
404        }
405    
406        /**
407         * Sets the transactionLedgerEntryAmount attribute.
408         * 
409         * @param transactionLedgerEntryAmount The transactionLedgerEntryAmount to set.
410         */
411        public void setTransactionLedgerEntryAmount(KualiDecimal transactionLedgerEntryAmount) {
412            this.transactionLedgerEntryAmount = transactionLedgerEntryAmount;
413        }
414    
415        /**
416         * Gets the transactionDebitCreditCode attribute.
417         * 
418         * @return Returns the transactionDebitCreditCode
419         */
420        public String getTransactionDebitCreditCode() {
421            return transactionDebitCreditCode;
422        }
423    
424        /**
425         * Sets the transactionDebitCreditCode attribute.
426         * 
427         * @param transactionDebitCreditCode The transactionDebitCreditCode to set.
428         */
429        public void setTransactionDebitCreditCode(String transactionDebitCreditCode) {
430            this.transactionDebitCreditCode = transactionDebitCreditCode;
431        }
432    
433        /**
434         * Gets the transactionDate attribute.
435         * 
436         * @return Returns the transactionDate
437         */
438        public Date getTransactionDate() {
439            return transactionDate;
440        }
441    
442        /**
443         * Sets the transactionDate attribute.
444         * 
445         * @param transactionDate The transactionDate to set.
446         */
447        public void setTransactionDate(Date transactionDate) {
448            this.transactionDate = transactionDate;
449        }
450    
451        /**
452         * Gets the organizationDocumentNumber attribute.
453         * 
454         * @return Returns the organizationDocumentNumber
455         */
456        public String getOrganizationDocumentNumber() {
457            return organizationDocumentNumber;
458        }
459    
460        /**
461         * Sets the organizationDocumentNumber attribute.
462         * 
463         * @param organizationDocumentNumber The organizationDocumentNumber to set.
464         */
465        public void setOrganizationDocumentNumber(String organizationDocumentNumber) {
466            this.organizationDocumentNumber = organizationDocumentNumber;
467        }
468    
469        /**
470         * Gets the projectCode attribute.
471         * 
472         * @return Returns the projectCode
473         */
474        public String getProjectCode() {
475            return projectCode;
476        }
477    
478        /**
479         * Sets the projectCode attribute.
480         * 
481         * @param projectCode The projectCode to set.
482         */
483        public void setProjectCode(String projectCode) {
484            this.projectCode = projectCode;
485        }
486    
487        /**
488         * Gets the organizationReferenceId attribute.
489         * 
490         * @return Returns the organizationReferenceId
491         */
492        public String getOrganizationReferenceId() {
493            return organizationReferenceId;
494        }
495    
496        /**
497         * Sets the organizationReferenceId attribute.
498         * 
499         * @param organizationReferenceId The organizationReferenceId to set.
500         */
501        public void setOrganizationReferenceId(String organizationReferenceId) {
502            this.organizationReferenceId = organizationReferenceId;
503        }
504    
505        /**
506         * Gets the referenceFinancialDocumentTypeCode attribute.
507         * 
508         * @return Returns the referenceFinancialDocumentTypeCode
509         */
510        public String getReferenceFinancialDocumentTypeCode() {
511            return referenceFinancialDocumentTypeCode;
512        }
513    
514        /**
515         * Sets the referenceFinancialDocumentTypeCode attribute.
516         * 
517         * @param referenceFinancialDocumentTypeCode The referenceFinancialDocumentTypeCode to set.
518         */
519        public void setReferenceFinancialDocumentTypeCode(String referenceFinancialDocumentTypeCode) {
520            this.referenceFinancialDocumentTypeCode = referenceFinancialDocumentTypeCode;
521        }
522    
523        /**
524         * Gets the referenceFinancialSystemOriginationCode attribute.
525         * 
526         * @return Returns the referenceFinancialSystemOriginationCode
527         */
528        public String getReferenceFinancialSystemOriginationCode() {
529            return referenceFinancialSystemOriginationCode;
530        }
531    
532        /**
533         * Sets the referenceFinancialSystemOriginationCode attribute.
534         * 
535         * @param referenceFinancialSystemOriginationCode The referenceFinancialSystemOriginationCode to set.
536         */
537        public void setReferenceFinancialSystemOriginationCode(String referenceFinancialSystemOriginationCode) {
538            this.referenceFinancialSystemOriginationCode = referenceFinancialSystemOriginationCode;
539        }
540    
541        /**
542         * Gets the referenceFinancialDocumentNumber attribute.
543         * 
544         * @return Returns the referenceFinancialDocumentNumber
545         */
546        public String getReferenceFinancialDocumentNumber() {
547            return referenceFinancialDocumentNumber;
548        }
549    
550        /**
551         * Sets the referenceFinancialDocumentNumber attribute.
552         * 
553         * @param referenceFinancialDocumentNumber The referenceFinancialDocumentNumber to set.
554         */
555        public void setReferenceFinancialDocumentNumber(String referenceFinancialDocumentNumber) {
556            this.referenceFinancialDocumentNumber = referenceFinancialDocumentNumber;
557        }
558    
559        /**
560         * Gets the transactionEncumbranceUpdateCode attribute.
561         * 
562         * @return Returns the transactionEncumbranceUpdateCode
563         */
564        public String getTransactionEncumbranceUpdateCode() {
565            return transactionEncumbranceUpdateCode;
566        }
567    
568        /**
569         * Sets the transactionEncumbranceUpdateCode attribute.
570         * 
571         * @param transactionEncumbranceUpdateCode The transactionEncumbranceUpdateCode to set.
572         */
573        public void setTransactionEncumbranceUpdateCode(String transactionEncumbranceUpdateCode) {
574            this.transactionEncumbranceUpdateCode = transactionEncumbranceUpdateCode;
575        }
576    
577        /**
578         * Gets the transactionPostingDate attribute.
579         * 
580         * @return Returns the transactionPostingDate
581         */
582        public Date getTransactionPostingDate() {
583            return transactionPostingDate;
584        }
585    
586        /**
587         * Sets the transactionPostingDate attribute.
588         * 
589         * @param transactionPostingDate The transactionPostingDate to set.
590         */
591        public void setTransactionPostingDate(Date transactionPostingDate) {
592            this.transactionPostingDate = transactionPostingDate;
593        }
594    
595        public Account getAccount() {
596            return account;
597        }
598    
599        public void setAccount(Account account) {
600            this.account = account;
601        }
602    
603        public AccountingPeriod getAccountingPeriod() {
604            return accountingPeriod;
605        }
606    
607        public void setAccountingPeriod(AccountingPeriod accountingPeriod) {
608            this.accountingPeriod = accountingPeriod;
609        }
610    
611        public BalanceType getBalanceType() {
612            return balanceType;
613        }
614    
615        public void setBalanceType(BalanceType balanceType) {
616            this.balanceType = balanceType;
617        }
618    
619        public Chart getChart() {
620            return chart;
621        }
622    
623        public void setChart(Chart chart) {
624            this.chart = chart;
625        }
626        
627        public DocumentTypeEBO getFinancialSystemDocumentTypeCode() {
628            if (financialSystemDocumentTypeCode == null || !financialSystemDocumentTypeCode.getName().equals(financialDocumentTypeCode)) {
629                Map<String, Object> docTypeKeys = new HashMap<String, Object>();
630                docTypeKeys.put("name", financialSystemDocumentTypeCode);
631                financialSystemDocumentTypeCode = SpringContext.getBean(KEWModuleService.class).getExternalizableBusinessObject(DocumentTypeEBO.class, docTypeKeys);
632            }
633            return financialSystemDocumentTypeCode;
634        }
635    
636        public ObjectCode getFinancialObject() {
637            return financialObject;
638        }
639    
640        public void setFinancialObject(ObjectCode financialObject) {
641            this.financialObject = financialObject;
642        }
643    
644        public SubObjectCode getFinancialSubObject() {
645            return financialSubObject;
646        }
647    
648        public void setFinancialSubObject(SubObjectCode financialSubObject) {
649            this.financialSubObject = financialSubObject;
650        }
651    
652        public ObjectType getObjectType() {
653            return objectType;
654        }
655    
656        public void setObjectType(ObjectType objectType) {
657            this.objectType = objectType;
658        }
659    
660        public SystemOptions getOption() {
661            return option;
662        }
663    
664        public void setOption(SystemOptions option) {
665            this.option = option;
666        }
667    
668        public ProjectCode getProject() {
669            return project;
670        }
671    
672        public void setProject(ProjectCode project) {
673            this.project = project;
674        }
675    
676        public UniversityDate getReversalDate() {
677            return reversalDate;
678        }
679    
680        public void setReversalDate(UniversityDate reversalDate) {
681            this.reversalDate = reversalDate;
682        }
683    
684        public SubAccount getSubAccount() {
685            return subAccount;
686        }
687    
688        public void setSubAccount(SubAccount subAccount) {
689            this.subAccount = subAccount;
690        }
691    
692        public UniversityDate getUniversityDate() {
693            return universityDate;
694        }
695    
696        public void setUniversityDate(UniversityDate universityDate) {
697            this.universityDate = universityDate;
698        }
699    
700        protected LinkedHashMap toStringMapper() {
701            LinkedHashMap map = new LinkedHashMap();
702            map.put("universityFiscalYear", getUniversityFiscalYear());
703            map.put("chartOfAccountsCode", getChartOfAccountsCode());
704            map.put("accountNumber", getAccountNumber());
705            map.put("subAccountNumber", getSubAccountNumber());
706            map.put("financialObjectCode", getFinancialObjectCode());
707            map.put("financialSubObjectCode", getFinancialSubObjectCode());
708            map.put("financialBalanceTypeCode", getFinancialBalanceTypeCode());
709            map.put("financialObjectTypeCode", getFinancialObjectTypeCode());
710            map.put("universityFiscalPeriodCode", getUniversityFiscalPeriodCode());
711            map.put("financialDocumentTypeCode", getFinancialDocumentTypeCode());
712            map.put("financialSystemOriginationCode", getFinancialSystemOriginationCode());
713            map.put(KFSPropertyConstants.DOCUMENT_NUMBER, getDocumentNumber());
714            map.put("transactionLedgerEntrySequenceNumber", getTransactionLedgerEntrySequenceNumber());
715            return map;
716        }
717    }