1
|
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_KT_Appr]
|
2
|
--Luanlt 2019/17/10 - Sửa params
|
3
|
@p_REQ_PAY_ID varchar(15)= NULL,
|
4
|
@p_CHECKER_ID_KT varchar(15) = NULL
|
5
|
AS
|
6
|
--Luanlt 2019/10/17 Validate CORE NOTE không được rỗng
|
7
|
--IF ((SELECT CORE_NOTE FROM TR_REQUEST_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) IS NULL OR (SELECT CORE_NOTE FROM TR_REQUEST_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) = '')
|
8
|
--Luanlt 2019/10/29 Sửa lại validate tồn tại diễn giải hạch toán từ REQUEST_ENTRIES_POST
|
9
|
--IF (NOT EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID = @p_REQ_PAY_ID))
|
10
|
--BEGIN
|
11
|
-- SELECT '-1' Result,'' REQ_PAY_ID,N'Chưa cập nhật thông tin hạch toán' ErrorDesc
|
12
|
-- RETURN '-1'
|
13
|
--END
|
14
|
|
15
|
-- BEGIN VALIDATE
|
16
|
IF EXISTS (SELECT * FROM TR_REQ_PAYMENT WHERE MAKER_ID_KT = @p_CHECKER_ID_KT AND REQ_PAY_ID =@p_REQ_PAY_ID)
|
17
|
BEGIN
|
18
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép duyệt phiếu đề nghị thanh toán này! Giao dịch viên không có quyền duyệt phiếu đề nghị thanh toán' ErrorDesc
|
19
|
RETURN '-1'
|
20
|
END
|
21
|
IF (NOT EXISTS (SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = @p_REQ_PAY_ID AND TLNAME =@p_CHECKER_ID_KT AND TYPE_JOB = 'KS'))
|
22
|
BEGIN
|
23
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép duyệt phiếu đề nghị thanh toán này. Phiếu đề nghị thanh toán đang được kiểm soát viên khác xử lý' ErrorDesc
|
24
|
RETURN '-1'
|
25
|
END
|
26
|
IF EXISTS (SELECT * FROM TR_REQ_PAYMENT WHERE AUTH_STATUS ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
|
27
|
BEGIN
|
28
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đang được trả về bộ phận yêu cầu. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
|
29
|
RETURN '-1'
|
30
|
END
|
31
|
IF EXISTS (SELECT * FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
|
32
|
BEGIN
|
33
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đã được kiểm soát viên phê duyệt trước đó' ErrorDesc
|
34
|
RETURN '-1'
|
35
|
END
|
36
|
IF EXISTS (SELECT * FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
|
37
|
BEGIN
|
38
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đang được trả về giao dịch viên. Vui lòng kiểm tra lại thông tin' ErrorDesc
|
39
|
RETURN '-1'
|
40
|
END
|
41
|
-- CHAN CUOI
|
42
|
IF (EXISTS (SELECT * FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT <> 'P' AND AUTH_STATUS_KT <> 'S' AND REQ_PAY_ID =@p_REQ_PAY_ID))
|
43
|
BEGIN
|
44
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' chưa được gửi phê duyệt. Vui lòng đợi người tạo gửi phê duyệt trước khi phê duyệt phiếu' ErrorDesc
|
45
|
RETURN '-1'
|
46
|
END
|
47
|
|
48
|
-- VALIDATE LUOI HACH TOAN
|
49
|
DECLARE @SUMVAT DECIMAL(18,0) = 0, @INDEX_ENTRIES INT = 0
|
50
|
DECLARE @SUM3532 DECIMAL(18,0) = 0
|
51
|
DECLARE @tmp3532 TABLE(
|
52
|
AMT DECIMAL(18,0),
|
53
|
ACCT VARCHAR(20)
|
54
|
)
|
55
|
SET @SUM3532 = (SELECT ISNULL(SUM(AMT),0) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND ACCT = '353200002')
|
56
|
SET @SUMVAT = (SELECT ISNULL(SUM(VAT),0) FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND TYPE_FUNC = 'KT')
|
57
|
|
58
|
IF(@SUM3532 <> @SUMVAT)
|
59
|
BEGIN
|
60
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán dòng ' + CONVERT(VARCHAR(5),@INDEX_ENTRIES) + N': Tổng số tiền thuế GTGT ở lưới hóa đơn đính kèm có VAT không bằng tổng số tiền tài khoản nợ 353200002 ở lưới hạch toán : Tổng tiền thuế GTGT: ' + FORMAT(@SUMVAT,'#,#', 'vi-VN') + N',Tổng tiền tài khoản 3532: ' + FORMAT(@SUM3532,'#,#', 'vi-VN') ErrorDesc
|
61
|
RETURN '-1'
|
62
|
END
|
63
|
|
64
|
|
65
|
DECLARE @REQ_PAY_ID varchar(15), @ET_ID varchar(15), @AMT_ET DECIMAL(18,0), @ACC_ET varchar(25), @DRCR_ET varchar(25), @SUM_ET DECIMAL(18,0) = 0
|
66
|
DECLARE cursorProduct CURSOR LOCAL FOR SELECT REQ_PAY_ID,ENTRY_PAIR,AMT,ACCT,DR_CR FROM TR_REQ_PAY_ENTRIES A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
|
67
|
Open cursorProduct
|
68
|
|
69
|
FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
|
70
|
WHILE @@FETCH_STATUS = 0
|
71
|
BEGIN
|
72
|
IF(@DRCR_ET='C' AND EXISTS(SELECT * FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ACC_NO =@ACC_ET))
|
73
|
BEGIN
|
74
|
SET @SUM_ET =(SELECT SUM(AMT) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='C' AND ACCT =@ACC_ET)
|
75
|
IF(ISNULL(@SUM_ET,0) <> (SELECT SUM(TOTAL_AMT) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ACC_NO =@ACC_ET))
|
76
|
BEGIN
|
77
|
SELECT '-1' as Result, '' REQ_PAY_ID, N' Số tiền hạch toán có của tài khoản: '+@ACC_ET + N' phải bằng với số tiền trên phương thức thanh toán của tài khoản đó là: '+FORMAT((SELECT ISNULL(SUM(TOTAL_AMT),0) FROM TR_REQ_PAY_METHOD WHERE ACC_NO =@ACC_ET AND REQ_PAY_ID =@p_REQ_PAY_ID),'#,###') ErrorDesc
|
78
|
RETURN '-1'
|
79
|
END
|
80
|
END
|
81
|
-- KIEM TRA SO TIEN NO CO
|
82
|
IF (ISNULL((SELECT SUM(AMT) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='C' AND ENTRY_PAIR =@ET_ID),0) <> ISNULL((SELECT SUM(AMT) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='D' AND ENTRY_PAIR =@ET_ID),0))
|
83
|
BEGIN
|
84
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Mã bút toán: ' + @ET_ID + N' Số tiền bút toán Nợ phải bằng với số tiền bút toán Có' ErrorDesc
|
85
|
RETURN '-1'
|
86
|
END
|
87
|
|
88
|
FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
|
89
|
END
|
90
|
|
91
|
-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
|
92
|
IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
|
93
|
BEGIN
|
94
|
DECLARE @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
|
95
|
SET @SUM_CR =ISNULL((SELECT SUM(AMT*ISNULL(EXC_RATE,1)) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='C'),0)
|
96
|
SET @SUM_DR =ISNULL((SELECT SUM(AMT*ISNULL(EXC_RATE,1)) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='D'),0)
|
97
|
IF(@SUM_CR <> @SUM_DR)
|
98
|
BEGIN
|
99
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Tổng hạch toán nợ phải bằng tổng hạch toán có' ErrorDesc
|
100
|
RETURN '-1'
|
101
|
END
|
102
|
END
|
103
|
|
104
|
-- END VALIDATE
|
105
|
|
106
|
BEGIN TRANSACTION
|
107
|
DECLARE @p_MAKER_ID VARCHAR(15)
|
108
|
SET @p_MAKER_ID=(SELECT MAKER_ID FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
|
109
|
-- CAC BUOC DUYET
|
110
|
DECLARE @LEVEL_JOB VARCHAR(5), @LEVEL_JOB_PREV INT
|
111
|
SET @LEVEL_JOB =(SELECT TOP 1 LEVEL_JOB FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID =@p_REQ_PAY_ID AND TYPE_JOB='KS')
|
112
|
SET @LEVEL_JOB_PREV = CONVERT(INT,@LEVEL_JOB) -1
|
113
|
---
|
114
|
DECLARE @INDEX1 INT =0, @INDEX INT =0, @INDEX_AD INT =0
|
115
|
DECLARE @REQ_TYPE VARCHAR(15),@PAY_ADVANCE_ID VARCHAR(15),@AMT_PAY DECIMAL(18,0)
|
116
|
DECLARE @PAY_ID VARCHAR(15),@PAY_PHASE VARCHAR(15), @AMT_ADVANCE DECIMAL(18,0),@SCHEDULE_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2), @AMT_REMAIN DECIMAL(18,2),@REF_ID VARCHAR(15),
|
117
|
@TRADED_ID VARCHAR(15), @AMT_EXE DECIMAL(18,2), @AMT_EXE_REMAIN DECIMAL(18,2), @AMT_ADD DECIMAL(18,2), @AMT_REVERT DECIMAL(18,2), @AD_PAY_ID VARCHAR(15),@PARENT_ID VARCHAR(15),
|
118
|
@REASON_TTDK NVARCHAR(2000), @GD_ID VARCHAR(15)
|
119
|
SET @REQ_TYPE =(SELECT REQ_TYPE FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
|
120
|
--- KIEM TRA XEM CO PHAI BUOC DUYET CUOI CUNG CHUA
|
121
|
IF(@LEVEL_JOB='1')
|
122
|
BEGIN
|
123
|
---TRU NGAN SACH
|
124
|
DECLARE CURS_TRADE CURSOR FOR SELECT A.TRADE_ID, A.AMT_EXE,A.GD_ID FROM TR_REQ_PAY_BUDGET A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
|
125
|
OPEN CURS_TRADE
|
126
|
FETCH NEXT FROM CURS_TRADE INTO @TRADED_ID,@AMT_EXE,@GD_ID
|
127
|
WHILE @@FETCH_STATUS = 0
|
128
|
BEGIN
|
129
|
IF(@REQ_TYPE <> 'P')
|
130
|
BEGIN
|
131
|
SET @INDEX = @INDEX +1
|
132
|
--IF(EXISTS(SELECT * FROM CM_GOODS WHERE GD_ID =@GD_ID AND GD_TYPE_ID ='NS'))
|
133
|
--BEGIN
|
134
|
-- SET @AMT_EXE_REMAIN =(SELECT A.AMT_APP - A.AMT_EXE FROM PL_TRADEDETAIL A WHERE A.TRADE_ID = @TRADED_ID)
|
135
|
-- --KIEM TRA NEU SO PHIEU TAM UNG NAY DA THANH TOAN XONG THI KHONG CHO PHEP DUYET
|
136
|
-- IF((@AMT_EXE_REMAIN -@AMT_EXE)<0)
|
137
|
-- BEGIN
|
138
|
-- ROLLBACK TRANSACTION
|
139
|
-- SELECT '-1' Result,'' REQ_PAY_ID,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX)+ N': Ngân sách sử dụng thực tế đã vượt mức ngân sách sử dụng còn lại: '+ FORMAT(@AMT_EXE_REMAIN,'#,#', 'vi-VN') ErrorDesc
|
140
|
-- RETURN '-1'
|
141
|
-- END
|
142
|
--END
|
143
|
END
|
144
|
UPDATE PL_TRADEDETAIL SET AMT_EXE = ISNULL(AMT_EXE,0) + @AMT_EXE*(SELECT TOP 1 RATE FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID)
|
145
|
WHERE TRADE_ID =@TRADED_ID
|
146
|
FETCH NEXT FROM CURS_TRADE INTO @TRADED_ID,@AMT_EXE,@GD_ID
|
147
|
END
|
148
|
CLOSE CURS_TRADE
|
149
|
DEALLOCATE CURS_TRADE
|
150
|
----
|
151
|
IF(@REQ_TYPE ='I')
|
152
|
BEGIN
|
153
|
DECLARE CURS CURSOR FOR SELECT A.PAY_ADV_ID,A.AMT_USE,A.AMT_ADD,A.AMT_REVERT FROM TR_REQ_PAYMENT_DT A WHERE A.PAY_ID =@p_REQ_PAY_ID
|
154
|
OPEN CURS
|
155
|
FETCH NEXT FROM CURS INTO @PAY_ADVANCE_ID,@AMT_PAY,@AMT_ADD , @AMT_REVERT
|
156
|
WHILE @@FETCH_STATUS = 0
|
157
|
BEGIN
|
158
|
SET @INDEX_AD = @INDEX_AD +1
|
159
|
--KIEM TRA NEU SO PHIEU TAM UNG NAY DA THANH TOAN XONG THI KHONG CHO PHEP DUYET
|
160
|
IF((SELECT A.REQ_AMT - A.PAY_AMT FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_PAY_ID = @PAY_ADVANCE_ID)<=0)
|
161
|
BEGIN
|
162
|
ROLLBACK TRANSACTION
|
163
|
SELECT '-1' Result,'' REQ_PAY_ID,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Phiếu tạm ứng này đã được hoàn tạm ứng xong. Vui lòng xóa khỏi danh sách hoàn tạm ứng' ErrorDesc
|
164
|
RETURN '-1'
|
165
|
END
|
166
|
UPDATE TR_REQ_ADVANCE_PAYMENT
|
167
|
SET PAY_AMT = ISNULL(PAY_AMT,0)+@AMT_PAY +@AMT_REVERT-@AMT_ADD WHERE REQ_PAY_ID=@PAY_ADVANCE_ID
|
168
|
-- NEU HOAN UNG PDN TAM UNG HD DINH KI THI CUNG PHAI UPDATE
|
169
|
--UPDATE TR_REQ_PAY_PERIOD SET PROCESS ='2' WHERE REQ_PAY_ID =@PAY_ADVANCE_ID
|
170
|
UPDATE TR_REQ_PAY_SCHEDULE SET PROCESS ='2' WHERE REQ_PAY_ID =@PAY_ADVANCE_ID
|
171
|
|
172
|
-- UPDATE PDN TAM UNG THANH PROCESS = 2 ==> DA HOAN UNG
|
173
|
DECLARE @PAY_AMOUNT_I DECIMAL(18,0),@PAY_DT_I DATETIME,@l_CONTRACT_ID_I VARCHAR(15), @OLD_INDEX_I DECIMAL(18, 0), @NEW_INDEX_I DECIMAL(18, 0), @PARENT_ID_I VARCHAR(15),
|
174
|
@PAY_PHASE_I VARCHAR(15), @AD_PAY_ID_I VARCHAR(15), @PROCESS_I VARCHAR(15), @REASON_TTDK_I VARCHAR(15)
|
175
|
DECLARE CURS_PERIOD_I CURSOR FOR SELECT A.AMT_PAY,A.PAY_DT_REAL,A.CONTRACT_ID,A.PAY_PHASE,A.AD_PAY_ID,A.PROCESS,A.PARENT_ID,A.REASON, A.OLD_INDEX, A.NEW_INDEX FROM TR_REQ_PAY_PERIOD A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID ORDER BY A.CONTRACT_ID
|
176
|
OPEN CURS_PERIOD_I
|
177
|
FETCH NEXT FROM CURS_PERIOD_I INTO @PAY_AMOUNT_I ,@PAY_DT_I ,@l_CONTRACT_ID_I,@PAY_PHASE_I,@AD_PAY_ID_I, @PROCESS_I,@PARENT_ID_I,@REASON_TTDK_I, @OLD_INDEX_I, @NEW_INDEX_I
|
178
|
WHILE @@FETCH_STATUS = 0
|
179
|
BEGIN
|
180
|
UPDATE TR_REQ_PAY_PERIOD SET PROCESS ='2' WHERE (PERIOD_ID =@PARENT_ID_I OR AD_PAY_ID =@PARENT_ID_I) AND PAY_TYPE ='ADV_PAY'
|
181
|
AND PAY_PHASE = @PAY_PHASE_I AND CONTRACT_ID = @l_CONTRACT_ID_I AND OLD_INDEX = @OLD_INDEX_I AND NEW_INDEX = @NEW_INDEX_I
|
182
|
IF @@Error <> 0 GOTO ABORT
|
183
|
FETCH NEXT FROM CURS_PERIOD_I INTO @PAY_AMOUNT_I ,@PAY_DT_I ,@l_CONTRACT_ID_I,@PAY_PHASE_I,@AD_PAY_ID_I, @PROCESS_I,@PARENT_ID_I,@REASON_TTDK_I, @OLD_INDEX_I, @NEW_INDEX_I
|
184
|
END
|
185
|
CLOSE CURS_PERIOD_I
|
186
|
DEALLOCATE CURS_PERIOD_I
|
187
|
|
188
|
FETCH NEXT FROM CURS INTO @PAY_ADVANCE_ID,@AMT_PAY,@AMT_ADD , @AMT_REVERT
|
189
|
END
|
190
|
CLOSE CURS
|
191
|
DEALLOCATE CURS
|
192
|
END
|
193
|
-- KIEM TRA NEU LA THANH TOAN PO
|
194
|
ELSE IF((@REQ_TYPE ='P' AND ((SELECT IS_PERIOD FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) <>'Y' OR (SELECT IS_PERIOD FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) IS NULL )) OR (@REQ_TYPE ='I'))
|
195
|
BEGIN
|
196
|
DECLARE @PROCESS VARCHAR(15), @PDN_TAM_UNG VARCHAR(15), @SO_TIEN_TAM_UNG DECIMAL(18,0)
|
197
|
DECLARE CURS_AD CURSOR FOR SELECT A.SCHEDULE_ID,A.AMT_PAY_DO,A.PAY_ID,A.PAY_PHASE,A.AMT_ADVANCE,A.AMT_PAY_REAL, A.AMT_REMAIN,A.REF_ID,A.PROCESS
|
198
|
FROM TR_REQ_PAY_SCHEDULE A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
|
199
|
OPEN CURS_AD
|
200
|
FETCH NEXT FROM CURS_AD INTO @SCHEDULE_ID,@AMT_PAY,@PAY_ID,@PAY_PHASE,@AMT_ADVANCE,@AMT_PAY_REAL, @AMT_REMAIN,@REF_ID,@PROCESS
|
201
|
WHILE @@FETCH_STATUS = 0
|
202
|
BEGIN
|
203
|
SET @INDEX1 = @INDEX1 +1
|
204
|
-- KIEM TRA NEU SO PHIEU TAM UNG NAY DA THANH TOAN XONG THI KHONG CHO PHEP DUYET
|
205
|
--IF((SELECT MIN(A.AMT_REMAIN) FROM TR_REQ_PAY_SCHEDULE A WHERE A.PAY_ID = @PAY_ID GROUP BY A.PAY_ID )=0)
|
206
|
--BEGIN
|
207
|
-- ROLLBACK TRANSACTION
|
208
|
-- SELECT '-1' Result,'' REQ_PAY_ID,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX1)+ N':Kì '+ @PAY_PHASE+N' đã thanh toán xong' ErrorDesc
|
209
|
-- RETURN '-1'
|
210
|
--END
|
211
|
IF(@AMT_ADVANCE >0 AND @AMT_PAY=0)
|
212
|
BEGIN
|
213
|
UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTU' WHERE SCHEDULE_ID=@SCHEDULE_ID
|
214
|
END
|
215
|
ELSE IF(@AMT_PAY_REAL>0)
|
216
|
BEGIN
|
217
|
UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTT' WHERE SCHEDULE_ID=@SCHEDULE_ID
|
218
|
END
|
219
|
ELSE IF(@AMT_PAY=0 AND @AMT_ADVANCE =0 AND @AMT_PAY_REAL =0)
|
220
|
BEGIN
|
221
|
UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='CTT' WHERE SCHEDULE_ID=@SCHEDULE_ID
|
222
|
END
|
223
|
ELSE IF(@AMT_REMAIN =0)
|
224
|
BEGIN
|
225
|
UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='TTX' WHERE SCHEDULE_ID=@SCHEDULE_ID
|
226
|
END
|
227
|
-- HOAN TAM UNG 100% CHO 1 DOT THANH TOAN PO NAO DO
|
228
|
IF(@PROCESS ='2')
|
229
|
BEGIN
|
230
|
SET @PDN_TAM_UNG = (SELECT TOP 1 REQ_PAY_ID FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND TRN_TYPE ='ADV_PAY' ORDER BY SCHEDULE_ID)
|
231
|
SET @SO_TIEN_TAM_UNG =(SELECT TOP 1 AMT_PAY_REAL FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND TRN_TYPE ='ADV_PAY' ORDER BY SCHEDULE_ID)
|
232
|
UPDATE TR_REQ_ADVANCE_PAYMENT SET PAY_AMT =ISNULL(PAY_AMT,0) + @SO_TIEN_TAM_UNG WHERE REQ_PAY_ID =@PDN_TAM_UNG
|
233
|
-- CAP NHAT DOT TAM UNG VE TINH TRANG LA DA HOAN TAM UNG
|
234
|
UPDATE TR_REQ_PAY_SCHEDULE SET PROCESS ='2' WHERE PAY_ID =@PAY_ID AND TRN_TYPE ='ADV_PAY' AND REQ_PAY_ID=@PDN_TAM_UNG
|
235
|
END
|
236
|
IF(@PROCESS ='0')
|
237
|
BEGIN
|
238
|
SET @PDN_TAM_UNG = (SELECT TOP 1 REQ_PAY_ID FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND TRN_TYPE ='ADV_PAY' ORDER BY SCHEDULE_ID)
|
239
|
SET @SO_TIEN_TAM_UNG =(SELECT TOP 1 AMT_PAY_REAL FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND TRN_TYPE ='ADV_PAY' ORDER BY SCHEDULE_ID)
|
240
|
UPDATE TR_REQ_ADVANCE_PAYMENT SET PAY_AMT =ISNULL(PAY_AMT,0) + @SO_TIEN_TAM_UNG WHERE REQ_PAY_ID =@PDN_TAM_UNG
|
241
|
-- CAP NHAT DOT TAM UNG VE TINH TRANG LA DA HOAN TAM UNG
|
242
|
UPDATE TR_REQ_PAY_SCHEDULE SET PROCESS ='2' WHERE PAY_ID =@PAY_ID AND TRN_TYPE ='ADV_PAY' AND REQ_PAY_ID=@PDN_TAM_UNG
|
243
|
END
|
244
|
--UPDATE TR_REQ_ADVANCE_PAYMENT
|
245
|
--SET PAY_AMT = ISNULL(PAY_AMT,0)+@AMT_PAY
|
246
|
|
247
|
FETCH NEXT FROM CURS_AD INTO @SCHEDULE_ID,@AMT_PAY,@PAY_ID,@PAY_PHASE,@AMT_ADVANCE,@AMT_PAY_REAL, @AMT_REMAIN,@REF_ID,@PROCESS
|
248
|
END
|
249
|
CLOSE CURS_AD
|
250
|
DEALLOCATE CURS_AD
|
251
|
|
252
|
DECLARE @IS_CLOSED VARCHAR(1)
|
253
|
DECLARE CURS_PO CURSOR FOR SELECT A.REF_ID, A.IS_CLOSED FROM TR_REQ_ADVANCE_DT A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
|
254
|
OPEN CURS_PO
|
255
|
FETCH NEXT FROM CURS_PO INTO @REF_ID , @IS_CLOSED
|
256
|
WHILE @@FETCH_STATUS = 0
|
257
|
BEGIN -- BAT DAU KIEM TRA DONG PO
|
258
|
IF(@IS_CLOSED ='Y')
|
259
|
BEGIN
|
260
|
IF(EXISTS (SELECT * FROM TR_CONTRACT WHERE CONTRACT_ID =@REF_ID))
|
261
|
BEGIN
|
262
|
UPDATE TR_CONTRACT SET IS_CLOSED='Y' WHERE CONTRACT_ID =@REF_ID
|
263
|
END
|
264
|
ELSE
|
265
|
BEGIN
|
266
|
UPDATE TR_PO_MASTER SET IS_CLOSED='Y' WHERE PO_ID =@REF_ID
|
267
|
END
|
268
|
END
|
269
|
ELSE
|
270
|
BEGIN
|
271
|
DECLARE @TOAL_PAY_REAL DECIMAL(18,2) =0,@TOAL_PAY_DK DECIMAL(18,2) =0, @TOTAL_AMT_BACK DECIMAL(18,2)
|
272
|
-- TONG SO TIEN THANH TOAN VA HOAN UNG
|
273
|
SET @TOAL_PAY_REAL =(SELECT SUM(AMT_PAY_REAL) FROM TR_REQ_PAY_SCHEDULE WHERE REF_ID=@REF_ID)
|
274
|
-- @TOTAL_AMT_BACK: TONG SO TIEN CON LAI CAN THANH TOAN
|
275
|
SET @TOTAL_AMT_BACK =(SELECT SUM(AMT_REMAIN) FROM TR_REQ_PAY_SCHEDULE WHERE REF_ID=@REF_ID AND REQ_ADV_ID IS NOT NULL)
|
276
|
IF(EXISTS (SELECT * FROM TR_CONTRACT WHERE CONTRACT_ID =@REF_ID))
|
277
|
BEGIN
|
278
|
-- @TOAL_PAY_DK: TONG SO TIEN TAT CA KY THANH TOAN
|
279
|
SET @TOAL_PAY_DK =(SELECT SUM(AMOUNT) FROM TR_CONTRACT_PAYMENT WHERE CONTRACT_ID=@REF_ID)
|
280
|
IF((@TOAL_PAY_DK-@TOAL_PAY_REAL-@TOTAL_AMT_BACK)=0)
|
281
|
BEGIN
|
282
|
UPDATE TR_CONTRACT SET IS_CLOSED='Y' WHERE CONTRACT_ID =@REF_ID
|
283
|
END
|
284
|
END
|
285
|
BEGIN
|
286
|
SET @TOAL_PAY_DK =(SELECT SUM(AMOUNT) FROM TR_PO_PAYMENT WHERE PO_ID=@REF_ID)
|
287
|
IF((@TOAL_PAY_DK- @TOAL_PAY_REAL-@TOTAL_AMT_BACK)=0)
|
288
|
BEGIN
|
289
|
UPDATE TR_PO_MASTER SET IS_CLOSED='Y' WHERE PO_ID =@REF_ID
|
290
|
END
|
291
|
END
|
292
|
END
|
293
|
FETCH NEXT FROM CURS_PO INTO @REF_ID , @IS_CLOSED
|
294
|
END -- KET THUC KIEM TRA DONG PO
|
295
|
CLOSE CURS_PO
|
296
|
DEALLOCATE CURS_PO
|
297
|
|
298
|
END -- KET THUC KIEM TRA NEU LA THANH TOAN PO
|
299
|
|
300
|
--- KIEM TRA NEU LA THANH TOAN CAC HOP DONG DINH KI
|
301
|
ELSE IF((@REQ_TYPE ='P' AND (SELECT IS_PERIOD FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) ='Y') OR (@REQ_TYPE ='I'))
|
302
|
BEGIN
|
303
|
UPDATE TR_REQ_PAY_PERIOD SET PAY_DT_REAL = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
|
304
|
DECLARE @PAY_AMOUNT DECIMAL(18,0),@PAY_DT DATETIME,@l_CONTRACT_ID VARCHAR(15), @OLD_INDEX DECIMAL(18, 0), @NEW_INDEX DECIMAL(18, 0)
|
305
|
DECLARE CURS_PERIOD CURSOR FOR SELECT A.AMT_PAY,A.PAY_DT_REAL,A.CONTRACT_ID,A.PAY_PHASE,A.AD_PAY_ID,A.PROCESS,A.PARENT_ID,A.REASON, A.OLD_INDEX, A.NEW_INDEX FROM TR_REQ_PAY_PERIOD A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID ORDER BY A.CONTRACT_ID
|
306
|
OPEN CURS_PERIOD
|
307
|
FETCH NEXT FROM CURS_PERIOD INTO @PAY_AMOUNT ,@PAY_DT ,@l_CONTRACT_ID,@PAY_PHASE,@AD_PAY_ID, @PROCESS,@PARENT_ID,@REASON_TTDK, @OLD_INDEX, @NEW_INDEX
|
308
|
WHILE @@FETCH_STATUS = 0
|
309
|
BEGIN
|
310
|
IF(@PROCESS ='1')
|
311
|
BEGIN
|
312
|
DECLARE @l_PAY_ID VARCHAR(15)
|
313
|
EXEC SYS_CodeMasters_Gen 'TR_CONTRACT_PAYMENT', @l_PAY_ID out
|
314
|
IF @l_PAY_ID='' OR @l_PAY_ID IS NULL GOTO ABORT
|
315
|
INSERT INTO TR_CONTRACT_PAYMENT([PAY_AMOUNT],[PAY_DT], [PAY_ID],[CONTRACT_ID],[PAY_PHASE],[EXPECTED_DT],[PERCENT],[AMOUNT],[PAY_STATUS],[NOTES],[RECORD_STATUS],[MAKER_ID],[CREATE_DT],[AUTH_STATUS],[CHECKER_ID],[APPROVE_DT])
|
316
|
VALUES(@PAY_AMOUNT,CONVERT(DATE,@PAY_DT,103),
|
317
|
@l_PAY_ID ,@l_CONTRACT_ID ,@PAY_PHASE ,CONVERT(DATE,@PAY_DT,103),100,@PAY_AMOUNT,'1',@REASON_TTDK ,'1' ,@p_MAKER_ID ,GETDATE() ,'A' ,@p_CHECKER_ID_KT,GETDATE())
|
318
|
END
|
319
|
ELSE
|
320
|
BEGIN
|
321
|
IF(@PROCESS ='2' AND (@AD_PAY_ID IS NULL OR @AD_PAY_ID =''))
|
322
|
BEGIN
|
323
|
ROLLBACK TRANSACTION
|
324
|
SELECT '-1' Result,'' REQ_PAY_ID,N'Lưới chi tiết thanh toán định kì: Tại hình thức thanh toán Hoàn ứng, số phiếu tạm ứng không được phép để trống' ErrorDesc
|
325
|
RETURN '-1'
|
326
|
END
|
327
|
UPDATE TR_REQ_PAY_PERIOD SET PROCESS ='2' WHERE (PERIOD_ID =@PARENT_ID OR AD_PAY_ID =@PARENT_ID) AND PAY_TYPE ='ADV_PAY' AND PAY_PHASE = @PAY_PHASE AND CONTRACT_ID = @l_CONTRACT_ID AND OLD_INDEX = @OLD_INDEX AND NEW_INDEX = @NEW_INDEX
|
328
|
UPDATE TR_REQ_ADVANCE_PAYMENT SET PAY_AMT = ISNULL(PAY_AMT, 0) + @PAY_AMOUNT WHERE REQ_PAY_ID =@AD_PAY_ID
|
329
|
END
|
330
|
IF @@Error <> 0 GOTO ABORT
|
331
|
FETCH NEXT FROM CURS_PERIOD INTO @PAY_AMOUNT ,@PAY_DT ,@l_CONTRACT_ID,@PAY_PHASE,@AD_PAY_ID, @PROCESS,@PARENT_ID,@REASON_TTDK, @OLD_INDEX, @NEW_INDEX
|
332
|
END
|
333
|
CLOSE CURS_PERIOD
|
334
|
DEALLOCATE CURS_PERIOD
|
335
|
END
|
336
|
---END
|
337
|
UPDATE TR_REQ_PAYMENT
|
338
|
SET AUTH_STATUS_KT='A', CHECKER_ID_KT = @p_CHECKER_ID_KT, APPROVE_DT_KT = GETDATE()
|
339
|
WHERE REQ_PAY_ID = @p_REQ_PAY_ID
|
340
|
|
341
|
---UPDATE DETAIL
|
342
|
UPDATE TR_REQ_PAYMENT_DT SET AUTH_STATUS_KT='A',CHECKER_ID_KT =@p_CHECKER_ID_KT,APPROVE_DT_KT = GETDATE()
|
343
|
WHERE PAY_ID =@p_REQ_PAY_ID
|
344
|
-- UPDATE SCHEDULE
|
345
|
UPDATE TR_REQ_PAY_SCHEDULE SET AUTH_STATUS_KT='A' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
|
346
|
-- UPDATE PERIOD
|
347
|
UPDATE TR_REQ_PAY_PERIOD SET AUTH_STATUS_KT='A' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
|
348
|
-- INSERT VAO PL_PROCESS
|
349
|
INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
|
350
|
VALUES(@p_REQ_PAY_ID,'APP',@p_CHECKER_ID_KT,GETDATE(), N'Kiểm soát viên phê duyệt phiếu',N'Kế toán duyệt phiếu')
|
351
|
IF @@Error <> 0 GOTO ABORT
|
352
|
UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TYPE_JOB ='KS' AND LEVEL_JOB =@LEVEL_JOB
|
353
|
--thieuvq ban vao core - 171219 BEGIN
|
354
|
DECLARE @MAKER VARCHAR(15) = (SELECT MAKER_ID_KT FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID)
|
355
|
DECLARE @RES VARCHAR(10)
|
356
|
--- BAN BUT TOAN VAO CORE
|
357
|
EXEC [dbo].[PAY_ENTRIES_POST_SetApp] @p_REQ_PAY_ID,@MAKER,@p_CHECKER_ID_KT, @RES OUT
|
358
|
--END
|
359
|
END
|
360
|
ELSE
|
361
|
BEGIN
|
362
|
-- CAP NHAT C CHO CAP CHA
|
363
|
UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_CHECKER_ID_KT
|
364
|
UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='C' WHERE REQ_ID=@p_REQ_PAY_ID AND LEVEL_JOB = CONVERT(VARCHAR(5),@LEVEL_JOB_PREV)
|
365
|
SELECT '2' as Result, @p_REQ_PAY_ID REQ_PAY_ID ,N'Xác nhận phiếu thành công' ErrorDesc
|
366
|
RETURN '2'
|
367
|
|
368
|
END
|
369
|
|
370
|
COMMIT TRANSACTION
|
371
|
SELECT '0' as Result, @p_REQ_PAY_ID REQ_PAY_ID ,N'Phiếu đề nghị thanh toán số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đã được phê duyệt thành công!' ErrorDesc
|
372
|
RETURN '0'
|
373
|
ABORT:
|
374
|
BEGIN
|
375
|
ROLLBACK TRANSACTION
|
376
|
SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
|
377
|
RETURN '-1'
|
378
|
END
|