NC休假加班存储过程

这是一个关于NC系统的存储过程包,用于自动化处理员工休假和加班数据。包含多个过程,如`Auto_Gen_Employee_Leave`和`Auto_Gen_Try_Employee_Leave`,用于在特定日期生成或追回试用期员工的假期。同时,定义了数据库连接,如`ERP_DBL`,并涉及到员工工龄、职级、假期类型等信息的计算和更新。
摘要由CSDN通过智能技术生成
CREATE OR REPLACE PACKAGE BODY PKG_LEAVE AS
/*新


-- Add/modify columns
alter table HR_EMPLOYEE_ENJOY_LEAVE add PK_ORG char(20);
update HR_EMPLOYEE_ENJOY_LEAVE h set h.PK_ORG=(select chg.pk_hrorg from bd_psndoc psn inner join hi_psnorg chg on psn.pk_psndoc=chg.pk_psndoc and chg.lastflag='Y' where psn.pk_psndoc=h.pk_psndoc)




ERP数据库连接:
-- Drop existing database link
drop public database link ERP_DBL;
-- Create database link
create public database link ERP_DBL  connect to CCIS0601 identified by TEST using '10.200.135.13:1521/orc9';


delete from HR_ELEAVE_MAPPING;
delete from HR_EMPLOYEE_ENJOY_LEAVE;


select * from tbm_timeitem;


生产系统:
1002Z710000000021ZLJ  年假
10018G1000000000BM37  上年年假
10018G1000000000BM2T  调整年假
10018G1000000000BM2P  年假延期


10018G1000000000BM2N  司龄假
10018G1000000000BM39  上年司龄假
10018G1000000000BM2R  司龄假延期
10018G1000000000BM2V  调整司龄假


10018G1000000000BM2L  补休
10018G1000000000BM33  调整补休
10018G1000000000BM35  补休延期


*/


  /*********************************************************************************************************************
    NAME:    Auto_Gen_Employee_Leave


    Declare
      i Integer;
    Begin
       dbms_job.submit(i,'PKG_LEAVE.Auto_Gen_Employee_Leave;',Sysdate,'TRUNC(LAST_DAY(SYSDATE))+1+1/24');
    end;
    ---查看定时任务
    select * from user_jobs;


    HISOTORY:
    DATE            NAME        DESCRIPTION
    2016-03-25     River     PROCEDURE CREATED
  ***********************************************************************************************************************/
  
  /*********************************************************************************************************************
    NAME:    pro_Supplement_Leave_Mapping


    Declare
      i Integer;
    Begin
       dbms_job.submit(i,'pkg_leave.pro_supplement_leave_mapping(presult => :presult);',Sysdate,'TRUNC(LAST_DAY(SYSDATE))+1+1/24');
    end;
    ---查看定时任务
    select * from user_jobs;


    HISOTORY:
    DATE            NAME        DESCRIPTION
    2017-10-12     Waite     PROCEDURE CREATED
  ***********************************************************************************************************************/
  
PROCEDURE Auto_Gen_Employee_Leave AS
vResult varchar(20);


begin


    --当月1日生成员工假期后入职的同事,在下月生成假期时补生成上月1号后入职同事的假期
    --公司所有部门使用后,开启此检测功能
    --PKG_LEAVE.Gen_Employee_Leave(to_char(add_months(sysdate,-1),'YYYY'),to_char(add_months(sysdate,-1),'MM'),vResult);
    PKG_LEAVE.Gen_Employee_Leave(to_char(sysdate,'YYYY'),to_char(add_months(sysdate,0),'MM'),vResult);--当前月份减一
    pkg_leave.pro_supplement_leave_mapping(vResult);


end Auto_Gen_Employee_Leave;


  /*********************************************************************************************************************
    NAME:    Auto_Gen_Try_Employee_Leave 追回试用期员工假期


    Declare
      i Integer;
    Begin
       dbms_job.submit(i,'PKG_LEAVE.Auto_Gen_Employee_Leave;',Sysdate,'TRUNC(LAST_DAY(SYSDATE))+1+1/24');
    end;
    ---查看定时任务
    select * from user_jobs;


    HISOTORY:
    DATE            NAME        DESCRIPTION
    2016-03-25     River     PROCEDURE CREATED
  ***********************************************************************************************************************/
PROCEDURE Auto_Gen_Try_Employee_Leave AS
vResult varchar(20);


begin


    --当月1日生成员工假期后入职的同事,在下月生成假期时补生成上月1号后入职同事的假期
    --公司所有部门使用后,开启此检测功能
    --PKG_LEAVE.Gen_Employee_Leave(to_char(add_months(sysdate,-6),'YYYY'),to_char(add_months(sysdate,-6),'MM'),vResult);
    --PKG_LEAVE.Gen_Employee_Leave(to_char(add_months(sysdate,-5),'YYYY'),to_char(add_months(sysdate,-5),'MM'),vResult);
    --PKG_LEAVE.Gen_Employee_Leave(to_char(add_months(sysdate,-4),'YYYY'),to_char(add_months(sysdate,-4),'MM'),vResult);
    --PKG_LEAVE.Gen_Employee_Leave(to_char(add_months(sysdate,-3),'YYYY'),to_char(add_months(sysdate,-3),'MM'),vResult);
    --PKG_LEAVE.Gen_Employee_Leave(to_char(add_months(sysdate,-2),'YYYY'),to_char(add_months(sysdate,-2),'MM'),vResult);
    --PKG_LEAVE.Gen_Employee_Leave(to_char(add_months(sysdate,-1),'YYYY'),to_char(add_months(sysdate,-1),'MM'),vResult);
    PKG_LEAVE.Gen_Employee_Leave(to_char(sysdate,'YYYY'),to_char(sysdate,'MM'),vResult);


end Auto_Gen_Try_Employee_Leave;


/*********************************************************************************************************************


  NAME:    Auto_Gen_Employee_Leave


  DESCRIPTION: Auto Gen Employee Leave /每月1日执行一次
  DATE            NAME        DESCRIPTION
  2015-12-28      River     PROCEDURE CREATED


------------
--员工编号
--员工转正日期
--员工Hire_Date
--员工所在地:中、港、台
--员工职级
--员工年资
--员工每月应有年假
--员工每月应有司龄假
------------
***********************************************************************************************************************/
PROCEDURE Gen_Employee_Leave(pLEAVE_YEAR number ,pLEAVE_MONTH number,presult out varchar2) IS
CURSOR TEMP_CUR IS
select
      psn.PK_PSNDOC,--员工 ID
      psn.code psn_Code,--员工编号
      psn.name psn_name,--员工名称
      job.pk_org PK_HRORG, --使用最新的工作记录的组织
      org.name org_name,--组织
      org.code org_code,
      to_date(chg.begindate,'YYYY-MM-DD') Working_age,--工龄Hire_Date---计算享有假期福利
      to_date(job.begindate,'YYYY-MM-DD') Hire_Date, --当前岗位入职日期
      to_date(job.jobglbdef29,'YYYY-MM-DD') Positive_Date, ---计算享有假期福利
      --早期数据尚好转正日期,系统默认为入职日期+3个月
      --to_date(nvl(job.jobglbdef29,to_char(add_months(to_date(chg.begindate,'YYYY-MM-DD'),3),'YYYY-MM-DD')),'YYYY-MM-DD') Positive_Date,
      bd_defdoc1.name Grade ,---当前岗位职级 计算享有假期福利
      (case when psn.code='0013' then 20 when psn.code='0151' then 17 else he.annual_day end) annual_day , --年假    ---香港特殊人员休假不按规则表 --  鄧麗貞 
      he.working_age_day, --司龄假
      he.extended_day,--可延假 (适用HK)
      he.region,he.grade as rank,
    --  job1.recordnum ,--记录序号
    --  job1.endflag ,--是否结束
    --  job1.lastflag ,--是否最新工作记录
    --  bd_defdoc2.name ,--该记录岗位职级
      to_date(job.begindate ,'YYYY-MM-DD')  Adjustment_Date --变动日期
from bd_psndoc psn
inner join hi_psnorg chg on psn.pk_psndoc=chg.pk_psndoc and chg.lastflag='Y'
inner join hi_psnjob job on psn.pk_psndoc=job.pk_psndoc  and job.lastflag='Y' and job.ismainjob='Y'--主职
inner join bd_defdoc bd_defdoc1 on job.jobglbdef28 = bd_defdoc1.pk_defdoc
inner join org_orgs org on job.pk_org = org.pk_org
inner join HR_EMPLOYEE_LEAVE_BENEFITS he on he.status=1
and he.grade=decode(upper(substr(bd_defdoc1.name,1,1)),'A',1,'B',2,'C',3,'D',4,'E',5,'F',6,'G',7)
and he.region =decode(substr(org.code,1,2),'HK',decode(job.pk_dept,'10016H100000000006XZ',4,2),'TA',3,1)
and decode(floor((to_date((to_char(pLEAVE_YEAR) || substr('0' || to_char(pLEAVE_MONTH),-2) || '01'),'YYYY-MM-DD')-to_date(chg.begindate,'YYYY-MM-DD'))/365+1),0,1,floor((to_date((to_char(pLEAVE_YEAR) || substr('0' || to_char(pLEAVE_MONTH),-2) || '01'),'YYYY-MM-DD')-to_date(chg.begindate,'YYYY-MM-DD'))/365+1))  between he.work_year_from and he.work_year_to
--UW floor((to_date((to_char(pLEAVE_YEAR) || substr('0' || to_char(pLEAVE_MONTH),-2) || '01'),'YYYY-MM-DD')-to_date(chg.begindate,'YYYY-MM-DD'))/365+1)  between he.work_year_from and he.work_year_to
where to_char(to_date(chg.begindate,'YYYY-MM-DD'),'YYYYMMDD')<=to_char(add_months(to_date((to_char(pLEAVE_YEAR) || substr('0' || to_char(pLEAVE_MONTH),-2) || '01'),'YYYY-MM-DD'),1)-1, 'YYYYMMDD') and
--job.PK_DEPT IN ('10016H1000000000045F','10016H1000000000045T','10016H100000000002ZA','10016H100000000002ZO','10016H100000000005G2','10016H100000000007Z6','10016H100000000007ZK','10016H10000000000684','10016H100000000006TI','10016H100000000005GG') and  -- OR code like '%CCIB%'
job.trnsevent<>4 and --非离职人员
--psn.glbdef30='10018G1000000000I4OV' and  --DYX 10018G1000000000I4OV  CCIB 10018G1000000000I4OW
      to_char(add_months(to_date((to_char(pLEAVE_YEAR) || substr('0' || to_char(pLEAVE_MONTH),-2) || '01'),'YYYY-MM-DD'),1)-1, 'YYYYMMDD')
      between replace(job.begindate,'-','') and 
      decode(job.enddate,null,to_char(add_months(to_date((to_char(pLEAVE_YEAR) || substr('0' || to_char(pLEAVE_MONTH),-2) || '01'),'YYYY-MM-DD'),1)-1, 'YYYYMMDD'),replace(job.enddate,'-','')) and
      job.begindate  is not null and  --当前岗位Hire_Date
      job.jobglbdef29 is not null and --入职转正日期不为空
      --to_date(job.jobglbdef29,'YYYY-MM-DD')>to_date('2017-06-01','YYYY-MM-DD') and  ---计算享有假期福利
      --添加转正日期大于于6月1日的 
      bd_defdoc1.name  is not null and --内部级别不为空
      --台湾人员2018年1月前不需每月分配,兼职人员不需分配假期
      substr(org.code,1,2) not in('TA')  --and psn.pk_psndoc=(select pk_psndoc from bd_psndoc where code='0151')--betty
      order by psn.PK_PSNDOC;
/*
1、员工享有假期基础数据表 HR_Employee_leave_benefits
drop table HR_EMPLOYEE_LEAVE_BENEFITS;
-- Create table
create table HR_EMPLOYEE_LEAVE_BENEFITS
(
  ID             NUMBER not null,
  REGION         NUMBER not null, -- 1、PRC 2、HK 3、TW
  GRADE          NUMBER not null, ---1、A  2、B  3、C  4、D  5、E  6、F  7、G
  WORK_YEAR_FROM NUMBER not null, --工作年限 最小 1,6,11,16,21,22,23,24,25,26,27
  WORK_YEAR_TO   NUMBER not null, --工作年限 最大 5,10,15,20,21,22,23,24,25,26,27
  annual_day     NUMBER not null, --年假
  Working_age_day NUMBER not null, --司龄假
  extended_day    NUMBER not null, --可延假
  STATUS         NUMBER default 1 not null, --null 无效 --1、有效
  CREATE_DATE    DATE default sysdate not null
);


-- Create sequence
create sequence HR_EMPLOYEE_LEAVE_BENEFITS_SEQ
minvalue 1
maxvalue 999999999999
start with 1
increment by 1
cache 30;


-- Create/Recreate primary, unique and foreign key constraints
alter table HR_EMPLOYEE_LEAVE_BENEFITS  add constraint HR_EMPLOYEE_LEAVE_BENEFITS_PK primary key (ID);
alter table HR_EMPLOYEE_LEAVE_BENEFITS add constraint HR_EMPLOYEE_LEAVE_BENEFITS_UK unique (GRADE, REGION, WORK_YEAR_FROM, WORK_YEAR_TO, STATUS);


2、员工享有假期数据表 HR_EMPLOYEE_ENJOY_LEAVE
-- Create table
drop table HR_EMPLOYEE_ENJOY_LEAVE;
create table HR_EMPLOYEE_ENJOY_LEAVE
(
  ID          NUMBER not null,
  PK_PSNDOC   CHAR(20) not null, --员工 ID
  PK_TIMEITEM   CHAR(20) not null,--1、年假 2、司龄假  3、上年年假  4、上年司龄假 5、调整年假 6、调整司龄假   7、年假延期 8、司龄假延期 (在tbm_timeitem建立假期类型,再改ID)
  LEAVE_YYYY  NUMBER(4) not null, --YYYY
  LEAVE_MM NUMBER(2) not null, --MM
  LEAVE_QTY   NUMBER(5,3) not null, --年假(天)、司龄假(天)、补休(小时)
  LEAVE_UNIT   NUMBER(1) default 1, --1、天 2、小时
  START_DATE  DATE not null,
  END_DATE    DATE not null,
  FIRST_AUDIOR varchar(20), --主管审批sm_user
  FIRST_AUDIT_DATE DATE,
  FIRST_AUDIT_REMARK varchar(200),
  SECOND_AUDIOR varchar(20), --HR审批sm_user
  SECOND_AUDIT_DATE DATE,
  SECOND_AUDIT_REMARK varchar(200),
  THIRD_AUDIOR varchar(20), --sm_user
  THIRD_AUDIT_DATE DATE,
  THIRD_AUDIT_REMARK varchar(200),
  FOURTH_AUDIOR varchar(20), --sm_user
  FOURTH_AUDIT_DATE DATE,
  FOURTH_AUDIT_REMARK varchar(200),
  CREATE_DATE DATE default sysdate not null,
  CREATOR varchar(20), --sm_user)
  TS   CHAR(19) default to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
);


-- Create sequence
drop sequence HR_EMPLOYEE_ENJOY_LEAVE_SEQ;
create sequence HR_EMPLOYEE_ENJOY_LEAVE_SEQ
minvalue 1
maxvalue 999999999999
start with 1
increment by 1
cache 30;


-- Create/Recreate primary, unique and foreign key constraints
alter table HR_EMPLOYEE_ENJOY_LEAVE  add constraint HR_EMPLOYEE_ENJOY_LEAVE_PK primary key (ID);
alter table HR_EMPLOYEE_ENJOY_LEAVE  add constraint HR_EMPLOYEE_ENJOY_LEAVE_UK unique (PK_PSNDOC, PK_TIMEITEM, LEAVE_YYYY,LEAVE_MM);


*/


vResult varchar(20);
vRegion varchar(3);
vWorking_Year_Percent number; --本年可工作时间比例
vAverage_monthly_holidays number; --每月平均可有假期


vAnnual_day_addyear number; --年资加一年年假
vAnnual_day number; --年假
vWorking_age_day number; --司龄假


vPre_Extended_day number; --上年可延假
vPre_Working_Year_Percent number; --上年可工作时间比例


vTotal_Annual_day number; --已享有年假
vTotal_Working_age_day number; --已享有司龄假


vRecord_QTY number;
vCur_date date; --当前计假日期
vCur_End_date date; --当前年最后一天
vHire_Date_FirstMon_T_Day number; --试用期当月总天数


vCur_Date_YM number; --当前计假时间 YYYYMM
vCur_Month_Total_Day number; --当前计假月总天数


vEmp_Date_YM number; --员工入职时间 YYYYMM
vEmp_Date_Year number; --员工入职时间 YYYY
vEmp_Date_Month number; --员工入职时间 MM
vEmp_Date_Day number; --员工入职时间 DD


vPositive_Year number; --员工转正时间 YYYY
vPK_TIMEITEM CHAR(20) ; --当前假期类型 1、年假 2、司龄假  3、上年年假  4、上年司龄假 5、调整年假 6、调整司龄假   7、年假延期 8、司龄假延期 9、补休 10、调整补休 11、补休延期


vLEAVE_QTY number;  --享有假期天数
vSTART_DATE date; --开始日期
vEND_DATE date; --结束日期
vTW_END_DATE date; --TW 结束日期
begin
presult:='Failed';
      if pLEAVE_YEAR>2016 and  pLEAVE_MONTH>0 and  pLEAVE_MONTH <13 then
          vCur_date:=to_date(to_char(pLEAVE_YEAR) || '-' || substr('00' || to_char(pLEAVE_MONTH),-2) || '-01','YYYY-MM-DD');--//当前计假日期


          vCur_Date_YM:=to_number(to_char(vCur_date,'YYYYMM'));--//当前计假时间 YYYYMM
          vCur_Month_Total_Day:=to_number(to_char(last_day(vCur_date),'DD'));--//当前计假月总天数


          vCur_End_date:=to_date(to_char(vCur_date,'YYYY') || '-12-31','YYYY-MM-DD');--//当前年最后一天
          vTW_END_DATE:=to_date(to_char(pLEAVE_YEAR+1) || '-03-31','YYYY-MM-DD');--//TW 结束日期


          /*
          1、区分1、PRC 2、HK 3、TW
          2、是否当年1月,计算剩余假和延期数
          3、根据员工职级、年资、计算假期、是否转正


          11、PRC、HK、TW假期计算统一为:
          a)每月1号,系统自动计算分给员工当月假期; 若员工A在3月10日由E职级升到D级,即其在3月1日用E级假期福利计算3月份的假,4月1日用D级假期福利计算4月份的假;
          b)员工试用期间的假期在试用期过后才能申请使用;若PRC或HK员工A在9月1日入职(享D级5天年假,7天司龄假),第二年1月1日转正,在1月其可用年假为4天;
          c)员工入职第一个月的应有假期,按当月工作天数比例计算;若员工A在1月10日由入职(享D级5天年假,7天司龄假),即1月应有假期为(31-10+1)/31 * (5+7)/12=0.704天年假
          d) 若员工A有3天假期[年假/司龄假/补休]在2015年12月31日到期,系统允许在12月31日~1月5日(1、2、3日为公众假期)申请休这3天年假;
          e)假期工龄计算:[1到5年]入职~未满5年  [6到10年]满5年~未满10年 [11到15年]满10年~未满15年 ,如此类推..;
          员工A 入职日期:2015/9/10 转正日期:2015/12/9  1~5年工龄  6~10年工龄  …
          PRC  2015/9/10~2020/9/9  2020/9/10~2025/9/9  …
          HK  2015/9/10~2020/9/9  2020/9/10~2025/9/9  …
          TW  2015/9/10~2020/9/9  2020/9/10~2025/9/9  …
          f)年假/司龄假/补休假期保留3位小数;
          g)增加假期延期申请功能、假期调整功能,具体权限分配由HR决定;


          12、1月1日~6月30日PRC员工年资变动导致假期变化的,系统按员工最新假期福利先分摊年假,再分摊司龄假。7月1日~12月31日发生变化的全以司龄假分摊;
          13、TW可预支不超过当年剩余的总年假,HK、PRC不能预支假期;
          14、PRC、HK、TW员工在年底申请中的年假和司龄假,若没审批完,系统在1月1日将自动审批通过,否则影响延假计算。(此问题待HR提供解决办法)


--当前假期类型 1、年假 2、司龄假  3、上年年假  4、上年司龄假 5、调整年假 6、调整司龄假   7、年假延期 8、司龄假延期 9、补休 10、调整补休 11、补休延期
1002Z710000000021ZLJ  年假
10018G1000000000BM37  上年年假
10018G1000000000BM2T  调整年假
10018G1000000000BM2P  年假延期


10018G1000000000BM2N  司龄假
10018G1000000000BM39  上年司龄假
10018G1000000000BM2R  调整司龄假
10018G1000000000BM2V  司龄假延期


10018G1000000000BM2L  补休
10018G1000000000BM33  调整补休
10018G1000000000BM35  补休延期


          */
          For TEMP_CUR_RECORD in TEMP_CUR loop
              ---员工所在地区
              if substr(TEMP_CUR_RECORD.org_code,1,2)='HK' then
                    vRegion:= 'HK';
              elsif substr(TEMP_CUR_RECORD.org_code,1,3)='TAI' then
                    vRegion:= 'TW';
              else
                    vRegion:= 'PRC';
              end if ;


              --员工入职时间年月日
              vEmp_Date_Year:=to_number(to_char(TEMP_CUR_RECORD.Working_age,'YYYY')); --员工入职时间 YYYY-mm-dd  --//由Hire_Date改为Working_age
              vEmp_Date_Month:=to_number(to_char(TEMP_CUR_RECORD.Working_age,'MM')); --员工入职时间 MM --//由Hire_Date改为Working_age
              vEmp_Date_Day:=to_number(to_char(TEMP_CUR_RECORD.Working_age,'DD'));--员工入职时间 DD --//由Hire_Date改为Working_age
              vEmp_Date_YM:=to_number(to_char(TEMP_CUR_RECORD.Working_age,'YYYYMM')); --员工入职时间 YYYYMM --//由Hire_Date改为Working_age


              --计算假期的开始日期 & 结束日期
              if TEMP_CUR_RECORD.Positive_Date>vCur_date then --转正日期>当前日期,员工还没转正,假期生效时间为转正日期
                   vSTART_DATE:=TEMP_CUR_RECORD.Positive_Date;--TEMP_CUR_RECORD.Positive_Date;--UW
                   --TW有效期15个月 ,PRC、HK当年有效
                   if vRegion= 'TW' then
                      vEND_DATE:=vTW_END_DATE;
                   else  --
                     vPositive_Year:=to_number(to_char(TEMP_CUR_RECORD.Positive_Date,'YYYY')); ----员工转正时间 YYYY
                     if vPositive_Year>pLEAVE_YEAR then --跨年转正
                        vEND_DATE:=to_date(to_char(vPositive_Year) || '-12-31','YYYY-MM-DD');
                     else
                        vEND_DATE:=vCur_End_date;
                     end if;
                   end if;
              else ---已经转正
                   vSTART_DATE:=vCur_date;
                   vEND_DATE:=vCur_End_date;
              end if;
-------------跨年假期结转-------------------------------------
             if pLEAVE_MONTH=1 then ---计算可延假 ,可延假>0 and 月份=1
                --计算当年假期
                if vEmp_Date_Year<(pLEAVE_YEAR-1) then --当前年大天其入职年
                    vPre_Working_Year_Percent:=1; --本年可工作时间比例
                else--本年入职
                    vHire_Date_FirstMon_T_Day:=to_number(to_char(last_day(TEMP_CUR_RECORD.Working_age),'DD')); --试用期当月总天数 --//由Hire_Date改为Working_age
                    vPre_Working_Year_Percent:=(12-vEmp_Date_Month+(vHire_Date_FirstMon_T_Day-vEmp_Date_Day+1)/vHire_Date_FirstMon_T_Day)/12; --上年可工作时间比例
                end if;


                --he.annual_day, --年假
                --he.working_age_day, --司龄假
                --vPre_Extended_day:=TEMP_CUR_RECORD.extended_day*vPre_Working_Year_Percent;  --上年可延假
                --vPre_Extended_day:=TEMP_CUR_RECORD.working_age_day*vPre_Working_Year_Percent;  --上年可延假
                --if vPre_Extended_day>0 then ---计算可延假 ,可延假>0 and 月份=1
                    if vRegion= 'PRC' then
                            vPre_Extended_day:=TEMP_CUR_RECORD.working_age_day*vPre_Working_Year_Percent;  --上年可延司龄假
                            vPK_TIMEITEM :='10018G1000000000BM39'; --当前假期类型 1、年假 2、司龄假  3、上年年假  4、上年司龄假 5、调整年假 6、调整司龄假   7、年假延期 8、司龄假延期
                            ---检查数据是否已存在
                            select  count(1) into vRecord_QTY from HR_EMPLOYEE_ENJOY_LEAVE h inner join HR_ELEAVE_MAPPING m on m.hr_employee_enjoy_leave_id=h.id where PK_PSNDOC=TEMP_CUR_RECORD.PK_PSNDOC and PK_ORG=TEMP_CUR_RECORD.PK_HRORG and LEAVE_YYYY=pLEAVE_YEAR and PK_TIMEITEM=vPK_TIMEITEM;
                            if vRecord_QTY=0 then--假期记录不存在 可以新增
                               delete from HR_EMPLOYEE_ENJOY_LEAVE where PK_PSNDOC=TEMP_CUR_RECORD.PK_PSNDOC and PK_ORG=TEMP_CUR_RECORD.PK_HRORG and LEAVE_YYYY=pLEAVE_YEAR and PK_TIMEITEM=vPK_TIMEITEM;
                               --计算剩余假期
                               select nvl(sum(lastdayorhour+realdayorhour -yidayorhour-freezedayorhour), 0) into vLEAVE_QTY from tbm_leavebalance where pk_psndoc=TEMP_CUR_RECORD.PK_PSNDOC and PK_ORG=TEMP_CUR_RECORD.PK_HRORG and curyear=to_char(pLEAVE_YEAR-1) and pk_timeitem='10018G1000000000BM2N';
                                if vLEAVE_QTY>vPre_Extended_day then -- 剩余假期 vLEAVE_QTY 若大于可延假 ,即只可带可延假数
                                    vLEAVE_QTY:=vPre_Extended_day;
                                end if;
                                --新增加 可延司龄假
                                insert into HR_EMPLOYEE_ENJOY_LEAVE( ID, PK_PSNDOC,PK_ORG,LEAVE_YYYY,LEAVE_MM,PK_TIMEITEM,LEAVE_QTY,START_DATE,END_DATE) values(HR_EMPLOYEE_ENJOY_LEAVE_SEQ.NEXTVAL,TEMP_CUR_RECORD.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值