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.module.bc.businessobject; 018 019 import java.math.BigDecimal; 020 import java.sql.Date; 021 import java.util.HashMap; 022 import java.util.LinkedHashMap; 023 import java.util.List; 024 import java.util.Map; 025 026 import org.kuali.kfs.coa.businessobject.ResponsibilityCenter; 027 import org.kuali.kfs.module.bc.BCConstants; 028 import org.kuali.kfs.module.bc.util.BudgetParameterFinder; 029 import org.kuali.kfs.sys.KFSConstants.BudgetConstructionPositionConstants; 030 import org.kuali.kfs.sys.businessobject.SystemOptions; 031 import org.kuali.kfs.sys.context.SpringContext; 032 import org.kuali.rice.kns.bo.Inactivateable; 033 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase; 034 import org.kuali.rice.kim.bo.Person; 035 import org.kuali.rice.kim.service.PersonService; 036 import org.kuali.rice.kns.util.KualiDecimal; 037 import org.kuali.rice.kns.util.TypedArrayList; 038 039 040 public class BudgetConstructionPosition extends PersistableBusinessObjectBase implements PendingBudgetConstructionAppointmentFundingAware, Position, Inactivateable { 041 042 private String positionNumber; 043 private Integer universityFiscalYear; 044 private Date positionEffectiveDate; 045 private String positionEffectiveStatus; 046 private String positionStatus; 047 private boolean budgetedPosition; 048 private boolean confidentialPosition; 049 private BigDecimal positionStandardHoursDefault; 050 private String positionRegularTemporary; 051 private BigDecimal positionFullTimeEquivalency; 052 private Integer iuNormalWorkMonths; 053 private Integer iuPayMonths; 054 private String positionDescription; 055 private String setidDepartment; 056 private String positionDepartmentIdentifier; 057 private String responsibilityCenterCode; 058 private String positionUnionCode; 059 private String positionSalaryPlanDefault; 060 private String positionGradeDefault; 061 private String setidJobCode; 062 private String jobCode; 063 private String jobCodeDescription; 064 private String setidSalary; 065 private String iuDefaultObjectCode; 066 private String iuPositionType; 067 private String positionLockUserIdentifier; 068 private boolean active; 069 070 private SystemOptions universityFiscal; 071 private List<PendingBudgetConstructionAppointmentFunding> pendingBudgetConstructionAppointmentFunding; 072 private List<BudgetConstructionPositionSelect> budgetConstructionPositionSelect; 073 private ResponsibilityCenter responsibilityCenter; 074 private Person positionLockUser; 075 076 /** 077 * Default constructor. 078 */ 079 public BudgetConstructionPosition() { 080 budgetConstructionPositionSelect = new TypedArrayList(BudgetConstructionPositionSelect.class); 081 pendingBudgetConstructionAppointmentFunding = new TypedArrayList(PendingBudgetConstructionAppointmentFunding.class); 082 active = true; // assume active is true until set otherwise 083 } 084 085 /** 086 * Computes the positionFullTimeEquivalency attribute. 087 * 088 * @return Returns the compute positionFullTimeEquivalency 089 */ 090 public static BigDecimal getCalculatedBCPositionFTE(BigDecimal positionStandardHoursDefault, Integer iuNormalWorkMonths, Integer iuPayMonths) { 091 if (iuPayMonths > 0) { 092 BigDecimal temp1 = positionStandardHoursDefault.divide(BudgetParameterFinder.getWeeklyWorkingHoursAsDecimal(), 4, KualiDecimal.ROUND_BEHAVIOR); 093 BigDecimal temp2 = new BigDecimal(iuNormalWorkMonths).divide(new BigDecimal(iuPayMonths), 4, KualiDecimal.ROUND_BEHAVIOR); 094 BigDecimal result = temp1.multiply(temp2); 095 result = result.setScale(2, KualiDecimal.ROUND_BEHAVIOR); 096 return result; 097 } 098 else { 099 return BigDecimal.ZERO; 100 } 101 } 102 103 /** 104 * Gets the positionNumber attribute. 105 * 106 * @return Returns the positionNumber 107 */ 108 public String getPositionNumber() { 109 return positionNumber; 110 } 111 112 /** 113 * Sets the positionNumber attribute. 114 * 115 * @param positionNumber The positionNumber to set. 116 */ 117 public void setPositionNumber(String positionNumber) { 118 this.positionNumber = positionNumber; 119 } 120 121 /** 122 * Gets the universityFiscalYear attribute. 123 * 124 * @return Returns the universityFiscalYear 125 */ 126 public Integer getUniversityFiscalYear() { 127 return universityFiscalYear; 128 } 129 130 /** 131 * Sets the universityFiscalYear attribute. 132 * 133 * @param universityFiscalYear The universityFiscalYear to set. 134 */ 135 public void setUniversityFiscalYear(Integer universityFiscalYear) { 136 this.universityFiscalYear = universityFiscalYear; 137 } 138 139 /** 140 * Gets the positionEffectiveDate attribute. 141 * 142 * @return Returns the positionEffectiveDate 143 */ 144 public Date getPositionEffectiveDate() { 145 return positionEffectiveDate; 146 } 147 148 /** 149 * Sets the positionEffectiveDate attribute. 150 * 151 * @param positionEffectiveDate The positionEffectiveDate to set. 152 */ 153 public void setPositionEffectiveDate(Date positionEffectiveDate) { 154 this.positionEffectiveDate = positionEffectiveDate; 155 } 156 157 /** 158 * Gets the positionEffectiveStatus attribute. 159 * 160 * @return Returns the positionEffectiveStatus. 161 */ 162 public String getPositionEffectiveStatus() { 163 return (this.active ? BudgetConstructionPositionConstants.POSITION_EFFECTIVE_STATUS_ACTIVE : BudgetConstructionPositionConstants.POSITION_EFFECTIVE_STATUS_INACTIVE); 164 // return positionEffectiveStatus; 165 } 166 167 /** 168 * Sets the positionEffectiveStatus attribute value. 169 * 170 * @param positionEffectiveStatus The positionEffectiveStatus to set. 171 */ 172 public void setPositionEffectiveStatus(String positionEffectiveStatus) { 173 174 // this.positionEffectiveStatus = positionEffectiveStatus; 175 this.active = Boolean.valueOf(BudgetConstructionPositionConstants.POSITION_EFFECTIVE_STATUS_ACTIVE.indexOf(positionEffectiveStatus) >= 0); 176 } 177 178 /** 179 * Gets the active attribute. 180 * @return Returns the active. 181 */ 182 public boolean isActive() { 183 return active; 184 } 185 186 /** 187 * Sets the active attribute value. 188 * @param active The active to set. 189 */ 190 public void setActive(boolean active) { 191 this.active = active; 192 } 193 194 /** 195 * Gets the positionStatus attribute. 196 * 197 * @return Returns the positionStatus. 198 */ 199 public String getPositionStatus() { 200 return positionStatus; 201 } 202 203 /** 204 * Sets the positionStatus attribute value. 205 * 206 * @param positionStatus The positionStatus to set. 207 */ 208 public void setPositionStatus(String positionStatus) { 209 this.positionStatus = positionStatus; 210 } 211 212 /** 213 * Gets the budgetedPosition attribute. 214 * 215 * @return Returns the budgetedPosition. 216 */ 217 public boolean isBudgetedPosition() { 218 return budgetedPosition; 219 } 220 221 /** 222 * Sets the budgetedPosition attribute value. 223 * 224 * @param budgetedPosition The budgetedPosition to set. 225 */ 226 public void setBudgetedPosition(boolean budgetedPosition) { 227 this.budgetedPosition = budgetedPosition; 228 } 229 230 /** 231 * Gets the confidentialPosition attribute. 232 * 233 * @return Returns the confidentialPosition. 234 */ 235 public boolean isConfidentialPosition() { 236 return confidentialPosition; 237 } 238 239 /** 240 * Sets the confidentialPosition attribute value. 241 * 242 * @param confidentialPosition The confidentialPosition to set. 243 */ 244 public void setConfidentialPosition(boolean confidentialPosition) { 245 this.confidentialPosition = confidentialPosition; 246 } 247 248 /** 249 * Gets the positionStandardHoursDefault attribute. 250 * 251 * @return Returns the positionStandardHoursDefault 252 */ 253 public BigDecimal getPositionStandardHoursDefault() { 254 return positionStandardHoursDefault; 255 } 256 257 /** 258 * Sets the positionStandardHoursDefault attribute. 259 * 260 * @param positionStandardHoursDefault The positionStandardHoursDefault to set. 261 */ 262 public void setPositionStandardHoursDefault(BigDecimal positionStandardHoursDefault) { 263 this.positionStandardHoursDefault = positionStandardHoursDefault; 264 } 265 266 /** 267 * Gets the positionRegularTemporary attribute. 268 * 269 * @return Returns the positionRegularTemporary 270 */ 271 public String getPositionRegularTemporary() { 272 return positionRegularTemporary; 273 } 274 275 /** 276 * Sets the positionRegularTemporary attribute. 277 * 278 * @param positionRegularTemporary The positionRegularTemporary to set. 279 */ 280 public void setPositionRegularTemporary(String positionRegularTemporary) { 281 this.positionRegularTemporary = positionRegularTemporary; 282 } 283 284 /** 285 * Gets the positionFullTimeEquivalency attribute. 286 * 287 * @return Returns the positionFullTimeEquivalency 288 */ 289 public BigDecimal getPositionFullTimeEquivalency() { 290 return positionFullTimeEquivalency; 291 } 292 293 /** 294 * Sets the positionFullTimeEquivalency attribute. 295 * 296 * @param positionFullTimeEquivalency The positionFullTimeEquivalency to set. 297 */ 298 public void setPositionFullTimeEquivalency(BigDecimal positionFullTimeEquivalency) { 299 this.positionFullTimeEquivalency = positionFullTimeEquivalency; 300 } 301 302 /** 303 * Gets the iuNormalWorkMonths attribute. 304 * 305 * @return Returns the iuNormalWorkMonths 306 */ 307 public Integer getIuNormalWorkMonths() { 308 return iuNormalWorkMonths; 309 } 310 311 /** 312 * Sets the iuNormalWorkMonths attribute. 313 * 314 * @param iuNormalWorkMonths The iuNormalWorkMonths to set. 315 */ 316 public void setIuNormalWorkMonths(Integer iuNormalWorkMonths) { 317 this.iuNormalWorkMonths = iuNormalWorkMonths; 318 } 319 320 /** 321 * Gets the iuPayMonths attribute. 322 * 323 * @return Returns the iuPayMonths 324 */ 325 public Integer getIuPayMonths() { 326 return iuPayMonths; 327 } 328 329 /** 330 * Sets the iuPayMonths attribute. 331 * 332 * @param iuPayMonths The iuPayMonths to set. 333 */ 334 public void setIuPayMonths(Integer iuPayMonths) { 335 this.iuPayMonths = iuPayMonths; 336 } 337 338 /** 339 * Gets the positionDescription attribute. 340 * 341 * @return Returns the positionDescription 342 */ 343 public String getPositionDescription() { 344 return positionDescription; 345 } 346 347 /** 348 * Sets the positionDescription attribute. 349 * 350 * @param positionDescription The positionDescription to set. 351 */ 352 public void setPositionDescription(String positionDescription) { 353 this.positionDescription = positionDescription; 354 } 355 356 /** 357 * Gets the setidDepartment attribute. 358 * 359 * @return Returns the setidDepartment 360 */ 361 public String getSetidDepartment() { 362 return setidDepartment; 363 } 364 365 /** 366 * Sets the setidDepartment attribute. 367 * 368 * @param setidDepartment The setidDepartment to set. 369 */ 370 public void setSetidDepartment(String setidDepartment) { 371 this.setidDepartment = setidDepartment; 372 } 373 374 /** 375 * Gets the positionDepartmentIdentifier attribute. 376 * 377 * @return Returns the positionDepartmentIdentifier 378 */ 379 public String getPositionDepartmentIdentifier() { 380 return positionDepartmentIdentifier; 381 } 382 383 /** 384 * Sets the positionDepartmentIdentifier attribute. 385 * 386 * @param positionDepartmentIdentifier The positionDepartmentIdentifier to set. 387 */ 388 public void setPositionDepartmentIdentifier(String positionDepartmentIdentifier) { 389 this.positionDepartmentIdentifier = positionDepartmentIdentifier; 390 } 391 392 /** 393 * Gets the responsibilityCenterCode attribute. 394 * 395 * @return Returns the responsibilityCenterCode 396 */ 397 public String getResponsibilityCenterCode() { 398 return responsibilityCenterCode; 399 } 400 401 /** 402 * Sets the responsibilityCenterCode attribute. 403 * 404 * @param responsibilityCenterCode The responsibilityCenterCode to set. 405 */ 406 public void setResponsibilityCenterCode(String responsibilityCenterCode) { 407 this.responsibilityCenterCode = responsibilityCenterCode; 408 } 409 410 /** 411 * Gets the positionUnionCode attribute. 412 * 413 * @return Returns the positionUnionCode 414 */ 415 public String getPositionUnionCode() { 416 return positionUnionCode; 417 } 418 419 /** 420 * Sets the positionUnionCode attribute. 421 * 422 * @param positionUnionCode The positionUnionCode to set. 423 */ 424 public void setPositionUnionCode(String positionUnionCode) { 425 this.positionUnionCode = positionUnionCode; 426 } 427 428 /** 429 * Gets the positionSalaryPlanDefault attribute. 430 * 431 * @return Returns the positionSalaryPlanDefault 432 */ 433 public String getPositionSalaryPlanDefault() { 434 return positionSalaryPlanDefault; 435 } 436 437 /** 438 * Sets the positionSalaryPlanDefault attribute. 439 * 440 * @param positionSalaryPlanDefault The positionSalaryPlanDefault to set. 441 */ 442 public void setPositionSalaryPlanDefault(String positionSalaryPlanDefault) { 443 this.positionSalaryPlanDefault = positionSalaryPlanDefault; 444 } 445 446 /** 447 * Gets the positionGradeDefault attribute. 448 * 449 * @return Returns the positionGradeDefault 450 */ 451 public String getPositionGradeDefault() { 452 return positionGradeDefault; 453 } 454 455 /** 456 * Sets the positionGradeDefault attribute. 457 * 458 * @param positionGradeDefault The positionGradeDefault to set. 459 */ 460 public void setPositionGradeDefault(String positionGradeDefault) { 461 this.positionGradeDefault = positionGradeDefault; 462 } 463 464 /** 465 * Gets the setidJobCode attribute. 466 * 467 * @return Returns the setidJobCode 468 */ 469 public String getSetidJobCode() { 470 return setidJobCode; 471 } 472 473 /** 474 * Sets the setidJobCode attribute. 475 * 476 * @param setidJobCode The setidJobCode to set. 477 */ 478 public void setSetidJobCode(String setidJobCode) { 479 this.setidJobCode = setidJobCode; 480 } 481 482 /** 483 * Gets the jobCode attribute. 484 * 485 * @return Returns the jobCode 486 */ 487 public String getJobCode() { 488 return jobCode; 489 } 490 491 /** 492 * Sets the jobCode attribute. 493 * 494 * @param jobCode The jobCode to set. 495 */ 496 public void setJobCode(String jobCode) { 497 this.jobCode = jobCode; 498 } 499 500 /** 501 * Gets the jobCodeDescription attribute. 502 * 503 * @return Returns the jobCodeDescription 504 */ 505 public String getJobCodeDescription() { 506 return jobCodeDescription; 507 } 508 509 /** 510 * Sets the jobCodeDescription attribute. 511 * 512 * @param jobCodeDescription The jobCodeDescription to set. 513 */ 514 public void setJobCodeDescription(String jobCodeDescription) { 515 this.jobCodeDescription = jobCodeDescription; 516 } 517 518 /** 519 * Gets the setidSalary attribute. 520 * 521 * @return Returns the setidSalary 522 */ 523 public String getSetidSalary() { 524 return setidSalary; 525 } 526 527 /** 528 * Sets the setidSalary attribute. 529 * 530 * @param setidSalary The setidSalary to set. 531 */ 532 public void setSetidSalary(String setidSalary) { 533 this.setidSalary = setidSalary; 534 } 535 536 /** 537 * Gets the iuDefaultObjectCode attribute. 538 * 539 * @return Returns the iuDefaultObjectCode 540 */ 541 public String getIuDefaultObjectCode() { 542 return iuDefaultObjectCode; 543 } 544 545 /** 546 * Sets the iuDefaultObjectCode attribute. 547 * 548 * @param iuDefaultObjectCode The iuDefaultObjectCode to set. 549 */ 550 public void setIuDefaultObjectCode(String iuDefaultObjectCode) { 551 this.iuDefaultObjectCode = iuDefaultObjectCode; 552 } 553 554 /** 555 * Gets the iuPositionType attribute. 556 * 557 * @return Returns the iuPositionType 558 */ 559 public String getIuPositionType() { 560 return iuPositionType; 561 } 562 563 /** 564 * Sets the iuPositionType attribute. 565 * 566 * @param iuPositionType The iuPositionType to set. 567 */ 568 public void setIuPositionType(String iuPositionType) { 569 this.iuPositionType = iuPositionType; 570 } 571 572 /** 573 * Gets the positionLockUserIdentifier attribute. 574 * 575 * @return Returns the positionLockUserIdentifier 576 */ 577 public String getPositionLockUserIdentifier() { 578 return positionLockUserIdentifier; 579 } 580 581 /** 582 * Sets the positionLockUserIdentifier attribute. 583 * 584 * @param positionLockUserIdentifier The positionLockUserIdentifier to set. 585 */ 586 public void setPositionLockUserIdentifier(String positionLockUserIdentifier) { 587 this.positionLockUserIdentifier = positionLockUserIdentifier; 588 } 589 590 /** 591 * Gets the responsibilityCenter attribute. 592 * 593 * @return Returns the responsibilityCenter. 594 */ 595 public ResponsibilityCenter getResponsibilityCenter() { 596 return responsibilityCenter; 597 } 598 599 /** 600 * Sets the responsibilityCenter attribute value. 601 * 602 * @param responsibilityCenter The responsibilityCenter to set. 603 * @deprecated 604 */ 605 public void setResponsibilityCenter(ResponsibilityCenter responsibilityCenter) { 606 this.responsibilityCenter = responsibilityCenter; 607 } 608 609 /** 610 * Gets the positionLockUser attribute value. 611 * 612 * @return Returns the positionLockUser 613 */ 614 public Person getPositionLockUser() { 615 if (positionLockUserIdentifier != null) { 616 positionLockUser = SpringContext.getBean(org.kuali.rice.kim.service.PersonService.class).updatePersonIfNecessary(positionLockUserIdentifier, positionLockUser); 617 } 618 return positionLockUser; 619 } 620 621 /** 622 * Sets the positionLockUser attribute. 623 * 624 * @param positionLockUser The positionLockUser to set. 625 * @deprecated 626 */ 627 public void setPositionLockUser(Person positionLockUser) { 628 this.positionLockUser = positionLockUser; 629 } 630 631 /** 632 * Gets the universityFiscal attribute. 633 * 634 * @return Returns the universityFiscal. 635 */ 636 public SystemOptions getUniversityFiscal() { 637 return universityFiscal; 638 } 639 640 /** 641 * Sets the universityFiscal attribute value. 642 * 643 * @param universityFiscal The universityFiscal to set. 644 */ 645 public void setUniversityFiscal(SystemOptions universityFiscal) { 646 this.universityFiscal = universityFiscal; 647 } 648 649 /** 650 * @see org.kuali.rice.kns.bo.PersistableBusinessObjectBase#buildListOfDeletionAwareLists() 651 */ 652 @Override 653 public List buildListOfDeletionAwareLists() { 654 655 List managedLists = super.buildListOfDeletionAwareLists(); 656 managedLists.add(getPendingBudgetConstructionAppointmentFunding()); 657 return managedLists; 658 } 659 660 /** 661 * Returns a map with the primitive field names as the key and the primitive values as the map value. 662 * 663 * @return Map 664 */ 665 public Map getValuesMap() { 666 Map simpleValues = new HashMap(); 667 668 simpleValues.put("positionNumber", getPositionNumber()); 669 simpleValues.put("universityFiscalYear", getUniversityFiscalYear()); 670 671 return simpleValues; 672 } 673 674 /** 675 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 676 */ 677 protected LinkedHashMap toStringMapper() { 678 LinkedHashMap m = new LinkedHashMap(); 679 m.put("positionNumber", this.positionNumber); 680 if (this.universityFiscalYear != null) { 681 m.put("universityFiscalYear", this.universityFiscalYear.toString()); 682 } 683 return m; 684 } 685 686 /** 687 * determine whether the current budget position is effective 688 * 689 * @return true if the current budget position is effective; otherwise, false 690 */ 691 public boolean isEffective() { 692 return !BCConstants.POSITION_CODE_INACTIVE.equals(this.getPositionEffectiveStatus()); 693 } 694 695 /** 696 * Gets the pendingBudgetConstructionAppointmentFunding attribute. 697 * 698 * @return Returns the pendingBudgetConstructionAppointmentFunding. 699 */ 700 public List<PendingBudgetConstructionAppointmentFunding> getPendingBudgetConstructionAppointmentFunding() { 701 return pendingBudgetConstructionAppointmentFunding; 702 } 703 704 /** 705 * Sets the pendingBudgetConstructionAppointmentFunding attribute value. 706 * 707 * @param pendingBudgetConstructionAppointmentFunding The pendingBudgetConstructionAppointmentFunding to set. 708 */ 709 @Deprecated 710 public void setPendingBudgetConstructionAppointmentFunding(List<PendingBudgetConstructionAppointmentFunding> pendingBudgetConstructionAppointmentFunding) { 711 this.pendingBudgetConstructionAppointmentFunding = pendingBudgetConstructionAppointmentFunding; 712 } 713 714 /** 715 * Gets the budgetConstructionPositionSelect attribute. 716 * 717 * @return Returns the budgetConstructionPositionSelect. 718 */ 719 public List<BudgetConstructionPositionSelect> getBudgetConstructionPositionSelect() { 720 return budgetConstructionPositionSelect; 721 } 722 723 /** 724 * Sets the budgetConstructionPositionSelect attribute value. 725 * 726 * @param budgetConstructionPositionSelect The budgetConstructionPositionSelect to set. 727 */ 728 @Deprecated 729 public void setBudgetConstructionPositionSelect(List<BudgetConstructionPositionSelect> budgetConstructionPositionSelect) { 730 this.budgetConstructionPositionSelect = budgetConstructionPositionSelect; 731 } 732 733 } 734