DECLARE @IS_SHOW_ONLY YN; SELECT @IS_SHOW_ONLY = 'N' DECLARE @重算所有人 YN; SELECT @重算所有人 = 'N' DECLARE @OT TABLE ( PER_SERIL_NO PER_SERIL_NO , OT_COMPEN_HR FLOAT , OT_COMPEN_RHR FLOAT , KP_ORG_OT_COMPEN FLOAT ) DECLARE @LEV TABLE ( PER_SERIL_NO PER_SERIL_NO , LEV_HR FLOAT , LEV_BORROW_HR FLOAT ) INSERT INTO @OT SELECT PER_SERIL_NO , [OT_COMPEN_HR] = SUM(OT_COMPEN_HR) , [OT_COMPEN_RHR] = SUM(OT_COMPEN_RHR) , [KP_ORG_OT_COMPEN] = SUM(KP_ORG_OT_COMPEN) FROM LOL_OT WHERE EFORM_STATUS_COD IN ( 'W', 'P' ) GROUP BY PER_SERIL_NO INSERT INTO @LEV SELECT PER_SERIL_NO , [LEV_HR] = SUM(LEV_HR) , [LEV_BORROW_HR] = SUM(LEV_BORROW_HR) FROM LOL_LEV WHERE EFORM_STATUS_COD IN ( 'W', 'P' ) AND LEV_TYPE_COD = '00014' GROUP BY PER_SERIL_NO DECLARE @NO_MATCH TABLE ( PER_SERIL_NO PER_SERIL_NO ) INSERT INTO @NO_MATCH SELECT A.PER_SERIL_NO FROM @OT A JOIN @LEV B ON A.PER_SERIL_NO = B.PER_SERIL_NO WHERE 1 = 1 AND ( A.OT_COMPEN_HR + B.LEV_BORROW_HR ) != ( A.OT_COMPEN_RHR + B.LEV_HR ) IF @IS_SHOW_ONLY ='Y' BEGIN SELECT A.PER_SERIL_NO , A.OT_COMPEN_HR + B.LEV_BORROW_HR , A.OT_COMPEN_RHR + B.LEV_HR , A.OT_COMPEN_HR , A.OT_COMPEN_RHR , A.KP_ORG_OT_COMPEN , B.LEV_HR , B.LEV_BORROW_HR FROM @OT A JOIN @LEV B ON A.PER_SERIL_NO = B.PER_SERIL_NO JOIN @NO_MATCH C ON A.PER_SERIL_NO = C.PER_SERIL_NO END ELSE BEGIN SET NOCOUNT ON DELETE A FROM dbo.LOL_LEV_OT A WHERE EXISTS (SELECT 'X' FROM LOL_LEV X WHERE A.LE_APPLY_NO=X.LE_APPLY_NO AND (EXISTS (SELECT 'X' FROM @NO_MATCH XX WHERE X.PER_SERIL_NO = XX.PER_SERIL_NO) OR @重算所有人='Y') ) UPDATE A SET OT_COMPEN_RHR = OT_COMPEN_HR , MOD_REASON = REPLACE(MOD_REASON,N'加班補休假撤回',N'') FROM dbo.LOL_OT A WHERE EFORM_STATUS_COD IN ('P','W') AND (EXISTS (SELECT 'X' FROM @NO_MATCH XX WHERE A.PER_SERIL_NO = XX.PER_SERIL_NO) OR @重算所有人='Y') UPDATE A SET LEV_BORROW_HR = 0 FROM LOL_LEV A WHERE EFORM_STATUS_COD IN ('P','W') AND (EXISTS (SELECT 'X' FROM @NO_MATCH XX WHERE A.PER_SERIL_NO = XX.PER_SERIL_NO) OR @重算所有人='Y') DECLARE @strOT_PER_SERIL_NO PER_SERIL_NO, @strOT_LE_APPLY_NO CHAR(20) DECLARE lev_cursor CURSOR FOR SELECT PER_SERIL_NO, LE_APPLY_NO FROM LOL_LEV A WHERE LEV_TYPE_COD = '00014' AND EFORM_STATUS_COD IN ('W','P') AND (EXISTS (SELECT 'X' FROM @NO_MATCH XX WHERE A.PER_SERIL_NO = XX.PER_SERIL_NO) OR @重算所有人='Y') ORDER BY PER_SERIL_NO , SDATE OPEN lev_cursor FETCH NEXT FROM lev_cursor INTO @strOT_PER_SERIL_NO, @strOT_LE_APPLY_NO WHILE @@FETCH_STATUS = 0 BEGIN EXEC spApplyLeaveOT '', @strOT_PER_SERIL_NO, @strOT_LE_APPLY_NO, NULL, NULL, 0, 'RECALC-20110222', 0 FETCH NEXT FROM lev_cursor INTO @strOT_PER_SERIL_NO, @strOT_LE_APPLY_NO END CLOSE lev_cursor DEALLOCATE lev_cursor SET NOCOUNT OFF END
2011年3月7日
[GH]重算補休時數(針對時數不合的人)
訂閱:
張貼留言
(
Atom
)
沒有留言 :
張貼留言