2010年12月16日

[GH] 檢查加班補休時數是否一致

DECLARE @OT TABLE
(
  PER_SERIL_NO PER_SERIL_NO
, OT_COMPEN_HR FLOAT
, OT_COMPEN_RHR 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)
        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

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
      , B.LEV_HR
      , B.LEV_BORROW_HR
FROM    @OT A
JOIN    @LEV B ON A.PER_SERIL_NO = B.PER_SERIL_NO
WHERE   1 = 1
--AND A.PER_SERIL_NO = 'some one'
        AND ( A.OT_COMPEN_HR + B.LEV_BORROW_HR ) != ( A.OT_COMPEN_RHR + B.LEV_HR )

SELECT  *
FROM    LOL_OT
WHERE   PER_SERIL_NO = 'some one'
SELECT  *
FROM    LOL_LEV
WHERE   PER_SERIL_NO = 'some one'
        AND LEV_TYPE_COD = '00014'
        AND EFORM_STATUS_COD IN ( 'W', 'P' )
SELECT  *
FROM    LOL_LEV_OT
WHERE   OT_APPLY_NO = 'some one'

2010年12月6日

[GH] 重算補休資料(個人)

BEGIN TRAN

    DECLARE @PER_SERIL_NO PER_SERIL_NO; SET @PER_SERIL_NO= ''

    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 dbo.ufnIsContains(X.PER_SERIL_NO,@PER_SERIL_NO,',','Y')='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 dbo.ufnIsContains(A.PER_SERIL_NO,@PER_SERIL_NO,',','Y')='Y'

    UPDATE A
       SET LEV_BORROW_HR = 0
      FROM LOL_LEV A
     WHERE EFORM_STATUS_COD IN ('P','W')
       AND dbo.ufnIsContains(A.PER_SERIL_NO,@PER_SERIL_NO,',','Y')='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 
     WHERE LEV_TYPE_COD = '00014' 
       AND EFORM_STATUS_COD IN ('W','P')
       AND dbo.ufnIsContains(PER_SERIL_NO,@PER_SERIL_NO,',','Y')='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, 'HIHI', 0
            FETCH NEXT FROM lev_cursor INTO @strOT_PER_SERIL_NO, @strOT_LE_APPLY_NO
        END
    CLOSE lev_cursor
    DEALLOCATE lev_cursor

--ROLLBACK
--COMMIT