First commit, 已上架的電子書
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
CREATE PROC DBO.GEXBPM_ADDSIGN
|
||||
(
|
||||
@BILLTAG VARCHAR(20), --單別
|
||||
@BILLNO VARCHAR(20), --簽核單號
|
||||
@SOURCEBILLNO VARCHAR(30), --原單單號(原單呼叫用, 可空白)
|
||||
@ADDTYPE SMALLINT,
|
||||
@PERSONID NVARCHAR(20)
|
||||
)
|
||||
AS
|
||||
/*
|
||||
Function : FLOW 加簽時的更新資料程序
|
||||
Description: 加簽事實上就是插行到指定列, @BILLNO 和 @SOURCEBILLNO 只能有一個有值
|
||||
以 @BILLNO 優先
|
||||
|
||||
@ADDTYPE = 0 加入在目前待簽資料之前
|
||||
3 加入在目前待簽資料之後
|
||||
Build Date : 2012/11/14
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2013/07/13 修改新增的加簽欄號錯誤的問題
|
||||
|
||||
*/
|
||||
|
||||
DECLARE @SEQ1 INT
|
||||
DECLARE @SEQ2 INT
|
||||
DECLARE @SEQ3 INT
|
||||
|
||||
IF (@BILLNO = '') AND (@SOURCEBILLNO <> '')
|
||||
BEGIN
|
||||
SELECT @BILLNO=BILLNO FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND SOURCEBILLNO = @SOURCEBILLNO
|
||||
END
|
||||
|
||||
--取得簽核單目前的 [待簽]
|
||||
IF ISNULL(@BILLNO,'') <> ''
|
||||
BEGIN
|
||||
SELECT @SEQ1=SEQNO FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND FLOWSTATUS = 0
|
||||
IF @SEQ1 IS NULL SET @SEQ1 = 1
|
||||
|
||||
IF @ADDTYPE = 0
|
||||
BEGIN
|
||||
SELECT @SEQ2=MAX(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO < ISNULL(@SEQ1,1)
|
||||
IF @SEQ2 IS NULL SET @SEQ2 = 0
|
||||
|
||||
SET @SEQ3 = @SEQ2 + (@SEQ1-@SEQ2)/2
|
||||
END
|
||||
ELSE BEGIN
|
||||
SELECT @SEQ2=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO > ISNULL(@SEQ1,1)
|
||||
IF @SEQ2 IS NULL SET @SEQ2 = @SEQ1 + 10
|
||||
|
||||
SET @SEQ3 = @SEQ1 + (@SEQ2-@SEQ1)/2
|
||||
END
|
||||
|
||||
INSERT INTO BPM_FLOWDATA_D (BILLNO,SEQNO,SIGN_TITLE,SIGNPERSON,AGENTID,SENDMAIL,NOTIFY_ONLY,FLOWSTATUS)
|
||||
VALUES (@BILLNO,@SEQ3,'動態加簽',@PERSONID,'','Y','N',@ADDTYPE)
|
||||
|
||||
--發送 MAIL 通知
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@PERSONID, @BILLNO, '動態加簽'
|
||||
END
|
||||
@@ -0,0 +1,48 @@
|
||||
CREATE PROC DBO.GEXBPM_CHECKSETUP
|
||||
(
|
||||
@BILLTAG VARCHAR(20)
|
||||
)
|
||||
/*
|
||||
Function : 檢查 FLOW 的設定是否正確
|
||||
Description: 目前只能手動在 SQL 中執行, 如果要加到程式中, 要請 RD 手寫程式
|
||||
Build Date : 2013/08/01
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
|
||||
*/
|
||||
AS
|
||||
|
||||
DECLARE @FILTER NVARCHAR(2000)
|
||||
DECLARE @SQL2 NVARCHAR(2000)
|
||||
DECLARE @SOURCETABLE VARCHAR(100)
|
||||
DECLARE @RETVAL INT --sp 傳參數
|
||||
DECLARE @SEQNO INT
|
||||
|
||||
DECLARE contact_cursor CURSOR FOR
|
||||
SELECT A.SEQNO,A.FILTER,B.SOURCETABLE FROM BPM_FLOWSETUP_D A
|
||||
LEFT JOIN BPM_FLOWSETUP_M B ON A.BILLTAG = B.BILLTAG
|
||||
WHERE B.BILLTAG = @BILLTAG AND ISNULL(A.FILTER,'') <> ''
|
||||
ORDER BY 1
|
||||
|
||||
OPEN contact_cursor
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @SEQNO,@FILTER,@SOURCETABLE
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @SQL2 = 'SELECT @RETVALIN=COUNT(*) FROM ' + @SOURCETABLE + ' WHERE ' + @FILTER
|
||||
EXECUTE SP_EXECUTESQL @SQL2,N'@RETVALIN INT OUT', @RETVAL OUT
|
||||
|
||||
PRINT 'SEQNO: ' + CAST(@SEQNO AS VARCHAR(10)) + ' FILTER: ' + @FILTER
|
||||
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @SEQNO,@FILTER,@SOURCETABLE
|
||||
END
|
||||
|
||||
CLOSE contact_cursor
|
||||
DEALLOCATE contact_cursor
|
||||
@@ -0,0 +1,77 @@
|
||||
CREATE PROC DBO.GEXBPM_DELAYSEND
|
||||
AS
|
||||
/*
|
||||
Function : FLOW 催簽作業的 sp
|
||||
Description: 簡單的說, 催簽就是當有簽單卡住時, 自動再發送 mail 通知卡單的人快簽
|
||||
我們的程式當然是撈出逾時的資料, 然後發 mail 如此
|
||||
自動催簽的方法, 我是擴充 GEX_PREPROCESS_V2 這個 sp
|
||||
這個 sp 會在 Login 時自動執行, 所以就加在現有的機制中了(每天執行一次)
|
||||
Build Date : 2012/11/14
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2013/07/17 新增每一關簽核也要判斷是否逾期
|
||||
|
||||
*/
|
||||
|
||||
--取得逾期的簽核資料
|
||||
WITH BPM1
|
||||
AS
|
||||
(
|
||||
SELECT A.BILLNO,MAX(A.BILLDATE) BILLDATE FROM BPM_FLOWDATA_LOG A
|
||||
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
|
||||
WHERE B.FLOWSTATUS <= 3 --未完成
|
||||
GROUP BY A.BILLNO
|
||||
), BPM2
|
||||
AS
|
||||
(
|
||||
SELECT A.BILLNO,A.FLOWINDATE BILLDATE FROM BPM_FLOWDATA_LOG A
|
||||
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
|
||||
WHERE B.FLOWSTATUS <= 3 --未完成
|
||||
AND A.SEQNO = 0
|
||||
), BPM3
|
||||
AS
|
||||
(
|
||||
SELECT A.BILLNO,DATEDIFF(DAY,A.BILLDATE,B.BILLDATE) DIFFDATE,BPM2.EMERGENCYDATE FROM BPM2 A
|
||||
LEFT JOIN BPM1 B ON A.BILLNO = B.BILLNO
|
||||
LEFT JOIN BPM_FLOWDATA_M BPM1 ON A.BILLNO = BPM1.BILLNO
|
||||
LEFT JOIN BPM_FLOWSETUP_M BPM2 ON BPM1.BILLTAG = BPM2.BILLTAG
|
||||
)
|
||||
|
||||
SELECT BILLNO,dbo.GEXFUNC_GETNEXT(BILLNO) SIGNPERSON INTO #DELAY_BPM FROM BPM3 WHERE DIFFDATE > EMERGENCYDATE
|
||||
|
||||
--新增每一關簽核也要判斷是否逾期
|
||||
INSERT INTO #DELAY_BPM (BILLNO,SIGNPERSON)
|
||||
SELECT A.BILLNO,dbo.GEXFUNC_GETNEXT(A.BILLNO) FROM BPM_FLOWDATA_LOG A
|
||||
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
|
||||
LEFT JOIN BPM_FLOWSETUP_D X ON X.BILLTAG = B.BILLTAG AND A.SOURCESEQNO = X.SEQNO
|
||||
WHERE CASE WHEN ISNULL(X.SIGNDAYS,0)=0 THEN 0 ELSE DATEDIFF(DAY,A.FLOWINDATE,GETDATE()) - X.SIGNDAYS END > 0
|
||||
AND B.FLOWSTATUS <= 3 --未完成
|
||||
|
||||
DECLARE @BILLNO VARCHAR(20)
|
||||
DECLARE @SIGNPERSON VARCHAR(20)
|
||||
|
||||
DECLARE contact_cursor CURSOR FOR
|
||||
SELECT BILLNO,SIGNPERSON FROM #DELAY_BPM
|
||||
|
||||
OPEN contact_cursor
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @BILLNO,@SIGNPERSON
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
--發送 mail
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@SIGNPERSON, @BILLNO, '催簽: 簽核過期'
|
||||
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @BILLNO,@SIGNPERSON
|
||||
END
|
||||
|
||||
CLOSE contact_cursor
|
||||
DEALLOCATE contact_cursor
|
||||
|
||||
DROP TABLE #DELAY_BPM
|
||||
@@ -0,0 +1,42 @@
|
||||
CREATE PROC DBO.GEXBPM_GENFLOW1
|
||||
(
|
||||
@LOGINID NVARCHAR(30) = '*'
|
||||
)
|
||||
AS
|
||||
/*
|
||||
Function : 讀 BPM_FLOWSETUP_M, 準備產生 FLOW DATA
|
||||
Description: 本功能要能依傳入的 LOGINID, 只產生該人員的 FLOW 資料
|
||||
當然, 也可以傳入 * 表示全部人士的 FLOW 都上呈
|
||||
利用 SQL 原本的機制, 傳入預設值
|
||||
Build Date : 2011/10/01
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2012/10/24 新增 LOGINID, 上呈應該只上呈自己的單據較合理
|
||||
如果是助理代輸入, 還是要請單據上的 PERSONID 上呈較合理
|
||||
*/
|
||||
|
||||
DECLARE @BILLTAG VARCHAR(20)
|
||||
DECLARE @SQL_DEFINE VARCHAR(2000)
|
||||
|
||||
DECLARE contact_cursor CURSOR FOR
|
||||
SELECT Z.BILLTAG,Z.SQL_DEFINE FROM BPM_FLOWSETUP_M Z
|
||||
|
||||
OPEN contact_cursor
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @BILLTAG,@SQL_DEFINE
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
EXEC GEXBPM_GENFLOW2 @BILLTAG,'',@SQL_DEFINE,@LOGINID
|
||||
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @BILLTAG,@SQL_DEFINE
|
||||
END
|
||||
|
||||
CLOSE contact_cursor
|
||||
DEALLOCATE contact_cursor
|
||||
@@ -0,0 +1,316 @@
|
||||
CREATE PROC DBO.GEXBPM_GENFLOW2
|
||||
(
|
||||
@BILLTAG VARCHAR(20),
|
||||
@ASSIGBILL VARCHAR(20), --指定某來源單號(無表示全部)
|
||||
@SQL_DEFINE NVARCHAR(2000),
|
||||
@LOGINID NVARCHAR(30)
|
||||
)
|
||||
/*
|
||||
Function : 讀 BPM_FLOWSETUP_M, 產生 FLOW DATA
|
||||
Description:
|
||||
Build Date : 2011/10/01
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2011/10/01 新增
|
||||
2 Michael 2011/10/04 加入 Where 判斷及 Manager 處理
|
||||
3 Michael 2011/10/06 新增 Agent 及指定欄位內容為簽核人
|
||||
4 Michael 2012/10/30 新增有限度的支援條件式簽核(原單 PK 僅支援單一鍵值)
|
||||
5 Michael 2012/11/22 新增 FLOW_DESC 欄位
|
||||
6 Michael 2013/07/12 新增若群組內無人則不產生的判斷
|
||||
7 Michael 2013/07/14 如果連續幾個簽核都是同一個人, 只產生第一筆
|
||||
8 Michael 2013/07/15 修改 sp 中關於動態 sql 語法傳回值的寫法
|
||||
9 Michael 2013/07/23 新增上呈時產生簽核明細, 一併產生其主代理人及 mail
|
||||
10 Michael 2013/07/26 處理 MANAGER 等的簽核過濾條件
|
||||
11 Michael 2013/08/08 新增部份多階主管的相關設定及展算, 原為 PICK 專案, 但併入標準版
|
||||
SQL_DEFINE 新增 DEPARTMENTID 的內容, BPM_FLOWDATA_M 新增2個欄位
|
||||
12 Michael 2013/08/31 新增萬一無人需簽核時, 刪除相關記錄
|
||||
13 Michael 2013/09/23 新增刪除連續相同人員時, 僅通知不必判斷
|
||||
|
||||
*/
|
||||
AS
|
||||
|
||||
--Flow 單號
|
||||
DECLARE @G_BILLNO VARCHAR(20)
|
||||
--跑迴圈
|
||||
DECLARE @BILLDATE DATETIME
|
||||
DECLARE @BILLNO VARCHAR(20)
|
||||
DECLARE @PERSONID VARCHAR(20)
|
||||
DECLARE @KEYDEF NVARCHAR(200)
|
||||
DECLARE @FLOW_DESC NVARCHAR(600)
|
||||
DECLARE @SIGNING NVARCHAR(50)
|
||||
DECLARE @FLOWP CHAR(1)
|
||||
DECLARE @SOURCETBL VARCHAR(100)
|
||||
DECLARE @SOURCEPK VARCHAR(100)
|
||||
--第二層 LOOP 使用的 VAR
|
||||
DECLARE @SEQNO INT
|
||||
DECLARE @SEQ INT
|
||||
DECLARE @SEQ2 INT
|
||||
DECLARE @CNT INT
|
||||
DECLARE @SIGNPERSON VARCHAR(100)
|
||||
DECLARE @PRE_PERSON VARCHAR(100)
|
||||
DECLARE @ORG_PERSON VARCHAR(100)
|
||||
DECLARE @BOSS_PERSON VARCHAR(100)
|
||||
DECLARE @FILTER NVARCHAR(2000)
|
||||
DECLARE @SQL NVARCHAR(2000)
|
||||
DECLARE @SQL1 NVARCHAR(2000)
|
||||
DECLARE @SQL2 NVARCHAR(2000)
|
||||
DECLARE @SOURCEFLD VARCHAR(2000)
|
||||
DECLARE @RETVAL INT --sp 傳參數
|
||||
DECLARE @SIGN_TITLE NVARCHAR(200)
|
||||
DECLARE @LAVEL VARCHAR(10)
|
||||
DECLARE @DEPARTMENTID VARCHAR(20) --原單部門
|
||||
|
||||
--單一單據單一執行時(也算防錯)
|
||||
IF @SQL_DEFINE = '' OR @SQL_DEFINE IS NULL
|
||||
BEGIN
|
||||
SELECT @SQL_DEFINE=SQL_DEFINE FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
|
||||
END
|
||||
|
||||
--將來源資料寫到暫存檔
|
||||
SET @SQL_DEFINE = 'SELECT G.* INTO ##BPM_TMP1 FROM (' + @SQL_DEFINE + ') G'
|
||||
EXECUTE SP_EXECUTESQL @SQL_DEFINE
|
||||
|
||||
--指定某來源單(例如重新產生)
|
||||
IF @ASSIGBILL <> ''
|
||||
BEGIN
|
||||
DELETE FROM ##BPM_TMP1 WHERE BILLNO <> @ASSIGBILL
|
||||
END
|
||||
|
||||
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
|
||||
|
||||
DECLARE contact_cursor2 CURSOR FOR
|
||||
SELECT Z.BILLDATE,Z.BILLNO,Z.PERSONID,Z.DEPARTMENTID,Z.KEYDEF,Z.FLOW_DESC FROM ##BPM_TMP1 Z
|
||||
WHERE CASE WHEN @LOGINID = '*' THEN '*' ELSE Z.PERSONID END = @LOGINID
|
||||
|
||||
OPEN contact_cursor2
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor2
|
||||
INTO @BILLDATE,@BILLNO,@PERSONID,@DEPARTMENTID,@KEYDEF,@FLOW_DESC
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
WAITFOR DELAY '00:00:00.005'
|
||||
SELECT @G_BILLNO=REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR,GETDATE(),25),'-',''),' ',''),':','')
|
||||
|
||||
INSERT INTO BPM_FLOWDATA_M (BILLNO,BILLTAG,SOURCEBILLDATE,SOURCEBILLNO,SOURCEPERSONID,SOURCEDEPARTMENT,FLOWSTATUS,ISEMERGENCY,FLOW_DESC)
|
||||
SELECT @G_BILLNO,@BILLTAG,@BILLDATE,@BILLNO,@PERSONID,@DEPARTMENTID,0,'N',@FLOW_DESC
|
||||
|
||||
/*
|
||||
第一筆資料較特殊, 除了標準設定, 要新增 [上呈人員], 就是原單的 PERSONID, SEQNO = 1(固定)
|
||||
因為通知和退簽都會用到
|
||||
*/
|
||||
SELECT @SEQNO=MIN(SEQNO) FROM BPM_FLOWSETUP_D WHERE BILLTAG = @BILLTAG
|
||||
|
||||
INSERT INTO BPM_FLOWDATA_D (BILLNO,SEQNO,FLOWSTATUS,SIGN_TITLE,SIGNPERSON,SENDMAIL,NOTIFY_ONLY,ORG_GROUP)
|
||||
SELECT @G_BILLNO,0,1,'上呈',@PERSONID,'N','N',''
|
||||
UNION ALL
|
||||
SELECT
|
||||
@G_BILLNO,B.SEQNO,
|
||||
CASE WHEN B.SEQNO=@SEQNO THEN 0 ELSE 3 END,
|
||||
B.SIGN_TITLE,
|
||||
--直屬主管, 原單某欄位值或代理人
|
||||
CASE WHEN B.SIGNPERSON = 'MANAGER' THEN '@MANAGER'
|
||||
WHEN B.SIGNPERSON = 'AGENT' THEN '@AGENT'
|
||||
WHEN B.SIGNPERSON = 'FIELDDEF' THEN '@FIELDDEF'
|
||||
WHEN SUBSTRING(B.SIGNPERSON,1,7) = 'DEPBOSS' THEN '@'+B.SIGNPERSON
|
||||
ELSE ISNULL(G.USERID,'') END,
|
||||
B.SENDMAIL,B.NOTIFY_ONLY,B.SIGNPERSON
|
||||
FROM BPM_FLOWSETUP_D B
|
||||
LEFT JOIN USERGROUPS G ON B.SIGNPERSON = G.GROUPID
|
||||
WHERE B.BILLTAG = @BILLTAG --AND ISNULL(G.USERID,'') <> '' --本條件會連 MANAGER/AGENT 都被檔掉
|
||||
ORDER BY 2
|
||||
|
||||
--寫第一筆資料到 log
|
||||
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON)
|
||||
SELECT
|
||||
@G_BILLNO,@SEQNO,0,GETDATE(),GETDATE(),1,@PERSONID
|
||||
|
||||
--回寫原單(固定為 SIGN_PERSON 及 FLOWFLAG)
|
||||
SET @FLOWP = 'P'
|
||||
SET @SIGNING = 'FLOWSIGNING'
|
||||
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+@SIGNING+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+@FLOWP+CHAR(39) +
|
||||
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @BILLNO + CHAR(39)
|
||||
EXECUTE SP_EXECUTESQL @SQL
|
||||
|
||||
--取原單某欄位
|
||||
SET @SQL2 = 'SELECT G.* INTO ##BPM_TMP3 FROM (SELECT * FROM ##BPM_TMP1 WHERE BILLNO = ' + CHAR(39) + @BILLNO + CHAR(39) + ') G'
|
||||
EXECUTE SP_EXECUTESQL @SQL2
|
||||
|
||||
SELECT @SOURCEFLD=SOURCEFLD FROM ##BPM_TMP3
|
||||
DROP TABLE ##BPM_TMP3
|
||||
|
||||
--再次處理 MANAGER 和條件簽核
|
||||
DECLARE contact_cursor3 CURSOR FOR
|
||||
SELECT SEQNO,SIGNPERSON,SIGN_TITLE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO ORDER BY SEQNO
|
||||
|
||||
OPEN contact_cursor3
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor3
|
||||
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
|
||||
|
||||
--ORG_PERSON 原上呈人員, 不變(代理人永遠是真對原上呈人)
|
||||
--PRE_PERSON 前一關的簽核人, 是針對 MANAGER 用, 每一關都會變
|
||||
SET @ORG_PERSON = @SIGNPERSON
|
||||
SET @PRE_PERSON = @SIGNPERSON
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @BOSS_PERSON = @SIGNPERSON
|
||||
IF @SIGNPERSON = '@MANAGER'
|
||||
BEGIN
|
||||
SELECT @BOSS_PERSON=EMP_NO FROM BASPERSON WHERE PERSONID = @PRE_PERSON
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@MANAGER'
|
||||
END
|
||||
ELSE IF @SIGNPERSON = '@AGENT'
|
||||
BEGIN
|
||||
SELECT @BOSS_PERSON=ISNULL(AGENTID,'') FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON AND PRIOITY = (SELECT MIN(PRIOITY) FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON)
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@AGENT'
|
||||
END
|
||||
ELSE IF @SIGNPERSON = '@FIELDDEF'
|
||||
BEGIN
|
||||
--原單某欄位值
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @SOURCEFLD
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@FIELDDEF'
|
||||
|
||||
SET @BOSS_PERSON = @SOURCEFLD
|
||||
END
|
||||
--以下為專案特殊寫法
|
||||
ELSE IF SUBSTRING(@SIGNPERSON,1,8) = '@DEPBOSS'
|
||||
BEGIN
|
||||
--取得部門檔的簽核主管(PICK 專案, 但也可以變成標準版本, 目前最多6階)
|
||||
SET @LAVEL = SUBSTRING(@SIGNPERSON,9,1)
|
||||
SELECT
|
||||
@BOSS_PERSON=
|
||||
CASE WHEN @LAVEL = '1' THEN DE1_LEADER
|
||||
WHEN @LAVEL = '2' THEN DE2_LEADER
|
||||
WHEN @LAVEL = '3' THEN DE3_LEADER
|
||||
WHEN @LAVEL = '4' THEN DE4_LEADER
|
||||
WHEN @LAVEL = '5' THEN DE5_LEADER
|
||||
WHEN @LAVEL = '6' THEN DE6_LEADER
|
||||
ELSE ISNULL(DE1_LEADER,'') END
|
||||
FROM BASDEPARTMENT WHERE DEPARTMENTID = @DEPARTMENTID
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = ISNULL(@BOSS_PERSON,'')
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SUBSTRING(@SIGNPERSON,1,8) = '@DEPBOSS'
|
||||
END
|
||||
|
||||
/*
|
||||
以下是條件式判斷的程式邏輯
|
||||
目前的寫法, 只能處理 PK 是一個欄位(如單號), 暫不支援複合 PK 的表單
|
||||
*/
|
||||
SELECT @FILTER=B.FILTER FROM BPM_FLOWSETUP_D B
|
||||
LEFT JOIN BPM_FLOWSETUP_M A ON A.BILLTAG = B.BILLTAG
|
||||
WHERE B.BILLTAG = @BILLTAG AND B.SEQNO = @SEQ AND B.SIGN_TITLE = @SIGN_TITLE
|
||||
|
||||
IF @FILTER IS NULL SET @FILTER = ''
|
||||
|
||||
IF LEN(@FILTER) > 0
|
||||
BEGIN
|
||||
SET @SQL2 = 'SELECT @RETVALIN=COUNT(*) FROM ' + @SOURCETBL + ' WHERE ' + @SOURCEPK + ' = ' + CHAR(39)+@BILLNO+CHAR(39) + ' AND ' + @FILTER
|
||||
EXECUTE SP_EXECUTESQL @SQL2,N'@RETVALIN INT OUT', @RETVAL OUT
|
||||
|
||||
IF @RETVAL <= 0 UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
|
||||
END
|
||||
|
||||
/*
|
||||
如果連續幾個簽核都是同一個人, 只產生第一筆即可(待測試)
|
||||
因為要留最末筆, 所有不在此刪, 另起一個 LOOP 處理
|
||||
*/
|
||||
--IF @PRE_PERSON = @BOSS_PERSON AND @SEQ > 10
|
||||
-- UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
|
||||
|
||||
SET @PRE_PERSON = @BOSS_PERSON
|
||||
|
||||
FETCH NEXT FROM contact_cursor3
|
||||
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
|
||||
END
|
||||
|
||||
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 99
|
||||
--刪除空白人員
|
||||
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(SIGNPERSON,'') = ''
|
||||
|
||||
CLOSE contact_cursor3
|
||||
DEALLOCATE contact_cursor3
|
||||
|
||||
FETCH NEXT FROM contact_cursor2
|
||||
INTO @BILLDATE,@BILLNO,@PERSONID,@DEPARTMENTID,@KEYDEF,@FLOW_DESC
|
||||
END
|
||||
|
||||
CLOSE contact_cursor2
|
||||
DEALLOCATE contact_cursor2
|
||||
|
||||
--刪除連續的相同人員(僅通知不必判斷)
|
||||
DECLARE contact_cursor9 CURSOR FOR
|
||||
SELECT SEQNO,SIGNPERSON,SIGN_TITLE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(NOTIFY_ONLY,'') <> 'Y' ORDER BY SEQNO DESC
|
||||
|
||||
OPEN contact_cursor9
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor9
|
||||
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
|
||||
|
||||
SET @PRE_PERSON = ''
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
IF @PRE_PERSON = @SIGNPERSON AND @SEQ > 0
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
|
||||
|
||||
SET @PRE_PERSON = @SIGNPERSON
|
||||
|
||||
FETCH NEXT FROM contact_cursor9
|
||||
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
|
||||
END
|
||||
|
||||
CLOSE contact_cursor9
|
||||
DEALLOCATE contact_cursor9
|
||||
|
||||
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 99
|
||||
--END OF 刪除連續的相同人員
|
||||
|
||||
--設大於0 的第一筆狀況為待簽
|
||||
SELECT @SEQ2=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND SEQNO > 0
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ2
|
||||
|
||||
--一併產生代理人
|
||||
UPDATE BPM_FLOWDATA_D SET AGENTID = ISNULL((SELECT TOP 1 AGENTID FROM BASPERSON_AGENT WHERE BASPERSON_AGENT.PERSONID = BPM_FLOWDATA_D.SIGNPERSON AND PRIOITY <= 1),AGENTID)
|
||||
WHERE BILLNO = @G_BILLNO
|
||||
|
||||
--判斷是否要發 mail 通知
|
||||
DECLARE @ISMAIL CHAR(1)
|
||||
DECLARE @USERID VARCHAR(30)
|
||||
DECLARE @AGENTID VARCHAR(30)
|
||||
SELECT TOP 1 @ISMAIL=SENDMAIL,@USERID=SIGNPERSON,@AGENTID=AGENTID FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 0 --待簽
|
||||
IF @ISMAIL = 'Y'
|
||||
BEGIN
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@USERID, @G_BILLNO, '上呈'
|
||||
IF ISNULL(@AGENTID,'') <> '' EXEC GEX_SEND_FLOWMAIL 'S',@AGENTID, @G_BILLNO, '上呈(代理人)'
|
||||
END
|
||||
|
||||
--如果本簽核無表身, 表示不需簽核, 刪除 log 及表頭(防錯)
|
||||
SELECT @CNT=COUNT(*) FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO
|
||||
IF @CNT <= 0
|
||||
BEGIN
|
||||
DELETE FROM BPM_FLOWDATA_M WHERE BILLNO = @G_BILLNO
|
||||
DELETE FROM BPM_FLOWDATA_LOG WHERE BILLNO = @G_BILLNO
|
||||
|
||||
--回寫原單(固定為 SIGN_PERSON 及 FLOWFLAG)
|
||||
SET @FLOWP = 'Z'
|
||||
SET @SIGNING = 'NO-SIGN'
|
||||
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+@SIGNING+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+@FLOWP+CHAR(39) +
|
||||
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @BILLNO + CHAR(39)
|
||||
EXECUTE SP_EXECUTESQL @SQL
|
||||
END
|
||||
|
||||
DROP TABLE ##BPM_TMP1
|
||||
@@ -0,0 +1,242 @@
|
||||
CREATE PROC DBO.GEXBPM_GENFLOW3
|
||||
(
|
||||
@G_BILLNO VARCHAR(20) --簽核單號
|
||||
)
|
||||
/*
|
||||
Function : 重新產生 BPM_FLOWDATA_D
|
||||
Description: 本作業是當原單已產生 FLOWDATA
|
||||
但又修改原單, 此時僅需(能)重新產生表身
|
||||
|
||||
目前應該是在 BPMMG1 的 [重新載入] 有呼叫
|
||||
Build Date : 2011/10/06
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2013/07/26 依新版修正的規格改寫
|
||||
2 Michael 2013/08/02 已加入判斷, 已開始簽核就不能重新產生
|
||||
新增 ORG_GROUP, 方便重新產生變動的簽核人用
|
||||
3 Michael 2013/08/08 新增部份多階主管的相關設定及展算, 原為 PICK 專案, 但併入標準版
|
||||
4 Michael 2013/09/23 新增刪除連續相同人員時, 僅通知不必判斷
|
||||
|
||||
*/
|
||||
AS
|
||||
|
||||
--Flow 單號
|
||||
DECLARE @BILLTAG VARCHAR(20)
|
||||
DECLARE @SQL_DEFINE NVARCHAR(800)
|
||||
DECLARE @SOURCEBILLNO VARCHAR(20)
|
||||
--原單
|
||||
DECLARE @BILLDATE DATETIME
|
||||
DECLARE @BILLNO VARCHAR(20)
|
||||
DECLARE @PERSONID VARCHAR(20)
|
||||
DECLARE @KEYDEF NVARCHAR(200)
|
||||
DECLARE @SOURCETBL VARCHAR(100)
|
||||
DECLARE @SOURCEPK VARCHAR(100)
|
||||
--第二層 LOOP 使用的 VAR
|
||||
DECLARE @SEQNO INT
|
||||
DECLARE @SEQ INT
|
||||
DECLARE @SEQ2 INT
|
||||
DECLARE @CNT INT
|
||||
DECLARE @SIGNPERSON VARCHAR(100)
|
||||
DECLARE @PRE_PERSON VARCHAR(100)
|
||||
DECLARE @ORG_PERSON VARCHAR(100)
|
||||
DECLARE @BOSS_PERSON VARCHAR(100)
|
||||
DECLARE @FILTER NVARCHAR(2000)
|
||||
DECLARE @SQL NVARCHAR(2000)
|
||||
DECLARE @SQL1 NVARCHAR(2000)
|
||||
DECLARE @SQL2 NVARCHAR(2000)
|
||||
DECLARE @SOURCEFLD VARCHAR(200)
|
||||
DECLARE @RETVAL INT --sp 傳參數
|
||||
DECLARE @SIGN_TITLE NVARCHAR(200)
|
||||
DECLARE @LAVEL VARCHAR(10)
|
||||
DECLARE @DEPARTMENTID VARCHAR(20) --原單部門
|
||||
|
||||
--如果 log 檔筆數大於 1(已經開始簽核), 就不能重新產生
|
||||
SELECT @CNT=COUNT(*) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @G_BILLNO
|
||||
IF @CNT > 1 RETURN
|
||||
|
||||
--取得 Tag 及 SQLDef
|
||||
SELECT @BILLTAG=BILLTAG,@SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @G_BILLNO
|
||||
SELECT @SQL_DEFINE=SQL_DEFINE FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
|
||||
SELECT @CNT=CHARINDEX('WHERE ',@SQL_DEFINE)
|
||||
SET @SQL_DEFINE = SUBSTRING(@SQL_DEFINE,1,@CNT-1) + ' WHERE BILLNO = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39)
|
||||
|
||||
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
|
||||
|
||||
--將來源資料寫到暫存檔
|
||||
SET @SQL_DEFINE = 'SELECT G.* INTO ##BPM_TMP1 FROM (' + @SQL_DEFINE + ' AND BILLNO = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39) + ') G'
|
||||
EXECUTE SP_EXECUTESQL @SQL_DEFINE
|
||||
|
||||
SELECT @BILLDATE=BILLDATE,@BILLNO=BILLNO,@PERSONID=PERSONID,@DEPARTMENTID=DEPARTMENTID,@KEYDEF=KEYDEF FROM ##BPM_TMP1
|
||||
|
||||
--刪除並重新產生FLOW DETAIL
|
||||
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO
|
||||
|
||||
SELECT @SEQNO=MIN(SEQNO) FROM BPM_FLOWSETUP_D WHERE BILLTAG = @BILLTAG
|
||||
|
||||
INSERT INTO BPM_FLOWDATA_D (BILLNO,SEQNO,FLOWSTATUS,SIGN_TITLE,SIGNPERSON,SENDMAIL,NOTIFY_ONLY,ORG_GROUP)
|
||||
SELECT @G_BILLNO,0,1,'上呈',@PERSONID,'N','N',''
|
||||
UNION ALL
|
||||
SELECT
|
||||
@G_BILLNO,B.SEQNO,
|
||||
CASE WHEN B.SEQNO=@SEQNO THEN 0 ELSE 3 END,
|
||||
B.SIGN_TITLE,
|
||||
--直屬主管, 原單某欄位值或代理人
|
||||
CASE WHEN B.SIGNPERSON = 'MANAGER' THEN '@MANAGER'
|
||||
WHEN B.SIGNPERSON = 'AGENT' THEN '@AGENT'
|
||||
WHEN B.SIGNPERSON = 'FIELDDEF' THEN '@FIELDDEF'
|
||||
WHEN SUBSTRING(B.SIGNPERSON,1,7) = 'DEPBOSS' THEN '@'+B.SIGNPERSON
|
||||
ELSE ISNULL(G.USERID,'') END,
|
||||
B.SENDMAIL,B.NOTIFY_ONLY,B.SIGNPERSON
|
||||
FROM BPM_FLOWSETUP_D B
|
||||
LEFT JOIN USERGROUPS G ON B.SIGNPERSON = G.GROUPID
|
||||
WHERE B.BILLTAG = @BILLTAG
|
||||
ORDER BY 2
|
||||
|
||||
--取原單某欄位
|
||||
SET @SQL2 = 'SELECT G.* INTO ##BPM_TMP3 FROM (SELECT * FROM ##BPM_TMP1 ) G'
|
||||
EXECUTE SP_EXECUTESQL @SQL2
|
||||
|
||||
SELECT @SOURCEFLD=SOURCEFLD FROM ##BPM_TMP3
|
||||
DROP TABLE ##BPM_TMP3
|
||||
|
||||
--再次處理 MANAGER 和條件簽核
|
||||
DECLARE contact_cursor3 CURSOR FOR
|
||||
SELECT SEQNO,SIGNPERSON,SIGN_TITLE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO ORDER BY SEQNO
|
||||
|
||||
OPEN contact_cursor3
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor3
|
||||
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
|
||||
|
||||
--ORG_PERSON 原上呈人員, 不變(代理人永遠是真對原上呈人)
|
||||
--PRE_PERSON 前一關的簽核人, 是針對 MANAGER 用, 每一關都會變
|
||||
SET @ORG_PERSON = @SIGNPERSON
|
||||
SET @PRE_PERSON = @SIGNPERSON
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @BOSS_PERSON = @SIGNPERSON
|
||||
IF @SIGNPERSON = '@MANAGER'
|
||||
BEGIN
|
||||
SELECT @BOSS_PERSON=EMP_NO FROM BASPERSON WHERE PERSONID = @PRE_PERSON
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@MANAGER'
|
||||
END
|
||||
ELSE IF @SIGNPERSON = '@AGENT'
|
||||
BEGIN
|
||||
SELECT @BOSS_PERSON=ISNULL(AGENTID,'') FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON AND PRIOITY = (SELECT MIN(PRIOITY) FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON)
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@AGENT'
|
||||
END
|
||||
ELSE IF @SIGNPERSON = '@FIELDDEF'
|
||||
BEGIN
|
||||
--原單某欄位值
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @SOURCEFLD
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGNPERSON = '@FIELDDEF'
|
||||
|
||||
SET @BOSS_PERSON = @SOURCEFLD
|
||||
END
|
||||
--以下為專案特殊寫法
|
||||
ELSE IF SUBSTRING(@SIGNPERSON,1,8) = '@DEPBOSS'
|
||||
BEGIN
|
||||
--取得部門檔的簽核主管(PICK 專案, 但也可以變成標準版本, 目前最多6階)
|
||||
SET @LAVEL = SUBSTRING(@SIGNPERSON,9,1)
|
||||
SELECT
|
||||
@BOSS_PERSON=
|
||||
CASE WHEN @LAVEL = '1' THEN DE1_LEADER
|
||||
WHEN @LAVEL = '2' THEN DE2_LEADER
|
||||
WHEN @LAVEL = '3' THEN DE3_LEADER
|
||||
WHEN @LAVEL = '4' THEN DE4_LEADER
|
||||
WHEN @LAVEL = '5' THEN DE5_LEADER
|
||||
WHEN @LAVEL = '6' THEN DE6_LEADER
|
||||
ELSE ISNULL(DE1_LEADER,'') END
|
||||
FROM BASDEPARTMENT WHERE DEPARTMENTID = @DEPARTMENTID
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = ISNULL(@BOSS_PERSON,'')
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SUBSTRING(@SIGNPERSON,1,8) = '@DEPBOSS'
|
||||
END
|
||||
|
||||
/*
|
||||
以下是條件式判斷的程式邏輯
|
||||
目前的寫法, 只能處理 PK 是一個欄位(如單號), 暫不支援複合 PK 的表單
|
||||
*/
|
||||
SELECT @FILTER=B.FILTER FROM BPM_FLOWSETUP_D B
|
||||
LEFT JOIN BPM_FLOWSETUP_M A ON A.BILLTAG = B.BILLTAG
|
||||
WHERE B.BILLTAG = @BILLTAG AND B.SEQNO = @SEQ AND B.SIGN_TITLE = @SIGN_TITLE
|
||||
|
||||
IF @FILTER IS NULL SET @FILTER = ''
|
||||
|
||||
IF LEN(@FILTER) > 0
|
||||
BEGIN
|
||||
SET @SQL2 = 'SELECT @RETVALIN=COUNT(*) FROM ' + @SOURCETBL + ' WHERE ' + @SOURCEPK + ' = ' + CHAR(39)+@BILLNO+CHAR(39) + ' AND ' + @FILTER
|
||||
EXECUTE SP_EXECUTESQL @SQL2,N'@RETVALIN INT OUT', @RETVAL OUT
|
||||
|
||||
IF @RETVAL <= 0 UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
|
||||
END
|
||||
|
||||
/*
|
||||
如果連續幾個簽核都是同一個人, 只產生第一筆即可(待測試)
|
||||
因為要留最末筆, 所有不在此刪, 另起一個 LOOP 處理
|
||||
*/
|
||||
--IF @PRE_PERSON = @BOSS_PERSON AND @SEQ > 10
|
||||
-- UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
|
||||
|
||||
SET @PRE_PERSON = @BOSS_PERSON
|
||||
|
||||
FETCH NEXT FROM contact_cursor3
|
||||
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
|
||||
END
|
||||
|
||||
CLOSE contact_cursor3
|
||||
DEALLOCATE contact_cursor3
|
||||
|
||||
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 99
|
||||
--刪除空白人員
|
||||
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(SIGNPERSON,'') = ''
|
||||
|
||||
--刪除連續的相同人員(僅通知不必判斷)
|
||||
DECLARE contact_cursor9 CURSOR FOR
|
||||
SELECT SEQNO,SIGNPERSON,SIGN_TITLE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(NOTIFY_ONLY,'') <> 'Y' ORDER BY SEQNO DESC
|
||||
|
||||
OPEN contact_cursor9
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor9
|
||||
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
|
||||
|
||||
SET @PRE_PERSON = ''
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
IF @PRE_PERSON = @SIGNPERSON AND @SEQ > 0
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 99 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SIGN_TITLE = @SIGN_TITLE
|
||||
|
||||
SET @PRE_PERSON = @SIGNPERSON
|
||||
|
||||
FETCH NEXT FROM contact_cursor9
|
||||
INTO @SEQ,@SIGNPERSON,@SIGN_TITLE
|
||||
END
|
||||
|
||||
CLOSE contact_cursor9
|
||||
DEALLOCATE contact_cursor9
|
||||
|
||||
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND FLOWSTATUS = 99
|
||||
--刪除空白人員
|
||||
DELETE FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND ISNULL(SIGNPERSON,'') = ''
|
||||
|
||||
--設大於0 的第一筆狀況為待簽
|
||||
SELECT @SEQ2=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @G_BILLNO AND SEQNO > 0
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ2
|
||||
|
||||
--一併產生代理人
|
||||
UPDATE BPM_FLOWDATA_D SET AGENTID = ISNULL((SELECT TOP 1 AGENTID FROM BASPERSON_AGENT WHERE BASPERSON_AGENT.PERSONID = BPM_FLOWDATA_D.SIGNPERSON AND PRIOITY <= 1),AGENTID)
|
||||
WHERE BILLNO = @G_BILLNO
|
||||
|
||||
DROP TABLE ##BPM_TMP1
|
||||
@@ -0,0 +1,106 @@
|
||||
CREATE PROC DBO.GEXBPM_GENFLOW4
|
||||
(
|
||||
@G_BILLNO VARCHAR(20) --簽核單號
|
||||
)
|
||||
/*
|
||||
Function : 重新產生 BPM_FLOWDATA_D
|
||||
Description: 本作業是當原單已產生 FLOWDATA
|
||||
但又因群組人員有變動, 要批次更新變更後的群組人員
|
||||
|
||||
目前應該是在 BPMMG1 的 [重置人員] 有呼叫
|
||||
如果傳入單號, 表示單張, 否則就是全重置
|
||||
|
||||
Build Date : 2013/08/02
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
|
||||
*/
|
||||
AS
|
||||
|
||||
--一般群組的重置
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = ISNULL((SELECT TOP 1 USERID FROM USERGROUPS WHERE USERGROUPS.GROUPID = BPM_FLOWDATA_D.ORG_GROUP),SIGNPERSON)
|
||||
WHERE ISNULL(ORG_GROUP,'') NOT IN ('MANAGER','AGENT','FIELDDEF','') AND (FLOWSTATUS = 0 OR FLOWSTATUS = 2)
|
||||
|
||||
/*
|
||||
直屬主管及代理人 的批次變更
|
||||
*/
|
||||
DECLARE @BILLNO VARCHAR(100)
|
||||
DECLARE @PRE_BILLNO VARCHAR(100)
|
||||
DECLARE @SIGNPERSON VARCHAR(100)
|
||||
DECLARE @PRE_PERSON VARCHAR(100)
|
||||
DECLARE @ORG_PERSON VARCHAR(100)
|
||||
DECLARE @ORG_GROUP VARCHAR(100)
|
||||
DECLARE @BOSS_PERSON VARCHAR(100)
|
||||
DECLARE @SEQ INT
|
||||
DECLARE @LAVEL VARCHAR(10)
|
||||
DECLARE @DEPARTMENTID VARCHAR(20) --原單部門
|
||||
|
||||
DECLARE contact_cursor3 CURSOR FOR
|
||||
SELECT B.BILLNO,A.SEQNO,A.SIGNPERSON,A.ORG_GROUP,B.SOURCEDEPARTMENT FROM BPM_FLOWDATA_D A
|
||||
LEFT JOIN BPM_FLOWDATA_M B ON A.BILLNO = B.BILLNO
|
||||
WHERE (CASE WHEN ISNULL(@G_BILLNO,'')='' THEN @G_BILLNO ELSE B.BILLNO END) = @G_BILLNO AND B.FLOWSTATUS < 4 --未完
|
||||
ORDER BY B.BILLNO,A.SEQNO
|
||||
|
||||
OPEN contact_cursor3
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor3
|
||||
INTO @BILLNO,@SEQ,@SIGNPERSON,@ORG_GROUP,@DEPARTMENTID
|
||||
|
||||
--ORG_PERSON 原上呈人員, 不變(代理人永遠是真對原上呈人)
|
||||
--PRE_PERSON 前一關的簽核人, 是針對 MANAGER 用, 每一關都會變
|
||||
SET @ORG_PERSON = @SIGNPERSON
|
||||
SET @PRE_PERSON = @SIGNPERSON
|
||||
SET @PRE_BILLNO = @BILLNO
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
IF @PRE_BILLNO <> @BILLNO SET @ORG_PERSON = @SIGNPERSON
|
||||
|
||||
SET @BOSS_PERSON = @SIGNPERSON
|
||||
IF @ORG_GROUP = 'MANAGER'
|
||||
BEGIN
|
||||
SELECT @BOSS_PERSON=EMP_NO FROM BASPERSON WHERE PERSONID = @PRE_PERSON
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND ORG_GROUP = 'MANAGER' AND (FLOWSTATUS = 0 OR FLOWSTATUS = 2)
|
||||
END
|
||||
ELSE IF @ORG_GROUP = 'AGENT'
|
||||
BEGIN
|
||||
SELECT @BOSS_PERSON=ISNULL(AGENTID,'') FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON AND PRIOITY = (SELECT MIN(PRIOITY) FROM BASPERSON_AGENT WHERE PERSONID = @ORG_PERSON)
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = @BOSS_PERSON
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND ORG_GROUP = 'AGENT' AND (FLOWSTATUS = 0 OR FLOWSTATUS = 2)
|
||||
END
|
||||
--以下為專案特殊寫法
|
||||
ELSE IF SUBSTRING(@ORG_GROUP,1,7) = 'DEPBOSS'
|
||||
BEGIN
|
||||
--取得部門檔的簽核主管(PICK 專案, 但也可以變成標準版本, 目前最多6階)
|
||||
SET @LAVEL = SUBSTRING(@ORG_GROUP,8,1)
|
||||
SELECT
|
||||
@BOSS_PERSON=
|
||||
CASE WHEN @LAVEL = '1' THEN DE1_LEADER
|
||||
WHEN @LAVEL = '2' THEN DE2_LEADER
|
||||
WHEN @LAVEL = '3' THEN DE3_LEADER
|
||||
WHEN @LAVEL = '4' THEN DE4_LEADER
|
||||
WHEN @LAVEL = '5' THEN DE5_LEADER
|
||||
WHEN @LAVEL = '6' THEN DE6_LEADER
|
||||
ELSE ISNULL(DE1_LEADER,'') END
|
||||
FROM BASDEPARTMENT WHERE DEPARTMENTID = @DEPARTMENTID
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET SIGNPERSON = ISNULL(@BOSS_PERSON,'')
|
||||
WHERE BILLNO = @G_BILLNO AND SEQNO = @SEQ AND SUBSTRING(@ORG_GROUP,1,7) = 'DEPBOSS' AND (FLOWSTATUS = 0 OR FLOWSTATUS = 2)
|
||||
END
|
||||
|
||||
SET @PRE_PERSON = @BOSS_PERSON
|
||||
SET @PRE_BILLNO = @BILLNO
|
||||
|
||||
FETCH NEXT FROM contact_cursor3
|
||||
INTO @BILLNO,@SEQ,@SIGNPERSON,@ORG_GROUP,@DEPARTMENTID
|
||||
END
|
||||
|
||||
CLOSE contact_cursor3
|
||||
DEALLOCATE contact_cursor3
|
||||
@@ -0,0 +1,61 @@
|
||||
CREATE PROC DBO.GEXBPM_REJECT
|
||||
(
|
||||
@BILLNO VARCHAR(20), --簽核單號
|
||||
@LOGINID VARCHAR(30),
|
||||
@SIGNMEMO NVARCHAR(600)
|
||||
)
|
||||
AS
|
||||
/*
|
||||
Function : FLOW 拒簽時的更新資料程序(直接否決本單)
|
||||
Description:
|
||||
1.在原單或簽核待辦單上, 新增 [簽核拒簽] button (Reject)
|
||||
寫一筆資料到 log
|
||||
將 FLOWDATA_M 的 FLOWSTATUS 改為 7 拒簽
|
||||
2.原單的 FLOWFLAG = X, SIGN_USER = 拒簽
|
||||
|
||||
Build Date : 2013/07/08
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2011/10/12 新增
|
||||
*/
|
||||
|
||||
DECLARE @SQL NVARCHAR(2000)
|
||||
DECLARE @SOURCETBL VARCHAR(100)
|
||||
DECLARE @SOURCEPK VARCHAR(100)
|
||||
DECLARE @BILLTAG VARCHAR(100)
|
||||
DECLARE @SOURCEBILLNO VARCHAR(100)
|
||||
|
||||
DECLARE @PRE_DATE DATETIME
|
||||
DECLARE @SEQ1 INT
|
||||
DECLARE @SEQ2 INT
|
||||
SELECT @SEQ1=MAX(SEQNO)+1,@SEQ2=MIN(SEQNO),@PRE_DATE=MAX(BILLDATE) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
|
||||
|
||||
DECLARE @FLOW INT
|
||||
SELECT @FLOW=FLOWSTATUS FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SEQ2
|
||||
|
||||
IF @FLOW = 0
|
||||
BEGIN
|
||||
--寫 LOG
|
||||
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON,MEMOCHAR)
|
||||
SELECT @BILLNO,@SEQ2,@SEQ1,@PRE_DATE,GETDATE(),7,@LOGINID,@SIGNMEMO
|
||||
|
||||
--將 BPM_FLOWDATA_M 狀態改為 [7-拒簽]
|
||||
UPDATE BPM_FLOWDATA_M SET FLOWSTATUS = 7 WHERE BILLNO = @BILLNO
|
||||
|
||||
--回寫原單 SIGN_USER
|
||||
SELECT @BILLTAG=BILLTAG,@SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @BILLNO
|
||||
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
|
||||
|
||||
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+'拒簽'+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+'R'+CHAR(39) +
|
||||
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39)
|
||||
EXECUTE SP_EXECUTESQL @SQL
|
||||
|
||||
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
|
||||
--SELECT @LOGINID,GETDATE(),@LOGINID,'F',@BILLNO,@SEQ2
|
||||
|
||||
--應通知先前有簽核過的人
|
||||
--sql db sendmail
|
||||
EXEC GEX_SEND_FLOWMAIL 'R',@LOGINID, @BILLNO
|
||||
END
|
||||
@@ -0,0 +1,45 @@
|
||||
CREATE PROC DBO.GEXBPM_SENDMAILNOW
|
||||
AS
|
||||
/*
|
||||
Function : FLOW 立刻發 MAIL 給所有待簽的人
|
||||
Description: 本 SP 修改自 GEXBPM_DELAYSEND(催簽)
|
||||
本 SP 是立刻再發送 MAIL 給目前待簽的人, 不管是否已逾期
|
||||
Build Date : 2013/08/22
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
|
||||
*/
|
||||
|
||||
DECLARE @BILLNO VARCHAR(20)
|
||||
DECLARE @SIGNPERSON VARCHAR(20)
|
||||
DECLARE @AGENTID VARCHAR(20)
|
||||
DECLARE @SIGN_TITLE NVARCHAR(100)
|
||||
DECLARE @STITLE NVARCHAR(100)
|
||||
|
||||
DECLARE contact_cursor CURSOR FOR
|
||||
SELECT BILLNO,SIGNPERSON,SIGN_TITLE,AGENTID FROM BPM_FLOWDATA_D WHERE FLOWSTATUS = 0
|
||||
|
||||
OPEN contact_cursor
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @BILLNO,@SIGNPERSON,@AGENTID,@SIGN_TITLE
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
--發送 mail
|
||||
SET @STITLE = '(催簽) ' + @SIGN_TITLE
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@SIGNPERSON, @BILLNO, @STITLE
|
||||
|
||||
SET @STITLE = '(催簽:代理人) ' + @SIGN_TITLE
|
||||
IF ISNULL(@AGENTID,'') <> '' EXEC GEX_SEND_FLOWMAIL 'S',@AGENTID, @BILLNO, @STITLE
|
||||
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @BILLNO,@SIGNPERSON,@AGENTID,@SIGN_TITLE
|
||||
END
|
||||
|
||||
CLOSE contact_cursor
|
||||
DEALLOCATE contact_cursor
|
||||
@@ -0,0 +1,389 @@
|
||||
CREATE PROCEDURE dbo.GEX_SEND_FLOWMAIL
|
||||
(
|
||||
@BPM_TYPE CHAR(1), --S:送簽 B:退簽 A:已簽結 F:作廢 R:拒簽
|
||||
@SENDUSER VARCHAR(30), --被通知要簽核的人
|
||||
@BPMBILLNO VARCHAR(30), --簽核單號
|
||||
@SIGN_TITLE NVARCHAR(30) = ''
|
||||
)
|
||||
AS
|
||||
/*
|
||||
Function : 利用 sql 發送 FLOW MAIL 的共用程式
|
||||
Description: 測試時, 連續密集的發送 mail, 會被 gMail 當成垃圾信
|
||||
Build Date : 2012/10/21
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2013/07/01 新增 PICK 的專案發送 mail 寫法(依收件人 mail, 決定 mail Server)
|
||||
2 Michael 2013/07/08 新增 R:拒簽
|
||||
3 Michael 2013/08/07 PICK 不連回原單
|
||||
4 Michael 2013/08/14 PICK 的 Mail 格式有修正
|
||||
5 Michael 2013/09/26 因為發送 mail 一直都亂碼, 修改為變數測試看看
|
||||
|
||||
*/
|
||||
|
||||
DECLARE @MAIL_PROFILE NVARCHAR(100)
|
||||
DECLARE @MSG NVARCHAR(1000)
|
||||
DECLARE @BILLDESC NVARCHAR(200)
|
||||
DECLARE @FLOWDETAIL NVARCHAR(1000)
|
||||
DECLARE @DEST_MAIL VARCHAR(100)
|
||||
DECLARE @TITLE NVARCHAR(200)
|
||||
DECLARE @WEBSITE VARCHAR(200)
|
||||
DECLARE @SMTPSRV VARCHAR(200)
|
||||
DECLARE @CNT INT
|
||||
DECLARE @POS INT
|
||||
DECLARE @IS_PICK CHAR(1)
|
||||
|
||||
--判斷是否 PICK 專案
|
||||
SELECT @CNT=Count(*) FROM sysobjects WHERE XTYPE='U' AND NAME='COMPANYTYPE'
|
||||
IF @CNT > 0 SET @IS_PICK = 'Y' ELSE SET @IS_PICK = 'N'
|
||||
|
||||
SELECT @MAIL_PROFILE=PARAVALUE FROM PARAMETER WHERE PARATYPE = 'SYS' AND PARAFIELD = 'MAIL_PROFILE'
|
||||
IF ISNULL(@MAIL_PROFILE,'') = '' SET @MAIL_PROFILE = 'gexMail' --Default
|
||||
|
||||
/*
|
||||
PICK 有特殊的發送 mail 機制
|
||||
跟據收件人決定發送 mail 的 SMTP Server
|
||||
程式寫在 exec msdb.dbo.sp_send_dbmail 前
|
||||
*/
|
||||
|
||||
SELECT @WEBSITE=PARAVALUE FROM PARAMETER WHERE PARATYPE = 'SYS' AND PARAFIELD = 'WEBSITE'
|
||||
IF ISNULL(@WEBSITE,'') = '' SET @WEBSITE = 'http://erp.gex.com.tw' --Default(http://erp.gex.com.tw/gEIP/bPMSM13A.aspx?keyvalueparam=4318)
|
||||
SET @WEBSITE = @WEBSITE + '/gBPM/bBPMMG3.aspx'
|
||||
|
||||
SELECT @BILLDESC=ISNULL(B.BILLDESC,''),@TITLE='簽核通知-'+B.BILLDESC+ ' 原單單號: '+A.SOURCEBILLNO FROM BPM_FLOWDATA_M A
|
||||
LEFT JOIN BPM_FLOWSETUP_M B ON A.BILLTAG = B.BILLTAG
|
||||
WHERE A.BILLNO = @BPMBILLNO
|
||||
|
||||
--
|
||||
DECLARE @BILLDATE DATETIME
|
||||
DECLARE @SIGNPERSON NVARCHAR(30)
|
||||
DECLARE @PERSONCNAME NVARCHAR(30)
|
||||
DECLARE @ORG_PERSON NVARCHAR(30)
|
||||
DECLARE @FLOWTYPE NVARCHAR(30)
|
||||
DECLARE @MEMOCHAR NVARCHAR(200)
|
||||
SET @FLOWDETAIL = ''
|
||||
|
||||
DECLARE @FLDN NVARCHAR(100)
|
||||
SELECT @FLDN=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'N'
|
||||
IF @FLDN IS NULL SET @FLDN = '上呈'
|
||||
|
||||
SELECT
|
||||
BILLDATE,
|
||||
CASE WHEN SEQNO = 0 THEN @FLDN ELSE B.KEYVALUE END FLOWTYPE,
|
||||
CASE WHEN FLOWSTATUS <> 2 THEN SIGNPERSON ELSE BACKTOPERSON END SIGNPERSON,
|
||||
CASE WHEN FLOWSTATUS <> 2 THEN MEMOCHAR ELSE BACKMEMOCHAR END MEMOCHAR
|
||||
INTO #BPM_TMP1 FROM BPM_FLOWDATA_LOG A
|
||||
LEFT JOIN KEYVALUE B ON B.KEYTAG = 'FLOWSTATUS' AND B.KEYID = A.FLOWSTATUS
|
||||
WHERE BILLNO = @BPMBILLNO
|
||||
|
||||
DECLARE contact_cursor CURSOR FOR
|
||||
SELECT
|
||||
A.BILLDATE,A.FLOWTYPE,A.SIGNPERSON,B.PERSONCNAME,A.MEMOCHAR
|
||||
FROM #BPM_TMP1 A
|
||||
LEFT JOIN BASPERSON B ON A.SIGNPERSON = B.PERSONID
|
||||
|
||||
OPEN contact_cursor
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @BILLDATE,@FLOWTYPE,@SIGNPERSON,@PERSONCNAME,@MEMOCHAR
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @FLOWDETAIL = @FLOWDETAIL +
|
||||
'<tr>' +
|
||||
' <td>'+ISNULL(@SIGNPERSON,'')+'</td><td>'+ISNULL(@PERSONCNAME,'')+'</td>' +
|
||||
' <td>'+ISNULL(@FLOWTYPE,'')+'</td>' +
|
||||
' <td>'+ISNULL(CONVERT(varchar(12),@BILLDATE,111),'')+'</td><td>'+ISNULL(CONVERT(varchar(12),@BILLDATE,108),'')+'</td>' +
|
||||
' <td>'+ISNULL(@MEMOCHAR,'')+'</td>' +
|
||||
'</tr>'
|
||||
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @BILLDATE,@FLOWTYPE,@SIGNPERSON,@PERSONCNAME,@MEMOCHAR
|
||||
END
|
||||
|
||||
CLOSE contact_cursor
|
||||
DEALLOCATE contact_cursor
|
||||
--
|
||||
DROP TABLE #BPM_TMP1
|
||||
|
||||
--待簽核人員
|
||||
SET @ORG_PERSON = @SENDUSER
|
||||
|
||||
SELECT @ORG_PERSON=USERID+' ('+USERNAME+')' FROM USERS WHERE USERID = @ORG_PERSON
|
||||
IF ISNULL(@ORG_PERSON,'') = '' SET @ORG_PERSON = 'NO-DATA'
|
||||
|
||||
--**************************************************************************
|
||||
DECLARE @ORG_BILLNO VARCHAR(100) --原單單號(以下四個欄位是 PICK 專用)
|
||||
DECLARE @ORD_COMPANY NVARCHAR(100) --公司
|
||||
DECLARE @ORD_DEPARTMENT NVARCHAR(100) --費用分攤部門
|
||||
DECLARE @ORG_DETAIL NVARCHAR(600) --表身的品名及數量
|
||||
DECLARE @BILLTAG VARCHAR(100)
|
||||
|
||||
SET @ORD_COMPANY = ''
|
||||
SET @ORD_DEPARTMENT = ''
|
||||
SET @ORG_DETAIL = ''
|
||||
|
||||
SELECT @ORG_BILLNO=A.SOURCEBILLNO,@BILLTAG=BILLTAG FROM BPM_FLOWDATA_M A WHERE A.BILLNO = @BPMBILLNO
|
||||
|
||||
IF @IS_PICK = 'Y'
|
||||
BEGIN
|
||||
IF @BILLTAG = 'OPOM11' BEGIN
|
||||
SELECT
|
||||
@ORD_COMPANY=A.ACC_COMPANYID+'('+B.COMPCNAME+')',@ORD_DEPARTMENT=A.ACC_DEPARTMENTID+'-'+D.DEPARTMENTCNAME,
|
||||
@ORG_DETAIL=dbo.GEXFUNC_GETDETAIL('OPOORDER4_M',@ORG_BILLNO)
|
||||
FROM OPOORDER4_M A
|
||||
LEFT JOIN COMPANYTYPE B ON A.ACC_COMPANYID = B.COMPANYID
|
||||
LEFT JOIN BASDEPARTMENT D ON A.ACC_DEPARTMENTID = D.DEPARTMENTID
|
||||
WHERE BILLNO = @ORG_BILLNO
|
||||
END
|
||||
ELSE IF @BILLTAG = 'OPOM12' BEGIN
|
||||
SELECT
|
||||
@ORD_COMPANY=A.ACC_COMPANYID+'('+B.COMPCNAME+')',@ORD_DEPARTMENT=A.ACC_DEPARTMENTID+'-'+D.DEPARTMENTCNAME,
|
||||
@ORG_DETAIL=dbo.GEXFUNC_GETDETAIL('OPOORDER3_M',@ORG_BILLNO)
|
||||
FROM OPOORDER3_M A
|
||||
LEFT JOIN COMPANYTYPE B ON A.ACC_COMPANYID = B.COMPANYID
|
||||
LEFT JOIN BASDEPARTMENT D ON A.ACC_DEPARTMENTID = D.DEPARTMENTID
|
||||
WHERE BILLNO = @ORG_BILLNO
|
||||
END
|
||||
ELSE IF @BILLTAG = 'OPOM13' BEGIN
|
||||
SELECT
|
||||
@ORD_COMPANY=A.ACC_COMPANYID+'('+B.COMPCNAME+')',@ORD_DEPARTMENT=A.ACC_DEPARTMENTID+'-'+D.DEPARTMENTCNAME,
|
||||
@ORG_DETAIL=dbo.GEXFUNC_GETDETAIL('QMSIQC_M',@ORG_BILLNO)
|
||||
FROM QMSIQC_M A
|
||||
LEFT JOIN COMPANYTYPE B ON A.ACC_COMPANYID = B.COMPANYID
|
||||
LEFT JOIN BASDEPARTMENT D ON A.ACC_DEPARTMENTID = D.DEPARTMENTID
|
||||
WHERE BILLNO = @ORG_BILLNO
|
||||
END
|
||||
--ELSE IF @BILLTAG = 'OPOM16' BEGIN
|
||||
-- SELECT * FROM OPO_BUYSWOT BILLNO = @ORG_BILLNO
|
||||
--END
|
||||
END
|
||||
--**************************************************************************
|
||||
|
||||
/*
|
||||
因為 mail 發送一直會出現亂碼, 所以把所有的中文抬頭都改為變數測試看看
|
||||
*/
|
||||
DECLARE @FLD1 NVARCHAR(100)
|
||||
DECLARE @FLD2 NVARCHAR(100)
|
||||
DECLARE @FLD3 NVARCHAR(100)
|
||||
DECLARE @FLD4 NVARCHAR(100)
|
||||
DECLARE @FLD5 NVARCHAR(100)
|
||||
DECLARE @FLD6 NVARCHAR(100)
|
||||
DECLARE @FLD7 NVARCHAR(100)
|
||||
DECLARE @FLD8 NVARCHAR(100)
|
||||
DECLARE @FLD9 NVARCHAR(100)
|
||||
DECLARE @FLDA NVARCHAR(100)
|
||||
DECLARE @FLDB NVARCHAR(100)
|
||||
DECLARE @FLDC NVARCHAR(100)
|
||||
DECLARE @FLDD NVARCHAR(100)
|
||||
DECLARE @FLDE NVARCHAR(100)
|
||||
DECLARE @FLDF NVARCHAR(100)
|
||||
DECLARE @FLDG NVARCHAR(100)
|
||||
DECLARE @FLDH NVARCHAR(100)
|
||||
DECLARE @FLDI NVARCHAR(100)
|
||||
DECLARE @FLDJ NVARCHAR(100)
|
||||
DECLARE @FLDK NVARCHAR(100)
|
||||
DECLARE @FLDL NVARCHAR(100)
|
||||
DECLARE @FLDM NVARCHAR(100)
|
||||
|
||||
SELECT @FLD1=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '1'
|
||||
SELECT @FLD2=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '2'
|
||||
SELECT @FLD3=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '3'
|
||||
SELECT @FLD4=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '4'
|
||||
SELECT @FLD5=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '5'
|
||||
SELECT @FLD6=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '6'
|
||||
SELECT @FLD7=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '7'
|
||||
SELECT @FLD8=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '8'
|
||||
SELECT @FLD9=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = '9'
|
||||
SELECT @FLDA=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'A'
|
||||
SELECT @FLDB=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'B'
|
||||
SELECT @FLDC=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'C'
|
||||
SELECT @FLDD=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'D'
|
||||
SELECT @FLDE=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'E'
|
||||
SELECT @FLDF=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'F'
|
||||
SELECT @FLDG=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'G'
|
||||
SELECT @FLDH=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'H'
|
||||
SELECT @FLDI=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'I'
|
||||
SELECT @FLDJ=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'J'
|
||||
SELECT @FLDK=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'K'
|
||||
SELECT @FLDL=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'L'
|
||||
SELECT @FLDM=KEYVALUE FROM KEYVALUE WHERE KEYTAG = 'FLOWTITLE' AND KEYID = 'M'
|
||||
|
||||
IF @FLD1 IS NULL SET @FLD1 = '發送者'
|
||||
IF @FLD2 IS NULL SET @FLD2 = '原單單號'
|
||||
IF @FLD3 IS NULL SET @FLD3 = '流程說明'
|
||||
IF @FLD4 IS NULL SET @FLD4 = '簽核程序'
|
||||
IF @FLD5 IS NULL SET @FLD5 = '簽核作業'
|
||||
IF @FLD6 IS NULL SET @FLD6 = '送簽日期'
|
||||
IF @FLD7 IS NULL SET @FLD7 = '網頁連結'
|
||||
IF @FLD8 IS NULL SET @FLD8 = '簽核人員'
|
||||
IF @FLD9 IS NULL SET @FLD9 = '姓名'
|
||||
IF @FLDA IS NULL SET @FLDA = '簽核別'
|
||||
IF @FLDB IS NULL SET @FLDB = '簽核日期'
|
||||
IF @FLDC IS NULL SET @FLDC = '時間'
|
||||
IF @FLDD IS NULL SET @FLDD = '簽核內容'
|
||||
IF @FLDE IS NULL SET @FLDE = '出帳公司'
|
||||
IF @FLDF IS NULL SET @FLDF = '費用分攤單位'
|
||||
IF @FLDG IS NULL SET @FLDG = '採買品名數量'
|
||||
IF @FLDH IS NULL SET @FLDH = '按此連結到表單'
|
||||
IF @FLDI IS NULL SET @FLDI = '送簽'
|
||||
IF @FLDJ IS NULL SET @FLDJ = '退簽'
|
||||
IF @FLDK IS NULL SET @FLDK = '作廢通知'
|
||||
IF @FLDL IS NULL SET @FLDL = '拒簽通知'
|
||||
IF @FLDM IS NULL SET @FLDM = '已簽結通知'
|
||||
|
||||
DECLARE @HYPER NVARCHAR(200)
|
||||
DECLARE @ACTIVITY NVARCHAR(200)
|
||||
SET @HYPER = '<a href="'+@WEBSITE+'">'+@FLDH+'</a>'
|
||||
|
||||
IF @BPM_TYPE='S' SET @ACTIVITY = @FLDI
|
||||
ELSE IF @BPM_TYPE='B' SET @ACTIVITY = @FLDJ
|
||||
ELSE IF @BPM_TYPE='F' SET @ACTIVITY = @FLDK
|
||||
ELSE IF @BPM_TYPE='R' SET @ACTIVITY = @FLDL
|
||||
ELSE SET @ACTIVITY = @FLDM
|
||||
|
||||
--PICK 要求不要連回原單(格式也有修改)
|
||||
IF @IS_PICK <> 'Y'
|
||||
--標準版本
|
||||
SET @MSG = '<table width="600" border="1" style="border-collapse:collapse;" borderColor=black><tr>' +
|
||||
' <td style="width:25%">'+@FLD1+'</td><td style="width:75%">'+@ORG_PERSON+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD2+'</td><td>'+@ORG_BILLNO+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD3+'</td><td>'+@BILLDESC+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD4+'</td><td>'+@SIGN_TITLE+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD5+'</td><td>'+@ACTIVITY+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD6+'</td><td>'+CONVERT(varchar(30),GETDATE(),120)+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD7+'</td><td>'+@HYPER+'</td>' +
|
||||
'</tr>' +
|
||||
'</table>' +
|
||||
'<table width="600" border="1" style="border-collapse:collapse;" borderColor=black><tr>' +
|
||||
' <td>'+@FLD8+'</td><td>'+@FLD9+'</td><td>'+@FLDA+'</td><td>'+@FLDB+'</td><td>'+@FLDC+'</td><td>'+@FLDD+'</td>' +
|
||||
'</tr>' +
|
||||
@FLOWDETAIL +
|
||||
'</table>'
|
||||
ELSE
|
||||
--元誠格式
|
||||
SET @MSG = '<table width="600" border="1" style="border-collapse:collapse;" borderColor=black><tr>' +
|
||||
' <td style="width:25%">'+@FLD1+'</td><td style="width:75%">'+@ORG_PERSON+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD3+'</td><td>'+@BILLDESC+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD4+'</td><td>'+@SIGN_TITLE+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD5+'</td><td>'+@ACTIVITY+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD8+'</td><td>'+CONVERT(varchar(30),GETDATE(),120)+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLD2+'</td><td>'+@ORG_BILLNO+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLDE+'</td><td>'+@ORD_COMPANY+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLDF+'</td><td>'+@ORD_DEPARTMENT+'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
' <td>'+@FLDG+'</td><td>'+@ORG_DETAIL+'</td>' +
|
||||
'</tr>' +
|
||||
'</table>' +
|
||||
'<table width="600" border="1" style="border-collapse:collapse;" borderColor=black><tr>' +
|
||||
' <td>'+@FLD8+'</td><td>'+@FLD9+'</td><td>'+@FLDA+'</td><td>'+@FLDB+'</td><td>'+@FLDC+'</td><td>'+@FLDD+'</td>' +
|
||||
'</tr>' +
|
||||
@FLOWDETAIL +
|
||||
'</table>'
|
||||
|
||||
IF @BPM_TYPE = 'A' OR @BPM_TYPE = 'F'
|
||||
BEGIN
|
||||
--本簽核已完成, 要通知所有相關的人
|
||||
DECLARE @EMAIL VARCHAR(200)
|
||||
DECLARE @BPM_TMP2 TABLE (EMAIL VARCHAR(200))
|
||||
|
||||
IF @BPM_TYPE = 'A'
|
||||
BEGIN
|
||||
INSERT INTO @BPM_TMP2
|
||||
SELECT DISTINCT U.EMAIL FROM BPM_FLOWDATA_D Z
|
||||
LEFT JOIN USERS U ON U.USERID = Z.SIGNPERSON
|
||||
WHERE Z.BILLNO = @BPMBILLNO AND ISNULL(U.EMAIL,'') <> '' AND (Z.SEQNO = 0 OR Z.SENDMAIL = 'Y') --原上呈人員也要發通知
|
||||
END
|
||||
ELSE BEGIN --曾經簽核過的人
|
||||
INSERT INTO @BPM_TMP2
|
||||
SELECT DISTINCT U.EMAIL FROM BPM_FLOWDATA_LOG Z
|
||||
LEFT JOIN USERS U ON U.USERID = Z.SIGNPERSON
|
||||
WHERE Z.BILLNO = @BPMBILLNO AND ISNULL(U.EMAIL,'') <> ''
|
||||
END
|
||||
|
||||
DECLARE contact_cursor2 CURSOR FOR
|
||||
SELECT EMAIL FROM @BPM_TMP2
|
||||
|
||||
OPEN contact_cursor2
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor2
|
||||
INTO @EMAIL
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
--PICK 專案
|
||||
IF @IS_PICK = 'Y' BEGIN
|
||||
SET @POS = CHARINDEX('@', @EMAIL)
|
||||
SET @SMTPSRV = SUBSTRING(@EMAIL,@POS+1,LEN(@EMAIL)-@POS)
|
||||
SELECT TOP 1 @MAIL_PROFILE=COMPANYID FROM COMPANYTYPE WHERE MAILSERVER = @SMTPSRV
|
||||
END
|
||||
|
||||
exec msdb.dbo.sp_send_dbmail
|
||||
@recipients = @EMAIL,
|
||||
@body = @MSG,
|
||||
@subject = @TITLE,
|
||||
@profile_name = @MAIL_PROFILE,
|
||||
@body_format = HTML --也可以使用HTML格式
|
||||
|
||||
FETCH NEXT FROM contact_cursor2
|
||||
INTO @EMAIL
|
||||
END
|
||||
|
||||
CLOSE contact_cursor2
|
||||
DEALLOCATE contact_cursor2
|
||||
|
||||
END
|
||||
ELSE BEGIN
|
||||
--也有可能是多人(群組內有多人, 已在 GEXBPM_SIGNOK 跑 loop)
|
||||
SELECT @DEST_MAIL=EMAIL FROM USERS WHERE USERID = @SENDUSER
|
||||
--SET @DEST_MAIL = 'genie.michael@gmail.com' --For TEST
|
||||
|
||||
IF ISNULL(@DEST_MAIL,'') <> ''
|
||||
BEGIN
|
||||
--PICK 專案
|
||||
IF @IS_PICK = 'Y' BEGIN
|
||||
SET @POS = CHARINDEX('@', @DEST_MAIL)
|
||||
SET @SMTPSRV = SUBSTRING(@DEST_MAIL,@POS+1,LEN(@DEST_MAIL)-@POS)
|
||||
SELECT TOP 1 @MAIL_PROFILE=COMPANYID FROM COMPANYTYPE WHERE MAILSERVER = @SMTPSRV
|
||||
END
|
||||
|
||||
exec msdb.dbo.sp_send_dbmail
|
||||
@recipients = @DEST_MAIL,
|
||||
@body = @MSG,
|
||||
@subject = @TITLE,
|
||||
@profile_name = @MAIL_PROFILE,
|
||||
@body_format = HTML --也可以使用HTML格式
|
||||
END
|
||||
END
|
||||
@@ -0,0 +1,81 @@
|
||||
CREATE PROC DBO.GEXBPM_SIGNBACK
|
||||
(
|
||||
@BILLTAG VARCHAR(20), --單別
|
||||
@BILLNO VARCHAR(20), --簽核單號
|
||||
@SOURCESEQNO INT, --簽核單序號
|
||||
@LOGINID VARCHAR(30),
|
||||
@BACKPERSON VARCHAR(30), --退回給誰
|
||||
@SIGNMEMO NVARCHAR(600)
|
||||
)
|
||||
AS
|
||||
/*
|
||||
Function : FLOW 退簽時的更新資料程序
|
||||
Description: 行動簽核 @SOURCESEQNO = -1
|
||||
Build Date : 2011/10/05
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2013/08/09 當退簽人員未傳入時, 依參數取得是前一筆或第一筆
|
||||
本需求是配合行動簽核的需求修改
|
||||
|
||||
*/
|
||||
|
||||
DECLARE @BACKWHO VARCHAR(10)
|
||||
DECLARE @PRE_DATE DATETIME
|
||||
DECLARE @SEQ1 INT
|
||||
DECLARE @SEQ2 INT
|
||||
DECLARE @CNT INT
|
||||
|
||||
--傳入的是原單號還是簽核單號
|
||||
SELECT @CNT=COUNT(*) FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND BILLNO = @BILLNO
|
||||
IF @CNT <= 0 SELECT @BILLNO=BILLNO FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND SOURCEBILLNO = @BILLNO
|
||||
|
||||
SELECT @SEQ1=MAX(SEQNO)+1,@PRE_DATE=MAX(BILLDATE) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
|
||||
|
||||
--行動簽核未指定退回給誰, 如果 @BACKPERSON 為空, 依參數設定, 退回前一人或原上呈人
|
||||
IF ISNULL(@BACKPERSON,'') = ''
|
||||
BEGIN
|
||||
--
|
||||
SELECT @BACKWHO=PARAVALUE FROM PARAMETER WHERE PARATYPE = 'SYS' AND PARAFIELD = 'BPMBACKWHO'
|
||||
IF @BACKWHO IS NULL SET @BACKWHO = 'F'
|
||||
|
||||
IF @BACKWHO = 'P'
|
||||
BEGIN
|
||||
SELECT @SEQ2=MAX(SEQNO) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
|
||||
SELECT @BACKPERSON=SIGNPERSON FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO AND SEQNO = @SEQ2
|
||||
END
|
||||
ELSE BEGIN
|
||||
SELECT @BACKPERSON=SIGNPERSON FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO AND SEQNO = 0
|
||||
END
|
||||
END
|
||||
|
||||
--防錯, 如果 @SOURCESEQNO < 0, 則要取目前待簽的那一筆 SEQNO(配合行動簽核修改)
|
||||
IF @SOURCESEQNO < 0 SELECT TOP 1 @SOURCESEQNO=SEQNO,@LOGINID=SIGNPERSON FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND FLOWSTATUS = 0
|
||||
|
||||
--寫 LOG
|
||||
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON,BACKTOPERSON,BACKMEMOCHAR)
|
||||
SELECT @BILLNO,@SOURCESEQNO,@SEQ1,@PRE_DATE,GETDATE(),2,@LOGINID,@BACKPERSON,@SIGNMEMO
|
||||
|
||||
DECLARE @SENDMAIL CHAR(1)
|
||||
DECLARE @ORG_PERSON VARCHAR(20)
|
||||
DECLARE @SOURCEBILLNO VARCHAR(20)
|
||||
DECLARE @SIGN_TITLE NVARCHAR(30)
|
||||
|
||||
SELECT @SEQ2=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SIGNPERSON = @BACKPERSON
|
||||
SELECT @SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @BILLNO
|
||||
SELECT @ORG_PERSON=SIGNPERSON FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = 0
|
||||
|
||||
--將 BPM_FLOWDATA_D 狀態改為 [2-退回]
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @BILLNO AND SEQNO = @SEQ2
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 2 WHERE BILLNO = @BILLNO AND SEQNO > @SEQ2 AND SEQNO <= @SOURCESEQNO
|
||||
|
||||
SELECT @SENDMAIL=SENDMAIL,@SIGN_TITLE=SIGN_TITLE FROM BPM_FLOWSETUP_D WHERE BILLTAG = @BILLTAG AND SEQNO = @SEQ2
|
||||
IF @SENDMAIL = 'Y'
|
||||
BEGIN
|
||||
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
|
||||
--SELECT @LOGINID,GETDATE(),@ORG_PERSON,'B',@BILLNO,@SOURCESEQNO
|
||||
|
||||
--sql db sendmail
|
||||
EXEC GEX_SEND_FLOWMAIL 'B',@ORG_PERSON, @BILLNO, @SIGN_TITLE
|
||||
END
|
||||
@@ -0,0 +1,233 @@
|
||||
CREATE PROC DBO.GEXBPM_SIGNOK
|
||||
(
|
||||
@BILLTAG VARCHAR(20), --單別
|
||||
@BILLNO VARCHAR(20), --簽核單號
|
||||
@SOURCESEQNO INT, --簽核單序號
|
||||
@LOGINID VARCHAR(30),
|
||||
@SIGNMEMO NVARCHAR(600)
|
||||
)
|
||||
AS
|
||||
/*
|
||||
Function : FLOW 核可時的更新資料程序
|
||||
Description: 行動簽核 @SOURCESEQNO = -1
|
||||
程式中有判斷跳簽的處理程序
|
||||
只是將中間人員的 FLOWSTATUS 都改為已簽
|
||||
|
||||
FLOWSTATUS 0(待簽),1(已送件),2(退件),3(未到件),4(完成),5(通知),7(拒簽),9(作廢)
|
||||
Build Date : 2011/10/05
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2011/10/05 新增
|
||||
2 Michael 2013/07/01 加入連續相同人員, 直接簽核過的新功能
|
||||
3 Michael 2013/07/13 新增通知的處理
|
||||
4 Michael 2013/07/23 新增送下一關時, 同時通知代理人
|
||||
5 Michael 2013/08/14 多考慮下一關為多人會簽的情況
|
||||
|
||||
*/
|
||||
|
||||
DECLARE @PRE_DATE DATETIME
|
||||
DECLARE @NEXT_PERSON VARCHAR(20)
|
||||
DECLARE @SEQ1 INT
|
||||
DECLARE @SEQ3 INT
|
||||
DECLARE @CNT INT
|
||||
|
||||
--傳入的是原單號還是簽核單號
|
||||
SELECT @CNT=COUNT(*) FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND BILLNO = @BILLNO
|
||||
IF @CNT <= 0 SELECT @BILLNO=BILLNO FROM BPM_FLOWDATA_M WHERE BILLTAG = @BILLTAG AND SOURCEBILLNO = @BILLNO
|
||||
|
||||
--寫 LOG 專用
|
||||
SELECT @SEQ1=MAX(SEQNO)+1,@PRE_DATE=MAX(BILLDATE) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
|
||||
|
||||
--防錯(測試專用)
|
||||
IF @SEQ1 IS NULL BEGIN SET @SEQ1 = 0 END
|
||||
IF @PRE_DATE IS NULL BEGIN SET @PRE_DATE = GETDATE() END
|
||||
|
||||
--防錯, 如果 @SOURCESEQNO < 0, 則要取目前待簽的那一筆 SEQNO(配合行動簽核修改)
|
||||
IF @SOURCESEQNO < 0 SELECT TOP 1 @SOURCESEQNO=SEQNO,@LOGINID=SIGNPERSON FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND FLOWSTATUS = 0
|
||||
|
||||
--寫 LOG
|
||||
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON,MEMOCHAR)
|
||||
SELECT @BILLNO,@SOURCESEQNO,@SEQ1,@PRE_DATE,GETDATE(),1,@LOGINID,@SIGNMEMO
|
||||
|
||||
--判斷跳簽, 多 UPDATE 中間人員的狀態即可(由目前的待簽到本筆簽核間的資料都 Update)
|
||||
DECLARE @FLOWSTATUS SMALLINT
|
||||
SELECT @FLOWSTATUS=FLOWSTATUS FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SOURCESEQNO
|
||||
IF @FLOWSTATUS = 2 OR @FLOWSTATUS = 3
|
||||
BEGIN
|
||||
SELECT @SEQ1=ISNULL(MAX(SEQNO),0) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO < @SOURCESEQNO AND FLOWSTATUS = 0 --(FLOWSTATUS = 1 OR FLOWSTATUS = 4)
|
||||
IF @SEQ1 IS NULL SET @SEQ1 = 0
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 1 WHERE BILLNO = @BILLNO AND SEQNO > @SEQ1 AND SEQNO <= @SOURCESEQNO AND ISNULL(NOTIFY_ONLY,'N') <> 'Y'
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 5 WHERE BILLNO = @BILLNO AND SEQNO > @SEQ1 AND SEQNO <= @SOURCESEQNO AND ISNULL(NOTIFY_ONLY,'N') = 'Y'
|
||||
END
|
||||
|
||||
--將 BPM_FLOWDATA_D 狀態改為 [1-已簽], 因為會簽多人時(相同欄號), 只要一人有簽就過, 其他人也要改為 [已簽]
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 1 WHERE BILLNO = @BILLNO AND SEQNO = @SOURCESEQNO --AND SIGNPERSON = @LOGINID
|
||||
|
||||
--如果是最後一筆, BPM_FLOWDATA_M 的狀態改為完成, 並回寫原單的 SIGN_PERSON
|
||||
DECLARE @SEQ2 INT
|
||||
DECLARE @SEQ9 INT
|
||||
DECLARE @SOURCETBL VARCHAR(30)
|
||||
DECLARE @SOURCEPK VARCHAR(30)
|
||||
DECLARE @SQL NVARCHAR(400)
|
||||
DECLARE @NOTIFY_ONLY CHAR(1)
|
||||
DECLARE @SENDMAIL CHAR(1)
|
||||
DECLARE @FLOWZ CHAR(1)
|
||||
DECLARE @NOTIFY_WHO CHAR(1)
|
||||
DECLARE @ORG_PERSON VARCHAR(20)
|
||||
DECLARE @SOURCEBILLNO VARCHAR(20)
|
||||
DECLARE @SIGN_TITLE NVARCHAR(30)
|
||||
DECLARE @AGENTID VARCHAR(30)
|
||||
|
||||
/*
|
||||
@SEQ2 是需簽核的最後一筆
|
||||
@SEQ9 是所有簽核的最後一筆
|
||||
差別是最後幾筆可能是通知
|
||||
*/
|
||||
SELECT @SEQ2=MAX(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND ISNULL(NOTIFY_ONLY,'N') <> 'Y'
|
||||
SELECT @SEQ9=MAX(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO
|
||||
SELECT @ORG_PERSON=SIGNPERSON FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = 0
|
||||
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK,@NOTIFY_WHO=NOTIFY_WHO FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
|
||||
SELECT @SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @BILLNO
|
||||
|
||||
--需簽核的最後一筆
|
||||
IF @SEQ2 = @SOURCESEQNO
|
||||
BEGIN
|
||||
--最後一筆不可以是通知(改為可以)
|
||||
UPDATE BPM_FLOWDATA_M SET FLOWSTATUS = 4 WHERE BILLNO = @BILLNO
|
||||
|
||||
--回寫原單(固定為 SIGN_PERSON 及 FLOWFLAG)
|
||||
SET @FLOWZ = 'Z'
|
||||
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+@LOGINID+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+@FLOWZ+CHAR(39) +
|
||||
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39)
|
||||
EXECUTE SP_EXECUTESQL @SQL
|
||||
|
||||
--發送 MAIL(不另發通知)
|
||||
IF @NOTIFY_WHO = 'S'
|
||||
BEGIN
|
||||
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
|
||||
--SELECT @LOGINID,GETDATE(),@ORG_PERSON,'E',@BILLNO,@SOURCESEQNO
|
||||
|
||||
--sql db sendmail
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@ORG_PERSON, @BILLNO, '已簽核完畢'
|
||||
END
|
||||
ELSE IF @NOTIFY_WHO = 'A'
|
||||
BEGIN
|
||||
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
|
||||
--SELECT @LOGINID,GETDATE(),A.SIGNPERSON,'E',@BILLNO,@SOURCESEQNO FROM BPM_FLOWDATA_D A
|
||||
--WHERE A.BILLNO = @BILLNO
|
||||
|
||||
--sql db sendmail
|
||||
EXEC GEX_SEND_FLOWMAIL 'A',@ORG_PERSON, @BILLNO, '已簽核完畢'
|
||||
END
|
||||
|
||||
--如果不是最末筆(還有其他的通知, 目前的寫法, 改為允許多個通知人)
|
||||
IF @SEQ2 <> @SEQ9
|
||||
BEGIN
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 5 WHERE BILLNO = @BILLNO AND SEQNO > @SEQ2 AND ISNULL(NOTIFY_ONLY,'N') = 'Y'
|
||||
|
||||
--有可能是通知多人, 要跑 loop
|
||||
DECLARE contact_cursorN1 CURSOR FOR
|
||||
SELECT SIGNPERSON,SENDMAIL FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO > @SEQ2 AND ISNULL(NOTIFY_ONLY,'N') = 'Y'
|
||||
|
||||
OPEN contact_cursorN1
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursorN1
|
||||
INTO @ORG_PERSON,@SENDMAIL
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
IF @SENDMAIL = 'Y'
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@ORG_PERSON, @BILLNO, '(通知)已簽核完畢'
|
||||
|
||||
FETCH NEXT FROM contact_cursorN1
|
||||
INTO @ORG_PERSON,@SENDMAIL
|
||||
END
|
||||
|
||||
CLOSE contact_cursorN1
|
||||
DEALLOCATE contact_cursorN1
|
||||
END
|
||||
END
|
||||
ELSE BEGIN
|
||||
--如果不是最後一筆, 則找到下一筆待簽, 將狀態改為 [0-待簽]
|
||||
SELECT @SEQ3=MIN(SEQNO) FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO > @SOURCESEQNO
|
||||
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
|
||||
|
||||
--有可能是多人, 要跑 loop
|
||||
DECLARE contact_cursor CURSOR FOR
|
||||
SELECT SIGNPERSON,SENDMAIL,SIGN_TITLE,NOTIFY_ONLY,AGENTID FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
|
||||
|
||||
OPEN contact_cursor
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @ORG_PERSON,@SENDMAIL,@SIGN_TITLE,@NOTIFY_ONLY,@AGENTID
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
IF @SENDMAIL = 'Y'
|
||||
BEGIN
|
||||
--sql db sendmail
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@ORG_PERSON, @BILLNO, @SIGN_TITLE
|
||||
|
||||
IF ISNULL(@AGENTID,'') <> ''
|
||||
BEGIN
|
||||
SET @SIGN_TITLE = @SIGN_TITLE+' (代理人)'
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@AGENTID, @BILLNO, @SIGN_TITLE
|
||||
END
|
||||
END
|
||||
|
||||
FETCH NEXT FROM contact_cursor
|
||||
INTO @ORG_PERSON,@SENDMAIL,@SIGN_TITLE,@NOTIFY_ONLY,@AGENTID
|
||||
END
|
||||
|
||||
CLOSE contact_cursor
|
||||
DEALLOCATE contact_cursor
|
||||
|
||||
--如果是通知, 再找下一筆(目前的寫法不允許連續通知)
|
||||
IF @NOTIFY_ONLY = 'Y'
|
||||
BEGIN
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 5 WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
|
||||
|
||||
SELECT @SEQ3=MIN(SEQNO) FROM BPM_FLOWSETUP_D WHERE BILLTAG = @BILLTAG AND SEQNO > @SEQ3 AND ISNULL(NOTIFY_ONLY,'N') <> 'Y'
|
||||
UPDATE BPM_FLOWDATA_D SET FLOWSTATUS = 0 WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
|
||||
|
||||
--有可能要發多人 mail, 要跑 loop
|
||||
DECLARE contact_cursorN2 CURSOR FOR
|
||||
SELECT SIGNPERSON,SENDMAIL,SIGN_TITLE,NOTIFY_ONLY,AGENTID FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SEQ3
|
||||
|
||||
OPEN contact_cursorN2
|
||||
|
||||
-- Perform the first fetch.
|
||||
FETCH NEXT FROM contact_cursorN2
|
||||
INTO @ORG_PERSON,@SENDMAIL,@SIGN_TITLE,@NOTIFY_ONLY,@AGENTID
|
||||
|
||||
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
IF @SENDMAIL = 'Y'
|
||||
BEGIN
|
||||
--sql db sendmail
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@ORG_PERSON, @BILLNO, @SIGN_TITLE
|
||||
|
||||
IF ISNULL(@AGENTID,'') <> ''
|
||||
BEGIN
|
||||
SET @SIGN_TITLE = @SIGN_TITLE+' (代理人)'
|
||||
EXEC GEX_SEND_FLOWMAIL 'S',@AGENTID, @BILLNO, @SIGN_TITLE
|
||||
END
|
||||
END
|
||||
|
||||
FETCH NEXT FROM contact_cursorN2
|
||||
INTO @ORG_PERSON,@SENDMAIL,@SIGN_TITLE,@NOTIFY_ONLY,@AGENTID
|
||||
END
|
||||
|
||||
CLOSE contact_cursorN2
|
||||
DEALLOCATE contact_cursorN2
|
||||
END
|
||||
END
|
||||
@@ -0,0 +1,62 @@
|
||||
CREATE PROC DBO.GEXBPM_SIGNUNDO
|
||||
(
|
||||
@BILLNO VARCHAR(20), --簽核單號
|
||||
@LOGINID VARCHAR(30),
|
||||
@SIGNMEMO NVARCHAR(600)
|
||||
)
|
||||
AS
|
||||
/*
|
||||
Function : FLOW 作廢時的更新資料程序
|
||||
Description:
|
||||
1.必須先退回原申請人
|
||||
2.在原單或簽核待辦單上, 新增 [簽核作廢] button
|
||||
寫一筆資料到 log
|
||||
將 FLOWDATA_M 的 FLOWSTATUS 改為 9 作廢
|
||||
3.原單的 FLOWFLAG = X, SIGN_USER = 作廢
|
||||
|
||||
Build Date : 2011/10/12
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2011/10/12 新增
|
||||
*/
|
||||
|
||||
DECLARE @SQL NVARCHAR(2000)
|
||||
DECLARE @SOURCETBL VARCHAR(100)
|
||||
DECLARE @SOURCEPK VARCHAR(100)
|
||||
DECLARE @BILLTAG VARCHAR(100)
|
||||
DECLARE @SOURCEBILLNO VARCHAR(100)
|
||||
|
||||
DECLARE @PRE_DATE DATETIME
|
||||
DECLARE @SEQ1 INT
|
||||
DECLARE @SEQ2 INT
|
||||
SELECT @SEQ1=MAX(SEQNO)+1,@SEQ2=MIN(SEQNO),@PRE_DATE=MAX(BILLDATE) FROM BPM_FLOWDATA_LOG WHERE BILLNO = @BILLNO
|
||||
|
||||
DECLARE @FLOW INT
|
||||
SELECT @FLOW=FLOWSTATUS FROM BPM_FLOWDATA_D WHERE BILLNO = @BILLNO AND SEQNO = @SEQ2
|
||||
|
||||
IF @FLOW = 0
|
||||
BEGIN
|
||||
--寫 LOG
|
||||
INSERT INTO BPM_FLOWDATA_LOG (BILLNO,SOURCESEQNO,SEQNO,FLOWINDATE,BILLDATE,FLOWSTATUS,SIGNPERSON,MEMOCHAR)
|
||||
SELECT @BILLNO,@SEQ2,@SEQ1,@PRE_DATE,GETDATE(),9,@LOGINID,@SIGNMEMO
|
||||
|
||||
--將 BPM_FLOWDATA_M 狀態改為 [9-作廢]
|
||||
UPDATE BPM_FLOWDATA_M SET FLOWSTATUS = 9 WHERE BILLNO = @BILLNO
|
||||
|
||||
--回寫原單 SIGN_USER
|
||||
SELECT @BILLTAG=BILLTAG,@SOURCEBILLNO=SOURCEBILLNO FROM BPM_FLOWDATA_M WHERE BILLNO = @BILLNO
|
||||
SELECT @SOURCETBL=SOURCETABLE,@SOURCEPK=SOURCEPK FROM BPM_FLOWSETUP_M WHERE BILLTAG = @BILLTAG
|
||||
|
||||
SET @SQL = 'UPDATE ' + @SOURCETBL + ' SET SIGN_USER = ' + CHAR(39)+'作廢'+CHAR(39) + ',FLOWFLAG = ' + CHAR(39)+'X'+CHAR(39) +
|
||||
' WHERE ' + @SOURCEPK + ' = ' + CHAR(39) + @SOURCEBILLNO + CHAR(39)
|
||||
EXECUTE SP_EXECUTESQL @SQL
|
||||
|
||||
--INSERT INTO BPM_SENDMAIL (LOGINID,SENDDATE,SENDWHO,NOTIFY_ONLY,BILLNO,SEQNO)
|
||||
--SELECT @LOGINID,GETDATE(),@LOGINID,'F',@BILLNO,@SEQ2
|
||||
|
||||
--應通知先前有簽核過的人
|
||||
--sql db sendmail
|
||||
EXEC GEX_SEND_FLOWMAIL 'F',@LOGINID, @BILLNO
|
||||
END
|
||||
Reference in New Issue
Block a user