First commit, 已上架的電子書
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
CREATE PROC [dbo].[GEX_SALFORMULA_V3]
|
||||
(
|
||||
@BILLDATE1 VARCHAR(10),
|
||||
@BILLDATE2 VARCHAR(10),
|
||||
@PERSONID1 NVARCHAR(20),
|
||||
@PERSONID2 NVARCHAR(20),
|
||||
@DEPARTMENTID1 NVARCHAR(10),
|
||||
@DEPARTMENTID2 NVARCHAR(10),
|
||||
@FACDISTRICT1 VARCHAR(10),
|
||||
@FACDISTRICT2 VARCHAR(10),
|
||||
@COUNTRYID1 VARCHAR(10),
|
||||
@COUNTRYID2 VARCHAR(10),
|
||||
@SALTERM NVARCHAR(10),
|
||||
@LOGINID NVARCHAR(30),
|
||||
@FUNCTAG NVARCHAR(30)
|
||||
)
|
||||
/*
|
||||
Function : 計算人員薪資公式內容
|
||||
Description: 本 SP 是配合薪資計算使用, 傳入的參數較多
|
||||
Build Date : 2011/07/13
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2011/07/13 加入註解, 本功能不支援多選
|
||||
2 Michael 2011/08/15 新增莎美娜的部門代替群組的需求
|
||||
依參數來判斷
|
||||
3 Michael 2011/09/05 新增留職停薪不納入計算的判斷
|
||||
4 Michael 2011/09/14 新增廠區條件 sql
|
||||
5 Michael 2011/09/26 新增國別
|
||||
6 Michael 2011/11/10 修正產品引數傳入星號(zz)的 SQL 問題
|
||||
7 Michael 2013/06/03 當 @FUNCTAG 為 ESSR2D 時, 資料寫到暫存檔
|
||||
|
||||
*/
|
||||
AS
|
||||
|
||||
IF @DEPARTMENTID1 = '' OR @DEPARTMENTID1 = '*' BEGIN SET @DEPARTMENTID1 = '' END
|
||||
IF @DEPARTMENTID2 = '' OR @DEPARTMENTID2 = '*' BEGIN SET @DEPARTMENTID2 = 'zz' END
|
||||
IF @FACDISTRICT1 = '*' BEGIN SET @FACDISTRICT1 = '' END
|
||||
IF @FACDISTRICT2 = '*' BEGIN SET @FACDISTRICT2 = 'zz' END
|
||||
IF @COUNTRYID1 = '*' BEGIN SET @COUNTRYID1 = '' END
|
||||
IF @COUNTRYID2 = '*' BEGIN SET @COUNTRYID2 = 'zz' END
|
||||
|
||||
--防錯
|
||||
UPDATE BASPERSON SET FACDISTRICT = '' WHERE FACDISTRICT IS NULL
|
||||
UPDATE BASPERSON SET COUNTRYID = '' WHERE COUNTRYID IS NULL
|
||||
|
||||
DECLARE @IS_SAB VARCHAR(10)
|
||||
SELECT @IS_SAB=PARAVALUE FROM PARAMETER WHERE PARATYPE = 'ESS' AND PARAFIELD = 'IS_SAB'
|
||||
IF @IS_SAB = '' OR @IS_SAB IS NULL BEGIN SET @IS_SAB = 'N' END
|
||||
|
||||
--依參數決定群組的取法
|
||||
DECLARE @SAL_TMP TABLE (
|
||||
USERID VARCHAR(20),
|
||||
GROUPID VARCHAR(50)
|
||||
)
|
||||
|
||||
IF @IS_SAB = 'Y' BEGIN
|
||||
INSERT INTO @SAL_TMP
|
||||
SELECT USERID,GROUPID
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
PERSONID USERID,
|
||||
CASE WHEN DATAEXTEND5 IS NULL OR DATAEXTEND5 = '' THEN DEPARTMENTID ELSE DATAEXTEND5 END GROUPID
|
||||
FROM BASPERSON
|
||||
WHERE
|
||||
CASE WHEN @PERSONID1 = '*' THEN @PERSONID1 ELSE PERSONID END >= @PERSONID1
|
||||
AND CASE WHEN @PERSONID2 = '*' THEN @PERSONID2 ELSE PERSONID END <= @PERSONID2
|
||||
) Z
|
||||
WHERE Z.GROUPID IN (SELECT GROUPID FROM ESSGROUP)
|
||||
END
|
||||
ELSE BEGIN
|
||||
INSERT INTO @SAL_TMP
|
||||
SELECT USERID,GROUPID FROM USERGROUPS
|
||||
WHERE GROUPID IN (SELECT GROUPID FROM ESSGROUP)
|
||||
AND CASE WHEN @PERSONID1 = '*' THEN @PERSONID1 ELSE USERID END >= @PERSONID1
|
||||
AND CASE WHEN @PERSONID2 = '*' THEN @PERSONID2 ELSE USERID END <= @PERSONID2
|
||||
END
|
||||
|
||||
--清除薪資公式科目為NULL
|
||||
DELETE FROM ESSEMPSALSETUP WHERE ESS_SUBJECTID = '';
|
||||
|
||||
WITH NO_EMP
|
||||
AS
|
||||
(
|
||||
--排除本月不需計薪人員 FIRSTWORKDATE,BYEDATE
|
||||
SELECT PERSONID FROM BASPERSON
|
||||
WHERE DEPARTMENTID >= @DEPARTMENTID1 AND DEPARTMENTID <= @DEPARTMENTID2
|
||||
AND CASE WHEN @PERSONID1 = '*' THEN @PERSONID1 ELSE PERSONID END >= @PERSONID1
|
||||
AND CASE WHEN @PERSONID2 = '*' THEN @PERSONID2 ELSE PERSONID END <= @PERSONID2
|
||||
AND (FIRSTWORKDATE > @BILLDATE2 OR BYEDATE < @BILLDATE1)
|
||||
UNION ALL
|
||||
--留職停薪
|
||||
SELECT A.PERSONID FROM ESSKEEPWORK A
|
||||
LEFT JOIN ESSRETURNWORK B ON A.PERSONID = B.PERSONID AND A.ENDDATE = B.ENDDATE
|
||||
WHERE A.STARTDATE <= @BILLDATE1 AND A.ENDDATE >= @BILLDATE2 AND ((B.STARTDATE > @BILLDATE2) OR (B.STARTDATE IS NULL))
|
||||
AND CASE WHEN @PERSONID1 = '*' THEN @PERSONID1 ELSE A.PERSONID END >= @PERSONID1
|
||||
AND CASE WHEN @PERSONID2 = '*' THEN @PERSONID2 ELSE A.PERSONID END <= @PERSONID2
|
||||
), EMP
|
||||
AS
|
||||
(
|
||||
SELECT PERSONID FROM BASPERSON
|
||||
WHERE DEPARTMENTID >= @DEPARTMENTID1 AND DEPARTMENTID <= @DEPARTMENTID2
|
||||
AND CASE WHEN @PERSONID1 = '*' THEN @PERSONID1 ELSE PERSONID END >= @PERSONID1
|
||||
AND CASE WHEN @PERSONID2 = '*' THEN @PERSONID2 ELSE PERSONID END <= @PERSONID2
|
||||
AND FACDISTRICT >= @FACDISTRICT1 AND FACDISTRICT <= @FACDISTRICT2
|
||||
AND COUNTRYID >= @COUNTRYID1 AND COUNTRYID <= @COUNTRYID2
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT * FROM NO_EMP WHERE NO_EMP.PERSONID = BASPERSON.PERSONID
|
||||
)
|
||||
), ESS_GROUP
|
||||
AS
|
||||
(
|
||||
--取得人員所屬的薪資群組
|
||||
SELECT USERID,GROUPID
|
||||
FROM @SAL_TMP Z
|
||||
WHERE --USERID >= @PERSONID1 AND USERID <= @PERSONID2
|
||||
CASE WHEN @PERSONID1 = '*' THEN @PERSONID1 ELSE USERID END >= @PERSONID1
|
||||
AND CASE WHEN @PERSONID2 = '*' THEN @PERSONID2 ELSE USERID END <= @PERSONID2
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT * FROM EMP WHERE Z.USERID = EMP.PERSONID
|
||||
)
|
||||
), ESS_SUBJECT1
|
||||
AS
|
||||
(
|
||||
--先取得人員的所有計薪科目(個人+群組)
|
||||
SELECT DISTINCT PERSONID,ESS_SUBJECTID,SALTERM,SALARY
|
||||
FROM ESSEMPSALSETUP
|
||||
WHERE SALTERM = @SALTERM AND FLAG = 1
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT * FROM EMP WHERE PERSONID = ESSEMPSALSETUP.PERSONID
|
||||
)
|
||||
), ESS_SUBJECT2
|
||||
AS
|
||||
(
|
||||
--人員所屬群組公式
|
||||
SELECT DISTINCT X.PERSONID,A.ESS_SUBJECTID,A.SALTERM,A.SALARY
|
||||
FROM EMP X
|
||||
LEFT JOIN ESS_GROUP B ON X.PERSONID = B.USERID
|
||||
LEFT JOIN ESSEMPSALSETUP A ON A.PERSONID = B.GROUPID AND A.FLAG = 2
|
||||
WHERE A.SALTERM = @SALTERM
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT * FROM ESS_SUBJECT1 WHERE PERSONID = X.PERSONID AND ESS_SUBJECTID = A.ESS_SUBJECTID AND SALTERM = A.SALTERM
|
||||
)
|
||||
), ESS_SUBJECT
|
||||
AS
|
||||
(
|
||||
SELECT * FROM ESS_SUBJECT1
|
||||
UNION ALL
|
||||
SELECT * FROM ESS_SUBJECT2
|
||||
), SAL_EMP
|
||||
AS
|
||||
(
|
||||
--先取得人員科目公式
|
||||
SELECT
|
||||
PERSONID,ESS_SUBJECTID,SALTERM,SEQNO,DCTYPE,CALCMETHOD,TRUETO,FALSETO
|
||||
FROM ESSCALCFORMULA WHERE FLAG = 1 AND SALTERM = @SALTERM
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT * FROM EMP WHERE ESSCALCFORMULA.PERSONID = EMP.PERSONID
|
||||
)
|
||||
), SAL_GROUP1
|
||||
AS
|
||||
(
|
||||
--想辦法取得人員科目沒有設公式的資料
|
||||
SELECT PERSONID,ESS_SUBJECTID FROM ESS_SUBJECT
|
||||
WHERE SALTERM = @SALTERM
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT * FROM SAL_EMP WHERE PERSONID = ESS_SUBJECT.PERSONID AND ESS_SUBJECTID= ESS_SUBJECT.ESS_SUBJECTID
|
||||
)
|
||||
), SAL_GROUP2
|
||||
AS
|
||||
(
|
||||
--然後當然是依人員取得群組公式, union 就 ok 了
|
||||
SELECT
|
||||
A.PERSONID,A.ESS_SUBJECTID,B.SALTERM,B.SEQNO,B.DCTYPE,B.CALCMETHOD,B.TRUETO,B.FALSETO
|
||||
FROM SAL_GROUP1 A
|
||||
LEFT JOIN ESS_GROUP X ON A.PERSONID = X.USERID
|
||||
LEFT JOIN ESSCALCFORMULA B ON B.PERSONID = X.GROUPID AND A.ESS_SUBJECTID = B.ESS_SUBJECTID AND B.FLAG = 2
|
||||
)
|
||||
|
||||
SELECT A.PERSONID,A.ESS_SUBJECTID,ISNULL(A.SALTERM,@SALTERM) SALTERM,B.SALARY,A.SEQNO,A.DCTYPE,A.CALCMETHOD,A.TRUETO,A.FALSETO INTO #ESS_TMP9 FROM SAL_EMP A
|
||||
LEFT JOIN ESS_SUBJECT B ON A.PERSONID = B.PERSONID AND A.ESS_SUBJECTID = B.ESS_SUBJECTID
|
||||
UNION ALL
|
||||
SELECT A.PERSONID,A.ESS_SUBJECTID,ISNULL(A.SALTERM,@SALTERM) SALTERM,B.SALARY,A.SEQNO,A.DCTYPE,A.CALCMETHOD,A.TRUETO,A.FALSETO FROM SAL_GROUP2 A
|
||||
LEFT JOIN ESS_SUBJECT B ON A.PERSONID = B.PERSONID AND A.ESS_SUBJECTID = B.ESS_SUBJECTID
|
||||
ORDER BY 1,2,3,5
|
||||
|
||||
IF @FUNCTAG = 'ESSR2D'
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT NAME FROM SYSOBJECTS WHERE NAME = 'ESSRPT_TMP7')
|
||||
CREATE TABLE dbo.ESSRPT_TMP7 (
|
||||
LOGINID varchar(30),
|
||||
PERSONID VARCHAR(20),
|
||||
ESS_SUBJECTID VARCHAR(20),
|
||||
SALTERM VARCHAR(10),
|
||||
SALARY DECIMAL(12,2)
|
||||
)
|
||||
|
||||
DELETE FROM ESSRPT_TMP7 WHERE LOGINID = @LOGINID
|
||||
|
||||
INSERT INTO ESSRPT_TMP7
|
||||
SELECT DISTINCT @LOGINID,PERSONID,ESS_SUBJECTID,SALTERM,SALARY FROM #ESS_TMP9
|
||||
WHERE SUBSTRING(ESS_SUBJECTID,1,1) = '1' AND SALARY > 0
|
||||
END
|
||||
ELSE
|
||||
SELECT * FROM #ESS_TMP9
|
||||
|
||||
DROP TABLE #ESS_TMP9
|
||||
Reference in New Issue
Block a user