/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.bc.batch.dataaccess.impl;
import java.sql.Date;
import java.sql.Types;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.kuali.kfs.module.bc.BCConstants;
import org.kuali.kfs.module.bc.batch.dataaccess.BudgetConstructionHumanResourcesPayrollInterfaceDao;
import org.kuali.kfs.module.bc.document.dataaccess.impl.BudgetConstructionDaoJdbcBase;
public class BudgetConstructionHumanResourcesPayrollInterfaceDaoJdbc extends BudgetConstructionDaoJdbcBase implements BudgetConstructionHumanResourcesPayrollInterfaceDao {
/**
*
* @see org.kuali.kfs.module.bc.batch.dataaccess.BudgetConstructionHumanResourcesPayrollInterfaceDao#buildBudgetConstructionAdministrativePosts(java.lang.Integer)
*/
public void buildBudgetConstructionAdministrativePosts() {
/**
* this unrealistic implementation will simply clean out what is already there
*/
String sqlString = new String("DELETE FROM LD_BCN_ADM_POST_T\n");
getSimpleJdbcTemplate().update(sqlString);
}
/**
*
* @see org.kuali.kfs.module.bc.batch.dataaccess.BudgetConstructionHumanResourcesPayrollInterfaceDao#buildBudgetConstructionAppointmentFundingReasons(java.lang.Integer)
*/
public void buildBudgetConstructionAppointmentFundingReasons(Integer requestFiscalYear) {
/**
* this unrealistic implementation will simply clean out what is already there
*/
String sqlString = new String("DELETE FROM LD_BCN_AF_REASON_T WHERE (UNIV_FISCAL_YR = ?)\n");
getSimpleJdbcTemplate().update(sqlString,requestFiscalYear);
}
/**
*
* @see org.kuali.kfs.module.bc.batch.dataaccess.BudgetConstructionHumanResourcesPayrollInterfaceDao#buildBudgetConstructionIntendedIncumbent(java.lang.Integer)
*/
public void buildBudgetConstructionIntendedIncumbent(Integer requestFiscalYear) {
/**
* this unrealistic implementation will refresh all incumbents who presently exist in the CSF tracker, but
* leave any who no longer do in place.
*/
Integer baseFiscalYear = requestFiscalYear - 1;
StringBuilder sqlBuilder = new StringBuilder(1500);
sqlBuilder.append("DELETE FROM LD_BCN_INTINCBNT_T\n");
sqlBuilder.append("WHERE (EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM LD_CSF_TRACKER_T\n");
sqlBuilder.append(" WHERE (LD_CSF_TRACKER_T.UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (LD_CSF_TRACKER_T.EMPLID = LD_BCN_INTINCBNT_T.EMPLID)\n");
sqlBuilder.append(" AND (LD_CSF_TRACKER_T.POS_CSF_DELETE_CD = ?)))\n");
String sqlString = sqlBuilder.toString();
getSimpleJdbcTemplate().update(sqlString,baseFiscalYear,BCConstants.ACTIVE_CSF_DELETE_CODE);
sqlBuilder.delete(0, sqlBuilder.length());
/**
* constants for intended incumbent
* the "classification ID" is an IU-specific field that refers to faculty titles. we default it below.
* positions allowed in budget construction are those that are active in the current fiscal year, those that start
* July 1 of the coming fiscal year, or, if the person is a 10-month appointee, those that start on August 1 of the
* coming fiscal year.
*/
String defaultClassificationId = new String("TL");
GregorianCalendar calendarJuly1 = new GregorianCalendar(baseFiscalYear, Calendar.JULY, 1);
GregorianCalendar calendarAugust1 = new GregorianCalendar(baseFiscalYear, Calendar.AUGUST, 1);
Date julyFirst = new Date(calendarJuly1.getTimeInMillis());
Date augustFirst = new Date(calendarAugust1.getTimeInMillis());
/**
* this SQL is unrealistic, but tries to provide decent test data that will cover most cases.
* the "in-line view" is required because of the OBJ_ID, which frustrates using a DISTINCT directly.
* intended incumbent has only one row per person in real life. the position is the "principal job" in
* PeopleSoft, where people can have secondary appointments in other positions. the fields to implement
* this are not included in Kuali--hence our need to arbitrarily choose the highest position in sort order.
* the DISTINCT is necessary, because CSF can have more than one accounting line per person with the same
* position. that, unlike secondary jobs, is a common occurrence.
* in addition, the check for an "August 1" fiscal year is only done at IU for academic-year (10-pay) appointments
* the alias "makeUnique" for the in-line view is required by MySQL (but not by Oracle).
*/
sqlBuilder.append("INSERT INTO LD_BCN_INTINCBNT_T\n");
sqlBuilder.append("(EMPLID, PERSON_NM, SETID_SALARY, SAL_ADMIN_PLAN, GRADE, IU_CLASSIF_LEVEL, ACTV_IND)\n");
sqlBuilder.append("(SELECT EMPLID, PERSON_NM, BUSINESS_UNIT, POS_SAL_PLAN_DFLT, POS_GRADE_DFLT, ?, 'Y'\n");
sqlBuilder.append("FROM\n");
sqlBuilder.append("(SELECT DISTINCT csf.EMPLID,\n");
sqlBuilder.append(" CONCAT(CONCAT(csf.EMPLID,' LastNm HR'),CONCAT(', ',CONCAT(csf.EMPLID,' 1stNm HR'))) AS PERSON_NM,\n");
sqlBuilder.append(" pos.BUSINESS_UNIT,\n");
sqlBuilder.append(" pos.POS_SAL_PLAN_DFLT,\n");
sqlBuilder.append(" pos.POS_GRADE_DFLT\n");
sqlBuilder.append(" FROM LD_CSF_TRACKER_T csf,\n");
sqlBuilder.append(" PS_POSITION_DATA pos\n");
sqlBuilder.append(" WHERE (csf.UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (csf.POS_CSF_DELETE_CD = ?)\n");
sqlBuilder.append(" AND (csf.POSITION_NBR = pos.POSITION_NBR)\n");
sqlBuilder.append(" AND ((pos.EFFDT <= ?) OR (pos.EFFDT = ?))\n");
sqlBuilder.append(" AND (NOT EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM PS_POSITION_DATA pox\n");
sqlBuilder.append(" WHERE (pos.POSITION_NBR = pox.POSITION_NBR)\n");
sqlBuilder.append(" AND (pos.EFFDT < pox.EFFDT)\n");
sqlBuilder.append(" AND ((pox.EFFDT <= ?) OR (pox.EFFDT = ?))))\n");
sqlBuilder.append(" AND (NOT EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM LD_CSF_TRACKER_T cfx\n");
sqlBuilder.append(" WHERE (csf.UNIV_FISCAL_YR = cfx.UNIV_FISCAL_YR)\n");
sqlBuilder.append(" AND (csf.EMPLID = cfx.EMPLID)\n");
sqlBuilder.append(" AND (cfx.POS_CSF_DELETE_CD = ?)\n");
sqlBuilder.append(" AND (csf.POSITION_NBR < cfx.POSITION_NBR)))) makeUnique)\n");
sqlString = sqlBuilder.toString();
Object[] sqlArgumentList = {defaultClassificationId,baseFiscalYear,BCConstants.ACTIVE_CSF_DELETE_CODE,julyFirst,augustFirst,julyFirst,augustFirst,BCConstants.ACTIVE_CSF_DELETE_CODE};
int[] sqlArgumentTypes = {Types.VARCHAR,Types.INTEGER,Types.VARCHAR,Types.DATE,Types.DATE,Types.DATE,Types.DATE,Types.VARCHAR};
getSimpleJdbcTemplate().update(sqlString,sqlArgumentList);
// getSimpleJdbcTemplate().getJdbcOperations().update(sqlString,sqlArgumentList,sqlArgumentTypes);
}
/**
*
* @see org.kuali.kfs.module.bc.batch.dataaccess.BudgetConstructionHumanResourcesPayrollInterfaceDao#buildBudgetConstructionIntendedIncumbentWithFacultyAttributes(java.lang.Integer)
*/
public void buildBudgetConstructionIntendedIncumbentWithFacultyAttributes (Integer requestFiscalYear)
{
// this method is the same as buildBudgetConstructionIntendedIncumbent in the default interface.
// to update faculty ranks, one would modify buildBudgetConstructionIntendedIncumbent so the defaultClassifictaionId for faculty incumbents corresponded to the appropriate faculty level.
this.buildBudgetConstructionIntendedIncumbent(requestFiscalYear);
}
/**
*
* @see org.kuali.kfs.module.bc.batch.dataaccess.BudgetConstructionHumanResourcesPayrollInterfaceDao#buildBudgetConstructionPositionBaseYear(java.lang.Integer)
*/
public void buildBudgetConstructionPositionBaseYear(Integer baseFiscalYear) {
StringBuilder sqlBuilder = new StringBuilder(2000);
String defaultRCCd = new String("--");
/**
* we have to do this because imbedding a constant string in SQL assumes a string delimiter--that can vary with the DBMS
*/
String orgSeparator = new String("-");
GregorianCalendar calendarJuly1 = new GregorianCalendar(baseFiscalYear, Calendar.JULY, 1);
Date julyFirst = new Date(calendarJuly1.getTimeInMillis());
/**
* first, delete everything for the base year--we will refresh it in case the position has changed
*/
sqlBuilder.append("DELETE FROM LD_BCN_POS_T\n");
sqlBuilder.append("WHERE (UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM LD_CSF_TRACKER_T\n");
sqlBuilder.append(" WHERE (LD_CSF_TRACKER_T.UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (LD_CSF_TRACKER_T.POSITION_NBR = LD_BCN_POS_T.POSITION_NBR)\n");
sqlBuilder.append(" AND (LD_CSF_TRACKER_T.POS_CSF_DELETE_CD = ?)))\n");
String sqlString = sqlBuilder.toString();
getSimpleJdbcTemplate().update(sqlString,baseFiscalYear,baseFiscalYear,BCConstants.ACTIVE_CSF_DELETE_CODE);
sqlBuilder.delete(0, sqlBuilder.length());
/**
* re-create the base year position data
* we take the latest position that is active BEFORE the coming fiscal year
*/
sqlBuilder.append("INSERT INTO LD_BCN_POS_T\n");
sqlBuilder.append("(POSITION_NBR, UNIV_FISCAL_YR, POS_EFFDT, POS_EFF_STATUS, POSN_STATUS,\n");
sqlBuilder.append(" BUDGETED_POSN, CONFIDENTIAL_POSN, POS_STD_HRS_DFLT, POS_REG_TEMP, POS_FTE, POS_DESCR, SETID_DEPT, POS_DEPTID,\n");
sqlBuilder.append(" RC_CD, POS_SAL_PLAN_DFLT, POS_GRADE_DFLT, SETID_JOBCODE, JOBCODE, SETID_SALARY,\n");
sqlBuilder.append(" POS_LOCK_USR_ID)\n");
sqlBuilder.append("(SELECT px.POSITION_NBR,\n");
sqlBuilder.append(" ?, px.EFFDT, px.POS_EFF_STATUS,\n");
sqlBuilder.append(" px.POSN_STATUS, px.BUDGETED_POSN, 'N',\n");
sqlBuilder.append(" px.STD_HRS_DEFAULT, px.POS_REG_TEMP, px.POS_FTE, px.DESCR, px.BUSINESS_UNIT,\n");
sqlBuilder.append(" px.DEPTID, COALESCE(org.RC_CD,?),\n");
sqlBuilder.append(" px.POS_SAL_PLAN_DFLT, px.POS_GRADE_DFLT, px.BUSINESS_UNIT, px.JOBCODE,\n");
sqlBuilder.append(" px.BUSINESS_UNIT, ?\n");
sqlBuilder.append(" FROM PS_POSITION_DATA px LEFT OUTER JOIN LD_BCN_ORG_RPTS_T org\n");
sqlBuilder.append(" ON (CONCAT(CONCAT(org.FIN_COA_CD,?),org.ORG_CD) = px.DEPTID)\n");
sqlBuilder.append(" WHERE (px.EFFDT < ?)\n");
sqlBuilder.append(" AND (NOT EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM LD_BCN_POS_T\n");
sqlBuilder.append(" WHERE (LD_BCN_POS_T.UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (px.POSITION_NBR = LD_BCN_POS_T.POSITION_NBR)))\n");
sqlBuilder.append(" AND (NOT EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM PS_POSITION_DATA py\n");
sqlBuilder.append(" WHERE (px.POSITION_NBR = py.POSITION_NBR)\n");
sqlBuilder.append(" AND (py.EFFDT < ?)\n");
sqlBuilder.append(" AND (px.EFFDT < py.EFFDT)))\n");
sqlBuilder.append(" AND (EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM LD_CSF_TRACKER_T csf\n");
sqlBuilder.append(" WHERE (csf.UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (csf.POS_CSF_DELETE_CD = ?)\n");
sqlBuilder.append(" AND (csf.POSITION_NBR = px.POSITION_NBR))))\n");
sqlString = sqlBuilder.toString();
getSimpleJdbcTemplate().update(sqlString,baseFiscalYear,defaultRCCd,BCConstants.DEFAULT_BUDGET_HEADER_LOCK_IDS,orgSeparator,julyFirst,baseFiscalYear,julyFirst,baseFiscalYear,BCConstants.ACTIVE_CSF_DELETE_CODE);
// set the things that we'll need for testing but which we don't have enough information to set from the Kuali DB
// this code is obviously somewhat arbitrary--it should be replaced with institution-specific algorithms
setAcademicDefaultObjectClass(baseFiscalYear);
setMonthlyStaffOvertimeEligibleDefaultObjectClass(baseFiscalYear);
setMonthlyStaffOvertimeExemptDefaultObjectClass(baseFiscalYear);
setBiweeklyStaffDefaultObjectClass(baseFiscalYear);
}
/**
*
* @see org.kuali.kfs.module.bc.batch.dataaccess.BudgetConstructionHumanResourcesPayrollInterfaceDao#buildBudgetConstructionPositonRequestYear(java.lang.Integer)
*/
public void buildBudgetConstructionPositonRequestYear(Integer requestFiscalYear) {
StringBuilder sqlBuilder = new StringBuilder(2500);
// we build constants for DB independence. we let the library decide how they should be represented in what is passed to the DB server
String defaultRCCd = new String("--");
String orgSeparator = new String("-");
Integer baseFiscalYear = requestFiscalYear-1;
GregorianCalendar calendarJuly1 = new GregorianCalendar(baseFiscalYear, Calendar.JULY, 1);
GregorianCalendar calendarAugust1 = new GregorianCalendar(baseFiscalYear, Calendar.AUGUST, 1);
Date julyFirst = new Date(calendarJuly1.getTimeInMillis());
Date augustFirst = new Date(calendarAugust1.getTimeInMillis());
String academicPositionType = new String("AC");
String academicTenureTrackSalaryPlan = new String("AC1");
sqlBuilder.append("INSERT INTO LD_BCN_POS_T\n");
sqlBuilder.append("(POSITION_NBR, UNIV_FISCAL_YR, POS_EFFDT, POS_EFF_STATUS, POSN_STATUS,\n");
sqlBuilder.append(" BUDGETED_POSN, CONFIDENTIAL_POSN, POS_STD_HRS_DFLT, POS_REG_TEMP, POS_FTE, POS_DESCR, SETID_DEPT, POS_DEPTID,\n");
sqlBuilder.append(" RC_CD, POS_SAL_PLAN_DFLT, POS_GRADE_DFLT, SETID_JOBCODE, JOBCODE, SETID_SALARY,\n");
sqlBuilder.append(" POS_LOCK_USR_ID)\n");
sqlBuilder.append("(SELECT px.POSITION_NBR,\n");
sqlBuilder.append(" ?, px.EFFDT, px.POS_EFF_STATUS,\n");
sqlBuilder.append(" px.POSN_STATUS, px.BUDGETED_POSN, 'N',\n");
sqlBuilder.append(" px.STD_HRS_DEFAULT, px.POS_REG_TEMP, px.POS_FTE, px.DESCR, px.BUSINESS_UNIT,\n");
sqlBuilder.append(" px.DEPTID, COALESCE(org.RC_CD,?),\n");
sqlBuilder.append(" px.POS_SAL_PLAN_DFLT, px.POS_GRADE_DFLT, px.BUSINESS_UNIT, px.JOBCODE,\n");
sqlBuilder.append(" px.BUSINESS_UNIT, ?\n");
sqlBuilder.append(" FROM PS_POSITION_DATA px LEFT OUTER JOIN LD_BCN_ORG_RPTS_T org\n");
sqlBuilder.append(" ON (CONCAT(CONCAT(org.FIN_COA_CD,?),org.ORG_CD) = px.DEPTID)\n");
sqlBuilder.append(" WHERE ((px.EFFDT <= ?) OR ((px.EFFDT = ?) AND (px.POS_SAL_PLAN_DFLT = ?)))\n");
sqlBuilder.append(" AND (NOT EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM LD_BCN_POS_T\n");
sqlBuilder.append(" WHERE (LD_BCN_POS_T.UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (px.POSITION_NBR = LD_BCN_POS_T.POSITION_NBR)))\n");
sqlBuilder.append(" AND (NOT EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM PS_POSITION_DATA py\n");
sqlBuilder.append(" WHERE (px.POSITION_NBR = py.POSITION_NBR)\n");
sqlBuilder.append(" AND ((py.EFFDT <= ?) OR ((py.EFFDT = ?) AND (px.POS_SAL_PLAN_DFLT = ?)))\n");
sqlBuilder.append(" AND (px.EFFDT < py.EFFDT)))\n");
sqlBuilder.append(" AND (EXISTS (SELECT 1\n");
sqlBuilder.append(" FROM LD_CSF_TRACKER_T csf\n");
sqlBuilder.append(" WHERE (csf.UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (csf.POS_CSF_DELETE_CD = ?)\n");
sqlBuilder.append(" AND (csf.POSITION_NBR = px.POSITION_NBR))))\n");
String sqlString = sqlBuilder.toString();
getSimpleJdbcTemplate().update(sqlString,requestFiscalYear,defaultRCCd,BCConstants.DEFAULT_BUDGET_HEADER_LOCK_IDS,orgSeparator,julyFirst,augustFirst,academicTenureTrackSalaryPlan,requestFiscalYear,julyFirst,augustFirst,academicTenureTrackSalaryPlan,baseFiscalYear,BCConstants.ACTIVE_CSF_DELETE_CODE);
// set the things that we'll need for testing but which we don't have enough information to set from the Kuali DB
// this code is obviously somewhat arbitrary--it should be replaced with institution-specific algorithms
setAcademicDefaultObjectClass(requestFiscalYear);
setMonthlyStaffOvertimeEligibleDefaultObjectClass(requestFiscalYear);
setMonthlyStaffOvertimeExemptDefaultObjectClass(requestFiscalYear);
setBiweeklyStaffDefaultObjectClass(requestFiscalYear);
}
/**
* At IU, there is a concept of normal work months and pay months. For example, one can theoretically be in a 12-month position
* but only work during a 10-month academic year for some reason. This situation would make the "full time equivalent" for that
* person (assuming she works a 40-hour week during the 10 months) 10/12 or .893333....
* Each position is supposed to have an object class. No one should be able to budget a given position in a different object
* class, because that would break the "object level" reporting in accounting that gives totals for "academic salaries", etc.
* In this placeholder code, we set these based on the salary plan and the position type. At IU, there is a table containing salary plan and
* grade that is shared by payroll and the budget to mandate the object class used for salary funding.
*/
protected void setAcademicDefaultObjectClass(Integer fiscalYear)
{
// build constants for DB independence
Integer monthConstant = new Integer(10);
String positionType = new String("AC");
String defaultObject = new String("2000");
String salaryPlan = new String("AC1");
StringBuilder sqlBuilder = new StringBuilder(500);
sqlBuilder.append("UPDATE LD_BCN_POS_T\n");
sqlBuilder.append("SET IU_NORM_WORK_MONTHS = ?,\n");
sqlBuilder.append(" IU_PAY_MONTHS = ?,\n");
sqlBuilder.append(" IU_POSITION_TYPE = ?,\n");
sqlBuilder.append(" IU_DFLT_OBJ_CD = ?\n");
sqlBuilder.append("WHERE (UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (POS_SAL_PLAN_DFLT = ?)");
String sqlString = sqlBuilder.toString();
getSimpleJdbcTemplate().update(sqlString,monthConstant,monthConstant,positionType,defaultObject,fiscalYear,salaryPlan);
}
protected void setMonthlyStaffOvertimeEligibleDefaultObjectClass(Integer fiscalYear)
{
// build constants for DB independence
Integer monthConstant = new Integer(12);
String positionType = new String("SM");
String defaultObject = new String("2480");
String[] salaryPlan = {new String("PAO"), new String("PAU")};
StringBuilder sqlBuilder = new StringBuilder(500);
sqlBuilder.append("UPDATE LD_BCN_POS_T\n");
sqlBuilder.append("SET IU_NORM_WORK_MONTHS = ?,\n");
sqlBuilder.append(" IU_PAY_MONTHS = ?,\n");
sqlBuilder.append(" IU_POSITION_TYPE = ?,\n");
sqlBuilder.append(" IU_DFLT_OBJ_CD = ?\n");
sqlBuilder.append("WHERE (UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (POS_SAL_PLAN_DFLT IN (?,?))\n");
String sqlString = sqlBuilder.toString();
getSimpleJdbcTemplate().update(sqlString,monthConstant,monthConstant,positionType,defaultObject,fiscalYear,salaryPlan[0],salaryPlan[1]);
}
protected void setMonthlyStaffOvertimeExemptDefaultObjectClass(Integer fiscalYear)
{
// build constants for DB independence
// (note that this uses a pattern, and therefore assumes that any specific position types beginning with 'P' that go to
// a different default object class have already been assigned)
Integer monthConstant = new Integer(12);
String positionType = new String("SM");
String defaultObject = new String("2400");
String salaryPlan = new String("P%");
StringBuilder sqlBuilder = new StringBuilder(500);
sqlBuilder.append("UPDATE LD_BCN_POS_T\n");
sqlBuilder.append("SET IU_NORM_WORK_MONTHS = ?,\n");
sqlBuilder.append(" IU_PAY_MONTHS = ?,\n");
sqlBuilder.append(" IU_POSITION_TYPE = ?,\n");
sqlBuilder.append(" IU_DFLT_OBJ_CD = ?\n");
sqlBuilder.append("WHERE (UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (POS_SAL_PLAN_DFLT LIKE ?)\n");
sqlBuilder.append(" AND (IU_DFLT_OBJ_CD IS NULL)\n");
String sqlString = sqlBuilder.toString();
getSimpleJdbcTemplate().update(sqlString,monthConstant,monthConstant,positionType,defaultObject,fiscalYear,salaryPlan);
}
protected void setBiweeklyStaffDefaultObjectClass(Integer fiscalYear)
{
// build constants for DB independence
// (note that we are only assigning default object codes to positions not yet assigned a default. so, this method must
// be called last. In particular, there is no check on salary plan.)
Integer monthConstant = new Integer(12);
String positionType = new String("SB");
String defaultObject = new String("2500");
String defaultUnionCode = new String("B1");
StringBuilder sqlBuilder = new StringBuilder(500);
sqlBuilder.append("UPDATE LD_BCN_POS_T\n");
sqlBuilder.append("SET IU_NORM_WORK_MONTHS = ?,\n");
sqlBuilder.append(" IU_PAY_MONTHS = ?,\n");
sqlBuilder.append(" IU_POSITION_TYPE = ?,\n");
sqlBuilder.append(" POS_UNION_CD = ?,\n");
sqlBuilder.append(" IU_DFLT_OBJ_CD = ?\n");
sqlBuilder.append("WHERE (UNIV_FISCAL_YR = ?)\n");
sqlBuilder.append(" AND (IU_DFLT_OBJ_CD IS NULL)\n");
String sqlString = sqlBuilder.toString();
getSimpleJdbcTemplate().update(sqlString,monthConstant,monthConstant,positionType,defaultUnionCode,defaultObject,fiscalYear);
}
/**
*
* @see org.kuali.kfs.module.bc.batch.dataaccess.BudgetConstructionHumanResourcesPayrollInterfaceDao#updateNamesInBudgetConstructionIntendedIncumbent()
*/
public void updateNamesInBudgetConstructionIntendedIncumbent()
{
// do nothing in the default: the names are added in the build routines
}
}