1
|
|
2
|
|
3
|
ALTER PROCEDURE [dbo].[TR_REQUEST_PROCESS_App]
|
4
|
@p_REQ_ID VARCHAR(15) = NULL,
|
5
|
@p_AUTH_STATUS VARCHAR(1) = NULL,
|
6
|
@p_CHECKER_ID varchar(15) = NULL,
|
7
|
@p_APPROVE_DT DATETIME = NULL,
|
8
|
@p_ROLE_LOGIN VARCHAR(50) = NULL,
|
9
|
@p_BRANCH_LOGIN VARCHAR(15),
|
10
|
@p_PROCESS_DESC NVARCHAR(MAX),
|
11
|
@p_XMLDATA XML
|
12
|
|
13
|
AS
|
14
|
|
15
|
--SET @p_APPROVE_DT= CAST(@p_APPROVE_DT AS DATE)
|
16
|
--Validation is here
|
17
|
DECLARE @ERRORSYS NVARCHAR(15) = ''
|
18
|
IF ( NOT EXISTS ( SELECT * FROM TR_REQUEST_DOC WHERE REQ_ID = @p_REQ_ID))
|
19
|
SET @ERRORSYS = 'REQ-00002'
|
20
|
IF @ERRORSYS <> ''
|
21
|
BEGIN
|
22
|
ROLLBACK TRANSACTION
|
23
|
SELECT ErrorCode Result, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
|
24
|
RETURN '0'
|
25
|
END
|
26
|
|
27
|
BEGIN TRANSACTION
|
28
|
-- LUCTV 20052020 BO SUNG CHECK NEU TRA VE THI KHONG DUYET DUOC
|
29
|
IF(EXISTS(SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID =@p_REQ_ID AND STATUS_JOB ='R') OR (EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE REQ_ID =@p_REQ_ID AND AUTH_STATUS ='R'))
|
30
|
OR(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_ID AND STATUS ='R')))
|
31
|
BEGIN
|
32
|
ROLLBACK TRANSACTION
|
33
|
SELECT '-1' Result, N'Phiếu yêu cầu mua sắm số: '+(SELECT REQ_CODE FROM TR_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID) +N' đang bị từ chối. Vui lòng đợi nhân viên xử lý phiếu và gửi phê duyệt lại!' ErrorDesc
|
34
|
RETURN '-1'
|
35
|
END
|
36
|
--UPDATE dbo.PL_REQUEST_TRANSFER SET AUTH_STATUS = @P_AUTH_STATUS, CHECKER_ID = @P_CHECKER_ID, APPROVE_DT = CONVERT(DATETIME,@P_APPROVE_DT,103)
|
37
|
--WHERE REQ_DOC_ID = @p_REQ_ID AND FR_BRN_ID IN (SELECT BRANCH_ID FROM CM_BRANCH_GETCHILDID(@p_BRANCH_LOGIN))
|
38
|
Declare @hdoc INT
|
39
|
EXEC sp_xml_preparedocument @hdoc Output,@p_XMLDATA
|
40
|
DECLARE @lstFILE TABLE(
|
41
|
ATTACH_ID VARCHAR(20),
|
42
|
IS_READ BIT
|
43
|
)
|
44
|
INSERT INTO @lstFILE
|
45
|
SELECT *
|
46
|
FROM OPENXML(@hDoc,'/Root/ATTACH_FILE',2)
|
47
|
WITH
|
48
|
(
|
49
|
ATTACH_ID VARCHAR(20),
|
50
|
IS_READ BIT
|
51
|
)
|
52
|
|
53
|
IF(EXISTS(SELECT TR_REQUEST_DOC_FILE_ID FROM dbo.TR_REQUEST_DOC_FILE WHERE REQ_ID=@p_REQ_ID AND IS_VIEW=1
|
54
|
AND EXISTS(SELECT ATTACH_ID FROM @lstFILE WHERE [@lstFILE].ATTACH_ID=TR_REQUEST_DOC_FILE.ATTACH_ID AND IS_READ=0)))
|
55
|
BEGIN
|
56
|
ROLLBACK TRANSACTION
|
57
|
SELECT 'REQ-00001' Result, '' ROLE_NOTIFI, N'File đinh kèm bắt buộc đọc' ErrorDesc
|
58
|
RETURN '0'
|
59
|
END
|
60
|
|
61
|
|
62
|
|
63
|
|
64
|
DECLARE
|
65
|
@Result VARCHAR(5),
|
66
|
@PROCESS_CURR VARCHAR(10),
|
67
|
@STEP_CURR INT,
|
68
|
@STEP_NEXT INT,
|
69
|
@PROCESS_NEXT VARCHAR(10),
|
70
|
@ROLE_USER_NOTIFI VARCHAR(50),
|
71
|
@DEP_ID VARCHAR(15),
|
72
|
@IS_LEAF VARCHAR(1),
|
73
|
@NOTES NVARCHAR(50)
|
74
|
|
75
|
SET @DEP_ID =(SELECT SECUR_CODE FROM dbo.TL_USER WHERE TLNANME=@p_CHECKER_ID)
|
76
|
SET @PROCESS_CURR= (SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND STATUS='C')
|
77
|
SET @PROCESS_NEXT=(SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@PROCESS_CURR)
|
78
|
SET @IS_LEAF=(SELECT TOP 1 IS_LEAF FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@PROCESS_CURR)
|
79
|
|
80
|
|
81
|
|
82
|
SET @NOTES =(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE (@PROCESS_CURR LIKE CDVAL + '%') AND CDNAME='PROCESS_ID' AND CDTYPE='REQ')
|
83
|
--SET @NOTES =(SELECT ROLE_DESC FROM dbo.TL_SYSROLE WHERE ROLE_ID=@p_ROLE_LOGIN)
|
84
|
|
85
|
|
86
|
|
87
|
UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='P',NOTES=@NOTES+N' đã phê duyệt',CHECKER_ID=@p_CHECKER_ID,APPROVE_DT=@p_APPROVE_DT WHERE PROCESS_ID=@PROCESS_CURR AND REQ_ID=@p_REQ_ID AND ROLE_USER=@p_ROLE_LOGIN
|
88
|
|
89
|
|
90
|
INSERT INTO dbo.PL_PROCESS
|
91
|
(
|
92
|
REQ_ID,
|
93
|
PROCESS_ID,
|
94
|
CHECKER_ID,
|
95
|
APPROVE_DT,
|
96
|
PROCESS_DESC,NOTES
|
97
|
)
|
98
|
VALUES
|
99
|
( @p_REQ_ID, -- REQ_ID - varchar(15)
|
100
|
@PROCESS_CURR, -- PROCESS_ID - varchar(10)
|
101
|
@p_CHECKER_ID, -- CHECKER_ID - varchar(15)
|
102
|
GETDATE(), -- APPROVE_DT - datetime
|
103
|
@p_PROCESS_DESC,
|
104
|
@NOTES+N' đã phê duyệt' -- PROCESS_DESC - nvarchar(1000)
|
105
|
)
|
106
|
IF(EXISTS(SELECT PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@PROCESS_CURR AND [STATUS] ='P'))
|
107
|
BEGIN
|
108
|
UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PARENT_PROCESS_ID=@PROCESS_CURR AND REQ_ID=@p_REQ_ID
|
109
|
UPDATE dbo.TR_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
|
110
|
|
111
|
END
|
112
|
|
113
|
IF(@PROCESS_NEXT='APPROVE')
|
114
|
BEGIN
|
115
|
DECLARE @TempTB TABLE
|
116
|
(
|
117
|
TOTAL_AMT DECIMAL(18,2),
|
118
|
TRADE_ID VARCHAR(20),
|
119
|
PLAN_ID VARCHAR(20)
|
120
|
)
|
121
|
INSERT INTO @TempTB
|
122
|
SELECT SUM(DT.TOTAL_AMT) TOTAL_AMT,PLDT.TRADE_ID,PLDT.PLAN_ID FROM dbo.TR_REQUEST_DOC_DT DT
|
123
|
LEFT JOIN dbo.PL_REQUEST_DOC_DT PLDT ON DT.PL_REQDT_ID=PLDT.REQDT_ID
|
124
|
WHERE TRAN_TYPE_ID IN (SELECT TRAN_TYPE_ID FROM dbo.CM_TRAN_TYPE WHERE NOTES='XK') AND DT.REQ_DOC_ID=@p_REQ_ID
|
125
|
GROUP BY PLDT.TRADE_ID,PLDT.PLAN_ID
|
126
|
UPDATE dbo.PL_TRADEDETAIL SET AMT_EXE =AMT_EXE + (SELECT TOTAL_AMT FROM @TempTB WHERE [@TempTB].TRADE_ID=PL_TRADEDETAIL.TRADE_ID AND PL_TRADEDETAIL.PLAN_ID=[@TempTB].PLAN_ID)
|
127
|
|
128
|
|
129
|
IF(EXISTS(SELECT REQ_ID FROM dbo.TR_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID AND REQ_PARENT_ID IS NOT NULL AND REQ_PARENT_ID <>''))
|
130
|
BEGIN
|
131
|
DECLARE @PARENT_ID VARCHAR(20)
|
132
|
SET @PARENT_ID =(SELECT REQ_PARENT_ID FROM dbo.TR_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID)
|
133
|
IF(EXISTS(SELECT PO_ID FROM dbo.TR_PO_MASTER WHERE REQ_DOC_ID=@PARENT_ID AND AUTH_STATUS='A'))
|
134
|
BEGIN
|
135
|
DECLARE lstPO CURSOR FOR
|
136
|
SELECT PO_ID FROM dbo.TR_PO_MASTER WHERE REQ_DOC_ID=@PARENT_ID
|
137
|
OPEN lstPO
|
138
|
|
139
|
DECLARE @PO_ID VARCHAR(20),@TOTAL_ADD DECIMAL(18,2)
|
140
|
|
141
|
FETCH NEXT FROM lstPO INTO @PO_ID
|
142
|
WHILE @@FETCH_STATUS =0
|
143
|
BEGIN
|
144
|
|
145
|
SET @TOTAL_ADD = (SELECT SUM(TOTAL_AMT) AS TOTAL FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_REQ_ID AND HANGHOA_ID IN (SELECT GOODS_ID FROM dbo.TR_PO_DETAIL WHERE PO_ID=@PO_ID ))
|
146
|
|
147
|
UPDATE dbo.TR_PO_MASTER SET AMT_ADD =@TOTAL_ADD WHERE PO_ID=@PO_ID
|
148
|
|
149
|
|
150
|
|
151
|
DECLARE @TOTAL_PERCENT INT,@TOTAL_AMT_REMAIN DECIMAL(18,2)
|
152
|
|
153
|
|
154
|
SELECT @TOTAL_PERCENT= SUM([PERCENT]) ,@TOTAL_AMT_REMAIN=SUM(ISNULL(AMOUNT,0)) FROM TR_PO_PAYMENT WHERE PO_ID=@PO_ID AND NOT EXISTS (SELECT PAY_ID FROM dbo.TR_REQ_PAY_SCHEDULE WHERE TR_REQ_PAY_SCHEDULE.PAY_ID =TR_PO_PAYMENT.PAY_ID AND PO_ID =@PO_ID AND AUTH_STATUS_KT='A' AND (TRN_TYPE='PAY' OR TRN_TYPE='ADV')
|
155
|
GROUP BY TR_REQ_PAY_SCHEDULE.PAY_ID
|
156
|
HAVING SUM(ISNULL(AMT_PAY_REAL,0) + ISNULL(AMT_ADVANCE,0)) >= TR_PO_PAYMENT.AMOUNT)
|
157
|
IF(EXISTS(SELECT PAY_ID FROM TR_PO_PAYMENT WHERE PO_ID=@PO_ID AND NOT EXISTS (SELECT PAY_ID FROM dbo.TR_REQ_PAY_SCHEDULE WHERE TR_REQ_PAY_SCHEDULE.PAY_ID =TR_PO_PAYMENT.PAY_ID AND PO_ID =@PO_ID AND AUTH_STATUS_KT='A' AND (TRN_TYPE='PAY' OR TRN_TYPE='ADV')
|
158
|
GROUP BY TR_REQ_PAY_SCHEDULE.PAY_ID
|
159
|
HAVING SUM(ISNULL(AMT_PAY_REAL,0) + ISNULL(AMT_ADVANCE,0)) >= TR_PO_PAYMENT.AMOUNT)))
|
160
|
|
161
|
BEGIN
|
162
|
UPDATE dbo.TR_PO_PAYMENT SET AMOUNT = ((@TOTAL_AMT_REMAIN + @TOTAL_ADD)/@TOTAL_PERCENT ) * [PERCENT] WHERE PO_ID=@PO_ID AND NOT EXISTS (SELECT PAY_ID FROM dbo.TR_REQ_PAY_SCHEDULE WHERE TR_REQ_PAY_SCHEDULE.PAY_ID =TR_PO_PAYMENT.PAY_ID AND PO_ID =@PO_ID AND AUTH_STATUS_KT='A' AND (TRN_TYPE='PAY' OR TRN_TYPE='ADV')
|
163
|
GROUP BY TR_REQ_PAY_SCHEDULE.PAY_ID
|
164
|
HAVING SUM(ISNULL(AMT_PAY_REAL,0) + ISNULL(AMT_ADVANCE,0)) >= TR_PO_PAYMENT.AMOUNT)
|
165
|
END
|
166
|
FETCH NEXT FROM lstPO INTO @PO_ID
|
167
|
END
|
168
|
|
169
|
END
|
170
|
|
171
|
|
172
|
END
|
173
|
ELSE IF(EXISTS(SELECT * FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_REQ_ID AND TRAN_TYPE_ID NOT IN (SELECT TRN_TYPE FROM dbo.CM_TRAN_TYPE WHERE NOTES='XK')))
|
174
|
EXEC dbo.TR_REQ_DOC_Ins_To_PO @p_TR_REQ_ID = @p_REQ_ID -- varchar(15)
|
175
|
|
176
|
SET @Result='0'
|
177
|
END
|
178
|
ELSE
|
179
|
SET @Result='1'
|
180
|
|
181
|
|
182
|
|
183
|
IF @@Error <> 0 GOTO ABORT
|
184
|
|
185
|
COMMIT TRANSACTION
|
186
|
SELECT @Result as Result , @ROLE_USER_NOTIFI AS ROLE_NOTIFI, '' ErrorDesc
|
187
|
RETURN '0'
|
188
|
ABORT:
|
189
|
BEGIN
|
190
|
|
191
|
ROLLBACK TRANSACTION
|
192
|
SELECT '-1' as Result, '' ROLE_NOTIFI ,'' ErrorDesc
|
193
|
RETURN '-1'
|
194
|
End
|
195
|
|
196
|
|
197
|
|
198
|
|
199
|
|