1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.kfs.fp.document;
20
21 import java.util.ArrayList;
22 import java.util.Iterator;
23 import java.util.List;
24
25 import org.kuali.kfs.fp.businessobject.InternalBillingItem;
26 import org.kuali.kfs.integration.cam.CapitalAssetManagementModuleService;
27 import org.kuali.kfs.sys.KFSConstants;
28 import org.kuali.kfs.sys.businessobject.AccountingLine;
29 import org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntrySourceDetail;
30 import org.kuali.kfs.sys.context.SpringContext;
31 import org.kuali.kfs.sys.document.AmountTotaling;
32 import org.kuali.kfs.sys.document.Correctable;
33 import org.kuali.kfs.sys.document.service.DebitDeterminerService;
34 import org.kuali.rice.core.api.util.type.KualiDecimal;
35 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteStatusChange;
36 import org.kuali.rice.kns.service.DataDictionaryService;
37 import org.kuali.rice.krad.document.Copyable;
38 import org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent;
39 import org.kuali.rice.krad.rules.rule.event.SaveDocumentEvent;
40
41
42
43
44
45
46
47 public class InternalBillingDocument extends CapitalAccountingLinesDocumentBase implements Copyable, Correctable, AmountTotaling {
48
49 protected List items;
50 protected Integer nextItemLineNumber;
51
52 protected transient CapitalAssetManagementModuleService capitalAssetManagementModuleService;
53
54
55
56
57 public InternalBillingDocument() {
58 super();
59 setItems(new ArrayList());
60 this.nextItemLineNumber = new Integer(1);
61 }
62
63
64
65
66
67
68
69
70
71
72
73 @Override
74 public boolean isDebit(GeneralLedgerPendingEntrySourceDetail postable) {
75 DebitDeterminerService isDebitUtils = SpringContext.getBean(DebitDeterminerService.class);
76 return isDebitUtils.isDebitConsideringSection(this, (AccountingLine) postable);
77 }
78
79
80
81
82
83
84 public void addItem(InternalBillingItem item) {
85 item.setItemSequenceId(this.nextItemLineNumber);
86 this.items.add(item);
87 this.nextItemLineNumber = new Integer(this.nextItemLineNumber.intValue() + 1);
88 }
89
90
91
92
93
94
95
96
97 public InternalBillingItem getItem(int index) {
98 while (getItems().size() <= index) {
99 getItems().add(new InternalBillingItem());
100 }
101 return (InternalBillingItem) getItems().get(index);
102 }
103
104
105
106
107 public List getItems() {
108 return items;
109 }
110
111
112
113
114
115
116 public KualiDecimal getItemTotal() {
117 KualiDecimal total = KualiDecimal.ZERO;
118 for (Iterator iterator = items.iterator(); iterator.hasNext();) {
119 total = total.add(((InternalBillingItem) iterator.next()).getTotal());
120 }
121 return total;
122 }
123
124
125
126
127
128
129 public Integer getNextItemLineNumber() {
130 return this.nextItemLineNumber;
131 }
132
133
134
135
136 public void setItems(List items) {
137 this.items = items;
138 }
139
140
141
142
143
144
145
146 public void setNextItemLineNumber(Integer nextItemLineNumber) {
147 this.nextItemLineNumber = nextItemLineNumber;
148 }
149
150
151
152
153 @Override
154 public String getSourceAccountingLinesSectionTitle() {
155 return KFSConstants.INCOME;
156 }
157
158
159
160
161 @Override
162 public String getTargetAccountingLinesSectionTitle() {
163 return KFSConstants.EXPENSE;
164 }
165
166
167
168
169 @Override
170 public void doRouteStatusChange(DocumentRouteStatusChange statusChangeEvent) {
171 super.doRouteStatusChange(statusChangeEvent);
172 this.getCapitalAssetManagementModuleService().deleteDocumentAssetLocks(this);
173 }
174
175
176
177
178
179 @Override
180 public void postProcessSave(KualiDocumentEvent event) {
181 super.postProcessSave(event);
182 if (!(event instanceof SaveDocumentEvent)) {
183 String documentTypeName = SpringContext.getBean(DataDictionaryService.class).getDocumentTypeNameByClass(this.getClass());
184 this.getCapitalAssetManagementModuleService().generateCapitalAssetLock(this, documentTypeName);
185 }
186 }
187
188
189
190
191
192 CapitalAssetManagementModuleService getCapitalAssetManagementModuleService() {
193 if (capitalAssetManagementModuleService == null) {
194 capitalAssetManagementModuleService = SpringContext.getBean(CapitalAssetManagementModuleService.class);
195 }
196 return capitalAssetManagementModuleService;
197 }
198 }