------------------------------------
/*
STEP 1
先準備 HIHI_TRAN 的資料
example:
CREATE TABLE HIHI_TRAN (
PER_SERIL_NO dbo.PER_SERIL_NO
,DEP_CODE_ACT VARCHAR(100)
,DEP_NAME_ACT NVARCHAR(100)
,EMP_ID VARCHAR(100)
,CNAME NVARCHAR(100)
,FINAL_HR FLOAT
)
GO
--/***************************** HIHI_TRAN ***********************************************/
delete from HIHI_TRAN
GO
raiserror('Now Insert HIHI_TRAN Datas .... ',1,1)
insert into HIHI_TRAN ([PER_SERIL_NO],[DEP_CODE_ACT],[DEP_NAME_ACT],[EMP_ID],[CNAME],[FINAL_HR]) Values (N'P3637',N'1100',N'公○○部門',N'3637',N'馮○○',25)
insert into HIHI_TRAN ([PER_SERIL_NO],[DEP_CODE_ACT],[DEP_NAME_ACT],[EMP_ID],[CNAME],[FINAL_HR]) Values (N'P4689',N'1100',N'公○○部門',N'4689',N'林○○',0)
*/
------------------------------------
------------------------------------
/*
STEP 2
作完下面語法後,再執行
http://mrhihi-paul.blogspot.com/2011/03/gh.html
去更新補休時數
*/
------------------------------------
DECLARE @TEST CHAR(1); SET @TEST = 'N'
/* 先把上次轉檔的資料清掉,準備重轉 */
IF @TEST<>'Y'
DELETE LOL_OT WHERE APPLY_DATE = '2010/01/01'
AND PER_SERIL_NO IN (
SELECT PER_SERIL_NO FROM HIHI_TRAN
)
IF @TEST<>'Y'
DELETE LOL_LEV WHERE APPLY_DATE ='2010/01/01'
AND LEV_TYPE_COD = '00014'
AND PER_SERIL_NO IN (
SELECT PER_SERIL_NO FROM HIHI_TRAN
)
/* 到12月底所有人加班時數(含轉檔) */
DECLARE @OT TABLE (
PER_SERIL_NO dbo.PER_SERIL_NO
,OT_COMPEN_HR FLOAT
,OT_COMPEN_RHR FLOAT
)
INSERT INTO @OT
SELECT PER_SERIL_NO
, SUM(OT_COMPEN_HR)
, SUM(OT_COMPEN_RHR)
FROM LOL_OT
WHERE SDATE <='2011/01/01 06:00'
AND EFORM_STATUS_COD IN ('W','P')
GROUP BY PER_SERIL_NO
/* 到12月底所有人補休請假時數(含轉檔) */
DECLARE @LEV TABLE (
PER_SERIL_NO dbo.PER_SERIL_NO
,LEV_HR FLOAT
,LEV_BORROW_HR FLOAT
)
INSERT INTO @LEV
SELECT PER_SERIL_NO
, SUM(LEV_HR)
, SUM(LEV_BORROW_HR)
FROM LOL_LEV
WHERE LEV_TYPE_COD = '00014'
AND EFORM_STATUS_COD IN ('W','P')
AND ASSIGN_DATE <= '2010/12/31'
GROUP BY PER_SERIL_NO
DECLARE @TMP_OT TABLE(
PER_SERIL_NO dbo.PER_SERIL_NO
,DEP_SERIL_NO dbo.DEP_SERIL_NO
,OT_HR FLOAT
)
INSERT INTO @TMP_OT
SELECT A.PER_SERIL_NO
, [DEP_SERIL_NO]=EMP.DEP_SERIL_NO_ACT
, [OT_HR]=A.FINAL_HR -(ISNULL(B.OT_COMPEN_HR,0) - ISNULL(C.LEV_HR,0))
FROM HIHI_TRAN A
JOIN EMP_EMPLOYEE EMP ON A.PER_SERIL_NO = EMP.PER_SERIL_NO
LEFT JOIN @OT B ON A.PER_SERIL_NO = B.PER_SERIL_NO
LEFT JOIN @LEV C ON A.PER_SERIL_NO = C.PER_SERIL_NO
WHERE 1=1
--AND A.FINAL_HR >= 0
--AND (B.OT_COMPEN_HR - C.LEV_HR)>=0
AND (ISNULL(B.OT_COMPEN_HR,0) - ISNULL(C.LEV_HR,0))<= A.FINAL_HR
IF @TEST<>'Y'
INSERT INTO LOL_OT (FLOW_ID, FLOW_INST_ID, CMP_SERIL_NO, PER_SERIL_NO, OT_APPLY_NO, SEQ, DEP_SERIL_NO, SHIFT_CODE, OTAPPLY_KND_COD, APPLY_DATE, OT_TYPE_COD, SDATE, EDATE, OT_HR, SAGT_SERIL_NO, REASON, ORG_OT_COMPEN, EXTRA_OT_COMPEN, OT_COMPEN_HR, OT_COMPEN_DATE, OT_COMPEN_RHR, OT_FEE_HR, EFORM_STATUS_COD, IS_APPLY_EXP, CUT_FLG, CHK_FLG, KP_SDATE, KP_EDATE, KP_OT_HR, KP_ORG_OT_COMPEN, KP_OT_FEE_HR, ASSIGN_DATE, MOD_STATUS, CRE_DTE, CRE_USR, MOD_DTE, MOD_USR, MOD_REASON, RECHK_FLG, OT_CREDIT_YM)
SELECT '','','GH100601',PER_SERIL_NO,'OT'+RTRIM(PER_SERIL_NO),1,DEP_SERIL_NO,'24','2','2010/01/01','1','2010/01/01','2010/10/31',OT_HR,'','',OT_HR,0.00,OT_HR,'2012/01/01',OT_HR,0.00,'P','N','Y','Y','2010/01/01','2010/10/31',OT_HR,OT_HR,0.00,'2010/01/01','',GETDATE(),'轉檔(20110106)',GETDATE(),'轉檔(20110106)','','N',''
FROM @TMP_OT
-------------------------------------------
DELETE @OT
INSERT INTO @OT
SELECT PER_SERIL_NO
, SUM(OT_COMPEN_HR)
, SUM(OT_COMPEN_RHR)
FROM LOL_OT
WHERE SDATE <='2011/01/01 06:00'
AND EFORM_STATUS_COD IN ('W','P')
GROUP BY PER_SERIL_NO
DELETE @LEV
INSERT INTO @LEV
SELECT PER_SERIL_NO
, SUM(LEV_HR)
, SUM(LEV_BORROW_HR)
FROM LOL_LEV
WHERE LEV_TYPE_COD = '00014'
AND EFORM_STATUS_COD IN ('W','P')
AND ASSIGN_DATE <= '2010/12/31'
GROUP BY PER_SERIL_NO
-------------------------------------------
DECLARE @TMP_LEV TABLE (
PER_SERIL_NO dbo.PER_SERIL_NO
,LEV_HR FLOAT
)
INSERT INTO @TMP_LEV
SELECT A.PER_SERIL_NO
, [LEV_HR]=ISNULL(B.OT_COMPEN_HR,0) - ISNULL(C.LEV_HR,0) - A.FINAL_HR
FROM HIHI_TRAN A
LEFT JOIN @OT B ON A.PER_SERIL_NO = B.PER_SERIL_NO
LEFT JOIN @LEV C ON A.PER_SERIL_NO = C.PER_SERIL_NO
WHERE A.FINAL_HR <> (ISNULL(B.OT_COMPEN_HR,0) - ISNULL(C.LEV_HR,0))
IF @TEST<>'Y'
INSERT INTO LOL_LEV(CMP_SERIL_NO, LE_APPLY_NO, PER_SERIL_NO, SEQ, FLOW_ID, FLOW_INST_ID, LEVAPPLY_KND_COD, APPLY_DATE, DEP_SERIL_NO, SHIFT_CODE, LEV_TYPE_COD, SDATE, EDATE, LEV_MINUTE, LEV_HR, LEV_DAY, AGT_SERIL_NO, SAGT_SERIL_NO, REASON, EFORM_STATUS_COD, CUT_FLG, OTHER_OPTION1_NAME, OTHER_OPTION2_NAME, OTHER_OPTION3_NAME, IS_APPLY_TRAVEL, OCCUR_DATE, ASSIGN_DATE, MOD_STATUS, CRE_DTE, CRE_USR, MOD_DTE, MOD_USR, MOD_REASON, L_LE_APPLY_NO, LEV_BORROW_HR)
SELECT 'GH100601','LE'+RTRIM(A.PER_SERIL_NO),A.PER_SERIL_NO,1,'','0','2','2010/01/01',B.DEP_SERIL_NO_ACT,'24','00014','2010/01/01','2010/10/31 23:59:00',LEV_HR*60,LEV_HR,LEV_HR/8,'','','','P','Y','','','','N',NULL,'2010/01/01','',GETDATE(),'轉檔(20110116)',GETDATE(),'轉檔(20110116)','',NULL,0.00
FROM @TMP_LEV A
JOIN EMP_EMPLOYEE B ON A.PER_SERIL_NO = B.PER_SERIL_NO