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 }