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  
20  package org.kuali.kfs.coa.businessobject;
21  
22  import java.util.ArrayList;
23  import java.util.Collection;
24  import java.util.HashMap;
25  import java.util.LinkedHashMap;
26  import java.util.List;
27  import java.util.Map;
28  
29  import org.kuali.kfs.sys.KFSPropertyConstants;
30  import org.kuali.kfs.sys.businessobject.SystemOptions;
31  import org.kuali.kfs.sys.context.SpringContext;
32  import org.kuali.rice.core.api.mo.common.active.MutableInactivatable;
33  import org.kuali.rice.krad.bo.DocumentHeader;
34  import org.kuali.rice.krad.bo.GlobalBusinessObject;
35  import org.kuali.rice.krad.bo.GlobalBusinessObjectDetail;
36  import org.kuali.rice.krad.bo.PersistableBusinessObject;
37  import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
38  import org.kuali.rice.krad.service.BusinessObjectService;
39  
40  /**
41   * 
42   */
43  public class SubObjectCodeGlobal extends PersistableBusinessObjectBase implements GlobalBusinessObject, MutableInactivatable {
44  
45      private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(SubObjectCodeGlobal.class);
46  
47      protected String documentNumber;
48      protected Integer universityFiscalYear;
49      protected String chartOfAccountsCode;
50      protected String financialSubObjectCode;
51      protected String financialSubObjectCodeName;
52      protected String financialSubObjectCodeShortName;
53      protected boolean active;
54  
55      protected DocumentHeader financialDocument;
56      protected SystemOptions universityFiscal;
57      protected Chart chartOfAccounts;
58  
59      protected List<SubObjectCodeGlobalDetail> subObjCdGlobalDetails;
60      protected List<AccountGlobalDetail> accountGlobalDetails;
61  
62      /**
63       * Default constructor.
64       */
65      public SubObjectCodeGlobal() {
66  
67  
68          subObjCdGlobalDetails = new ArrayList<SubObjectCodeGlobalDetail>();
69          accountGlobalDetails = new ArrayList<AccountGlobalDetail>();
70  
71      }
72  
73      /**
74       * Gets the documentNumber attribute.
75       * 
76       * @return Returns the documentNumber
77       */
78      public String getDocumentNumber() {
79          return documentNumber;
80      }
81  
82      /**
83       * Sets the documentNumber attribute.
84       * 
85       * @param documentNumber The documentNumber to set.
86       */
87      public void setDocumentNumber(String documentNumber) {
88          this.documentNumber = documentNumber;
89      }
90  
91  
92      /**
93       * Gets the universityFiscalYear attribute.
94       * 
95       * @return Returns the universityFiscalYear
96       */
97      public Integer getUniversityFiscalYear() {
98          return universityFiscalYear;
99      }
100 
101     /**
102      * Sets the universityFiscalYear attribute.
103      * 
104      * @param universityFiscalYear The universityFiscalYear to set.
105      */
106     public void setUniversityFiscalYear(Integer universityFiscalYear) {
107         this.universityFiscalYear = universityFiscalYear;
108     }
109 
110 
111     /**
112      * Gets the chartOfAccountsCode attribute.
113      * 
114      * @return Returns the chartOfAccountsCode
115      */
116     public String getChartOfAccountsCode() {
117         return chartOfAccountsCode;
118     }
119 
120     /**
121      * Sets the chartOfAccountsCode attribute.
122      * 
123      * @param chartOfAccountsCode The chartOfAccountsCode to set.
124      */
125     public void setChartOfAccountsCode(String chartOfAccountsCode) {
126         this.chartOfAccountsCode = chartOfAccountsCode;
127     }
128 
129 
130     /**
131      * Gets the financialSubObjectCode attribute.
132      * 
133      * @return Returns the financialSubObjectCode
134      */
135     public String getFinancialSubObjectCode() {
136         return financialSubObjectCode;
137     }
138 
139     /**
140      * Sets the financialSubObjectCode attribute.
141      * 
142      * @param financialSubObjectCode The financialSubObjectCode to set.
143      */
144     public void setFinancialSubObjectCode(String financialSubObjectCode) {
145         this.financialSubObjectCode = financialSubObjectCode;
146     }
147 
148 
149     /**
150      * Gets the financialSubObjectCodeName attribute.
151      * 
152      * @return Returns the financialSubObjectCodeName
153      */
154     public String getFinancialSubObjectCodeName() {
155         return financialSubObjectCodeName;
156     }
157 
158     /**
159      * Sets the financialSubObjectCodeName attribute.
160      * 
161      * @param financialSubObjectCodeName The financialSubObjectCodeName to set.
162      */
163     public void setFinancialSubObjectCodeName(String financialSubObjectCodeName) {
164         this.financialSubObjectCodeName = financialSubObjectCodeName;
165     }
166 
167 
168     /**
169      * Gets the financialSubObjectCodeShortName attribute.
170      * 
171      * @return Returns the financialSubObjectCodeShortName
172      */
173     public String getFinancialSubObjectCodeShortName() {
174         return financialSubObjectCodeShortName;
175     }
176 
177     /**
178      * Sets the financialSubObjectCodeShortName attribute.
179      * 
180      * @param financialSubObjectCodeShortName The financialSubObjectCodeShortName to set.
181      */
182     public void setFinancialSubObjectCodeShortName(String financialSubObjectCdshortNm) {
183         this.financialSubObjectCodeShortName = financialSubObjectCdshortNm;
184     }
185 
186 
187     /**
188      * Gets the active attribute.
189      * 
190      * @return Returns the active
191      */
192     public boolean isActive() {
193         return active;
194     }
195 
196 
197     /**
198      * Sets the active attribute.
199      * 
200      * @param active The active to set.
201      */
202     public void setActive(boolean active) {
203         this.active = active;
204     }
205 
206 
207     /**
208      * Gets the financialDocument attribute.
209      * 
210      * @return Returns the financialDocument
211      */
212     public DocumentHeader getFinancialDocument() {
213         return financialDocument;
214     }
215 
216     /**
217      * Sets the financialDocument attribute.
218      * 
219      * @param financialDocument The financialDocument to set.
220      * @deprecated
221      */
222     public void setFinancialDocument(DocumentHeader financialDocument) {
223         this.financialDocument = financialDocument;
224     }
225 
226     /**
227      * Gets the universityFiscal attribute.
228      * 
229      * @return Returns the universityFiscal
230      */
231     public SystemOptions getUniversityFiscal() {
232         return universityFiscal;
233     }
234 
235     /**
236      * Sets the universityFiscal attribute.
237      * 
238      * @param universityFiscal The universityFiscal to set.
239      * @deprecated
240      */
241     public void setUniversityFiscal(SystemOptions universityFiscal) {
242         this.universityFiscal = universityFiscal;
243     }
244 
245     /**
246      * Gets the chartOfAccounts attribute.
247      * 
248      * @return Returns the chartOfAccounts
249      */
250     public Chart getChartOfAccounts() {
251         return chartOfAccounts;
252     }
253 
254     /**
255      * Sets the chartOfAccounts attribute.
256      * 
257      * @param chartOfAccounts The chartOfAccounts to set.
258      * @deprecated
259      */
260     public void setChartOfAccounts(Chart chartOfAccounts) {
261         this.chartOfAccounts = chartOfAccounts;
262     }
263 
264     /**
265      * @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper()
266      */
267     protected LinkedHashMap toStringMapper_RICE20_REFACTORME() {
268         LinkedHashMap m = new LinkedHashMap();
269         m.put(KFSPropertyConstants.DOCUMENT_NUMBER, this.documentNumber);
270         return m;
271     }
272 
273     public List<SubObjectCodeGlobalDetail> getSubObjCdGlobalDetails() {
274         return subObjCdGlobalDetails;
275     }
276 
277     public void setSubObjCdGlobalDetails(List<SubObjectCodeGlobalDetail> subObjCdGlobalDetails) {
278         this.subObjCdGlobalDetails = subObjCdGlobalDetails;
279     }
280 
281     public List<AccountGlobalDetail> getAccountGlobalDetails() {
282         return accountGlobalDetails;
283     }
284 
285     public void setAccountGlobalDetails(List<AccountGlobalDetail> accountGlobalDetails) {
286         this.accountGlobalDetails = accountGlobalDetails;
287     }
288 
289     /**
290      * @see org.kuali.rice.krad.document.GlobalBusinessObject#getGlobalChangesToDelete()
291      */
292     public List<PersistableBusinessObject> generateDeactivationsToPersist() {
293         return null;
294     }
295 
296     /**
297      * This returns a list of Sub Object Codes to Update and/or Add
298      * 
299      * @see org.kuali.rice.krad.document.GlobalBusinessObject#applyGlobalChanges()
300      */
301     public List<PersistableBusinessObject> generateGlobalChangesToPersist() {
302         LOG.debug("applyGlobalChanges");
303         List result = new ArrayList();
304 
305         // Iterate through Account/Object Code combinations; create new or update as necessary
306 
307         for (SubObjectCodeGlobalDetail subObjCdGlobalDetail : subObjCdGlobalDetails) {
308 
309             String financialObjectCode = subObjCdGlobalDetail.getFinancialObjectCode();
310 
311             if (financialObjectCode != null && financialObjectCode.length() > 0) {
312 
313                 for (AccountGlobalDetail accountGlobalDetail : accountGlobalDetails) {
314 
315                     Map pk = new HashMap();
316 
317                     String accountNumber = accountGlobalDetail.getAccountNumber();
318 
319                     if (accountNumber != null && accountNumber.length() > 0) {
320                         pk.put("UNIV_FISCAL_YR", this.universityFiscalYear);
321                         pk.put("FIN_COA_CD", this.chartOfAccountsCode);
322                         pk.put("ACCOUNT_NBR", accountNumber);
323                         pk.put("FIN_OBJECT_CD", financialObjectCode);
324                         pk.put("FIN_SUB_OBJ_CD", this.financialSubObjectCode);
325 
326                         SubObjectCode subObjCd = (SubObjectCode) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(SubObjectCode.class, pk);
327                         if (subObjCd == null) {
328                             subObjCd = new SubObjectCode(this.universityFiscalYear, this.chartOfAccountsCode, accountNumber, financialObjectCode, this.financialSubObjectCode);
329                         }
330                         populate(subObjCd, accountGlobalDetail, subObjCdGlobalDetail);
331                         result.add(subObjCd);
332                     }
333                 }
334             }
335         }
336 
337         return result;
338     }
339 
340     public void populate(SubObjectCode old, AccountGlobalDetail accountGlobalDetail, SubObjectCodeGlobalDetail subObjCdGlobalDetail) {
341         old.setFinancialSubObjectCodeName(update(old.getFinancialSubObjectCodeName(), financialSubObjectCodeName));
342         old.setFinancialSubObjectCdshortNm(update(old.getFinancialSubObjectCdshortNm(), financialSubObjectCodeShortName));
343         old.setActive(update(old.isActive(), active));
344     }
345 
346 
347     /**
348      * This method returns newvalue iff it is not empty
349      * 
350      * @param oldValue
351      * @param newValue
352      * @return
353      */
354     protected String update(String oldValue, String newValue) {
355         if (newValue == null || newValue.length() == 0) {
356             return oldValue;
357         }
358         return newValue;
359     }
360 
361     protected boolean update(boolean oldValue, boolean newValue) {
362         return newValue;
363     }
364 
365 
366     public boolean isPersistable() {
367         return true;
368     }
369 
370     public List<? extends GlobalBusinessObjectDetail> getAllDetailObjects() {
371         ArrayList<GlobalBusinessObjectDetail> details = new ArrayList<GlobalBusinessObjectDetail>(accountGlobalDetails.size() + subObjCdGlobalDetails.size());
372         details.addAll(accountGlobalDetails);
373         details.addAll(subObjCdGlobalDetails);
374         return details;
375     }
376 
377     /**
378      * @see org.kuali.rice.krad.bo.PersistableBusinessObjectBase#buildListOfDeletionAwareLists()
379      */
380     @Override
381     public List buildListOfDeletionAwareLists() {
382         List<Collection<PersistableBusinessObject>> managedLists = super.buildListOfDeletionAwareLists();
383 
384         managedLists.add( new ArrayList<PersistableBusinessObject>( getAccountGlobalDetails() ) );
385         managedLists.add( new ArrayList<PersistableBusinessObject>( getSubObjCdGlobalDetails() ) );
386 
387         return managedLists;
388     }
389 }