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 package org.kuali.kfs.coa.businessobject;
017
018 import java.util.LinkedHashMap;
019
020 import org.apache.ojb.broker.PersistenceBroker;
021 import org.apache.ojb.broker.PersistenceBrokerException;
022 import org.kuali.kfs.gl.businessobject.SufficientFundRebuild;
023 import org.kuali.kfs.sys.businessobject.SystemOptions;
024 import org.kuali.kfs.sys.context.SpringContext;
025 import org.kuali.rice.kns.bo.KualiCode;
026 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
027 import org.kuali.rice.kns.service.BusinessObjectService;
028 import org.kuali.rice.kns.service.impl.PersistenceStructureServiceImpl;
029 import org.kuali.rice.kns.util.ObjectUtils;
030
031 /**
032 *
033 */
034 public class ObjectCode extends PersistableBusinessObjectBase implements KualiCode {
035
036
037 static {
038 PersistenceStructureServiceImpl.referenceConversionMap.put(ObjectCode.class, ObjectCodeCurrent.class);
039 }
040
041 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ObjectCode.class);
042
043 private static final long serialVersionUID = -965833141452795485L;
044 private Integer universityFiscalYear;
045 private String chartOfAccountsCode;
046 private String financialObjectCode;
047 private String financialObjectCodeName;
048 private String financialObjectCodeShortName;
049 private String historicalFinancialObjectCode;
050 private boolean active;
051 private String financialObjectLevelCode;
052 private String reportsToChartOfAccountsCode;
053 private String reportsToFinancialObjectCode;
054 private String financialObjectTypeCode;
055 private String financialObjectSubTypeCode;
056 private String financialBudgetAggregationCd;
057 private String nextYearFinancialObjectCode;
058 private String finObjMandatoryTrnfrelimCd;
059 private String financialFederalFundedCode;
060
061 private transient BudgetAggregationCode financialBudgetAggregation;
062 private transient MandatoryTransferEliminationCode finObjMandatoryTrnfrelim;
063 private transient FederalFundedCode financialFederalFunded;
064 private transient SystemOptions universityFiscal;
065 private transient ObjectLevel financialObjectLevel;
066 private transient Chart chartOfAccounts;
067 private transient Chart reportsToChartOfAccounts;
068 private transient ObjectCode reportsToFinancialObject;
069 private transient ObjectType financialObjectType;
070 private transient ObjectSubType financialObjectSubType;
071
072 /**
073 * Default no-arg constructor.
074 */
075 public ObjectCode() {
076 // initialize the object fiscal year to the current fiscal year
077 // universityFiscalYear = SpringContext.getBean(DateTimeService.class).getCurrentFiscalYear();
078
079 // construct the referenced objects for the calling of the referencing object
080 this.financialObjectLevel = new ObjectLevel();
081 this.financialObjectType = new ObjectType();
082 }
083
084 /**
085 * Constructs a ObjectCode.java with the given defaults; this way, it is not necessary to use any deprecated setters.
086 *
087 * @param fiscalYear
088 * @param chart
089 * @param financialObjectCode - an active object code
090 */
091 public ObjectCode(Integer fiscalYear, String chart, String financialObjectCode) {
092 this.universityFiscalYear = fiscalYear;
093 this.chartOfAccountsCode = chart;
094 this.financialObjectCode = financialObjectCode;
095 this.active = true;
096 }
097
098 /**
099 * This method is only for use by the framework
100 */
101 public void setUniversityFiscalYear(Integer i) {
102 this.universityFiscalYear = i;
103 }
104
105 /**
106 * Gets the financialFederalFunded attribute.
107 *
108 * @return Returns the financialFederalFunded.
109 */
110 public FederalFundedCode getFinancialFederalFunded() {
111 return financialFederalFunded;
112 }
113
114 /**
115 * Sets the financialFederalFunded attribute value.
116 *
117 * @param financialFederalFunded The financialFederalFunded to set.
118 * @deprecated
119 */
120 public void setFinancialFederalFunded(FederalFundedCode financialFederalFunded) {
121 this.financialFederalFunded = financialFederalFunded;
122 }
123
124 /**
125 * Gets the finObjMandatoryTrnfrelim attribute.
126 *
127 * @return Returns the finObjMandatoryTrnfrelimCd.
128 */
129 public MandatoryTransferEliminationCode getFinObjMandatoryTrnfrelim() {
130 return finObjMandatoryTrnfrelim;
131 }
132
133
134 /**
135 * Sets the finObjMandatoryTrnfrelim attribute value.
136 *
137 * @param finObjMandatoryTrnfrelim The finObjMandatoryTrnfrelim to set.
138 * @deprecated
139 */
140 public void setFinObjMandatoryTrnfrelim(MandatoryTransferEliminationCode finObjMandatoryTrnfrelim) {
141 this.finObjMandatoryTrnfrelim = finObjMandatoryTrnfrelim;
142 }
143
144 /**
145 * Gets the financialObjectCode attribute.
146 *
147 * @return Returns the financialObjectCode
148 */
149 public String getFinancialObjectCode() {
150 return financialObjectCode;
151 }
152
153 /**
154 * Sets the financialObjectCode attribute.
155 *
156 * @param financialObjectCode The financialObjectCode to set.
157 */
158 public void setFinancialObjectCode(String financialObjectCode) {
159 this.financialObjectCode = financialObjectCode;
160 }
161
162 /**
163 * Gets the financialObjectCodeName attribute.
164 *
165 * @return Returns the financialObjectCodeName
166 */
167 public String getFinancialObjectCodeName() {
168 return financialObjectCodeName;
169 }
170
171 /**
172 * Sets the financialObjectCodeName attribute.
173 *
174 * @param financialObjectCodeName The financialObjectCodeName to set.
175 */
176 public void setFinancialObjectCodeName(String financialObjectCodeName) {
177 this.financialObjectCodeName = financialObjectCodeName;
178 }
179
180 /**
181 * Gets the financialObjectCodeShortName attribute.
182 *
183 * @return Returns the financialObjectCodeShortName
184 */
185 public String getFinancialObjectCodeShortName() {
186 return financialObjectCodeShortName;
187 }
188
189 /**
190 * Sets the financialObjectCodeShortName attribute.
191 *
192 * @param financialObjectCodeShortName The financialObjectCodeShortName to set.
193 */
194 public void setFinancialObjectCodeShortName(String financialObjectCodeShortName) {
195 this.financialObjectCodeShortName = financialObjectCodeShortName;
196 }
197
198 /**
199 * Gets the historicalFinancialObjectCode attribute.
200 *
201 * @return Returns the historicalFinancialObjectCode
202 */
203 public String getHistoricalFinancialObjectCode() {
204 return historicalFinancialObjectCode;
205 }
206
207 /**
208 * Sets the historicalFinancialObjectCode attribute.
209 *
210 * @param historicalFinancialObjectCode The historicalFinancialObjectCode to set.
211 */
212 public void setHistoricalFinancialObjectCode(String historicalFinancialObjectCode) {
213 this.historicalFinancialObjectCode = historicalFinancialObjectCode;
214 }
215
216 /**
217 * Gets the financialObjectActiveCode attribute.
218 *
219 * @return Returns the financialObjectActiveCode
220 */
221 public boolean isFinancialObjectActiveCode() {
222 return active;
223 }
224
225 /**
226 * Sets the financialObjectActiveCode attribute.
227 *
228 * @param financialObjectActiveCode The financialObjectActiveCode to set.
229 */
230 public void setFinancialObjectActiveCode(boolean active) {
231 this.active = active;
232 }
233
234 /**
235 * Gets the financialBudgetAggregationCd attribute.
236 *
237 * @return Returns the financialBudgetAggregationCd
238 */
239 /*
240 * public BudgetAggregationCode getFinancialBudgetAggregation() { return financialBudgetAggregation; }
241 */
242
243 /**
244 * Sets the financialBudgetAggregationCd attribute.
245 *
246 * @param financialBudgetAggregationCd The financialBudgetAggregationCd to set.
247 * @deprecated
248 */
249 /*
250 * public void setFinancialBudgetAggregation(BudgetAggregationCode financialBudgetAggregationCd) {
251 * this.financialBudgetAggregation = financialBudgetAggregationCd; }
252 */
253
254 /**
255 * Gets the universityFiscal attribute.
256 *
257 * @return Returns the universityFiscal
258 */
259 public SystemOptions getUniversityFiscal() {
260 return universityFiscal;
261 }
262
263 /**
264 * Sets the universityFiscal attribute.
265 *
266 * @param universityFiscal The universityFiscal to set.
267 * @deprecated
268 */
269 public void setUniversityFiscal(SystemOptions universityFiscal) {
270 this.universityFiscal = universityFiscal;
271 }
272
273 /**
274 * Gets the financialObjectLevel attribute.
275 *
276 * @return Returns the financialObjectLevel
277 */
278 public ObjectLevel getFinancialObjectLevel() {
279 return financialObjectLevel;
280 }
281
282 /**
283 * Sets the financialObjectLevel attribute.
284 *
285 * @param financialObjectLevel The financialObjectLevel to set.
286 * @deprecated
287 */
288 public void setFinancialObjectLevel(ObjectLevel financialObjectLevel) {
289 this.financialObjectLevel = financialObjectLevel;
290 }
291
292 /**
293 * Gets the chartOfAccounts attribute.
294 *
295 * @return Returns the chartOfAccounts
296 */
297 public Chart getChartOfAccounts() {
298 return chartOfAccounts;
299 }
300
301 /**
302 * Sets the chartOfAccounts attribute.
303 *
304 * @param chartOfAccounts The chartOfAccounts to set.
305 * @deprecated
306 */
307 public void setChartOfAccounts(Chart chartOfAccounts) {
308 this.chartOfAccounts = chartOfAccounts;
309 }
310
311 /**
312 * Gets the reportsToChartOfAccounts attribute.
313 *
314 * @return Returns the reportsToChartOfAccounts
315 */
316 public Chart getReportsToChartOfAccounts() {
317 return reportsToChartOfAccounts;
318 }
319
320 /**
321 * Sets the reportsToChartOfAccounts attribute.
322 *
323 * @param reportsToChartOfAccounts The reportsToChartOfAccounts to set.
324 * @deprecated
325 */
326 public void setReportsToChartOfAccounts(Chart reportsToChartOfAccounts) {
327 this.reportsToChartOfAccounts = reportsToChartOfAccounts;
328 }
329
330 /**
331 * Gets the reportsToFinancialObject attribute.
332 *
333 * @return Returns the reportsToFinancialObject
334 */
335 public ObjectCode getReportsToFinancialObject() {
336 return reportsToFinancialObject;
337 }
338
339 /**
340 * Sets the reportsToFinancialObject attribute.
341 *
342 * @param reportsToFinancialObject The reportsToFinancialObject to set.
343 * @deprecated
344 */
345 public void setReportsToFinancialObject(ObjectCode reportsToFinancialObject) {
346 this.reportsToFinancialObject = reportsToFinancialObject;
347 }
348
349 /**
350 * Gets the financialObjectType attribute.
351 *
352 * @return Returns the financialObjectType
353 */
354 public ObjectType getFinancialObjectType() {
355 return financialObjectType;
356 }
357
358 /**
359 * Sets the financialObjectType attribute.
360 *
361 * @param financialObjectType The financialObjectType to set.
362 * @deprecated
363 */
364 public void setFinancialObjectType(ObjectType financialObjectType) {
365 this.financialObjectType = financialObjectType;
366 }
367
368 /**
369 * Gets the financialObjectSubType attribute.
370 *
371 * @return Returns the financialObjectSubType
372 */
373 public ObjectSubType getFinancialObjectSubType() {
374 return financialObjectSubType;
375 }
376
377 /**
378 * Sets the financialObjectSubType attribute.
379 *
380 * @param financialObjectSubType The financialObjectSubType to set.
381 * @deprecated
382 */
383 public void setFinancialObjectSubType(ObjectSubType financialObjectSubType) {
384 this.financialObjectSubType = financialObjectSubType;
385 }
386
387 /**
388 */
389 public void setChartOfAccountsCode(String string) {
390 this.chartOfAccountsCode = string;
391 }
392
393 /**
394 *
395 */
396 public String getChartOfAccountsCode() {
397 return this.chartOfAccountsCode;
398 }
399
400 /**
401 *
402 */
403 public Integer getUniversityFiscalYear() {
404 return this.universityFiscalYear;
405 }
406
407 /**
408 * @return Returns the financialBudgetAggregationCd.
409 */
410 public String getFinancialBudgetAggregationCd() {
411 return financialBudgetAggregationCd;
412 }
413
414 /**
415 * @param financialBudgetAggregationCd The financialBudgetAggregationCd to set.
416 */
417 public void setFinancialBudgetAggregationCd(String financialBudgetAggregationCd) {
418 this.financialBudgetAggregationCd = financialBudgetAggregationCd;
419 }
420
421 /**
422 * @return Returns the financialObjectLevelCode.
423 */
424 public String getFinancialObjectLevelCode() {
425 return financialObjectLevelCode;
426 }
427
428 /**
429 * @param financialObjectLevelCode The financialObjectLevelCode to set.
430 */
431 public void setFinancialObjectLevelCode(String financialObjectLevelCode) {
432 this.financialObjectLevelCode = financialObjectLevelCode;
433 }
434
435 /**
436 * @return Returns the financialObjectSubTypeCode.
437 */
438 public String getFinancialObjectSubTypeCode() {
439 return financialObjectSubTypeCode;
440 }
441
442 /**
443 * @param financialObjectSubTypeCode The financialObjectSubTypeCode to set.
444 */
445 public void setFinancialObjectSubTypeCode(String financialObjectSubTypeCode) {
446 this.financialObjectSubTypeCode = financialObjectSubTypeCode;
447 }
448
449 /**
450 * @return Returns the financialObjectTypeCode.
451 */
452 public String getFinancialObjectTypeCode() {
453 return financialObjectTypeCode;
454 }
455
456 /**
457 * @param financialObjectTypeCode The financialObjectTypeCode to set.
458 */
459 public void setFinancialObjectTypeCode(String financialObjectTypeCode) {
460 this.financialObjectTypeCode = financialObjectTypeCode;
461 }
462
463 /**
464 * @return Returns the nextYearFinancialObjectCode.
465 */
466 public String getNextYearFinancialObjectCode() {
467 return nextYearFinancialObjectCode;
468 }
469
470 /**
471 * @param nextYearFinancialObjectCode The nextYearFinancialObjectCode to set.
472 */
473 public void setNextYearFinancialObjectCode(String nextYearFinancialObjectCode) {
474 this.nextYearFinancialObjectCode = nextYearFinancialObjectCode;
475 }
476
477 /**
478 * @return Returns the reportsToChartOfAccountsCode.
479 */
480 public String getReportsToChartOfAccountsCode() {
481 return reportsToChartOfAccountsCode;
482 }
483
484 /**
485 * @param reportsToChartOfAccountsCode The reportsToChartOfAccountsCode to set.
486 */
487 public void setReportsToChartOfAccountsCode(String reportsToChartOfAccountsCode) {
488 this.reportsToChartOfAccountsCode = reportsToChartOfAccountsCode;
489 }
490
491 /**
492 * @return Returns the reportsToFinancialObjectCode.
493 */
494 public String getReportsToFinancialObjectCode() {
495 return reportsToFinancialObjectCode;
496 }
497
498 /**
499 * @param reportsToFinancialObjectCode The reportsToFinancialObjectCode to set.
500 */
501 public void setReportsToFinancialObjectCode(String reportsToFinancialObjectCode) {
502 this.reportsToFinancialObjectCode = reportsToFinancialObjectCode;
503 }
504
505 /**
506 * @return Returns the financialFederalFundedCode.
507 */
508 public String getFinancialFederalFundedCode() {
509 return financialFederalFundedCode;
510 }
511
512 /**
513 * @param financialFederalFundedCode The financialFederalFundedCode to set.
514 */
515 public void setFinancialFederalFundedCode(String financialFederalFundedCode) {
516 this.financialFederalFundedCode = financialFederalFundedCode;
517 }
518
519 /**
520 * @return Returns the finObjMandatoryTrnfrelimCd.
521 */
522 public String getFinObjMandatoryTrnfrelimCd() {
523 return finObjMandatoryTrnfrelimCd;
524 }
525
526 /**
527 * @param finObjMandatoryTrnfrelimCd The finObjMandatoryTrnfrelimCd to set.
528 */
529 public void setFinObjMandatoryTrnfrelimCd(String finObjMandatoryTrnfrelimCd) {
530 this.finObjMandatoryTrnfrelimCd = finObjMandatoryTrnfrelimCd;
531 }
532
533 public BudgetAggregationCode getFinancialBudgetAggregation() {
534 return financialBudgetAggregation;
535 }
536
537 public void setFinancialBudgetAggregation(BudgetAggregationCode financialBudgetAggregation) {
538 this.financialBudgetAggregation = financialBudgetAggregation;
539 }
540
541 /**
542 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
543 */
544 protected LinkedHashMap<String, String> toStringMapper() {
545
546 LinkedHashMap<String, String> m = new LinkedHashMap<String, String>();
547 m.put("chartOfAccountsCode", this.chartOfAccountsCode);
548 m.put("financialObjectCode", this.financialObjectCode);
549
550 return m;
551 }
552
553 @Override
554 public void beforeUpdate(PersistenceBroker persistenceBroker) throws PersistenceBrokerException {
555 super.beforeUpdate(persistenceBroker);
556 try {
557 // KULCOA-549: update the sufficient funds table
558 // get the current data from the database
559 BusinessObjectService boService = SpringContext.getBean(BusinessObjectService.class);
560 ObjectCode originalObjectCode = (ObjectCode) boService.retrieve(this);
561
562 if (originalObjectCode != null) {
563 if (!originalObjectCode.getFinancialObjectLevelCode().equals(getFinancialObjectLevelCode())) {
564 SufficientFundRebuild sfr = new SufficientFundRebuild();
565 sfr.setAccountFinancialObjectTypeCode(SufficientFundRebuild.REBUILD_OBJECT);
566 sfr.setChartOfAccountsCode(originalObjectCode.getChartOfAccountsCode());
567 sfr.setAccountNumberFinancialObjectCode(originalObjectCode.getFinancialObjectLevelCode());
568 if (boService.retrieve(sfr) == null) {
569 persistenceBroker.store(sfr);
570 }
571 sfr = new SufficientFundRebuild();
572 sfr.setAccountFinancialObjectTypeCode(SufficientFundRebuild.REBUILD_OBJECT);
573 sfr.setChartOfAccountsCode(getChartOfAccountsCode());
574 sfr.setAccountNumberFinancialObjectCode(getFinancialObjectLevelCode());
575 if (boService.retrieve(sfr) == null) {
576 persistenceBroker.store(sfr);
577 }
578 }
579 }
580 }
581 catch (Exception ex) {
582 LOG.error("Problem updating sufficient funds rebuild table: ", ex);
583 }
584 }
585
586 public boolean isActive() {
587 return this.active;
588 }
589
590 public void setActive(boolean a) {
591 this.active = a;
592 }
593
594 public void setCode(String code) {
595 this.chartOfAccountsCode = code;
596 }
597
598 public void setName(String name) {
599 this.financialObjectCodeName = name;
600 }
601
602 public String getCode() {
603 return this.financialObjectCode;
604 }
605
606 public String getName() {
607 return this.financialObjectCodeName;
608 }
609
610 /**
611 * Determines if this object code reports to itself
612 * @return true if the object code reports to itself, false otherwise
613 */
614 public boolean isReportingToSelf() {
615 return ObjectUtils.nullSafeEquals(this.getChartOfAccountsCode(), this.getReportsToChartOfAccountsCode()) && ObjectUtils.nullSafeEquals(this.getFinancialObjectCode(), this.getReportsToFinancialObjectCode());
616 }
617 }