1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.kfs.module.bc.document.web.struts;
20
21 import java.math.BigDecimal;
22 import java.util.List;
23 import java.util.Map;
24
25 import org.kuali.kfs.module.bc.BCPropertyConstants;
26 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAppointmentFundingReason;
27 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding;
28 import org.kuali.kfs.module.bc.document.service.BudgetDocumentService;
29 import org.kuali.kfs.module.bc.document.service.SalarySettingService;
30 import org.kuali.kfs.module.bc.util.BudgetParameterFinder;
31 import org.kuali.kfs.module.bc.util.SalarySettingCalculator;
32 import org.kuali.kfs.module.bc.util.SalarySettingFieldsHolder;
33 import org.kuali.kfs.sys.DynamicCollectionComparator;
34 import org.kuali.kfs.sys.KFSConstants;
35 import org.kuali.kfs.sys.KFSPropertyConstants;
36 import org.kuali.kfs.sys.ObjectUtil;
37 import org.kuali.kfs.sys.context.SpringContext;
38 import org.kuali.rice.core.api.util.type.KualiDecimal;
39 import org.kuali.rice.core.api.util.type.KualiInteger;
40 import org.kuali.rice.kim.api.identity.Person;
41 import org.kuali.rice.krad.util.GlobalVariables;
42 import org.kuali.rice.krad.util.ObjectUtils;
43
44
45
46
47 public abstract class SalarySettingBaseForm extends BudgetExpansionForm {
48 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(SalarySettingBaseForm.class);
49
50 private String documentNumber;
51 private String chartOfAccountsCode;
52 private String accountNumber;
53 private String subAccountNumber;
54 private String financialObjectCode;
55 private String financialSubObjectCode;
56 private String financialBalanceTypeCode;
57 private String financialObjectTypeCode;
58 private SalarySettingFieldsHolder salarySettingFieldsHolder;
59
60 private boolean hideAdjustmentMeasurement = true;
61 private String adjustmentMeasurement;
62 private KualiDecimal adjustmentAmount;
63
64 private boolean hideDetails = false;
65
66 private boolean budgetByAccountMode;
67 private boolean singleAccountMode;
68 private boolean salarySettingClosed;
69
70 private SalarySettingService salarySettingService = SpringContext.getBean(SalarySettingService.class);
71 private BudgetDocumentService budgetDocumentService = SpringContext.getBean(BudgetDocumentService.class);
72
73 private Person person = GlobalVariables.getUserSession().getPerson();
74
75 protected String dashSubAccountNumber;
76 protected String dashFinancialSubObjectCode;
77
78 public SalarySettingBaseForm() {
79 super();
80
81 this.setDashFinancialSubObjectCode(KFSConstants.getDashFinancialSubObjectCode());
82 this.setDashSubAccountNumber(KFSConstants.getDashSubAccountNumber());
83 }
84
85
86
87
88
89
90 public abstract String getRefreshCallerName();
91
92
93
94
95
96
97 public abstract Map<String, Object> getKeyMapOfSalarySettingItem();
98
99
100
101
102 public void populateBCAFLines() {
103 List<PendingBudgetConstructionAppointmentFunding> appointmentFundings = this.getAppointmentFundings();
104 for (PendingBudgetConstructionAppointmentFunding appointmentFunding : appointmentFundings) {
105 this.refreshBCAFLine(appointmentFunding);
106 }
107 }
108
109
110
111
112
113 public boolean postProcessBCAFLines() {
114 this.populateBCAFLines();
115
116 List<PendingBudgetConstructionAppointmentFunding> appointmentFundings = this.getAppointmentFundings();
117 for (PendingBudgetConstructionAppointmentFunding appointmentFunding : appointmentFundings) {
118 Integer fiscalYear = appointmentFunding.getUniversityFiscalYear();
119 String chartCode = appointmentFunding.getChartOfAccountsCode();
120 String objectCode = appointmentFunding.getFinancialObjectCode();
121
122 boolean vacatable = salarySettingService.canBeVacant(appointmentFundings, appointmentFunding);
123 appointmentFunding.setVacatable(vacatable);
124
125 boolean budgetable = budgetDocumentService.isAssociatedWithBudgetableDocument(appointmentFunding);
126 appointmentFunding.setBudgetable(budgetable);
127
128 boolean hourlyPaid = salarySettingService.isHourlyPaidObject(fiscalYear, chartCode, objectCode);
129 appointmentFunding.setHourlyPaid(hourlyPaid);
130 }
131
132 DynamicCollectionComparator.sort(appointmentFundings, KFSPropertyConstants.POSITION_NUMBER, KFSPropertyConstants.EMPLID);
133 return true;
134 }
135
136
137
138
139 public void refreshBCAFLine(PendingBudgetConstructionAppointmentFunding appointmentFunding) {
140 appointmentFunding.refreshNonUpdateableReferences();
141 ObjectUtils.materializeObjects(appointmentFunding.getBudgetConstructionAppointmentFundingReason());
142 appointmentFunding.refreshReferenceObject(KFSPropertyConstants.ACCOUNT);
143 appointmentFunding.refreshReferenceObject(KFSPropertyConstants.SUB_ACCOUNT);
144 appointmentFunding.refreshReferenceObject(BCPropertyConstants.BUDGET_CONSTRUCTION_CALCULATED_SALARY_FOUNDATION_TRACKER);
145 this.applyDefaultReasonAmountIfEmpty(appointmentFunding);
146 this.applyDefaultTotalIntendedAmountIfEmpty(appointmentFunding);
147 }
148
149
150
151
152
153
154
155 public void applyDefaultReasonAmountIfEmpty (PendingBudgetConstructionAppointmentFunding appointmentFunding){
156 if (!appointmentFunding.getBudgetConstructionAppointmentFundingReason().isEmpty()){
157 BudgetConstructionAppointmentFundingReason afReason = appointmentFunding.getBudgetConstructionAppointmentFundingReason().get(0);
158 if (ObjectUtils.isNotNull(afReason)){
159 if (afReason.getAppointmentFundingReasonAmount() == null){
160 afReason.setAppointmentFundingReasonAmount(KualiInteger.ZERO);
161 }
162 if (afReason.getAppointmentFundingReasonCode() != null){
163 afReason.refreshReferenceObject(BCPropertyConstants.APPOINTMENT_FUNDING_REASON);
164 }
165 }
166 }
167 else {
168 appointmentFunding.getBudgetConstructionAppointmentFundingReason().add(new BudgetConstructionAppointmentFundingReason());
169 }
170 }
171
172
173
174
175
176
177 public void applyDefaultTotalIntendedAmountIfEmpty (PendingBudgetConstructionAppointmentFunding appointmentFunding){
178 if (appointmentFunding.getAppointmentTotalIntendedAmount() == null){
179 appointmentFunding.setAppointmentTotalIntendedAmount(KualiInteger.ZERO);
180 }
181 if (appointmentFunding.getAppointmentTotalIntendedFteQuantity() == null){
182 appointmentFunding.setAppointmentTotalIntendedFteQuantity(BigDecimal.ZERO);
183 }
184 }
185
186
187
188
189
190
191 public String getDocumentNumber() {
192 return documentNumber;
193 }
194
195
196
197
198
199
200 public void setDocumentNumber(String documentNumber) {
201 this.documentNumber = documentNumber;
202 }
203
204
205
206
207
208
209 public String getChartOfAccountsCode() {
210 return chartOfAccountsCode;
211 }
212
213
214
215
216
217
218 public void setChartOfAccountsCode(String chartOfAccountsCode) {
219 this.chartOfAccountsCode = chartOfAccountsCode;
220 }
221
222
223
224
225
226
227 public String getAccountNumber() {
228 return accountNumber;
229 }
230
231
232
233
234
235
236 public void setAccountNumber(String accountNumber) {
237 this.accountNumber = accountNumber;
238 }
239
240
241
242
243
244
245 public String getSubAccountNumber() {
246 return subAccountNumber;
247 }
248
249
250
251
252
253
254 public void setSubAccountNumber(String subAccountNumber) {
255 this.subAccountNumber = subAccountNumber;
256 }
257
258
259
260
261
262
263 public String getFinancialObjectCode() {
264 return financialObjectCode;
265 }
266
267
268
269
270
271
272 public void setFinancialObjectCode(String financialObjectCode) {
273 this.financialObjectCode = financialObjectCode;
274 }
275
276
277
278
279
280
281 public String getFinancialSubObjectCode() {
282 return financialSubObjectCode;
283 }
284
285
286
287
288
289
290 public void setFinancialSubObjectCode(String financialSubObjectCode) {
291 this.financialSubObjectCode = financialSubObjectCode;
292 }
293
294
295
296
297
298
299 public String getFinancialBalanceTypeCode() {
300 return financialBalanceTypeCode;
301 }
302
303
304
305
306
307
308 public void setFinancialBalanceTypeCode(String financialBalanceTypeCode) {
309 this.financialBalanceTypeCode = financialBalanceTypeCode;
310 }
311
312
313
314
315
316
317 public String getFinancialObjectTypeCode() {
318 return financialObjectTypeCode;
319 }
320
321
322
323
324
325
326 public void setFinancialObjectTypeCode(String financialObjectTypeCode) {
327 this.financialObjectTypeCode = financialObjectTypeCode;
328 }
329
330
331
332
333
334
335 public boolean isHideAdjustmentMeasurement() {
336 return hideAdjustmentMeasurement;
337 }
338
339
340
341
342
343
344 public void setHideAdjustmentMeasurement(boolean hideAdjustmentMeasurement) {
345 this.hideAdjustmentMeasurement = hideAdjustmentMeasurement;
346 }
347
348
349
350
351
352
353 public String getAdjustmentMeasurement() {
354 return adjustmentMeasurement;
355 }
356
357
358
359
360
361
362 public void setAdjustmentMeasurement(String adjustmentMeasurement) {
363 this.adjustmentMeasurement = adjustmentMeasurement;
364 }
365
366
367
368
369
370
371 public KualiDecimal getAdjustmentAmount() {
372 return adjustmentAmount;
373 }
374
375
376
377
378
379
380 public void setAdjustmentAmount(KualiDecimal adjustmentAmount) {
381 this.adjustmentAmount = adjustmentAmount;
382 }
383
384
385
386
387
388
389 public boolean isHideDetails() {
390 return hideDetails;
391 }
392
393
394
395
396
397
398 public void setHideDetails(boolean hideDetails) {
399 this.hideDetails = hideDetails;
400 }
401
402
403
404
405
406
407 public boolean isBudgetByAccountMode() {
408 return budgetByAccountMode;
409 }
410
411
412
413
414
415
416 public void setBudgetByAccountMode(boolean budgetByAccountMode) {
417 this.budgetByAccountMode = budgetByAccountMode;
418 }
419
420
421
422
423
424
425 public boolean isSingleAccountMode() {
426 return singleAccountMode;
427 }
428
429
430
431
432
433
434 public void setSingleAccountMode(boolean singleAccountMode) {
435 this.singleAccountMode = singleAccountMode;
436 }
437
438
439
440
441
442
443 public abstract List<PendingBudgetConstructionAppointmentFunding> getAppointmentFundings();
444
445
446
447
448
449
450 public KualiInteger getAppointmentRequestedCsfAmountTotal() {
451 return SalarySettingCalculator.getAppointmentRequestedCsfAmountTotal(this.getEffectivePendingBudgetConstructionAppointmentFunding());
452 }
453
454
455
456
457
458
459 public BigDecimal getAppointmentRequestedCsfTimePercentTotal() {
460 return SalarySettingCalculator.getAppointmentRequestedCsfTimePercentTotal(this.getAppointmentFundings());
461 }
462
463
464
465
466
467
468 public BigDecimal getAppointmentRequestedCsfStandardHoursTotal() {
469 return SalarySettingCalculator.getAppointmentRequestedCsfStandardHoursTotal(this.getAppointmentFundings());
470 }
471
472
473
474
475
476
477 public BigDecimal getAppointmentRequestedCsfFteQuantityTotal() {
478 return SalarySettingCalculator.getAppointmentRequestedCsfFteQuantityTotal(this.getAppointmentFundings());
479 }
480
481
482
483
484
485
486 public KualiInteger getAppointmentRequestedAmountTotal() {
487 return SalarySettingCalculator.getAppointmentRequestedAmountTotal(this.getEffectivePendingBudgetConstructionAppointmentFunding());
488 }
489
490
491
492
493
494
495 public BigDecimal getAppointmentRequestedTimePercentTotal() {
496 return SalarySettingCalculator.getAppointmentRequestedTimePercentTotal(this.getAppointmentFundings());
497 }
498
499
500
501
502
503
504 public BigDecimal getAppointmentRequestedStandardHoursTotal() {
505 return SalarySettingCalculator.getAppointmentRequestedStandardHoursTotal(this.getAppointmentFundings());
506 }
507
508
509
510
511
512
513 public BigDecimal getAppointmentRequestedFteQuantityTotal() {
514 return SalarySettingCalculator.getAppointmentRequestedFteQuantityTotal(this.getAppointmentFundings());
515 }
516
517
518
519
520
521
522 public KualiInteger getCsfAmountTotal() {
523 return SalarySettingCalculator.getCsfAmountTotal(this.getEffectivePendingBudgetConstructionAppointmentFunding());
524 }
525
526
527
528
529
530
531 public BigDecimal getCsfTimePercentTotal() {
532 return SalarySettingCalculator.getCsfTimePercentTotal(this.getAppointmentFundings());
533 }
534
535
536
537
538
539
540 public BigDecimal getCsfStandardHoursTotal() {
541 return SalarySettingCalculator.getCsfStandardHoursTotal(this.getAppointmentFundings());
542 }
543
544
545
546
547
548
549 public BigDecimal getCsfFullTimeEmploymentQuantityTotal() {
550 return SalarySettingCalculator.getCsfFullTimeEmploymentQuantityTotal(this.getAppointmentFundings());
551 }
552
553
554
555
556
557
558 public KualiDecimal getPercentChangeTotal() {
559 KualiInteger csfAmountTotal = this.getCsfAmountTotal();
560 KualiInteger requestedAmountTotal = this.getAppointmentRequestedAmountTotal();
561
562 return SalarySettingCalculator.getPercentChange(csfAmountTotal, requestedAmountTotal);
563 }
564
565
566
567
568
569
570 public List<PendingBudgetConstructionAppointmentFunding> getEffectivePendingBudgetConstructionAppointmentFunding() {
571 return SalarySettingCalculator.getEffectiveAppointmentFundings(this.getAppointmentFundings());
572 }
573
574
575
576
577
578
579 public SalarySettingFieldsHolder getSalarySettingFieldsHolder() {
580 if (salarySettingFieldsHolder == null) {
581 salarySettingFieldsHolder = new SalarySettingFieldsHolder();
582 ObjectUtil.buildObject(salarySettingFieldsHolder, this);
583 }
584
585 return salarySettingFieldsHolder;
586 }
587
588
589
590
591
592
593 public Person getPerson() {
594 return person;
595 }
596
597
598
599
600
601
602 public boolean isSalarySettingClosed() {
603 return salarySettingClosed;
604 }
605
606
607
608
609
610
611 public void setSalarySettingClosed(boolean salarySettingClosed) {
612 this.salarySettingClosed = salarySettingClosed;
613 }
614
615
616
617
618
619
620
621 public boolean isViewOnlyEntry() {
622 return isSystemViewOnly();
623 }
624
625
626
627
628
629
630 public boolean isPayrollIncumbentFeedIndictor() {
631 return BudgetParameterFinder.getPayrollIncumbentFeedIndictor();
632 }
633
634
635
636
637
638
639 public boolean isPayrollPositionFeedIndicator() {
640 return BudgetParameterFinder.getPayrollPositionFeedIndicator();
641 }
642
643
644
645
646
647
648
649 public String getDashSubAccountNumber() {
650 return dashSubAccountNumber;
651 }
652
653
654
655
656
657
658 public void setDashSubAccountNumber(String dashSubAccountNumber) {
659 this.dashSubAccountNumber = dashSubAccountNumber;
660 }
661
662
663
664
665
666
667
668 public String getDashFinancialSubObjectCode() {
669 return dashFinancialSubObjectCode;
670 }
671
672
673
674
675
676
677 public void setDashFinancialSubObjectCode(String dashFinancialSubObjectCode) {
678 this.dashFinancialSubObjectCode = dashFinancialSubObjectCode;
679 }
680 }