Project

General

Profile

1_BVB_UPDATE SCHEMA 120820.txt

Luc Tran Van, 08/12/2020 04:25 PM

 
1
/*
2
Run this script on:
3

    
4
        QUANGTHIEU-PC\SQLEXPRESS.gAMSPro_VCCB_v2_UAT    -  This database will be modified
5

    
6
to synchronize it with:
7

    
8
        QUANGTHIEU-PC\SQLEXPRESS.gAMSPro_VietcapitalBank_v2
9

    
10
You are recommended to back up your database before running this script
11

    
12
Script created by SQL Compare version 13.1.6.5463 from Red Gate Software Ltd at 8/12/2020 8:37:57 AM
13

    
14
*/
15
SET NUMERIC_ROUNDABORT OFF
16
GO
17
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON
18
GO
19
SET XACT_ABORT ON
20
GO
21
SET TRANSACTION ISOLATION LEVEL Serializable
22
GO
23
BEGIN TRANSACTION
24
GO
25
IF @@ERROR <> 0 SET NOEXEC ON
26
GO
27
PRINT N'Altering [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]'
28
GO
29
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]
30
@p_REQ_PAY_ID	varchar(15)= NULL,
31
@p_REQ_PAY_CODE	varchar(50)	= NULL,
32
@p_REQ_DT VARCHAR(10)= NULL,
33
@p_BRANCH_ID	varchar(15)	= NULL,
34
@p_DEP_ID	varchar(15)	= NULL,
35
@p_REQ_REASON	nvarchar(MAX)	= NULL,
36
@p_REQ_TYPE	varchar(15)	= NULL,
37
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
38
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
39
@p_REF_ID	varchar(15)	= NULL,
40
@p_RECEIVER_PO	nvarchar(250)	= NULL,
41
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
42
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
43
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
44
@p_REQ_AMT	decimal(18, 0)	= NULL,
45
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
46
@p_MAKER_ID	varchar(15)	= NULL,
47
@p_CREATE_DT	varchar(25)	= NULL,
48
@p_EDITOR_ID	varchar(15)	= NULL,
49
@p_AUTH_STATUS	varchar(1)	= NULL,
50
@p_CHECKER_ID	varchar(15)	= NULL,
51
@p_APPROVE_DT	varchar(25)	= NULL,
52
@p_CREATE_DT_KT	varchar(25)	= NULL,
53
@p_MAKER_ID_KT	varchar(15)	= NULL,
54
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
55
@p_CHECKER_ID_KT	varchar(1)	= NULL,
56
@p_APPROVE_DT_KT  varchar(25)= null,
57
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
58
@p_BRANCH_CREATE	varchar(15)	= NULL,
59
@p_NOTES	varchar(15)	= NULL,
60
@p_RECORD_STATUS	varchar(1)	= NULL,
61
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
62
@p_TRANSFER_DT	varchar(25)	= NULL,
63
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
64
@p_PROCESS	varchar(15)	= NULL,
65
@p_PAY_PHASE VARCHAR(15)= NULL,
66
@p_DVDM_ID VARCHAR(15) = NULL,
67
@p_RATE DECIMAL(18,0)= NULL,
68
@p_RECIVER_MONEY VARCHAR(15) = NULL,
69
@p_IS_PERIOD VARCHAR(5) = NULL,
70
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
71
@p_XMP_TEMP XML = NULL
72
AS
73
--Validation is here
74
/*
75
DECLARE @ERRORSYS NVARCHAR(15) = '' 
76
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
77
	 SET @ERRORSYS = ''
78
IF @ERRORSYS <> '' 
79
BEGIN
80
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
81
	RETURN '0'
82
END 
83
*/
84
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
85
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
86
	--BEGIN
87
	--	SET @ERRORSYS = 'ASSC-00005'
88
	--	SELECT ErrorCode Result, '' COLLECT_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
89
	--	RETURN '0'
90
	--END
91
	IF(@p_REQ_TYPE ='I')
92
	BEGIN
93
		DECLARE @AMT_AD_PAY DECIMAL(18,0) =0
94
		DECLARE @AMT_AD_PAY_BACK DECIMAL(18,0) =0
95
		DECLARE @AMT_AD_PAY_REMAIN DECIMAL(18,0) =0
96
		SET @AMT_AD_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE REF_ID=@p_MAKER_ID AND AUTH_STATUS_KT='A' AND REQ_TYPE ='I')
97
		SET @AMT_AD_PAY_BACK = (SELECT SUM(D.AMT_USE) +SUM(D.AMT_REVERT) - SUM (D.AMT_ADD)
98
					FROM TR_REQ_PAYMENT_DT D
99
					LEFT JOIN TR_REQ_ADVANCE_PAYMENT X ON D.PAY_ADV_ID = X.REQ_PAY_ID  AND D.AUTH_STATUS_KT ='A'
100
					WHERE X.REF_ID =@p_REF_ID)
101
	 SET @AMT_AD_PAY_REMAIN =ISNULL(@AMT_AD_PAY,0) -ISNULL(@AMT_AD_PAY_BACK,0)
102
	 SET @p_REQ_TEMP_AMT =ISNULL(@AMT_AD_PAY_REMAIN,0)
103
	 END
104
BEGIN TRANSACTION
105
	-- LUCTV 17H51 BO SUNG LAY SO TIEN DA TAM UNG CUA NHAN VIEN --
106
		--SET @AMT_DO =(SELECT * FROM [dbo].TR_RE)
107
	--THIEUVQ 281119---
108
		DECLARE @REC_DEBIT_AUTO VARCHAR(15)
109
		SET @REC_DEBIT_AUTO =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID = @p_REF_ID)
110
		IF (@p_REQ_TYPE='I')
111
		BEGIN
112
			--SET @p_REF_ID = @p_MAKER_ID
113
			--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT))
114
			--BEGIN
115
			--	SET @p_RECEIVER_DEBIT = @p_RECEIVER_DEBIT+''
116
			--END
117
			--ELSE
118
			--BEGIN
119
			--	IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT AND REF_ID != @p_REF_ID ) AND @p_TYPE_FUNCTION ='SEND')
120
			--	BEGIN
121
			--		SET @p_RECEIVER_DEBIT =(SELECT ACC_NUM FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT)
122
			--	END
123
			--END
124
			IF(@p_RECEIVER_DEBIT IS NOT NULL AND @p_RECEIVER_DEBIT <>'')
125
			BEGIN
126
				IF(@REC_DEBIT_AUTO IS NOT NULL AND @REC_DEBIT_AUTO <>''  AND @REC_DEBIT_AUTO <> @p_RECEIVER_DEBIT)
127
				BEGIN
128
					SET @p_RECEIVER_DEBIT =@REC_DEBIT_AUTO
129
				END
130
				--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID= @p_REF_ID AND ACC_NUM =@p_RECEIVER_DEBIT))
131
				--BEGIN
132
				--	SET @p_RECEIVER_DEBIT =(SELECT ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) 
133
				--END
134
				--IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID <> @p_REF_ID AND ACC_NUM =@p_RECEIVER_DEBIT))
135
				--BEGIN
136
				--	ROLLBACK TRANSACTION
137
				--	SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản tạm ứng này đã tồn tại và thuộc về nhân viên khác' ErrorDesc
138
				--	RETURN '-1'
139
				--END
140
			END
141
			ELSE
142
			BEGIN
143
				SET @p_RECEIVER_DEBIT =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) 
144
			END
145

    
146
		END
147
		EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
148
	--END--
149
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
150
		BEGIN
151
			ROLLBACK TRANSACTION
152
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
153
			RETURN '-1'
154
		END
155
		IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT ='') AND @p_TYPE_FUNCTION ='SEND')
156
		BEGIN
157
			ROLLBACK TRANSACTION
158
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
159
			RETURN '-1'
160
		END
161
		IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
162
		BEGIN
163
			ROLLBACK TRANSACTION
164
			SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Số phiếu tạm ứng đã tồn tại trong hệ thống' ErrorDesc
165
			RETURN '-1'
166
		END
167
		IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
168
		BEGIN
169
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản tạm ứng này không được vượt quá 15 kí tự' ErrorDesc
170
				RETURN '-1'
171
		END
172
		-- START 19-11-2019
173
		-- LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU UAT- KIEM TRA NEU DOT THANH TOAN CHUA CO THI KHONG DUOC THEM MOI
174
		--IF(@p_REQ_TYPE='P' AND (@p_PAY_PHASE IS NULL OR @p_PAY_PHASE =''))
175
		--BEGIN
176
		--	ROLLBACK TRANSACTION
177
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Đợt thanh toán không được phép để trống' ErrorDesc
178
		--	RETURN '-1'
179
		--END
180
		---- NEU THANH TOAN XU LY NO THI NHAN VIEN NHAN TIEN TAM UNG KHONG DUOC PHEP TRONG
181
		--IF(@p_REQ_TYPE='D' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
182
		--BEGIN
183
		--	ROLLBACK TRANSACTION
184
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Nhân viên nhận tạm ứng không được phép để trống' ErrorDesc
185
		--	RETURN '-1'
186
		--END
187
		-- SO TIEN THANH TOÁN PHAI LON HON KHONG
188
		IF(@p_REQ_AMT <=0)
189
		BEGIN
190
			ROLLBACK TRANSACTION
191
			SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
192
			RETURN '-1'
193
		END
194
		-----
195
		---- KIEM TRA NEU CHUA CHON KHOI PHE DUYET THI TU DONG CHUYEN VÊ KHOI TAI CHINH
196
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
197
		--BEGIN
198
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
199
		--END
200
		--
201
		--KIEM TRA NEU TAI KHOAN NHAN VIEN TAM UNG NEU CHUA TON TAI TRONG HE THONG THI BAO LOI
202
		IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
203
		BEGIN
204
			INSERT INTO CM_ACCOUNT_PAY (REF_ID,ACC_TYPE,ACC_NUM,ACC_NAME,FUNTION,MAKER_ID,AUTH_STATUS,CREATE_DT,TK_GL,TK_GL_NAME) VALUES (@p_REF_ID,'ADV_PAY',@p_RECEIVER_DEBIT,'TK TAM UNG CUA NHAN VIEN ' +@p_REF_ID,'I',@p_MAKER_ID,'U',GETDATE(),'361200001','TAM UNG DE HOAT DONG NGHIEP VU')
205
		END
206
		ELSE
207
		BEGIN
208
			IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
209
			BEGIN
210
				ROLLBACK TRANSACTION
211
				SELECT '-1' as Result, '' REQ_PAY_ID, '' AS REQ_PAY_CODE, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
212
				RETURN '-1'
213
			END
214
		END
215
		EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
216
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
217
		INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
218
           ([REQ_PAY_ID]
219
           ,[REQ_PAY_CODE]
220
           ,[BRANCH_ID],[REQ_DT],
221
           [DEP_ID]
222
           ,[REQ_REASON]
223
           ,[REQ_TYPE],REQ_ENTRIES,
224
            [REQ_DESCRIPTION]
225
           ,REF_ID,
226
			RECEIVER_PO, RECEIVER_DEBIT
227
           ,[REQ_PAY_TYPE]
228
           ,[REQ_TYPE_CURRENCY]
229
           ,[REQ_AMT]
230
           ,[REQ_TEMP_AMT]
231
           ,[MAKER_ID]
232
           ,[CREATE_DT]
233
           ,[EDITOR_ID]
234
           ,[AUTH_STATUS]
235
           ,[CHECKER_ID]
236
           ,[APPROVE_DT]
237
           ,[CREATE_DT_KT]
238
           ,[MAKER_ID_KT]
239
           ,[AUTH_STATUS_KT]
240
           ,[CHECKER_ID_KT]
241
		   ,[APPROVE_DT_KT]
242
           ,[CONFIRM_NOTES]
243
           ,[BRANCH_CREATE]
244
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD)
245
			VALUES
246
           (@p_REQ_PAY_ID,
247
			@p_REQ_PAY_CODE,
248
			@p_BRANCH_ID,CONVERT(DATE,@p_REQ_DT,103),
249
			@p_DEP_ID,
250
			@p_REQ_REASON,
251
			@p_REQ_TYPE,
252
			@P_REQ_ENTRIES,
253
			@p_REQ_DESCRIPTION,
254
			@p_REF_ID,
255
			@p_RECEIVER_PO,
256
			@p_RECEIVER_DEBIT,
257
			@p_REQ_PAY_TYPE,
258
			@p_REQ_TYPE_CURRENCY,
259
			@p_REQ_AMT,
260
			@p_REQ_TEMP_AMT,
261
			@p_MAKER_ID,
262
			GETDATE(),
263
			@p_EDITOR_ID,
264
			'E',
265
			NULL,
266
			NULL,
267
			NULL,
268
			NULL,
269
			NULL,
270
			NULL,
271
			NULL,
272
			NULL,
273
			@p_BRANCH_CREATE,
274
			@p_NOTES,@p_RECORD_STATUS,
275
			@p_TRANSFER_MAKER,
276
			NULL,
277
			@p_TRASFER_USER_RECIVE,
278
			@p_PROCESS,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD)
279
			IF @@Error <> 0 GOTO ABORT
280
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
281
			DECLARE @hdoc INT
282
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
283
			
284
			-- KIEM TRA NEU TAM UNG THANH TOAN
285
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
286
			BEGIN
287
				DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,0),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,0),@AMT_PAY_DO decimal(18,0),
288
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
289
				@REF_ID VARCHAR(15),@REQ_PAY_DESC NVARCHAR(500), @REQ_PAY_ENTRIES NVARCHAR(250),@CURRENCY VARCHAR(15),@RATE DECIMAL(18,0),@CUST_ID VARCHAR(15), @EMP_ID VARCHAR(15),
290
				@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
291
				DECLARE XmlDataPO CURSOR FOR
292
				SELECT *
293
				FROM
294
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
295
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
296
				OPEN XmlDataPO;
297
				DECLARE @INDEX_PO INT =0
298
				SET @INDEX_PO = 0
299
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
300
				WHILE @@fetch_status=0 
301
				BEGIN
302
					SET @INDEX_PO = @INDEX_PO +1
303
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
304
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
305
					--BEGIN
306
					--	ROLLBACK TRANSACTION
307
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
308
					--	RETURN '-1'
309
					--END
310
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
311
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
312
					--BEGIN
313
					--	ROLLBACK TRANSACTION
314
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
315
					--	RETURN '-1'
316
					--END
317
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
318
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
319
					IF(@p_TYPE_FUNCTION ='SEND')
320
					BEGIN
321
							
322
				
323
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
324
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
325
					BEGIN
326
						ROLLBACK TRANSACTION
327
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
328
						(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
329
						RETURN '-1'
330
					END
331
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
332
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
333
					BEGIN
334
						ROLLBACK TRANSACTION
335
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
336
						(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
337
						RETURN '-1'
338
					END
339
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
340
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
341
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
342
					BEGIN
343
						ROLLBACK TRANSACTION
344
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
345
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
346
						RETURN '-1'
347
					END
348
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
349
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
350
					BEGIN
351
						ROLLBACK TRANSACTION
352
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
353
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
354
						RETURN '-1'
355
					END
356
					END
357
					DECLARE @REQ_PAYDTID VARCHAR(15);
358
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
359
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
360
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
361
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
362
				IF @@error<>0 GOTO ABORT;
363
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
364
				END
365
				CLOSE XmlDataPO;
366
				DEALLOCATE XmlDataPO;
367
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
368
				DECLARE XmlDataSchedule CURSOR FOR
369
				SELECT *
370
				FROM
371
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
372
				WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,0),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,0), AMT_PAY_DO decimal(18,0),
373
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
374
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
375
				OPEN XmlDataSchedule
376
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
377
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
378
				WHILE @@fetch_status=0 
379
				BEGIN
380
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
381
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
382
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
383
					INSERT INTO TR_REQ_PAY_SCHEDULE(
384
					SCHEDULE_ID,REQ_PAY_ID,PAY_ID,AMT_PAY,PAY_PHASE,REQ_ADV_ID,AMT_ADVANCE,AMT_PAY_DO,AMT_REMAIN,REQ_PAY_DT,REQ_AD_DT,PROCESS,MAKER_ID,
385
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
386
					VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@p_REQ_PAY_ID,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,@AMT_REMAIN_SCHEDULE,
387
					GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),NULL,@p_MAKER_ID,GETDATE(),'U','','ADV_PAY',@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL)
388
				--- END KHAI BAO CURSOR
389
				IF @@error<>0 GOTO ABORT;
390
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
391
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
392
				END
393
				CLOSE XmlDataSchedule;
394
				DEALLOCATE XmlDataSchedule;
395
			END
396
		--- END TẠM ỨNG THANH TOÁN
397
		--- TẠM ỨNG HĐ ĐỊNH KỲ
398
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
399
		BEGIN
400
				
401
				DECLARE XmlDataPO CURSOR FOR
402
				SELECT *
403
				FROM
404
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
405
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
406
				OPEN XmlDataPO;
407
				SET @INDEX_PO = 0
408
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
409
				WHILE @@fetch_status=0 
410
				BEGIN
411
					SET @INDEX_PO = @INDEX_PO +1
412
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
413
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
414
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
415
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
416
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
417
				IF @@error<>0 GOTO ABORT;
418
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
419
				END
420
				CLOSE XmlDataPO;
421
				DEALLOCATE XmlDataPO;
422
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
423
			----------------------------
424
			--INSERT FROM PERIOD	
425
				DECLARE XmlDataPeriod CURSOR FOR
426
				SELECT *
427
				FROM
428
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
429
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
430
				OLD_INDEX DECIMAL(18,0),NEW_INDEX DECIMAL(18,0),AMT_PAY DECIMAL(18,2),CURRENCY VARCHAR(5), RATE DECIMAL(18,0), FROM_DATE VARCHAR(20), TO_DATE VARCHAR(20),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))
431
				OPEN XmlDataPeriod;
432
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
433
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250),@REASON_TTDK NVARCHAR(2000)
434
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
435
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
436
				WHILE @@fetch_status=0 
437
				BEGIN
438
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
439
					IF(@p_TYPE_FUNCTION ='SEND')
440
					BEGIN
441
					
442
						IF(EXISTS(SELECT CONTRACT_ID 
443
						FROM TR_CONTRACT 
444
						WHERE CONTRACT_ID = @REF_ID
445
						AND IS_CLOSED='Y' ))
446
						BEGIN
447
							ROLLBACK TRANSACTION
448
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
449
							RETURN '-1'
450
						END
451

    
452
					
453
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
454
					BEGIN
455
						ROLLBACK TRANSACTION
456
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
457
						RETURN '-1'
458
					END
459
					END
460
					DECLARE @PERIOD_ID VARCHAR(15);
461
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
462
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
463
					INSERT INTO TR_REQ_PAY_PERIOD(PERIOD_ID,REQ_PAY_ID,PAY_TYPE, CONTRACT_ID,PAY_DT_REAL,OLD_INDEX,NEW_INDEX,AMT_PAY,AUTH_STATUS_KT,CURRENCY,RATE,FROM_DATE, TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE,REASON)
464
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
465
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
466
			IF @@error<>0 GOTO ABORT;
467
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
468
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
469
			END
470
			CLOSE XmlDataPeriod;
471
			DEALLOCATE XmlDataPeriod;
472
			-- VALIDATE SO TIEN
473
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
474
			--BEGIN
475
			--	ROLLBACK TRANSACTION
476
			--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền thanh toán phải nhỏ hơn hoặc bằng tổng số tiền còn lại cần thanh toán: '+FORMAT(SUM(@TOTAL_SCHEDULE_AMT),'#,#', 'vi-VN') ErrorDesc
477
			--	RETURN '-1'
478
			--END
479
			----
480
		END
481
		---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
482
		--- INSERT PHƯƠNG THỨC THANH TOÁN
483
		----MethodCursor
484
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,0),@REQ_PAY_TYPE varchar(1),
485
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15)
486
			DECLARE XmlDataMethod CURSOR FOR
487
			SELECT *
488
			FROM
489
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
490
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,0),REQ_PAY_TYPE varchar(1),
491
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
492
			ACC_NAME NVARCHAR(50), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
493
			OPEN XmlDataMethod
494
			FETCH NEXT FROM XmlDataMethod 
495
			INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME ,@ISSED_BY , @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN
496
			WHILE @@fetch_status=0 
497
			BEGIN
498
				IF(@REQ_PAY_TYPE <>'1')
499
				BEGIN
500
					SET @ISSUED_DT = NULL
501
				END
502
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
503
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
504
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
505
				INSERT INTO TR_REQ_PAY_METHOD(METHOD_ID,REQ_PAY_ID,EMP_ID,REQ_PAY_REASON,TOTAL_AMT,REQ_PAY_TYPE,REQ_PAY_DESC,REQ_PAY_ENTRIES, TEMP,MAKER_ID,
506
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
507
				VALUES (@p_REQ_PAY_METHOD_ID,@p_REQ_PAY_ID,@RECEIVE_ID,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,'',
508
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
509
			IF @@error<>0 GOTO ABORT;
510
			FETCH NEXT FROM XmlDataMethod 
511
			INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME , @ISSED_BY , @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN
512
			END
513
			CLOSE XmlDataMethod;
514
			DEALLOCATE XmlDataMethod
515
		----END INSERT PHƯƠNG THỨC THANH TOÁN
516
		----INSERT VAO BANG DS KHACH HANG
517
			DECLARE XmlDataCus CURSOR FOR
518
			SELECT *
519
			FROM
520
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
521
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,0),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
522
			OPEN XmlDataCus;
523
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
524
				WHILE @@fetch_status=0 
525
				BEGIN		
526
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
527
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
528
				--- END KHAI BAO CURSOR
529
				IF @@error<>0 GOTO ABORT;
530
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
531
				END
532
				CLOSE XmlDataCus;
533
				DEALLOCATE XmlDataCus;
534
		----END
535
			-- HANG MUC CHI PHI VA NGAN SACH
536
			DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2), @AMT_DO decimal(18,2), @AMT_EXE decimal(18,2),@AMT_REMAIN_GD decimal(18,2)
537
			DECLARE XmlDataGood CURSOR FOR
538
			SELECT *
539
			FROM
540
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
541
			WITH(TRADE_ID varchar(15),GD_ID varchar(15),AMT_APP decimal(18,2),AMT_DO decimal(18,2),AMT_EXE decimal(18,2),AMT_REMAIN decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),REASON NVARCHAR(1000))
542
			OPEN XmlDataGood
543
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
544
			WHILE @@fetch_status=0 BEGIN
545
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
546
				SET @INDEX_NS = @INDEX_NS +1
547
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
548
				--IF(@p_TYPE_FUNCTION ='SEND')
549
				--BEGIN
550
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
551
				--BEGIN
552
				--		ROLLBACK TRANSACTION
553
				--		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế không được vượt quá ngân sách còn lại.' ErrorDesc
554
				--		RETURN '-1'
555
				--END
556
				--END
557
				DECLARE @p_BUDGET_ID VARCHAR(15);
558
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
559
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
560
				INSERT INTO TR_REQ_PAY_BUDGET(BUDG_ID,GD_ID,REQ_PAY_ID,TRADE_ID,AMT_APP,AMT_DO, AMT_EXE,AMT_REMAIN,MAKER_ID,CREATE_DT,CURRENCY,RATE,REASON) 
561
				VALUES (@p_BUDGET_ID,@GD_ID,@p_REQ_PAY_ID,@TRADE_ID,@AMT_APP,@AMT_DO, @AMT_EXE,@AMT_REMAIN_GD,@p_MAKER_ID, GETDATE(),@CURRENCY,@RATE,@REASON)
562
			IF @@error<>0 GOTO ABORT;
563
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
564
			END;
565
		CLOSE XmlDataGood;
566
		DEALLOCATE XmlDataGood;
567
		--- END INSERT NGAN SACH
568
		DECLARE @ATTACH_ID varchar(15),@CON_ID varchar(100),@CONT_CODE VARCHAR(50), @CON_NOTES VARCHAR(1000),@CON_DESC NVARCHAR(1000),@CON_TYPE VARCHAR(15),@AMT_ATT DECIMAL(18,2),@REF_DT VARCHAR(20),@NOTES_ATT NVARCHAR(1000)
569
		DECLARE XmlAttach CURSOR FOR
570
		SELECT *
571
		FROM
572
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
573
		WITH(ATTACH_ID varchar(15),CON_ID varchar(100),CONT_CODE VARCHAR(50), CON_NOTES NVARCHAR(1000),CON_DESC NVARCHAR(1000),CON_TYPE VARCHAR(15),AMT_ATT DECIMAL(18,2),REF_DT VARCHAR(20))
574
		OPEN XmlAttach
575
		--INSERT CHUNG TU DINH KEM
576
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
577
				WHILE @@fetch_status=0 
578
				BEGIN
579
					IF (@REF_DT='')
580
					BEGIN
581
						SET @REF_DT = NULL
582
					END
583
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
584
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
585
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
586
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
587
				IF @@error<>0 GOTO ABORT;
588
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
589
				END
590
				CLOSE XmlAttach;
591
				DEALLOCATE XmlAttach;
592
		----END
593
		--- BAT DAU VALIDATE
594
		IF(@p_TYPE_FUNCTION ='SEND')
595
		BEGIN
596
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
597
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
598
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
599
			BEGIN
600
				SET @SUM_LICH_TT =(SELECT SUM(AMT_PAY_REAL* ISNULL(RATE,1)) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
601
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
602
				BEGIN
603
					ROLLBACK TRANSACTION
604
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền lịch thanh toán PO và hợp đồng liên quan đến khách hàng xử lý nợ phải bằng số tiền tạm ứng' ErrorDesc
605
					RETURN '-1'
606
				END
607
			END
608
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
609
			BEGIN
610
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
611
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
612
				BEGIN
613
					ROLLBACK TRANSACTION
614
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền sử dụng ngân sách và chi phí phải bằng số tiền tạm ứng' ErrorDesc
615
					RETURN '-1'
616
				END
617
			END
618
			ELSE
619
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
620
			BEGIN
621
				ROLLBACK TRANSACTION
622
				SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền phương thức thanh toán phải bằng số tiền tạm ứng' ErrorDesc
623
				RETURN '-1'
624
			END
625
			
626
		END
627
		----END
628
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
629
			IF(@p_REQ_TYPE ='I')
630
			BEGIN
631
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
632
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
633
				BEGIN
634
					--INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
635
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
636
					BEGIN
637
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
638
					END
639
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
640
					BEGIN
641
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
642
					END
643
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06900%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06901%' AND DEP_ID =@p_DEP_ID)
644
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06902%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06903%' AND DEP_ID =@p_DEP_ID) 
645
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06904%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06920%' AND DEP_ID =@p_DEP_ID))
646
					BEGIN
647
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID NOT IN ('GDK','PTGD')
648
					END
649
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06907%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06909%' AND DEP_ID =@p_DEP_ID)
650
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06911%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06921%' AND DEP_ID =@p_DEP_ID) 
651
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
652
					BEGIN
653
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'PTGD'
654
					END
655
					ELSE
656
					BEGIN
657
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
658
					END
659
				END
660
				ELSE
661
				BEGIN
662
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
663
					BEGIN
664
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
665
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@p_BRANCH_CREATE
666
						--INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
667
					END
668
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
669
					BEGIN
670
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'
671
						AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
672
						--INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
673
					END
674
				END
675
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
676
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
677
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
678
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
679
				OPEN CUR_PR
680
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
681
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
682
				BEGIN								
683
					SET @INDEX= @INDEX+1
684
					IF @INDEX = @SL_ROLE
685
						SET @ISLEAF = 'Y'
686
					ELSE
687
						SET @ISLEAF = 'N'
688
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
689

    
690
					IF(@INDEX=1 )
691
					BEGIN		
692
						SET @PARENT_ID = NULL
693
						SET @STATUS = 'C'							
694
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
695
					END				
696
					ELSE 
697
					BEGIN
698
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
699
						SET @STATUS = 'U'
700
					END
701
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
702
						BEGIN
703
							INSERT INTO dbo.PL_REQUEST_PROCESS
704
							(
705
								REQ_ID,
706
								PROCESS_ID,
707
								STATUS,
708
								ROLE_USER,
709
								BRANCH_ID,
710
								CHECKER_ID,
711
								APPROVE_DT,
712
								PARENT_PROCESS_ID,
713
								IS_LEAF, COST_ID, DVDM_ID, NOTES
714
							)
715
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
716
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
717
							BREAK;
718
						END
719
						ELSE
720
							INSERT INTO PL_REQUEST_PROCESS (
721
								REQ_ID,
722
								PROCESS_ID,
723
								STATUS,
724
								ROLE_USER,
725
								BRANCH_ID,
726
								CHECKER_ID,
727
								APPROVE_DT,
728
								PARENT_PROCESS_ID,
729
								IS_LEAF, COST_ID, DVDM_ID, NOTES
730
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
731
					--END
732
					
733
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
734
				END
735
				CLOSE CUR_PR
736
				DEALLOCATE CUR_PR
737
			END
738
			--- CAP NHAT THANG CUOI CUNG LA Y
739
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
740
		COMMIT TRANSACTION
741
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
742
		BEGIN
743
				--ROLLBACK TRANSACTION
744
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
745
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
746
				--INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
747
				--VALUES(@p_REQ_PAY_ID,'SEND',@p_MAKER_ID,GETDATE(), N'Đơn vị gửi phê duyệt',N'Đơn vị tạo phiếu tạm ứng và gửi phê duyệt')
748
				--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
749
				--RETURN '4'
750
				IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
751
				BEGIN
752
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
753
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
754
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='HS' AND @p_REQ_TYPE ='I')
755
				BEGIN
756
					DECLARE @USER_TP VARCHAR(15)
757
					SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('GDDV','TPTC','TC','KTT'))
758
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
759
				END
760
				ELSE IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
761
				BEGIN
762
					DECLARE @USER_TPGD VARCHAR(15)
763
					SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))
764
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
765
				END
766
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
767
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
768
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
769
				VALUES(@p_REQ_PAY_ID,'SEND',@p_MAKER_ID,GETDATE(), N'Đơn vị gửi phê duyệt',N'Đơn vị tạo phiếu tạm ứng và gửi phê duyệt')
770
				SELECT '4' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
771
				RETURN '4'
772
			END
773
		END
774
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, '' ErrorDesc
775
		RETURN '0'
776
ABORT:
777
BEGIN
778
		ROLLBACK TRANSACTION
779
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
780
		RETURN '-1'
781
End
782
GO
783
IF @@ERROR <> 0 SET NOEXEC ON
784
GO
785
PRINT N'Altering [dbo].[PL_REQUEST_DOC_ById]'
786
GO
787
ALTER PROCEDURE [dbo].[PL_REQUEST_DOC_ById]
788
@P_REQ_ID varchar(15)
789
AS
790
SELECT RD.REQ_ID,
791
       RD.REQ_CODE,
792
       RD.REQ_NAME,
793
       RD.REQ_DT,
794
       RD.REQ_TYPE,
795
       RD.REQ_CONTENT,
796
       RD.REQ_REASON,
797
       RD.BRANCH_ID,	   
798
      (SELECT SUM(TOTAL_AMT) 
799
	   FROM dbo.PL_REQUEST_DOC_DT WHERE REQ_ID=@P_REQ_ID ) AS TOTAL_AMT,
800
       RD.NOTES,
801
       RD.RECORD_STATUS,
802
       RD.MAKER_ID,
803
       RD.CREATE_DT,
804
       RD.AUTH_STATUS,
805
       RD.CHECKER_ID,
806
	   (SELECT  ISNULL(FORMAT(RD.APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'')) AS APPROVE_DT,
807
	   ISNULL(FORMAT(PKT.APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') AS APPROVE_DT_KT,	   
808
       RD.PROCESS_ID,
809
       RD.DVDM_APP_ID,
810
       RD.REQ_PARENT_ID,
811
       RD.BRANCH_FEE,
812
       RD.EFFEC_DT,
813
       RD.IS_BACKDAY,
814
       RD.DEP_ID,
815
	   RD.BASED_CONTENT,
816
	   BR.BRANCH_NAME AS BRANCH_FEE_NAME,
817
       RD.DEP_FEE,BR.BRANCH_NAME,BR.BRANCH_CODE,(SELECT SUM(TOTAL_AMT) 
818
	   FROM dbo.PL_REQUEST_DOC_DT WHERE REQ_ID=@P_REQ_ID AND REQDT_TYPE='I') AS AMT_IN,
819
CASE
820
WHEN RD.REQ_TYPE=1 THEN CAST(1 AS BIT)  
821
WHEN  RD.REQ_TYPE=0 THEN CAST(0 AS BIT)  
822
END AS IS_VCCB,
823
CASE
824
WHEN RD.REQ_TYPE=0 THEN CAST(1 AS BIT)  
825
WHEN  RD.REQ_TYPE=1 THEN CAST(0 AS BIT)  
826
END AS IS_OTHER,
827

    
828
(SELECT SUM(TOTAL_AMT) FROM dbo.PL_REQUEST_DOC_DT WHERE REQ_ID=@P_REQ_ID AND REQDT_TYPE='O') AS AMT_OUT,
829
(SELECT SUM(TOTAL_AMT) FROM dbo.PL_REQUEST_TRANSFER WHERE REQ_DOC_ID=@P_REQ_ID) AS AMT_TRANSFER,
830
DAY(RD.CREATE_DT) AS DATE,
831
MONTH(RD.CREATE_DT) AS MONTH,
832
YEAR(RD.CREATE_DT) AS YEAR,
833
CASE
834
WHEN DP.DEP_NAME IS NULL THEN BR.BRANCH_NAME  
835
ELSE DP.DEP_NAME   
836
END AS BRANCH_DEP,
837
CASE 
838
WHEN PRC.ID IS NULL THEN UPRD.TLFullName
839
ELSE UPRC.TLFullName
840
END AS TDV_NAME,
841
UTGD.TLFullName AS TGD_NAME,
842
UHDQT.TLFullName AS HDQT_NAME,
843
UPKT.TLFullName AS PKT_NAME,
844
RD.IS_CHECKALL,RD.BASED_CONTENT,RD.PL_BASED_ID, '' AS PL_BASED_CONTENT, '' AS PL_BASED_CODE
845

    
846
FROM dbo.PL_REQUEST_DOC RD
847
LEFT JOIN dbo.CM_BRANCH BR ON BR.BRANCH_ID=RD.BRANCH_ID
848
LEFT JOIN dbo.CM_DEPARTMENT DP ON DP.DEP_ID=RD.DEP_ID
849
LEFT JOIN dbo.TL_USER UD ON UD.TLNANME=RD.CHECKER_ID
850
LEFT JOIN dbo.PL_REQUEST_PROCESS PRC ON PRC.REQ_ID=RD.REQ_ID AND PRC.PROCESS_ID='DVC'
851
LEFT JOIN dbo.PL_REQUEST_PROCESS PRD ON PRD.REQ_ID=RD.REQ_ID AND PRD.PROCESS_ID='APPNEW'
852
LEFT JOIN dbo.TL_USER UPRC ON UPRC.TLNANME=PRC.CHECKER_ID
853
LEFT JOIN dbo.TL_USER UPRD ON UPRD.TLNANME=PRD.CHECKER_ID
854
LEFT JOIN dbo.PL_REQUEST_PROCESS PRTGD ON PRTGD.REQ_ID=RD.REQ_ID AND PRTGD.PROCESS_ID LIKE 'TGD%'
855
LEFT JOIN dbo.TL_USER UTGD ON UTGD.TLNANME=PRTGD.CHECKER_ID
856
LEFT JOIN dbo.PL_REQUEST_PROCESS PRHDQT ON PRHDQT.REQ_ID=RD.REQ_ID AND PRHDQT.PROCESS_ID='HDQT'
857
LEFT JOIN dbo.TL_USER UHDQT ON UHDQT.TLNANME=PRHDQT.CHECKER_ID
858
LEFT JOIN dbo.PL_REQUEST_PROCESS PKT ON PKT.REQ_ID=RD.REQ_ID AND PKT.PROCESS_ID='KT'
859
LEFT JOIN dbo.TL_USER UPKT ON UPKT.TLNANME=PKT.CHECKER_ID
860

    
861

    
862
 WHERE RD.REQ_ID=@P_REQ_ID 
863

    
864
GO
865
IF @@ERROR <> 0 SET NOEXEC ON
866
GO
867
PRINT N'Altering [dbo].[rpt_PL_REQUEST_DOC_DT_ById]'
868
GO
869

    
870
ALTER PROCEDURE [dbo].[rpt_PL_REQUEST_DOC_DT_ById]
871
@P_REQ_ID varchar(15)
872
AS
873

    
874
DECLARE
875
			 @l_QUANTITY numeric(18,0)=0, @l_QUANTITY_EXE decimal(18,0)=0, @l_QUANTITY_REMAIN decimal(18,0)=0,
876
			 @l_AMT numeric(18,0)=0, @l_AMT_EXE decimal(18,0)=0, @l_AMT_REMAIN decimal(18,0)=0
877
			
878

    
879
			SELECT  ROW_NUMBER() OVER (ORDER BY HH.HH_NAME) AS STT, HH.HH_NAME,PLDT.DESCRIPTION,PLDT.CURRENCY,PLDT.UNIT_NAME,
880
			ISNULL(PLDT.QUANTITY,0) AS QUANTITY,
881
			ISNULL(PLDT.PRICE,0) AS PRICE,
882
			ISNULL(PLDT.QUANTITY,0) * ISNULL(PLDT.PRICE,0) AS TOTAL_AMT_NT,
883
			ISNULL(PLDT.TAXES,0) AS TAXES,
884
			ISNULL(PLDT.EXCHANGE_RATE,1) AS EXCHANGE_RATE,
885
			ISNULL(PLDT.QUANTITY,0) * ISNULL(PLDT.PRICE,0)+ISNULL(PLDT.TAXES,0) AS TOTAL_AMT_TAX,
886
			(ISNULL(PLDT.QUANTITY,0) * ISNULL(PLDT.PRICE,0)+ISNULL(PLDT.TAXES,0)) * ISNULL(PLDT.EXCHANGE_RATE,1) AS TOTAL_AMT_EXC,
887
			CASE
888
				WHEN PLDT.TRADE_TYPE='VCCB' THEN N'Theo quy định VCCB'
889
				
890
				ELSE N'Chỉ định thầu'
891
			END AS HTMS,
892
			CS.SUP_NAME,
893
			CG.GD_NAME
894
			FROM 
895
			dbo.PL_REQUEST_DOC_DT PLDT
896
			LEFT JOIN dbo.CM_HANGHOA HH ON PLDT.HANGHOA_ID=HH.HH_ID
897
			LEFT JOIN dbo.CM_GOODS CG ON CG.GD_ID=PLDT.GOODS_ID
898
			LEFT JOIN dbo.CM_UNIT CU ON CU.UNIT_ID=HH.UNIT_ID
899
			LEFT JOIN dbo.CM_SUPPLIER CS ON CS.SUP_ID=PLDT.SUP_ID
900
			WHERE PLDT.REQ_ID=@P_REQ_ID
901

    
902

    
903

    
904

    
905
			SELECT ROW_NUMBER() OVER (ORDER BY CG.GD_NAME) AS STT ,CG.GD_NAME,
906
			ISNULL(PT.AMT_APP,0) AS AMT_APP,
907
			ISNULL(PT.AMT_EXE,0) AS AMT_EXE,
908
			ISNULL(PT.AMT_APP,0)-ISNULL(PT.AMT_EXE,0) AS AMT_REMAIN,
909
			SUM(ISNULL(PLDT.TOTAL_AMT,0)) AS TOTAL_AMT,
910
			CASE
911
				WHEN PL.PROCESS_ID='APPROVE' THEN USC.TLFullName
912
				
913
				ELSE N''
914
			END AS CHECKER_NAME,
915
			
916
			'' AS XN_NAME
917
			FROM
918
			dbo.PL_REQUEST_DOC_DT PLDT
919

    
920
			LEFT JOIN dbo.PL_TRADEDETAIL PT ON PT.TRADE_ID=PLDT.TRADE_ID
921
			LEFT JOIN dbo.PL_MASTER PM ON PM.PLAN_ID=PLDT.PLAN_ID
922
			LEFT JOIN dbo.CM_GOODS CG ON CG.GD_ID=PLDT.GOODS_ID 
923
			LEFT JOIN dbo.TL_USER USC ON USC.TLNANME=PLDT.CHECKER_ID
924
			LEFT JOIN dbo.PL_REQUEST_DOC PL ON PL.REQ_ID=PLDT.REQ_ID
925
			WHERE PLDT.REQ_ID=@P_REQ_ID
926
			GROUP BY PT.GOODS_ID,PT.AMT_APP,PT.AMT_EXE,CG.GD_NAME,PLDT.REQ_ID,USC.TLFullName,PL.PROCESS_ID
927
			
928

    
929

    
930

    
931
			SELECT  ROW_NUMBER() OVER (ORDER BY CGF.GD_NAME) AS STT ,CGF.GD_NAME AS FR_GD_NAME,
932
			ISNULL(PTF.AMT_APP,0) AS FR_AMT_APP,
933
			ISNULL(PTF.AMT_EXE,0) AS FR_AMT_EXE,
934
			ISNULL(PTF.AMT_APP,0)-ISNULL(PTF.AMT_EXE,0) AS FR_AMT_REMAIN,
935
			CGT.GD_NAME AS TO_GD_NAME,
936
			ISNULL(PTT.AMT_APP,0) AS TO_AMT_APP,
937
			ISNULL(PTT.AMT_EXE,0) AS TO_AMT_EXE,
938
			ISNULL(PTT.AMT_APP,0)-ISNULL(PTT.AMT_EXE,0) AS TO_AMT_REMAIN,
939
			ISNULL(PLTF.TOTAL_AMT,0) AS TOTAL_AMT,
940
			PR.APPROVE_DT,
941
			US.TLFullName AS TC_NAME,
942
			CASE
943
				WHEN PL.PROCESS_ID='APPROVE' THEN USC.TLFullName
944
				
945
				ELSE N''
946
			END AS CHECKER_NAME	
947
			FROM dbo.PL_REQUEST_TRANSFER PLTF 
948
			LEFT JOIN dbo.PL_TRADEDETAIL PTF ON PTF.TRADE_ID=PLTF.FR_TRADE_ID
949
			LEFT JOIN dbo.PL_TRADEDETAIL PTT ON PTT.TRADE_ID=PLTF.TO_TRADE_ID
950
			LEFT JOIN dbo.CM_GOODS CGF ON CGF.GD_ID=PLTF.FR_GOOD_ID
951
			LEFT JOIN dbo.CM_GOODS CGT ON CGT.GD_ID=PLTF.TO_GOOD_ID
952
			LEFT JOIN dbo.PL_REQUEST_PROCESS PR ON PR.REQ_ID=PLTF.REQ_DOC_ID AND PR.PROCESS_ID='TC'
953
			LEFT JOIN dbo.TL_USER US ON US .TLNANME=PR.CHECKER_ID
954
			LEFT JOIN dbo.TL_USER USC ON USC.TLNANME=PLTF.CHECKER_ID
955
			LEFT JOIN dbo.PL_REQUEST_DOC PL ON PL.REQ_ID=PLTF.REQ_DOC_ID
956
			WHERE PLTF.REQ_DOC_ID=@P_REQ_ID
957

    
958
			--DECLARE @TABLE TABLE(TLFullName NVARCHAR(100))
959
			--INSERT INTO @TABLE 
960
			--SELECT '- ' + TLFullName + ';' AS NAME FROM PL_PROCESS F1
961
			--LEFT JOIN TL_USER F2 ON F1.CHECKER_ID = F2.TLNANME
962
			--WHERE (1=1)
963
			--AND F1.REQ_ID =@P_REQ_ID
964
			--AND RoleName in ('TPGD','GDDV', 'GDK', 'PTGD', 'TGD', 'HDQT','KTT','KSV')
965
			
966
			--UPDATE @TABLE SET TLFullName = REPLACE(TLFullName,';','.')
967
			--WHERE TLFullName =(SELECT TOP 1 TLFullName AS NAME FROM @TABLE ORDER BY TLFullName DESC)
968

    
969
			--SELECT DISTINCT(TLFullName) AS NAME FROM @TABLE ORDER BY TLFullName
970

    
971
			-- TABLE3
972
			DECLARE @TABLE TABLE(ID INT, POS_NAME NVARCHAR(100))
973
			INSERT INTO @TABLE 
974
			SELECT F1.ID , '- ' + F3.POS_NAME + ';' AS NAME FROM PL_PROCESS F1
975
			LEFT JOIN TL_USER F2 ON F1.CHECKER_ID = F2.TLNANME
976
			LEFT JOIN CM_EMPLOYEE_LOG F3 ON F3.USER_DOMAIN = F2.TLNANME
977
			WHERE (1=1)
978
			AND F1.REQ_ID = @P_REQ_ID
979
			AND RoleName in ('HDQT', 'TGD', 'PTGD', 'GDK')
980
			
981
			UPDATE @TABLE SET POS_NAME = REPLACE(POS_NAME,';','.')
982
			WHERE POS_NAME =(SELECT TOP 1 POS_NAME AS NAME FROM @TABLE ORDER BY POS_NAME DESC)
983

    
984
			SELECT POS_NAME AS NAME FROM @TABLE ORDER BY ID DESC
985

    
986
			SELECT  ROW_NUMBER() OVER (ORDER BY CGF.GD_NAME) AS STT ,CGF.GD_NAME AS GD_NAME_ADD,
987
			ISNULL(PTF.AMT_APP,0) AS FR_AMT_APP_ADD,
988
			ISNULL(PTF.AMT_EXE,0) AS FR_AMT_EXE_ADD,
989
			ISNULL(PTF.AMT_APP,0)-ISNULL(PTF.AMT_EXE,0) AS FR_AMT_REMAIN_ADD,
990
			ISNULL(PTT.AMT_APP,0) AS TO_AMT_APP_ADD,
991
			ISNULL(PTT.AMT_EXE,0) AS TO_AMT_EXE_ADD,
992
			ISNULL(PTT.AMT_APP,0)-ISNULL(PTT.AMT_EXE,0) AS TO_AMT_REMAIN_ADD,
993
			ISNULL(PLTF.TOTAL_AMT,0) AS TOTAL_AMT_ADD,
994
			PR.APPROVE_DT,
995
			US.TLFullName AS TC_NAME,
996
			CASE
997
				WHEN PL.PROCESS_ID='APPROVE' THEN USC.TLFullName
998
				
999
				ELSE N''
1000
			END AS CHECKER_NAME	
1001
			FROM dbo.PL_REQUEST_TRANSFER PLTF 
1002
			LEFT JOIN dbo.PL_TRADEDETAIL PTF ON PTF.TRADE_ID=PLTF.FR_TRADE_ID
1003
			LEFT JOIN dbo.PL_TRADEDETAIL PTT ON PTT.TRADE_ID=PLTF.TO_TRADE_ID
1004
			LEFT JOIN dbo.CM_GOODS CGF ON CGF.GD_ID=PLTF.FR_GOOD_ID
1005
			LEFT JOIN dbo.CM_GOODS CGT ON CGT.GD_ID=PLTF.TO_GOOD_ID
1006
			LEFT JOIN dbo.PL_REQUEST_PROCESS PR ON PR.REQ_ID=PLTF.REQ_DOC_ID AND PR.PROCESS_ID='TC'
1007
			LEFT JOIN dbo.TL_USER US ON US .TLNANME=PR.CHECKER_ID
1008
			LEFT JOIN dbo.TL_USER USC ON USC.TLNANME=PLTF.CHECKER_ID
1009
			LEFT JOIN dbo.PL_REQUEST_DOC PL ON PL.REQ_ID=PLTF.REQ_DOC_ID
1010
			WHERE PLTF.REQ_DOC_ID=@P_REQ_ID
1011

    
1012
						
1013
			-- LAY THONG TIN CAP PHE DUYET
1014
			IF(EXISTS(SELECT * FROM  PL_REQUEST_DOC_DT WHERE REQ_ID =@P_REQ_ID ))
1015
			BEGIN
1016
				DECLARE @TABLE_RETURN_05 TABLE (APPR NVARCHAR(250),APPR1 NVARCHAR(250),APPR2 NVARCHAR(250),APPR3 NVARCHAR(250))
1017
				DECLARE @APPR VARCHAR(15),@APPR1 VARCHAR(15),@APPR2 VARCHAR(15),@APPR3 VARCHAR(15)
1018
				DECLARE @POS NVARCHAR(50),@POS1 NVARCHAR(50),@POS2 NVARCHAR(50),@POS3 NVARCHAR(50)
1019
				DECLARE @DATE NVARCHAR(50),@DATE1 NVARCHAR(50),@DATE2 NVARCHAR(50),@DATE3 NVARCHAR(50)
1020

    
1021
				
1022
				SET @APPR =(SELECT TOP 1 A. CHECKER_ID FROM PL_PROCESS A 
1023
				INNER JOIN TL_USER B ON A.CHECKER_ID = B.TLNANME AND B.RoleName ='GDK'
1024
				WHERE A.REQ_ID= @P_REQ_ID )
1025
				SET @POS =(SELECT TOP 1 POS_NAME FROM CM_EMPLOYEE_LOG WHERE USER_DOMAIN =@APPR)
1026
				SET @DATE =(SELECT ISNULL( FORMAT(A.APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'')
1027
				FROM PL_PROCESS A 
1028
				INNER JOIN TL_USER B ON A.CHECKER_ID = B.TLNANME AND B.RoleName ='GDK'
1029
				WHERE A.REQ_ID= @P_REQ_ID)
1030
		
1031
	
1032
				SET @APPR1 =(SELECT TOP 1 A. CHECKER_ID FROM PL_PROCESS A 
1033
				INNER JOIN TL_USER B ON A.CHECKER_ID = B.TLNANME AND B.RoleName ='PTGD'
1034
				WHERE A.REQ_ID= @P_REQ_ID)
1035
				SET @POS1 =(SELECT TOP 1 POS_NAME FROM CM_EMPLOYEE_LOG WHERE USER_DOMAIN =@APPR1)
1036
				SET @DATE1 =(SELECT ISNULL( FORMAT(A.APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM PL_PROCESS A 
1037
				INNER JOIN TL_USER B ON A.CHECKER_ID = B.TLNANME AND B.RoleName ='PTGD'
1038
				WHERE A.REQ_ID= @P_REQ_ID)
1039
		
1040
	
1041

    
1042
				SET @APPR2 =(SELECT TOP 1 A. CHECKER_ID FROM PL_PROCESS A 
1043
				INNER JOIN TL_USER B ON A.CHECKER_ID = B.TLNANME AND B.RoleName ='TGD'
1044
				WHERE A.REQ_ID= @P_REQ_ID)
1045
				SET @POS2 =(SELECT TOP 1 POS_NAME FROM CM_EMPLOYEE_LOG WHERE USER_DOMAIN =@APPR2)
1046
				SET @DATE2 =(SELECT TOP 1 ISNULL( FORMAT(A.APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM PL_PROCESS A 
1047
				INNER JOIN TL_USER B ON A.CHECKER_ID = B.TLNANME AND B.RoleName ='TGD'
1048
				WHERE A.REQ_ID= @P_REQ_ID)
1049
		
1050

    
1051
				SET @APPR3 =(SELECT TOP 1 A. CHECKER_ID FROM PL_PROCESS A 
1052
				INNER JOIN TL_USER B ON A.CHECKER_ID = B.TLNANME AND B.RoleName ='HDQT'
1053
				WHERE A.REQ_ID= @P_REQ_ID)
1054
				SET @POS3 =(SELECT TOP 1 POS_NAME FROM CM_EMPLOYEE_LOG WHERE USER_DOMAIN =@APPR3)
1055
				SET @DATE3 =(SELECT ISNULL( FORMAT(A.APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM PL_PROCESS A 
1056
				INNER JOIN TL_USER B ON A.CHECKER_ID = B.TLNANME AND B.RoleName ='HDQT'
1057
				WHERE A.REQ_ID= @P_REQ_ID)	
1058

    
1059
				BEGIN
1060
				INSERT INTO @TABLE_RETURN_05 VALUES (
1061
													(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR),
1062
													(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR1),
1063
													(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME =  @APPR2),
1064
													(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR3)
1065
													)
1066
				INSERT INTO @TABLE_RETURN_05 VALUES (@POS,@POS1,@POS2,@POS3)
1067
				INSERT INTO @TABLE_RETURN_05 VALUES (@DATE,@DATE1,@DATE2,@DATE3)
1068
				END
1069
			END
1070
				SELECT * FROM  @TABLE_RETURN_05
1071

    
1072

    
1073

    
1074

    
1075
			
1076

    
1077
		
1078

    
1079
GO
1080
IF @@ERROR <> 0 SET NOEXEC ON
1081
GO
1082
PRINT N'Altering [dbo].[CREATE_LIMIT_TR_REQ]'
1083
GO
1084
-- =============================================
1085
-- Author:		<Author,,Name>
1086
-- Create date: <Create Date,,>
1087
-- Description:	<Description,,>
1088
-- =============================================
1089
ALTER FUNCTION [dbo].[CREATE_LIMIT_TR_REQ]
1090
(	
1091
	-- Add the parameters for the function here
1092
	@REQ_ID VARCHAR(20),
1093
	@p_role VARCHAR(20)
1094
)
1095
RETURNS  @tableResult  TABLE(
1096
	PROCESS_ID VARCHAR(20),
1097
	ROLE_ID VARCHAR(20),
1098
	DVDM_ID VARCHAR(20)
1099
)
1100
AS
1101
BEGIN
1102

    
1103

    
1104
DECLARE @BRANCH_ID VARCHAR(15)
1105

    
1106
DECLARE @TABLE_LIMIT TABLE (ROLE_ID VARCHAR(20),DVDM_ID VARCHAR(20),VALUE_LIMIT DECIMAL(18,0))
1107

    
1108
--SET @BRANCH_ID =(SELECT TLSUBBRID FROM dbo.TL_USER WHERE TLNANME IN (SELECT MAKER_ID FROM dbo.TR_REQUEST_DOC WHERE REQ_ID=@REQ_ID))
1109

    
1110

    
1111

    
1112
 DECLARE @TOTAL_AMT DECIMAL(18,2) ,@GROUP_LIMIT_ID VARCHAR(20),@ROLE_ID VARCHAR(20),@VALUE_LIMIT DECIMAL(18,2),@DVDM_ID VARCHAR(20),@LEVEL INT
1113

    
1114
 
1115
 SET @LEVEL=1
1116
 DECLARE LstGR CURSOR FOR
1117
 --SELECT HGL.GROUP_LIMIT_ID,SUM(TRDT.TOTAL_AMT) AS TOTAL_AMT FROM dbo.TR_REQUEST_DOC_DT TRDT 
1118
 --LEFT JOIN dbo.SYS_HH_GROUP_LIMIT HGL ON HGL.HH_ID=TRDT.HANGHOA_ID
1119
 --WHERE HGL.TYPE_LIMIT='PYC' AND TRDT.TRAN_TYPE_ID NOT IN (SELECT TRAN_TYPE_ID FROM dbo.CM_TRAN_TYPE WHERE NOTES='XK' OR NOTES='CDT')
1120
 --GROUP BY  HGL.GROUP_LIMIT_ID
1121
 --UNION ALL
1122
 SELECT HGL.GROUP_LIMIT_ID,SUM(TRDT.TOTAL_AMT) AS TOTAL_AMT FROM dbo.TR_REQUEST_DOC_DT TRDT 
1123
 LEFT JOIN dbo.SYS_HH_GROUP_LIMIT HGL ON HGL.HH_ID=TRDT.HANGHOA_ID
1124
 WHERE  HGL.TYPE_LIMIT='CDT' AND TRDT.REQ_DOC_ID=@REQ_ID  AND TRAN_TYPE_ID  IN (SELECT TRN_TYPE FROM dbo.CM_TRAN_TYPE WHERE NOTES='CDT')
1125
 GROUP BY  HGL.GROUP_LIMIT_ID
1126

    
1127
 OPEN LstGR
1128
 -- Chỉnh sửa quy trình mới
1129

    
1130

    
1131

    
1132
INSERT INTO @tableResult
1133
SELECT @LEVEL,ROLE_ID,DVDM_ID FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='PDPYC'
1134

    
1135
 SET @LEVEL=@LEVEL+1
1136
 --------
1137

    
1138

    
1139
 FETCH NEXT FROM LstGR INTO @GROUP_LIMIT_ID,@TOTAL_AMT
1140
 WHILE @@FETCH_STATUS=0
1141
 BEGIN
1142
	DELETE FROM @TABLE_LIMIT
1143
	INSERT INTO @TABLE_LIMIT
1144
	SELECT ROLE_ID,DVDM_ID,VALUE_LIMIT FROM dbo.SYS_GROUP_LIMIT_DT WHERE GROUP_LM_ID=@GROUP_LIMIT_ID AND ROLE_ID <>'GDDV'
1145

    
1146

    
1147
	IF( NOT EXISTS (SELECT * FROM  @TABLE_LIMIT WHERE ROLE_ID ='TGD'))
1148
	BEGIN
1149
		INSERT INTO @TABLE_LIMIT
1150
		(
1151
			ROLE_ID,
1152
			DVDM_ID,
1153
			VALUE_LIMIT
1154
		)
1155
		VALUES
1156
		(   'TGD',  -- ROLE_ID - varchar(20)
1157
			'',  -- DVDM_ID - varchar(20)
1158
			999999999999999999 -- VALUE_LIMIT - decimal(18, 0)
1159
		 )
1160
	END
1161
	DECLARE LstLimit CURSOR FOR
1162
	SELECT ROLE_ID,DVDM_ID,VALUE_LIMIT FROM @TABLE_LIMIT
1163
	ORDER BY VALUE_LIMIT
1164
	OPEN LstLimit
1165
	FETCH NEXT FROM LstLimit INTO @ROLE_ID,@DVDM_ID,@VALUE_LIMIT
1166
	WHILE @@FETCH_STATUS=0
1167
	BEGIN
1168
		IF(NOT EXISTS(SELECT * FROM @tableResult WHERE ROLE_ID=@ROLE_ID AND DVDM_ID=@DVDM_ID))
1169
		BEGIN	INSERT INTO @tableResult
1170
		(
1171
		    PROCESS_ID,
1172
		    ROLE_ID,
1173
		    DVDM_ID
1174
		)
1175
		VALUES
1176
		(   @LEVEL, -- PROCESS_ID - varchar(20)
1177
		    @ROLE_ID, -- ROLE_ID - varchar(20)
1178
		    @DVDM_ID  -- DVDM_ID - varchar(20)
1179
		)
1180
		SET @LEVEL = @LEVEL +1
1181
	END
1182
		IF(@VALUE_LIMIT>=@TOTAL_AMT)
1183
			BREAK
1184

    
1185
		FETCH NEXT FROM LstLimit INTO @ROLE_ID,@DVDM_ID,@VALUE_LIMIT
1186
	END
1187
	CLOSE LstLimit
1188
	DEALLOCATE LstLimit
1189

    
1190

    
1191

    
1192
	FETCH NEXT FROM LstGR INTO @GROUP_LIMIT_ID,@TOTAL_AMT
1193
 END
1194
 CLOSE LstGR
1195
 DEALLOCATE LstGR
1196

    
1197
 
1198

    
1199
RETURN 
1200
END
1201

    
1202

    
1203

    
1204

    
1205

    
1206

    
1207

    
1208

    
1209

    
1210
GO
1211
IF @@ERROR <> 0 SET NOEXEC ON
1212
GO
1213
PRINT N'Altering [dbo].[TR_REQ_PROCESS_CHILD_App]'
1214
GO
1215
ALTER PROCEDURE [dbo].[TR_REQ_PROCESS_CHILD_App]
1216
@p_REQ_ID VARCHAR(20),
1217
@p_PROCESS_ID VARCHAR(20),
1218
@p_TLNAME VARCHAR(20),
1219
@p_MAKER_ID VARCHAR(20),
1220
@p_TYPE_JOB VARCHAR(20),
1221
@p_PROCESS_DES NVARCHAR(500),
1222
@p_REF_ID INT,
1223
@p_XMLDATA XML
1224
AS
1225
BEGIN TRANSACTION
1226
-- LUCTV 20052020 BO SUNG CHECK NEU TRA VE THI KHONG DUYET DUOC
1227
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'))
1228
OR(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_ID AND STATUS ='R')))
1229
	BEGIN
1230
		ROLLBACK TRANSACTION
1231
		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
1232
		RETURN -1
1233
END
1234
Declare @hdoc INT
1235
	EXEC sp_xml_preparedocument @hdoc Output,@p_XMLDATA
1236
	DECLARE @lstFILE TABLE(
1237
	ATTACH_ID  VARCHAR(20),
1238
	IS_READ	BIT 
1239
	)
1240
	INSERT INTO @lstFILE
1241
	SELECT *
1242
	FROM OPENXML(@hDoc,'/Root/ATTACH_FILE',2)
1243
	WITH 
1244
	(
1245
		ATTACH_ID  VARCHAR(20),
1246
		IS_READ	BIT  
1247
	)
1248

    
1249
IF(EXISTS(SELECT TR_REQUEST_DOC_FILE_ID FROM dbo.TR_REQUEST_DOC_FILE WHERE REQ_ID=@p_REQ_ID AND IS_VIEW=1
1250
 AND EXISTS(SELECT ATTACH_ID FROM @lstFILE WHERE [@lstFILE].ATTACH_ID=TR_REQUEST_DOC_FILE.ATTACH_ID AND IS_READ=0)))
1251
 BEGIN
1252
		ROLLBACK TRANSACTION
1253
			SELECT -1 Result, N'File đinh kèm bắt buộc đọc' ErrorDesc 
1254
			RETURN 0
1255
 END
1256
DECLARE @LEVEL INT,	@TYPE_JOB_NAME NVARCHAR(100), @FULLNAME NVARCHAR(100)
1257
			
1258
		UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='P'
1259
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND TLNAME=@p_TLNAME AND TYPE_JOB=@p_TYPE_JOB
1260

    
1261
		SET @LEVEL=ISNULL((SELECT TOP 1 LEVEL_JOB 
1262
		FROM dbo.PL_REQUEST_PROCESS_CHILD 
1263
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND TLNAME=@p_TLNAME AND TYPE_JOB=@p_TYPE_JOB
1264
		ORDER BY LEVEL_JOB DESC),0)
1265

    
1266
		UPDATE dbo.PL_REQUEST_PROCESS_CHILD SET STATUS_JOB='C'
1267
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND LEVEL_JOB=(@LEVEL-1)
1268
		
1269
			SET @TYPE_JOB_NAME =(SELECT CONTENT FROM dbo.CM_ALLCODE WHERE CDNAME = 'JOB_TYPE' AND CDTYPE='REQ' AND CDVAL=@p_TYPE_JOB)
1270
			SET @FULLNAME =(SELECT TLFullName FROM dbo.TL_USER WHERE TLNANME=@p_TLNAME )
1271
			
1272
		INSERT INTO dbo.PL_PROCESS
1273
				(
1274
					REQ_ID,
1275
					PROCESS_ID,
1276
					CHECKER_ID,
1277
					APPROVE_DT,
1278
					PROCESS_DESC,NOTES
1279
				)
1280
				VALUES
1281
				(   @p_REQ_ID,        -- REQ_ID - varchar(15)
1282
					@p_PROCESS_ID,        -- PROCESS_ID - varchar(10)
1283
					@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
1284
					GETDATE() , -- APPROVE_DT - datetime
1285
					@p_PROCESS_DES ,
1286
					@TYPE_JOB_NAME+ N' đã phê duyệt'       -- PROCESS_DESC - nvarchar(1000)
1287
				)
1288
		
1289

    
1290
		IF(NOT EXISTS (SELECT * FROM  dbo.PL_REQUEST_PROCESS_CHILD 
1291
		WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_REF_ID AND STATUS_JOB <> 'P'))
1292
		BEGIN
1293
				IF(@p_PROCESS_ID='DMMS')
1294
				BEGIN
1295
				DECLARE @PROCESS_PARENT VARCHAR(20)
1296
				SET @PROCESS_PARENT='DMMS'
1297

    
1298
				UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='P',CHECKER_ID=@p_MAKER_ID,APPROVE_DT=GETDATE(),NOTES=N'Đầu mối mua sắm đã phê duyệt' WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID=@p_PROCESS_ID
1299
		
1300
				DECLARE @LIMIT_VALUE_KT DECIMAL(18,0),@ROLE_KT VARCHAR(20),@DVDM_KT VARCHAR(20),@NOTES_KT NVARCHAR(200),@TOTAL_AMT_REQ DECIMAL(18,0)
1301

    
1302
				SET @LIMIT_VALUE_KT = (SELECT LIMIT_VALUE FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='KT')
1303
				SET @ROLE_KT=(SELECT ROLE_ID FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='KT')
1304
				
1305
				SET @DVDM_KT=(SELECT DVDM_ID FROM dbo.TL_SYSROLE_LIMIT WHERE LIMIT_TYPE='KT')
1306
				
1307
				SET @TOTAL_AMT_REQ =(SELECT SUM(TOTAL_AMT) AS TOTAL_AMT FROM dbo.TR_REQUEST_DOC_DT 
1308
				WHERE REQ_DOC_ID=@p_REQ_ID AND TRAN_TYPE_ID NOT IN (SELECT TRN_TYPE FROM dbo.CM_TRAN_TYPE WHERE NOTES='XK'))
1309
				IF(@TOTAL_AMT_REQ > @LIMIT_VALUE_KT)
1310
				BEGIN
1311
					DECLARE @l_REQ_COST_ID VARCHAR(15)
1312
					EXEC SYS_CodeMasters_Gen 'TR_REQUEST_COSTCENTER', @l_REQ_COST_ID out
1313
					INSERT dbo.TR_REQUEST_COSTCENTER
1314
					(
1315
					    REQ_COST_ID,
1316
					    COST_ID,
1317
					    REQ_ID,
1318
					    NOTES,
1319
					    AUTH_STATUS,
1320
					    MAKER_ID,
1321
					    CREATE_DT,
1322
					    CHECKER_ID,
1323
					    APPROVE_DT
1324
					)
1325
					VALUES
1326
					(   @l_REQ_COST_ID,        -- REQ_COST_ID - varchar(15)
1327
						@DVDM_KT,        -- COST_ID - varchar(15)			    
1328
						@p_REQ_ID,        -- REQ_ID - varchar(15)
1329
					    N'',       -- NOTES - nvarchar(500)
1330
					    'U',        -- AUTH_STATUS - varchar(1)
1331
					    @p_MAKER_ID,        -- MAKER_ID - varchar(15)
1332
					    GETDATE(), -- CREATE_DT - datetime
1333
					    '',        -- CHECKER_ID - varchar(15)
1334
					   NULL -- APPROVE_DT - datetime
1335
					    )
1336
				END
1337
				IF(EXISTS(SELECT * FROM dbo.TR_REQUEST_COSTCENTER WHERE REQ_ID=@p_REQ_ID))
1338
					BEGIN
1339
					DECLARE @COST_ID VARCHAR(20)
1340
					DECLARE lstCostCenter CURSOR FOR
1341
					SELECT COST_ID  FROM dbo.TR_REQUEST_COSTCENTER
1342
					 WHERE REQ_ID=@p_REQ_ID
1343
					 OPEN lstCostCenter
1344
		 			FETCH NEXT FROM lstCostCenter INTO @COST_ID
1345
					WHILE @@FETCH_STATUS = 0 
1346
					BEGIN 
1347
				    INSERT INTO dbo.PL_REQUEST_PROCESS
1348
				    (
1349
				        REQ_ID,
1350
				        PROCESS_ID,
1351
				        STATUS,
1352
				        ROLE_USER,
1353
				        BRANCH_ID,
1354
				        CHECKER_ID,
1355
				        APPROVE_DT,
1356
				        PARENT_PROCESS_ID,
1357
				        IS_LEAF,
1358
				        COST_ID,
1359
				        DVDM_ID,
1360
						NOTES,
1361
						IS_HAS_CHILD
1362
				    )
1363
				    VALUES
1364
				    (   @p_REQ_ID,        -- REQ_ID - varchar(15)
1365
				        'DVCM',        -- PROCESS_ID - varchar(10)
1366
				        'U',        -- STATUS - varchar(5)
1367
				        'GDDV',        -- ROLE_USER - varchar(50)
1368
				        '',        -- BRANCH_ID - varchar(15)
1369
				        '',        -- CHECKER_ID - varchar(15)
1370
						NULL, -- APPROVE_DT - datetime
1371
				       @PROCESS_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
1372
				        'N',        -- IS_LEAF - varchar(1)
1373
				        '',        -- COST_ID - varchar(15)
1374
				        @COST_ID ,
1375
						N'Chờ đơn vị chuyên môn xác nhận' ,
1376
						1       -- DVDM_ID - varchar(15)
1377
				     )
1378

    
1379
					FETCH NEXT FROM lstCostCenter INTO @COST_ID
1380
					END
1381
					CLOSE lstCostCenter
1382
					DEALLOCATE lstCostCenter
1383
					
1384
				END
1385
				DECLARE @TOTAL_AMT DECIMAL(18,2),@ROLE_PDTH VARCHAR(20)	,@LIMIT_VALUE DECIMAL(18,2)	,@IS_NEXT BIT,@PROCESS_ID  VARCHAR(5),@ROLE_ID VARCHAR(20),@DVDM_ID VARCHAR(20),@NOTES NVARCHAR(50),@DVDM_NAME NVARCHAR(200)
1386

    
1387
				
1388

    
1389

    
1390
				IF(EXISTS(SELECT ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PROCESS_ID='DVCM'))
1391
					SET @PROCESS_PARENT='DVCM'
1392
				
1393
				--SET @IS_NEXT=(SELECT dbo.FN_CHECK_LIMIT_TR_REQ(@p_REQ_ID,'GDDV'))
1394
				SET @IS_NEXT=1
1395
				IF(@IS_NEXT =1)
1396
				BEGIN
1397
				DECLARE lSTLEVEL CURSOR FOR
1398
				SELECT PROCESS_ID,ROLE_ID,DVDM_ID FROM [CREATE_LIMIT_TR_REQ](@p_REQ_ID,'')
1399
				
1400
				OPEN lSTLEVEL
1401
				FETCH NEXT FROM lSTLEVEL INTO @PROCESS_ID,@ROLE_ID,@DVDM_ID
1402
				WHILE @@FETCH_STATUS=0
1403
				BEGIN
1404
				SET @NOTES =(SELECT ROLE_DESC FROM dbo.TL_SYSROLE WHERE ROLE_ID=@ROLE_ID)
1405
				SET @DVDM_NAME= (SELECT DVDM_NAME FROM dbo.CM_DVDM WHERE DVDM_ID=@DVDM_ID)
1406
				SET @NOTES = @NOTES + ' ' + @DVDM_NAME
1407
					INSERT INTO dbo.PL_REQUEST_PROCESS
1408
					(
1409
					    REQ_ID,
1410
					    PROCESS_ID,
1411
					    STATUS,
1412
					    ROLE_USER,
1413
					    BRANCH_ID,
1414
					    CHECKER_ID,
1415
					    APPROVE_DT,
1416
					    PARENT_PROCESS_ID,
1417
					    IS_LEAF,
1418
					    COST_ID,
1419
					    DVDM_ID,
1420
					    NOTES,
1421
					    IS_HAS_CHILD
1422
					)
1423
					VALUES
1424
					(  @p_REQ_ID,        -- REQ_ID - varchar(15)
1425
					   'PDYC_'+ @PROCESS_ID,        -- PROCESS_ID - varchar(10)
1426
					    'U',        -- STATUS - varchar(5)
1427
					    @ROLE_ID,        -- ROLE_USER - varchar(50)
1428
					    '',        -- BRANCH_ID - varchar(15)
1429
					    '',        -- CHECKER_ID - varchar(15)
1430
					    NULL, -- APPROVE_DT - datetime
1431
					    @PROCESS_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
1432
					    '',        -- IS_LEAF - varchar(1)
1433
					    '',        -- COST_ID - varchar(15)
1434
					    @DVDM_ID,        -- DVDM_ID - varchar(15)
1435
					    N'Chờ ' +@NOTES+N' phê duyệt',       -- NOTES - nvarchar(500)
1436
					    0       -- IS_HAS_CHILD - bit
1437
					    )
1438
					SET @PROCESS_PARENT= 'PDYC_'+ @PROCESS_ID
1439
					FETCH NEXT FROM lSTLEVEL INTO @PROCESS_ID,@ROLE_ID,@DVDM_ID
1440
					END
1441
					CLOSE lSTLEVEL
1442
					DEALLOCATE lSTLEVEL
1443
                END
1444

    
1445

    
1446

    
1447

    
1448

    
1449
				INSERT INTO dbo.PL_REQUEST_PROCESS
1450
				(
1451
				    REQ_ID,
1452
				    PROCESS_ID,
1453
				    STATUS,
1454
				    ROLE_USER,
1455
				    BRANCH_ID,
1456
				    CHECKER_ID,
1457
				    APPROVE_DT,
1458
				    PARENT_PROCESS_ID,
1459
				    IS_LEAF,
1460
				    COST_ID,
1461
				    DVDM_ID,
1462
				    NOTES,
1463
				    IS_HAS_CHILD
1464
				)
1465
				VALUES
1466
				(   @p_REQ_ID,        -- REQ_ID - varchar(15)
1467
				    'APPROVE',        -- PROCESS_ID - varchar(10)
1468
				    'U',        -- STATUS - varchar(5)
1469
				    '',        -- ROLE_USER - varchar(50)
1470
				    '',        -- BRANCH_ID - varchar(15)
1471
				    '',        -- CHECKER_ID - varchar(15)
1472
				    NULL, -- APPROVE_DT - datetime
1473
				    @PROCESS_PARENT,        -- PARENT_PROCESS_ID - varchar(10)
1474
				    'N',        -- IS_LEAF - varchar(1)
1475
				    '',        -- COST_ID - varchar(15)
1476
				    '',        -- DVDM_ID - varchar(15)
1477
				    N'Hoàn tất',       -- NOTES - nvarchar(500)
1478
				    NULL       -- IS_HAS_CHILD - bit
1479
				    )
1480
				DECLARE @PROCESS_NEXT_ID VARCHAR(10)
1481
				SET @PROCESS_NEXT_ID = (SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@p_PROCESS_ID)
1482

    
1483
				
1484
				
1485
				UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='C' WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@p_PROCESS_ID
1486
				UPDATE dbo.TR_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT_ID WHERE REQ_ID=@p_REQ_ID
1487
				
1488
	END
1489
				ELSE IF(@p_PROCESS_ID='DVCM')
1490
				BEGIN
1491

    
1492
						DECLARE @DEP_ID VARCHAR(15),@BRANCH_ID VARCHAR(15),@PROCESS_NEXT VARCHAR(10)
1493

    
1494
							SET @DEP_ID=(SELECT SECUR_CODE FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
1495
							SET @BRANCH_ID=(SELECT TLSUBBRID FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
1496
							SET @ROLE_ID=(SELECT RoleName FROM dbo.TL_USER WHERE TLNANME=@p_MAKER_ID)
1497
							-- LUCTV 07082020 KIEM TRA NEU ROLE KHAC ROLE GDDV THI PHAI CHUYEN ROLE THANH GDDV
1498
							IF(@ROLE_ID ='KTT')
1499
							BEGIN
1500
								SET @ROLE_ID ='GDDV'
1501
							END
1502
							SET @PROCESS_NEXT = (SELECT TOP 1 PROCESS_ID FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID AND PARENT_PROCESS_ID=@p_PROCESS_ID)
1503
						
1504

    
1505
						UPDATE dbo.TR_REQUEST_COSTCENTER SET AUTH_STATUS='A',APPROVE_DT=GETDATE(),CHECKER_ID=@p_MAKER_ID WHERE REQ_ID=@p_REQ_ID AND COST_ID IN (SELECT PC.DVDM_ID FROM dbo.PL_COSTCENTER PC LEFT JOIN
1506
																																	dbo.PL_COSTCENTER_DT PT ON PT.COST_ID=PC.COST_ID WHERE BRANCH_ID=@BRANCH_ID AND DEP_ID=@DEP_ID)
1507
						UPDATE dbo.PL_REQUEST_PROCESS SET STATUS='P',CHECKER_ID=@p_MAKER_ID,
1508
						APPROVE_DT=GETDATE() ,NOTES=N'Đơn vị chuyên môn xác nhận' 
1509
						WHERE REQ_ID=@p_REQ_ID AND ROLE_USER=@ROLE_ID AND DVDM_ID IN (SELECT PC.DVDM_ID FROM dbo.PL_COSTCENTER PC LEFT JOIN
1510
																																	dbo.PL_COSTCENTER_DT PT ON PT.COST_ID=PC.COST_ID
1511
																																	WHERE BRANCH_ID=@BRANCH_ID AND DEP_ID=@DEP_ID)
1512
						
1513
						IF(NOT EXISTS( SELECT * FROM dbo.PL_REQUEST_PROCESS WHERE PROCESS_ID=@p_PROCESS_ID AND REQ_ID=@p_REQ_ID AND STATUS='C'))
1514
						BEGIN
1515
						
1516
										UPDATE dbo.PL_REQUEST_PROCESS SET [STATUS]='C' WHERE PROCESS_ID=@PROCESS_NEXT AND REQ_ID=@p_REQ_ID
1517
										UPDATE dbo.TR_REQUEST_DOC SET PROCESS_ID=@PROCESS_NEXT WHERE REQ_ID=@p_REQ_ID
1518
						
1519
						END
1520
				END
1521

    
1522
			--IF(@PROCESS_NEXT='APPROVE')
1523
			IF(EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE PROCESS_ID ='APPROVE' AND REQ_ID =@p_REQ_ID))
1524
			BEGIN
1525
				DECLARE @TempTB TABLE
1526
				(
1527
					TOTAL_AMT DECIMAL(18,2),
1528
					TRADE_ID VARCHAR(20),
1529
					PLAN_ID VARCHAR(20)
1530
				)
1531
				INSERT INTO @TempTB			
1532
				SELECT SUM(DT.TOTAL_AMT) TOTAL_AMT,PLDT.TRADE_ID,PLDT.PLAN_ID FROM dbo.TR_REQUEST_DOC_DT DT 
1533
				LEFT JOIN dbo.PL_REQUEST_DOC_DT PLDT ON DT.PL_REQDT_ID=PLDT.REQDT_ID
1534
				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
1535
				GROUP BY	PLDT.TRADE_ID,PLDT.PLAN_ID
1536
				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)
1537
				IF(EXISTS(SELECT * FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_REQ_ID AND  TRAN_TYPE_ID NOT IN (SELECT TRAN_TYPE_ID FROM dbo.CM_TRAN_TYPE WHERE NOTES='XK')))
1538
					EXEC dbo.TR_REQ_DOC_Ins_To_PO @p_TR_REQ_ID = @p_REQ_ID -- varchar(15)
1539
				
1540
			END
1541
		END
1542
				
1543
		IF @@Error <> 0 GOTO ABORT
1544
COMMIT TRANSACTION
1545
SELECT 0 as Result, '' ErrorDesc
1546
RETURN 0
1547
ABORT:
1548
BEGIN
1549
		ROLLBACK TRANSACTION
1550
		SELECT -1 as Result, '' ErrorDesc
1551
		RETURN -1
1552
End
1553

    
1554

    
1555

    
1556

    
1557

    
1558

    
1559
GO
1560
IF @@ERROR <> 0 SET NOEXEC ON
1561
GO
1562
PRINT N'Altering [dbo].[TR_REQUEST_DOC_App]'
1563
GO
1564
ALTER PROCEDURE [dbo].[TR_REQUEST_DOC_App]
1565
    @p_REQ_ID VARCHAR(15) = NULL,
1566
	@p_AUTH_STATUS VARCHAR(1) = NULL,
1567
	@p_CHECKER_ID varchar(15)  = NULL,
1568
	@p_APPROVE_DT DATETIME = NULL,
1569
	@p_ROLE_LOGIN VARCHAR(50) = NULL,
1570
	@p_BRANCH_LOGIN VARCHAR(15),
1571
	@p_PROCESS_DES NVARCHAR(500)
1572
	
1573
AS
1574
	--Validation is here
1575
DECLARE @ERRORSYS NVARCHAR(15) = '' 
1576
  IF ( NOT EXISTS ( SELECT * FROM TR_REQUEST_DOC WHERE  REQ_ID = @p_REQ_ID))
1577
	SET @ERRORSYS = 'REQ-00002'
1578
IF @ERRORSYS <> '' 
1579
BEGIN
1580
	SELECT ErrorCode Result, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1581
	RETURN '0'
1582
END 
1583
BEGIN TRANSACTION
1584
	-- LUCTV 20052020 BO SUNG CHECK NEU TRA VE THI KHONG DUYET DUOC
1585
	IF(EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE REQ_ID =@p_REQ_ID AND AUTH_STATUS ='R'))
1586
		BEGIN
1587
			ROLLBACK TRANSACTION
1588
			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
1589
			RETURN '-1'
1590
	END
1591
	--- PHE DUYET TRUNG GIAN
1592
	DECLARE @BRANCH_ID VARCHAR(20), @DEP_ID VARCHAR(20),@BRANCH_CREATE_N VARCHAR(20) ,@DEP_CREATE_N VARCHAR(20),@BRANCH_TYPE VARCHAR(10),
1593
	@BRANCH_CREATE_TYPE VARCHAR(10)
1594
	SELECT @BRANCH_CREATE_N=BRANCH_CREATE,@DEP_CREATE_N=DEP_CREATE FROM dbo.TR_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID
1595
	SET @BRANCH_TYPE=(SELECT BRANCH_TYPE FROM dbo.CM_BRANCH WHERE BRANCH_ID=@BRANCH_ID)
1596
	SET @BRANCH_CREATE_TYPE=(SELECT BRANCH_TYPE FROM dbo.CM_BRANCH WHERE BRANCH_ID=@BRANCH_CREATE_N)
1597
	IF(EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE REQ_ID =@p_REQ_ID AND SIGN_USER =@p_CHECKER_ID AND PROCESS_ID ='SIGN'))
1598
	BEGIN
1599
		DELETE FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID
1600
		INSERT INTO dbo.PL_PROCESS
1601
		(
1602
			REQ_ID,
1603
			PROCESS_ID,
1604
			CHECKER_ID,
1605
			APPROVE_DT,
1606
			PROCESS_DESC,NOTES
1607
		)
1608
		VALUES
1609
		(   @p_REQ_ID,        -- REQ_ID - varchar(15)
1610
			'SIGN',        -- PROCESS_ID - varchar(10)
1611
			@p_CHECKER_ID,        -- CHECKER_ID - varchar(15)
1612
			@p_APPROVE_DT , -- APPROVE_DT - datetime
1613
			N'Cấp phê duyệt trung gian xác nhận phiếu yêu cầu mua sắm',
1614
			N'Cấp phê duyệt trung gian'
1615
		)
1616
	--- DUA CAP PHE DUYET TRUONG DON VI
1617
		IF(@BRANCH_CREATE_TYPE='PGD')
1618
			SET @BRANCH_CREATE_N=(SELECT FATHER_ID  FROM dbo.CM_BRANCH WHERE BRANCH_ID=@BRANCH_CREATE_N)
1619

    
1620
	    INSERT INTO dbo.PL_REQUEST_PROCESS
1621
		(
1622
		    REQ_ID,
1623
		    PROCESS_ID,
1624
		    STATUS,
1625
		    ROLE_USER,
1626
		    BRANCH_ID,
1627
			DEP_ID,
1628
		    CHECKER_ID,
1629
		    APPROVE_DT,
1630
		    PARENT_PROCESS_ID,
1631
		    IS_LEAF,
1632
		    COST_ID,
1633
		    DVDM_ID,
1634
		    NOTES,
1635
		    IS_HAS_CHILD
1636
		)
1637
		VALUES
1638
		(   @p_REQ_ID,        -- REQ_ID - varchar(15)
1639
		    'APPNEW',        -- PROCESS_ID - varchar(10)
1640
		    'C',        -- STATUS - varchar(5)
1641
		    'GDDV',        -- ROLE_USER - varchar(50)
1642
		    @BRANCH_CREATE_N,  
1643
			@DEP_CREATE_N,      -- BRANCH_ID - varchar(15)
1644
		    '',        -- CHECKER_ID - varchar(15)
1645
		    NULL,      -- APPROVE_DT - datetime
1646
		    '',        -- PARENT_PROCESS_ID - varchar(10)
1647
		    'N',        -- IS_LEAF - varchar(1)
1648
		    '',        -- COST_ID - varchar(15)
1649
		    '',        -- DVDM_ID - varchar(15)
1650
		    N'Chờ trưởng đơn vị phê duyệt',       -- NOTES - nvarchar(500)
1651
		    NULL       -- IS_HAS_CHILD - bit
1652
		 )
1653
	--- UPDATE PROCESS_ID VE APP_NEW
1654
	UPDATE TR_REQUEST_DOC SET PROCESS_ID ='APPNEW' WHERE REQ_ID =@p_REQ_ID
1655
	END
1656
	ELSE
1657
	--- PHE DUYET GIU NGUYEN NHU THUONG
1658
	BEGIN
1659
		--- KIEM TRA XEM DA PHE DUYET TRUNG GIAN HAY CHUA
1660
		IF(EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE REQ_ID =@p_REQ_ID AND SIGN_USER IS NOT NULL AND SIGN_USER <> ''))
1661
		BEGIN
1662
			IF(NOT EXISTS (SELECT * FROM PL_PROCESS WHERE PROCESS_ID='SIGN' AND REQ_ID =@p_REQ_ID))
1663
			BEGIN
1664
				ROLLBACK TRANSACTION
1665
				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 đợi cấp phê duyệt trung gian xác nhận. Vui lòng đợi nhân viên '+(SELECT SIGN_USER FROM TR_REQUEST_DOC WHERE REQ_ID =@p_REQ_ID)+' xác nhận phiếu!' ErrorDesc
1666
				RETURN -1
1667
			END
1668
		END
1669
		DELETE FROM dbo.PL_REQUEST_PROCESS WHERE REQ_ID=@p_REQ_ID
1670
		DECLARE @CURR_PROCESS VARCHAR(20),@TOTAL_AMT DECIMAL(18,2),
1671
		 @LIMIT_VALUE DECIMAL(18,0),@IS_NEXT BIT,@DMMS_ID VARCHAR(20),@BRANCH_CREATE VARCHAR(20),@BRANCH_HS VARCHAR(20),@DEP_CREATE VARCHAR(15)
1672
		SET @BRANCH_HS= (SELECT TOP 1 BRANCH_ID FROM dbo.CM_BRANCH WHERE BRANCH_TYPE='HS')
1673
		SET @LIMIT_VALUE=(SELECT LIMIT_VALUE FROM dbo.TL_SYSROLE_LIMIT WHERE ROLE_ID='GDDV' AND LIMIT_TYPE='PYC_DVMC')
1674
	
1675
		SET @TOTAL_AMT=(SELECT TOTAL_AMT FROM dbo.TR_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID)
1676

    
1677
		SET @CURR_PROCESS = (SELECT PROCESS_ID FROM dbo.TR_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID)
1678

    
1679
		UPDATE  dbo.TR_REQUEST_DOC SET AUTH_STATUS='A',REQ_TYPE=0, CHECKER_ID=@p_CHECKER_ID,APPROVE_DT=CAST(@p_APPROVE_DT AS DATE),BRANCH_DVMS=BRANCH_CREATE, PROCESS_ID='DMMS' WHERE REQ_ID=@p_REQ_ID
1680

    
1681
	--	SET @IS_NEXT=(SELECT dbo.FN_CHECK_LIMIT_TR_REQ(@p_REQ_ID,'GDDV'))
1682

    
1683
		SET @BRANCH_CREATE=(SELECT BRANCH_CREATE FROM dbo.TR_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID)
1684
		SET @DEP_CREATE=(SELECT DEP_CREATE FROM dbo.TR_REQUEST_DOC WHERE REQ_ID=@p_REQ_ID)
1685

    
1686
		IF(@BRANCH_CREATE_TYPE='PGD')
1687
			SET @BRANCH_CREATE=(SELECT FATHER_ID  FROM dbo.CM_BRANCH WHERE BRANCH_ID=@BRANCH_CREATE)
1688

    
1689
	IF(EXISTS(	SELECT RD.REQDT_ID FROM dbo.TR_REQUEST_DOC_DT RD 
1690
		LEFT JOIN dbo.SYS_HH_GROUP_LIMIT HGL ON RD.HANGHOA_ID=HGL.HH_ID
1691
		LEFT JOIN dbo.SYS_GROUP_LIMIT GL ON GL.GROUP_ID=HGL.GROUP_LIMIT_ID
1692
		WHERE GL.IS_HO=1 AND RD.REQ_DOC_ID=@p_REQ_ID)  OR @BRANCH_CREATE=@BRANCH_HS)
1693
		BEGIN
1694
			IF(@TOTAL_AMT<=@LIMIT_VALUE AND NOT EXISTS(SELECT DVDM_ID FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_REQ_ID
1695
						GROUP BY DVDM_ID HAVING COUNT(REQDT_ID)>1))
1696
			BEGIN
1697
				SET @DMMS_ID= (SELECT DISTINCT DVDM_ID FROM dbo.TR_REQUEST_DOC_DT WHERE REQ_DOC_ID=@p_REQ_ID)
1698
				UPDATE dbo.TR_REQUEST_DOC SET BRANCH_DVMS=@BRANCH_HS,REQ_TYPE=2 WHERE REQ_ID=@p_REQ_ID
1699
			END
1700
			ELSE
1701
			BEGIN
1702
				SET @DMMS_ID= (SELECT DMMS_ID FROM dbo.CM_DMMS WHERE BRANCH_ID=@BRANCH_HS)
1703
				UPDATE dbo.TR_REQUEST_DOC SET BRANCH_DVMS=@BRANCH_HS,DMMS_ID=@DMMS_ID,REQ_TYPE=1 WHERE REQ_ID=@p_REQ_ID
1704
			END
1705
		END
1706
		ELSE
1707
		BEGIN
1708
			IF(@TOTAL_AMT<=@LIMIT_VALUE)
1709
			BEGIN
1710
				SET @DMMS_ID= (SELECT DMMS_ID FROM dbo.CM_DMMS WHERE BRANCH_ID=@BRANCH_CREATE)
1711
				UPDATE dbo.TR_REQUEST_DOC SET BRANCH_DVMS=@BRANCH_CREATE,DMMS_ID=@DMMS_ID,REQ_TYPE=0 WHERE REQ_ID=@p_REQ_ID
1712
			END
1713
			ELSE
1714
			BEGIN
1715
				SET @DMMS_ID= (SELECT DMMS_ID FROM dbo.CM_DMMS WHERE BRANCH_ID=@BRANCH_HS)
1716
				UPDATE dbo.TR_REQUEST_DOC SET BRANCH_DVMS=@BRANCH_HS,DMMS_ID=@DMMS_ID,REQ_TYPE=1 WHERE REQ_ID=@p_REQ_ID
1717
			END
1718
		END
1719

    
1720

    
1721
		INSERT INTO dbo.PL_REQUEST_PROCESS
1722
		(
1723
			REQ_ID,
1724
			PROCESS_ID,
1725
			STATUS,
1726
			ROLE_USER,
1727
			BRANCH_ID,
1728
			CHECKER_ID,
1729
			APPROVE_DT,
1730
			PARENT_PROCESS_ID,
1731
			IS_LEAF,
1732
			COST_ID,
1733
			DVDM_ID,
1734
			NOTES,
1735
			IS_HAS_CHILD,
1736
			DEP_ID
1737
		)
1738
		VALUES
1739
		(   @p_REQ_ID,        -- REQ_ID - varchar(15)
1740
			'APPNEW',        -- PROCESS_ID - varchar(10)
1741
			'P',        -- STATUS - varchar(5)
1742
			'GDDV',        -- ROLE_USER - varchar(50)
1743
			@BRANCH_CREATE,        -- BRANCH_ID - varchar(15)
1744
			@p_CHECKER_ID,        -- CHECKER_ID - varchar(15)
1745
			GETDATE(), -- APPROVE_DT - datetime
1746
			'',        -- PARENT_PROCESS_ID - varchar(10)
1747
			'',        -- IS_LEAF - varchar(1)
1748
			'',        -- COST_ID - varchar(15)
1749
			'',        -- DVDM_ID - varchar(15)
1750
			N'Trưởng đơn vị phê duyệt',       -- NOTES - nvarchar(500)
1751
			0 ,      -- IS_HAS_CHILD - bit
1752
			@DEP_CREATE
1753
			)
1754

    
1755
			INSERT INTO dbo.PL_REQUEST_PROCESS
1756
		(
1757
			REQ_ID,
1758
			PROCESS_ID,
1759
			STATUS,
1760
			ROLE_USER,
1761
			BRANCH_ID,
1762
			CHECKER_ID,
1763
			APPROVE_DT,
1764
			PARENT_PROCESS_ID,
1765
			IS_LEAF,
1766
			COST_ID,
1767
			DVDM_ID,
1768
			NOTES,
1769
			IS_HAS_CHILD
1770
		)
1771
		VALUES
1772
		(   @p_REQ_ID,        -- REQ_ID - varchar(15)
1773
			'DMMS',        -- PROCESS_ID - varchar(10)
1774
			'C',        -- STATUS - varchar(5)
1775
			'GDDV',        -- ROLE_USER - varchar(50)
1776
			'',        -- BRANCH_ID - varchar(15)
1777
			'',        -- CHECKER_ID - varchar(15)
1778
			GETDATE(), -- APPROVE_DT - datetime
1779
			'APPNEW',        -- PARENT_PROCESS_ID - varchar(10)
1780
			'',        -- IS_LEAF - varchar(1)
1781
			'',        -- COST_ID - varchar(15)
1782
			'',        -- DVDM_ID - varchar(15)
1783
			N'Chờ đầu mối mua sắm xử lý',       -- NOTES - nvarchar(500)
1784
			1       -- IS_HAS_CHILD - bit
1785
		 )
1786

    
1787
		INSERT INTO dbo.PL_PROCESS
1788
		(
1789
			REQ_ID,
1790
			PROCESS_ID,
1791
			CHECKER_ID,
1792
			APPROVE_DT,
1793
			PROCESS_DESC,NOTES
1794
		)
1795
		VALUES
1796
		(   @p_REQ_ID,        -- REQ_ID - varchar(15)
1797
			'APPNEW',        -- PROCESS_ID - varchar(10)
1798
			@p_CHECKER_ID,        -- CHECKER_ID - varchar(15)
1799
			@p_APPROVE_DT , -- APPROVE_DT - datetime
1800
			@p_PROCESS_DES,
1801
			 N'Trưởng đơn vị phê duyệt'        -- PROCESS_DESC - nvarchar(1000)
1802
		)
1803
	END
1804
	IF @@Error <> 0 GOTO ABORT
1805
			
1806
COMMIT TRANSACTION
1807
IF(EXISTS(SELECT * FROM TR_REQUEST_DOC WHERE AUTH_STATUS ='A' AND REQ_ID =@p_REQ_ID))
1808
BEGIN
1809
	SELECT '0' as Result, '' ErrorDesc
1810
	RETURN '0'
1811
END
1812
ELSE
1813
BEGIN
1814
	SELECT '4' as 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' đã được đợi cấp phê duyệt trung gian xác nhận thành công. Vui lòng đợi trưởng đơn vị phê duyệt' ErrorDesc
1815
	RETURN '4'
1816
END
1817
ABORT:
1818
BEGIN
1819
		PRINT 'ERROR'
1820
		ROLLBACK TRANSACTION
1821
		SELECT '-1' as Result, '' ErrorDesc
1822
		RETURN '-1'
1823
End
1824

    
1825

    
1826

    
1827

    
1828

    
1829

    
1830
GO
1831
IF @@ERROR <> 0 SET NOEXEC ON
1832
GO
1833
COMMIT TRANSACTION
1834
GO
1835
IF @@ERROR <> 0 SET NOEXEC ON
1836
GO
1837
-- This statement writes to the SQL Server Log so SQL Monitor can show this deployment.
1838
IF HAS_PERMS_BY_NAME(N'sys.xp_logevent', N'OBJECT', N'EXECUTE') = 1
1839
BEGIN
1840
    DECLARE @databaseName AS nvarchar(2048), @eventMessage AS nvarchar(2048)
1841
    SET @databaseName = REPLACE(REPLACE(DB_NAME(), N'\', N'\\'), N'"', N'\"')
1842
    SET @eventMessage = N'Redgate SQL Compare: { "deployment": { "description": "Redgate SQL Compare deployed to ' + @databaseName + N'", "database": "' + @databaseName + N'" }}'
1843
    EXECUTE sys.xp_logevent 55000, @eventMessage
1844
END
1845
GO
1846
DECLARE @Success AS BIT
1847
SET @Success = 1
1848
SET NOEXEC OFF
1849
IF (@Success = 1) PRINT 'The database update succeeded'
1850
ELSE BEGIN
1851
	IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION
1852
	PRINT 'The database update failed'
1853
END
1854
GO