Project

General

Profile

2.0 CẬP NHẬT SCHEMA.txt

Luc Tran Van, 08/17/2020 06:06 AM

 
1

    
2
ALTER PROCEDURE [dbo].[PL_IMPORT_App]
3
    @P_IMPORT_ID VARCHAR(15),
4
    @P_AUTH_STATUS VARCHAR(1),
5
    @P_CHECKER_ID VARCHAR(12),
6
    @P_APPROVE_DT DATETIME = NULL
7
AS
8

    
9

    
10
BEGIN TRANSACTION;
11

    
12
DECLARE @IS_UPDATE BIT 
13

    
14

    
15
SET @IS_UPDATE = (SELECT IS_UPDATE FROM dbo.PL_IMPORT WHERE IMPORT_ID=@P_IMPORT_ID )
16

    
17

    
18
IF(@IS_UPDATE=0)
19
BEGIN
20
IF(EXISTS(
21
SELECT DT.TRADE_ID FROM dbo.PL_MASTER PM 
22
LEFT JOIN dbo.PL_TRADEDETAIL DT ON PM.PLAN_ID=DT.PLAN_ID
23
WHERE EXISTS(
24
	SELECT Tmp.GOOD_ID FROM PL_IMPORT_DT Tmp WHERE (Tmp.IMP_YEAR=PM.YEAR AND Tmp.PLAN_TYPE_ID=PM.PLAN_TYPE_ID 
25
									AND Tmp.COST_ID=PM.COST_ID AND Tmp.BRANCH_ID=PM.BRANCH_ID 
26
									AND Tmp.DEP_ID=PM.DEPT_ID AND Tmp.GOOD_ID=DT.GOODS_ID) AND( (Tmp.QTY < ISNULL(DT.QUANTITY_EXE,0) AND  ISNULL(DT.QUANTITY_EXE,0) >0) OR (Tmp.TOTAL_AMT< ISNULL(DT.AMT_EXE,0) AND ISNULL(DT.AMT_EXE,0) >0) )
27
 ) OR (NOT EXISTS(SELECT Tmp.GOOD_ID FROM PL_IMPORT_DT Tmp WHERE (Tmp.IMP_YEAR=PM.YEAR AND Tmp.PLAN_TYPE_ID=PM.PLAN_TYPE_ID 
28
									AND Tmp.COST_ID=PM.COST_ID AND Tmp.BRANCH_ID=PM.BRANCH_ID 
29
									AND Tmp.DEP_ID=PM.DEPT_ID AND Tmp.GOOD_ID=DT.GOODS_ID) ) AND( ISNULL(DT.QUANTITY_EXE,0) > 0 OR ISNULL(DT.AMT_EXE,0) >0)
30
)))
31
BEGIN
32

    
33
		ROLLBACK TRANSACTION
34
		SELECT '-1' as Result, '' IMPORT_ID, N'Hạn mục chỉnh sửa đã sử dụng vượt hạn mức chỉnh sửa' ErrorDesc
35
		RETURN '-1'
36
END
37
END
38
UPDATE dbo.PL_IMPORT_DT  SET PLAN_ID=(SELECT PL.PLAN_ID FROM dbo.PL_MASTER PL 
39
										WHERE PL.PLAN_TYPE_ID=PL_IMPORT_DT.PLAN_TYPE_ID AND
40
										PL.COST_ID=PL_IMPORT_DT.COST_ID AND 
41
										PL.BRANCH_ID=PL_IMPORT_DT.BRANCH_ID AND 
42
										PL.DEPT_ID=PL_IMPORT_DT.DEP_ID AND PL.YEAR=PL_IMPORT_DT.IMP_YEAR)
43
WHERE IMPORT_ID=@P_IMPORT_ID
44

    
45
UPDATE dbo.PL_IMPORT_DT  SET TRADE_ID=(SELECT PL.TRADE_ID FROM dbo.PL_TRADEDETAIL PL 
46
										WHERE PL.PLAN_ID=PL_IMPORT_DT.PLAN_ID AND
47
										PL.GOODS_ID=PL_IMPORT_DT.GOOD_ID AND dbo.PL_IMPORT_DT.REF_CODE =(SELECT REF_CODE FROM dbo.PL_TRADE_REF WHERE PL.TRADE_ID=PL_TRADE_REF.TRADE_ID))
48
WHERE IMPORT_ID=@P_IMPORT_ID
49

    
50

    
51

    
52
--VALIDATE dữ liệu
53

    
54
DECLARE @IMPORT_YEAR VARCHAR(4)
55

    
56
SET @IMPORT_YEAR=(SELECT CAST(IMP_YEAR AS VARCHAR(4)) FROM dbo.PL_IMPORT WHERE IMPORT_ID=@P_IMPORT_ID)
57
-- Delete dữ liệu ko có trong import hiện tại.
58
IF(@IS_UPDATE=0)
59
BEGIN
60
DELETE FROM dbo.PL_TRADEDETAIL WHERE  NOT EXISTS(SELECT DT.IMP_DT_ID FROM dbo.PL_IMPORT_DT DT WHERE DT.TRADE_ID=PL_TRADEDETAIL.TRADE_ID) AND PL_TRADEDETAIL.PLAN_ID IN (SELECT PLAN_ID FROM dbo.PL_MASTER WHERE YEAR=@IMPORT_YEAR)
61

    
62
DELETE FROM dbo.PL_MASTER WHERE YEAR=@IMPORT_YEAR AND  NOT EXISTS(SELECT DT.IMP_DT_ID FROM dbo.PL_IMPORT_DT DT WHERE DT.PLAN_ID=PL_MASTER.PLAN_ID)
63
END
64

    
65

    
66

    
67

    
68
DECLARE @PLAN_CODE VARCHAR(20),
69
		@PLAN_NAME NVARCHAR(200),
70
		@YEAR INT,
71
        @PLAN_TYPE_ID VARCHAR(15),
72
        @COST_ID VARCHAR(15),
73
        @BRANCH_ID VARCHAR(15),
74
		@BRANCH_CODE VARCHAR(15),
75
        @DEP_ID VARCHAR(15),
76
		@DEP_CODE VARCHAR(15),
77
        @GOOD_ID VARCHAR(15),
78
        @QTY INT,
79
        @TOTAL_AMT NUMERIC(18, 2),
80
        @NOTES NVARCHAR(1000),
81
		@IMP_AMT NUMERIC(18, 2),
82
		@IMP_QTY NUMERIC(18, 0),
83
		@MARKER_ID VARCHAR(15),
84
		@EDIT_DT DATETIME,
85
		@PLAN_ID VARCHAR(15),
86
		@TRADE_ID VARCHAR(15),
87
		@REF_CODE VARCHAR(20),
88
		@REF_NAME NVARCHAR(200)
89

    
90

    
91

    
92
DECLARE Plan_Master CURSOR FOR
93
SELECT IM.PLAN_CODE,IM.IMP_NAME,IM.IMP_YEAR,IM.EDITER_ID,IM.EDIT_DT,SUM(ISNULL(IMDT.QTY,0)) AS QTY,SUM(ISNULL(IMDT.TOTAL_AMT,0)) AS AMT, IMDT.PLAN_TYPE_ID, IMDT.COST_ID,IMDT.BRANCH_ID,IMDT.DEP_ID,
94
IMDT.PLAN_ID,IMDT.BRANCH_CODE,IMDT.DEP_CODE
95
FROM dbo.PL_IMPORT IM
96
LEFT JOIN dbo.PL_IMPORT_DT IMDT ON IM.IMPORT_ID=IMDT.IMPORT_ID
97
WHERE IM.IMPORT_ID = @P_IMPORT_ID
98
GROUP BY IM.PLAN_CODE,IM.IMP_NAME,IM.IMP_YEAR,IM.EDITER_ID,IM.EDIT_DT,IMDT.PLAN_TYPE_ID,IMDT.COST_ID,IMDT.BRANCH_ID,IMDT.DEP_ID,IMDT.PLAN_ID,IMDT.BRANCH_CODE,IMDT.DEP_CODE
99
OPEN Plan_Master;
100

    
101
	FETCH NEXT FROM Plan_Master INTO @PLAN_CODE,@PLAN_NAME,@YEAR,@MARKER_ID,@EDIT_DT,@IMP_QTY,@IMP_AMT, @PLAN_TYPE_ID,@COST_ID,@BRANCH_ID,@DEP_ID,@PLAN_ID,@BRANCH_CODE,@DEP_CODE
102
	
103
	WHILE @@FETCH_STATUS = 0	
104
	BEGIN	
105

    
106
		SET @PLAN_NAME=N'KẾ HOẠCH NGÂN SÁCH '+ CAST( @YEAR AS VARCHAR(10))
107
		SET @PLAN_CODE= @DEP_CODE+(SELECT RIGHT(CAST( @YEAR AS VARCHAR(10)),2))
108

    
109
		IF(@PLAN_ID IS NULL OR @PLAN_ID='' )
110
		BEGIN
111
			EXEC SYS_CodeMasters_Gen 'PL_MASTER', @PLAN_ID out
112
			IF @PLAN_ID='' OR @PLAN_ID IS NULL GOTO ABORT	
113

    
114
			
115
		
116
			
117
			INSERT INTO dbo.PL_MASTER
118
			(
119
				PLAN_ID, PLAN_CODE,PLAN_NAME,BRANCH_ID,DEPT_ID,EFFECT_DT,PLAN_TYPE,TOTAL_AMT,APPROVE_VALUE, 
120
				VERSON,YEAR,STATUS,NOTES,RECORD_STATUS, MAKER_ID,CREATE_DT,AUTH_STATUS,CHECKER_ID,APPROVE_DT,PLAN_TYPE_ID,COST_ID)
121
			VALUES
122
			(   @PLAN_ID,@PLAN_CODE,@PLAN_NAME,@BRANCH_ID,@DEP_ID,GETDATE(),'',@IMP_AMT, @IMP_AMT,      
123
				1,@YEAR,'1', N'','1', @MARKER_ID,@EDIT_DT,@P_AUTH_STATUS, @P_CHECKER_ID, CAST(@P_APPROVE_DT AS DATE), @PLAN_TYPE_ID,@COST_ID  
124
			 )
125
		END
126
		ELSE
127
		BEGIN
128
		 UPDATE dbo.PL_MASTER SET MAKER_ID=@MARKER_ID,CREATE_DT=@EDIT_DT,AUTH_STATUS=@P_AUTH_STATUS,CHECKER_ID=@P_CHECKER_ID,APPROVE_DT=CAST(@P_APPROVE_DT AS DATE)
129
		 ,TOTAL_AMT=@IMP_AMT,APPROVE_VALUE=@IMP_AMT,VERSON=VERSON+1,PLAN_CODE=@PLAN_CODE,PLAN_NAME=@PLAN_NAME WHERE PLAN_ID=@PLAN_ID
130
		END
131
		
132

    
133

    
134
		 DECLARE Plan_Detail CURSOR FOR
135
		 SELECT GOOD_ID,QTY,TOTAL_AMT,NOTES,TRADE_ID,REF_CODE,REF_NAME FROM dbo.PL_IMPORT_DT
136
		 WHERE IMPORT_ID = @P_IMPORT_ID AND PLAN_TYPE_ID=@PLAN_TYPE_ID AND COST_ID=@COST_ID AND BRANCH_ID=@BRANCH_ID AND DEP_ID=@DEP_ID
137
		 OPEN Plan_Detail
138
			FETCH NEXT FROM Plan_Detail INTO @GOOD_ID,@QTY,@TOTAL_AMT,@NOTES,@TRADE_ID,@REF_CODE,@REF_NAME
139
			WHILE @@FETCH_STATUS = 0	
140
			BEGIN
141
			IF(@TRADE_ID IS NULL OR @TRADE_ID='')
142
			BEGIN
143
			EXEC SYS_CodeMasters_Gen 'PL_TRADEDETAIL', @TRADE_ID out
144
			IF @TRADE_ID='' OR @TRADE_ID IS NULL GOTO ABORT	
145
			
146
			DELETE FROM dbo.PL_TRADE_REF WHERE TRADE_ID=@TRADE_ID
147

    
148
			INSERT INTO dbo.PL_TRADEDETAIL
149
			(
150
			    TRADE_ID,
151
			    PLAN_ID,
152
			    GOODS_ID,
153
			    QUANTITY,
154
			    AMT_APP,
155
			    NOTES,
156
			    RECORD_STATUS,
157
			    MAKER_ID,
158
			    CREATE_DT,
159
			    AUTH_STATUS,
160
			    CHECKER_ID,
161
			    APPROVE_DT
162
			)
163
			VALUES
164
			(   @TRADE_ID,        -- TRADE_ID - varchar(15)
165
			    @PLAN_ID,        -- PLAN_ID - varchar(15)
166
			    @GOOD_ID,        -- GOODS_ID - varchar(15)
167
			    @QTY,      -- QUANTITY - decimal(18, 0)
168
			    @TOTAL_AMT,      -- PRICE - decimal(18, 0)			  
169
			   @NOTES,       -- NOTES - nvarchar(1000)
170
			    '1',        -- RECORD_STATUS - varchar(1)
171
			    @MARKER_ID,        -- MAKER_ID - varchar(12)
172
			   CAST( @EDIT_DT AS DATE), -- CREATE_DT - datetime
173
			    @P_AUTH_STATUS,        -- AUTH_STATUS - varchar(50)
174
			   @P_CHECKER_ID,        -- CHECKER_ID - varchar(12)
175
			  CAST( @P_APPROVE_DT AS DATE)  -- APPROVE_DT - datetime
176
			    )	
177
			END
178

    
179
			ELSE
180
			BEGIN
181
				UPDATE dbo.PL_TRADEDETAIL SET
182
				 QUANTITY=@QTY,
183
				 AMT_APP=@TOTAL_AMT,
184
				 NOTES=@NOTES,
185
				 MAKER_ID=@MARKER_ID,
186
				 CREATE_DT=CAST(@EDIT_DT AS DATE),
187
				 AUTH_STATUS=@P_AUTH_STATUS,
188
				 CHECKER_ID= @P_CHECKER_ID,
189
				 APPROVE_DT=CAST(@P_APPROVE_DT AS DATE)
190
				WHERE TRADE_ID=@TRADE_ID
191
			END
192

    
193
			INSERT INTO dbo.PL_TRADE_REF
194
			(
195
			    TRADE_ID,
196
			    REF_CODE,
197
			    REF_NAME
198
			)
199
			VALUES
200
			(   @TRADE_ID, -- TRADE_ID - varchar(15)
201
			    @REF_CODE, -- REF_CODE - varchar(50)
202
			    @REF_NAME -- REF_NAME - nvarchar(500)
203
			    )
204
			
205

    
206
			FETCH NEXT FROM Plan_Detail INTO @GOOD_ID,@QTY,@TOTAL_AMT,@NOTES,@TRADE_ID,@REF_CODE,@REF_NAME
207
			END
208
			CLOSE Plan_Detail
209
			DEALLOCATE Plan_Detail
210
		FETCH NEXT FROM Plan_Master INTO @PLAN_CODE,@PLAN_NAME,@YEAR,@MARKER_ID,@EDIT_DT,@IMP_QTY,@IMP_AMT, @PLAN_TYPE_ID,@COST_ID,@BRANCH_ID,@DEP_ID,@PLAN_ID,@BRANCH_CODE,@DEP_CODE
211
	END
212
	CLOSE Plan_Master
213
	DEALLOCATE Plan_Master
214

    
215
UPDATE dbo.PL_IMPORT
216
SET AUTH_STATUS = @P_AUTH_STATUS,
217
    CHECKER_ID = @P_CHECKER_ID,
218
    APPROVE_DT = CAST( @P_APPROVE_DT AS DATE)
219
WHERE IMPORT_ID = @P_IMPORT_ID;
220

    
221
UPDATE dbo.PL_IMPORT_LOG SET AUTH_STATUS = @P_AUTH_STATUS,
222
    CHECKER_ID = @P_CHECKER_ID,
223
    APPROVE_DT = CAST( @P_APPROVE_DT AS DATE)
224
WHERE IMP_ID = @P_IMPORT_ID AND IMP_LOG_CODE= (SELECT TOP (1) IMP_LOG_CODE FROM dbo.PL_IMPORT_LOG WHERE IMP_ID=@P_IMPORT_ID ORDER BY IMP_LOG_ID DESC)
225

    
226

    
227
UPDATE dbo.PL_TRADEDETAIL SET PRICE = AMT_APP/ QUANTITY WHERE QUANTITY <> 0 OR QUANTITY IS NULL
228
UPDATE dbo.PL_TRADEDETAIL SET PRICE = AMT_APP WHERE QUANTITY = 0
229

    
230
UPDATE dbo.LIMIT_ACCUMULATE SET MAX_AMT=ISNULL(( 
231
SELECT TEMP.AMT_APP FROM (SELECT CD.DVDM_ID,SUM(ISNULL(PT.AMT_APP,0)) AS AMT_APP FROM dbo.CM_DVDM CD 
232
LEFT JOIN dbo.CM_GOOD_DVDM CGD ON CGD.KHOI_ID=CD.DVDM_ID
233
LEFT JOIN dbo.PL_TRADEDETAIL PT ON PT.GOODS_ID=CGD.GD_ID
234
WHERE CD.IS_KHOI=1 AND PT.PLAN_ID IN  (SELECT PLAN_ID FROM dbo.PL_MASTER WHERE YEAR=@IMPORT_YEAR)
235
GROUP BY CD.DVDM_ID
236
)TEMP WHERE TEMP.DVDM_ID=LIMIT_ACCUMULATE.DVDM_ID
237
),0) * (SELECT LIMIT_PERCENT FROM dbo.TL_SYSROLE_LIMIT WHERE TL_SYSROLE_LIMIT.ROLE_ID=LIMIT_ACCUMULATE.ROLE_ID AND LIMIT_TYPE='DCNS')/100
238

    
239

    
240

    
241
IF @@Error <> 0
242
    GOTO ABORT;
243
COMMIT TRANSACTION;
244
SELECT '0' AS Result,
245
       '' ErrorDesc;
246
RETURN '0';
247
ABORT:
248
BEGIN
249
    ROLLBACK TRANSACTION;
250
    SELECT '-1' AS Result,
251
           '' ErrorDesc;
252
    RETURN '-1';
253
END;
254
¿
255
ALTER PROCEDURE [dbo].[PL_IMPORT_Ins]
256
@p_PLAN_CODE VARCHAR(20),
257
@p_IMP_YEAR	INT  = NULL,
258
@p_IMP_NAME NVARCHAR(200),
259
@p_FILE_NAME	NVARCHAR(200)  = NULL,
260
@p_TOTAL_QTY	NUMERIC(18,0)  = NULL,
261
@p_TOTAL_ATM	NUMERIC(18,0)  = NULL,
262
@p_NOTES	nvarchar(1000)  = NULL,
263
@p_RECORD_STATUS	varchar(1)  = NULL,
264
@p_MAKER_ID	varchar(20)  = NULL,
265
@p_CREATE_DT	DATETIME = NULL,
266
@p_AUTH_STATUS	varchar(50)  = NULL,
267
@p_CHECKER_ID	varchar(20)  = NULL,
268
@p_APPROVE_DT	DATETIME = NULL,
269
@p_XMLData XML=NULL
270
AS
271
BEGIN TRANSACTION
272

    
273
DECLARE @TableTmp TABLE(
274
		IMP_YEAR VARCHAR(4),
275
		PLAN_TYPE_ID VARCHAR(15),
276
		PLAN_TYPE_CODE VARCHAR(15),
277
		PLAN_TYPE_NAME NVARCHAR(200), 
278
		COST_ID VARCHAR(15),
279
		COST_CODE VARCHAR(15),
280
		COST_NAME NVARCHAR(200),
281
		BRANCH_ID VARCHAR(15),
282
		BRANCH_CODE VARCHAR(15),
283
		BRANCH_NAME NVARCHAR(200),
284
		DEP_ID	varchar(15),
285
		DEP_CODE VARCHAR(15),
286
		DEP_NAME NVARCHAR(200),
287
		REF_ID INT,
288
		REF_CODE VARCHAR(20),
289
		REF_NAME NVARCHAR(200),
290
		GOOD_ID varchar(15),
291
		GOOD_CODE VARCHAR(15),
292
		GOOD_NAME NVARCHAR(200),
293
		QTY INT,
294
		TOTAL_AMT NUMERIC(18,2),
295
		NOTES NVARCHAR(1000)
296
);
297
	Declare @hdoc INT
298
	Exec sp_xml_preparedocument @hdoc Output, @p_XMLData	
299
INSERT INTO @TableTmp
300
 SELECT *
301
	FROM OPENXML(@hDoc,'/Root/PLIMPORT',2)
302
	WITH 
303
	(
304
	    IMP_YEAR VARCHAR(4),
305
		PLAN_TYPE_ID VARCHAR(15),
306
		PLAN_TYPE_CODE VARCHAR(15),
307
		PLAN_TYPE_NAME NVARCHAR(200), 
308
		COST_ID VARCHAR(15),
309
		COST_CODE VARCHAR(15),
310
		COST_NAME NVARCHAR(200),
311
		BRANCH_ID VARCHAR(15),
312
		BRANCH_CODE VARCHAR(15),
313
		BRANCH_NAME NVARCHAR(200),
314
		DEP_ID	varchar(15),
315
		DEP_CODE VARCHAR(15),
316
		DEP_NAME NVARCHAR(200),
317
		REF_ID INT,
318
		REF_CODE VARCHAR(20),
319
		REF_NAME NVARCHAR(200),
320
		GOOD_ID varchar(15),
321
		GOOD_CODE VARCHAR(15),
322
		GOOD_NAME NVARCHAR(200),
323
		QTY INT,
324
		TOTAL_AMT NUMERIC(18,2),
325
		NOTES NVARCHAR(1000)
326
	)
327

    
328
--Update ID
329
UPDATE @TableTmp  SET BRANCH_ID=(SELECT TOP 1 BRANCH_ID FROM dbo.CM_BRANCH WHERE dbo.CM_BRANCH.BRANCH_CODE=[@TableTmp].BRANCH_CODE),
330
DEP_ID=(SELECT TOP 1 DEP_ID FROM dbo.CM_DEPARTMENT WHERE dbo.CM_DEPARTMENT.DEP_CODE=[@TableTmp].DEP_CODE),
331
COST_ID=(SELECT TOP 1 DVDM_ID FROM dbo.CM_DVDM WHERE dbo.CM_DVDM.DVDM_CODE=[@TableTmp].COST_CODE AND IS_DVDM=1 ),
332
PLAN_TYPE_ID=(SELECT TOP 1 PLAN_TYPE_ID FROM dbo.CM_PLAN_TYPE WHERE dbo.CM_PLAN_TYPE.PLAN_TYPE_CODE=[@TableTmp].PLAN_TYPE_CODE),
333
GOOD_ID=(SELECT TOP 1 GD_ID FROM dbo.CM_GOODS WHERE dbo.CM_GOODS.GD_CODE=[@TableTmp].GOOD_CODE)
334

    
335
DECLARE @Error NVARCHAR(MAX)
336
--- Validate dữ liệu
337
IF(EXISTS(SELECT BRANCH_ID FROM @TableTmp WHERE BRANCH_ID IS NULL OR BRANCH_ID=''))
338
BEGIN
339

    
340
SET @Error=(select STUFF( (select ';' + BRANCH_CODE from @TableTmp  WHERE BRANCH_ID IS NULL OR BRANCH_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))	
341
	
342

    
343
		ROLLBACK TRANSACTION
344
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã đơn vị chưa tồn tại trên hệ thống: '+ @Error ErrorDesc
345
		RETURN '-1'
346

    
347

    
348

    
349
END
350

    
351
IF(EXISTS(SELECT DEP_ID FROM @TableTmp WHERE DEP_ID IS NULL OR DEP_ID=''))
352
BEGIN
353

    
354
		
355
		SET @Error=(select STUFF( (select ';' + DEP_CODE from @TableTmp  WHERE DEP_ID IS NULL OR DEP_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
356

    
357
		ROLLBACK TRANSACTION
358
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã phòng ban chưa tồn tại trên hệ thống: '+@Error ErrorDesc
359
		RETURN '-1'
360
END
361

    
362
IF(EXISTS(SELECT COST_ID FROM @TableTmp WHERE (COST_ID IS NULL OR COST_ID='') AND COST_CODE IS NOT NULL AND COST_CODE <>''))
363
BEGIN
364

    
365
			SET @Error=(select STUFF( (select ';' + COST_CODE from @TableTmp  WHERE COST_ID IS NULL OR COST_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))	
366
		
367
		ROLLBACK TRANSACTION
368
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã đơn vị đầu mối chưa tồn tại trên hệ thống: '+@Error ErrorDesc
369
		RETURN '-1'
370
END
371

    
372
IF(EXISTS(SELECT PLAN_TYPE_ID FROM @TableTmp WHERE PLAN_TYPE_ID IS NULL OR PLAN_TYPE_ID=''))
373
BEGIN
374

    
375

    
376
		SET @Error=(select STUFF( (select ';' + PLAN_TYPE_CODE from @TableTmp  WHERE PLAN_TYPE_ID IS NULL OR PLAN_TYPE_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))	
377

    
378
		ROLLBACK TRANSACTION
379
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã loại ngân sách chưa tồn tại trên hệ thống: '+@Error ErrorDesc
380
		RETURN '-1'
381
END
382

    
383
IF(EXISTS(SELECT GOOD_ID FROM @TableTmp WHERE GOOD_ID IS NULL OR GOOD_ID=''))
384
BEGIN
385

    
386
		SET @Error=(select STUFF( (select ';' + GOOD_CODE from @TableTmp  WHERE GOOD_ID IS NULL OR GOOD_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))	
387

    
388
		ROLLBACK TRANSACTION
389
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã hạn mục chưa tồn tại trên hệ thống: '+@Error ErrorDesc
390
		RETURN '-1'
391
END
392

    
393

    
394
--Validate hạn mục
395
IF(EXISTS(SELECT * FROM dbo.PL_MASTER WHERE YEAR= CAST(@p_IMP_YEAR AS VARCHAR(4))))
396
IF(EXISTS(
397
SELECT DT.TRADE_ID FROM dbo.PL_MASTER PM 
398
LEFT JOIN dbo.PL_TRADEDETAIL DT ON PM.PLAN_ID=DT.PLAN_ID
399
WHERE EXISTS(
400
	SELECT Tmp.GOOD_ID FROM @TableTmp Tmp WHERE (Tmp.IMP_YEAR=PM.YEAR AND Tmp.PLAN_TYPE_ID=PM.PLAN_TYPE_ID 
401
									AND Tmp.COST_ID=PM.COST_ID AND Tmp.BRANCH_ID=PM.BRANCH_ID 
402
									AND Tmp.DEP_ID=PM.DEPT_ID AND Tmp.GOOD_ID=DT.GOODS_ID) AND( (Tmp.QTY < ISNULL(DT.QUANTITY_ETM,0) AND  ISNULL(DT.QUANTITY_ETM,0) >0) OR (Tmp.TOTAL_AMT< (ISNULL(DT.AMT_ETM,0) + ISNULL(DT.AMT_TF,0) - ISNULL(DT.AMT_RECEIVE_TF,0)) AND (ISNULL(DT.AMT_ETM,0) + ISNULL(DT.AMT_TF,0) - ISNULL(DT.AMT_RECEIVE_TF,0)) >0) )
403
 ) OR (NOT EXISTS(SELECT Tmp.GOOD_ID FROM @TableTmp Tmp WHERE (Tmp.IMP_YEAR=PM.YEAR AND Tmp.PLAN_TYPE_ID=PM.PLAN_TYPE_ID 
404
									AND Tmp.COST_ID=PM.COST_ID AND Tmp.BRANCH_ID=PM.BRANCH_ID 
405
									AND Tmp.DEP_ID=PM.DEPT_ID AND Tmp.GOOD_ID=DT.GOODS_ID) ) AND( ISNULL(DT.QUANTITY_ETM,0) > 0 OR (ISNULL(DT.AMT_ETM,0) + ISNULL(DT.AMT_TF,0) - ISNULL(DT.AMT_RECEIVE_TF,0)) >0)
406
)))
407
BEGIN
408

    
409
		ROLLBACK TRANSACTION
410
		SELECT '-1' as Result, '' IMPORT_ID, N'Hạn mục chỉnh sửa đã sử dụng vượt hạn mức chỉnh sửa' ErrorDesc
411
		RETURN '-1'
412
END
413

    
414
DECLARE @l_IMPORT_ID VARCHAR(15)
415
IF(EXISTS(SELECT IMPORT_ID FROM dbo.PL_IMPORT WHERE IMP_YEAR=@p_IMP_YEAR ))
416
BEGIN
417
	SET @l_IMPORT_ID=(SELECT IMPORT_ID FROM PL_IMPORT WHERE IMP_YEAR=@p_IMP_YEAR )
418
	DELETE FROM PL_IMPORT_DT WHERE IMPORT_ID=@l_IMPORT_ID
419
	UPDATE dbo.PL_IMPORT SET PLAN_CODE=@p_PLAN_CODE,IMP_NAME=@p_IMP_NAME,FILE_NAME=@p_FILE_NAME,IMP_YEAR=@p_IMP_YEAR,IMP_QTY=@p_TOTAL_QTY,
420
	IMP_ATM=@p_TOTAL_ATM,NOTES=@p_NOTES,EDITER_ID=@p_MAKER_ID,EDIT_DT= CAST(@p_CREATE_DT AS DATE),CHECKER_ID=@p_CHECKER_ID,APPROVE_DT=CAST(@p_APPROVE_DT AS DATE),AUTH_STATUS=@p_AUTH_STATUS,IS_UPDATE=0
421
	WHERE IMPORT_ID=@l_IMPORT_ID
422
END
423
ELSE
424
BEGIN
425
		EXEC SYS_CodeMasters_Gen 'PL_IMPORT', @l_IMPORT_ID out
426
		IF @l_IMPORT_ID='' OR @l_IMPORT_ID IS NULL GOTO ABORT
427

    
428
		INSERT INTO dbo.PL_IMPORT
429
		(
430
		    IMPORT_ID,
431
			PLAN_CODE,
432
		    IMP_NAME,
433
		    FILE_NAME,
434
		    IMP_YEAR,
435
		    IMP_QTY,
436
		    IMP_ATM,
437
		    NOTES,
438
		    RECORD_STATUS,
439
		    AUTH_STATUS,
440
		    MAKER_ID,
441
		    CREATE_DT,
442
		    EDITER_ID,
443
		    EDIT_DT,
444
		    CHECKER_ID,
445
		    APPROVE_DT,IS_UPDATE
446
		)
447
		VALUES
448
		(   @l_IMPORT_ID,        -- IMPORT_ID - varchar(20)
449
		    @p_PLAN_CODE,
450
			@p_IMP_NAME,       -- IMP_NAME - nvarchar(500)
451
		    @p_FILE_NAME,       -- FILE_NAME - nvarchar(200)
452
		    @p_IMP_YEAR,         -- IMP_YEAR - int
453
		    @p_TOTAL_QTY,      -- IMP_QTY - numeric(18, 0)
454
		    @p_TOTAL_ATM,      -- IMP_ATM - numeric(18, 2)
455
		    @p_NOTES,       -- NOTES - nvarchar(1000)
456
		    @p_RECORD_STATUS,        -- RECORD_STATUS - varchar(1)
457
		    @p_AUTH_STATUS,        -- AUTH_STATUS - varchar(1)
458
		    @p_MAKER_ID,        -- MAKER_ID - varchar(15)
459
		    @p_CREATE_DT, -- CREATE_DT - datetime
460
		    @p_MAKER_ID,        -- EDITER_ID - varchar(15)
461
		    CAST(@p_CREATE_DT AS DATE), -- EDIT_DT - datetime
462
		    @p_CHECKER_ID,        -- CHECKER_ID - varchar(15)
463
		    CAST(@p_APPROVE_DT AS DATE),0  -- APPROVE_DT - datetime
464
		    )
465
END
466

    
467

    
468
	DECLARE ImportDT CURSOR FOR
469
	SELECT IMP_YEAR,
470
           PLAN_TYPE_ID,
471
           PLAN_TYPE_CODE,
472
           PLAN_TYPE_NAME,
473
           COST_ID,
474
           COST_CODE,
475
           COST_NAME,
476
           BRANCH_ID,
477
           BRANCH_CODE,
478
           BRANCH_NAME,
479
           DEP_ID,
480
			DEP_CODE,
481
			DEP_NAME,
482
           GOOD_ID,
483
           GOOD_CODE,
484
           GOOD_NAME,
485
           QTY,
486
           TOTAL_AMT,
487
           NOTES,REF_CODE,REF_NAME FROM @TableTmp
488
	OPEN ImportDT
489

    
490

    
491

    
492

    
493
	DECLARE 
494
		@IMP_YEAR VARCHAR(4),
495
	    @PLAN_TYPE_ID VARCHAR(15),
496
		@PLAN_TYPE_CODE VARCHAR(15),
497
		@PLAN_TYPE_NAME NVARCHAR(200), 
498
		@COST_ID VARCHAR(15),
499
		@COST_CODE VARCHAR(15),
500
		@COST_NAME NVARCHAR(200),
501
		@BRANCH_ID VARCHAR(15),
502
		@BRANCH_CODE VARCHAR(15),
503
		@BRANCH_NAME NVARCHAR(200),
504
		@DEP_ID	varchar(15),
505
		@DEP_CODE VARCHAR(15),
506
		@DEP_NAME NVARCHAR(200),
507
		@REF_ID INT,
508
		@REF_CODE VARCHAR(20),
509
		@REF_NAME NVARCHAR(200),
510
		@GOOD_ID varchar(15),
511
		@GODD_CODE VARCHAR(15),
512
		@GOOD_NAME NVARCHAR(200),@QTY INT,@TOTAL_AMT NUMERIC(18,2),@NOTES NVARCHAR(1000)
513

    
514
		,@IMP_LOG_CODE VARCHAR(15)
515
		EXEC SYS_CodeMasters_Gen 'IMP_LOG_CODE', @IMP_LOG_CODE out
516
		IF @IMP_LOG_CODE='' OR @IMP_LOG_CODE IS NULL GOTO ABORT		
517

    
518
	FETCH NEXT FROM ImportDT INTO @IMP_YEAR, @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
519
	@BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,@QTY,@TOTAL_AMT,@NOTES,@REF_CODE,@REF_NAME
520
	
521
	WHILE @@FETCH_STATUS = 0	
522
	BEGIN			
523
		
524
	
525
			
526

    
527
		DECLARE @l_IMPORTDT_ID VARCHAR(20)
528
		EXEC SYS_CodeMasters_Gen 'IMPORT_DT', @l_IMPORTDT_ID out
529
		IF @l_IMPORTDT_ID='' OR @l_IMPORTDT_ID IS NULL GOTO ABORT		
530

    
531
		INSERT INTO dbo.PL_IMPORT_DT
532
		(
533
		    IMP_DT_ID,
534
		    IMPORT_ID,
535
		    PLAN_TYPE_ID,
536
			PLAN_TYPE_CODE,
537
			PLAN_TYPE_NAME,
538
		    COST_ID,
539
			COST_CODE,
540
			COST_NAME,
541
		    BRANCH_ID,
542
			BRANCH_CODE,
543
			BRANCH_NAME,
544
		    DEP_ID,
545
			DEP_CODE,
546
			DEP_NAME,
547
			REF_CODE,
548
			REF_NAME,
549
		    GOOD_ID,
550
			GOOD_CODE,
551
			GOOD_NAME,
552
		    QTY,
553
		    TOTAL_AMT,
554
		    NOTES,
555
			IMP_YEAR
556
		)
557
		VALUES
558
		(   @l_IMPORTDT_ID,   -- IMP_DT_ID - varchar(20)
559
		    @l_IMPORT_ID,   -- IMPORT_ID - varchar(20)
560
		   @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
561
	        @BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,@QTY,@TOTAL_AMT,@NOTES,@IMP_YEAR
562
		  )
563
		  
564
		  INSERT INTO dbo.PL_IMPORT_LOG
565
		  (
566
		     IMP_LOG_CODE,
567
		      IMP_ID,
568
		      FILE_NAME,
569
		      IMP_YEAR,
570
		      NOTES,
571
		      RECORD_STATUS,
572
		      AUTH_STATUS,
573
		      MAKER_ID,
574
		      CREATE_DT,
575
		      EDITER_ID,
576
		      EDIT_DT,
577
		      CHECKER_ID,
578
		      APPROVE_DT,
579
			 PLAN_TYPE_ID,
580
			PLAN_TYPE_CODE,
581
			PLAN_TYPE_NAME,
582
		    COST_ID,
583
			COST_CODE,
584
			COST_NAME,
585
		    BRANCH_ID,
586
			BRANCH_CODE,
587
			BRANCH_NAME,
588
		    DEP_ID,
589
			DEP_CODE,
590
			DEP_NAME,
591
			REF_CODE,
592
			REF_NAME,
593
		    GOOD_ID,
594
			GOOD_CODE,
595
			GOOD_NAME,
596
		      QTY,
597
		      TOTAL_AMT
598
		  )
599
		  VALUES
600
		  (   
601
				@IMP_LOG_CODE,
602
		      @l_IMPORT_ID,        -- IMP_ID_OLD - varchar(20)
603
		      @p_FILE_NAME,       -- FILE_NAME - nvarchar(200)
604
		      @p_IMP_YEAR,         -- IMP_YEAR - int
605
		      @p_NOTES,       -- NOTES - nvarchar(1000)
606
		      @p_RECORD_STATUS,        -- RECORD_STATUS - varchar(1)
607
		      @p_AUTH_STATUS,        -- AUTH_STATUS - varchar(1)
608
		      @p_MAKER_ID,        -- MAKER_ID - varchar(15)
609
		      @p_CREATE_DT, -- CREATE_DT - datetime
610
			  @p_MAKER_ID,        -- EDITER_ID - varchar(15)
611
		      CAST(@p_CREATE_DT AS DATE), -- EDIT_DT - datetime
612
		      @p_CHECKER_ID,        -- CHECKER_ID - varchar(15)
613
		      CAST(@p_APPROVE_DT AS DATE),  -- APPROVE_DT - datetime
614
		      @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
615
	        @BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,
616
		      @QTY,    -- QTY - int
617
		      @TOTAL_AMT -- TOTAL_AMT - numeric(18, 2)
618
		      )
619
		  	
620
		
621
		IF @@Error <> 0 GOTO ABORT	
622
	
623
		FETCH NEXT FROM ImportDT INTO  @IMP_YEAR, @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
624
	@BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,@QTY,@TOTAL_AMT,@NOTES,@REF_CODE,@REF_NAME
625
	
626
	END
627
	CLOSE ImportDT
628
	DEALLOCATE ImportDT
629
	SET @p_TOTAL_ATM=(SELECT SUM(ISNULL(TOTAL_AMT,0)) FROM dbo.PL_IMPORT_DT WHERE IMPORT_ID=@l_IMPORT_ID)
630
	SELECT @p_TOTAL_QTY=(SELECT SUM(ISNULL(QTY,0)) FROM dbo.PL_IMPORT_DT WHERE IMPORT_ID=@l_IMPORT_ID)
631

    
632
	UPDATE dbo.PL_IMPORT SET IMP_QTY=@p_TOTAL_QTY,IMP_ATM=@p_TOTAL_ATM WHERE IMPORT_ID=@l_IMPORT_ID
633
		IF @@Error <> 0 GOTO ABORT
634
COMMIT TRANSACTION
635
SELECT '0' as Result, @l_IMPORT_ID  IMPORT_ID, '' ErrorDesc
636
RETURN '0'
637
ABORT:
638
BEGIN
639
		ROLLBACK TRANSACTION
640
		SELECT '-1' as Result, '' IMPORT_ID, '' ErrorDesc
641
		RETURN '-1'
642
End
643
¿
644
ALTER PROCEDURE [dbo].[PL_IMPORT_Upd]
645
@p_IMPORT_ID VARCHAR(20),
646
@p_PLAN_CODE VARCHAR(20),
647
@p_IMP_YEAR	INT  = NULL,
648
@p_IMP_NAME NVARCHAR(200),
649
@p_FILE_NAME	NVARCHAR(200)  = NULL,
650
@p_TOTAL_QTY	NUMERIC(18,0)  = NULL,
651
@p_TOTAL_ATM	NUMERIC(18,0)  = NULL,
652
@p_NOTES	nvarchar(1000)  = NULL,
653
@p_RECORD_STATUS	varchar(1)  = NULL,
654
@p_MAKER_ID	varchar(20)  = NULL,
655
@p_CREATE_DT	DATETIME = NULL,
656
@p_AUTH_STATUS	varchar(50)  = NULL,
657
@p_CHECKER_ID	varchar(20)  = NULL,
658
@p_APPROVE_DT	DATETIME = NULL,
659
@p_XMLData XML=NULL
660
AS
661
BEGIN TRANSACTION
662
DECLARE @TableTmp TABLE(
663
		IMP_YEAR VARCHAR(4),
664
		PLAN_TYPE_ID VARCHAR(15),
665
		PLAN_TYPE_CODE VARCHAR(15),
666
		PLAN_TYPE_NAME NVARCHAR(200), 
667
		COST_ID VARCHAR(15),
668
		COST_CODE VARCHAR(15),
669
		COST_NAME NVARCHAR(200),
670
		BRANCH_ID VARCHAR(15),
671
		BRANCH_CODE VARCHAR(15),
672
		BRANCH_NAME NVARCHAR(200),
673
		DEP_ID	varchar(15),
674
		DEP_CODE VARCHAR(15),
675
		DEP_NAME NVARCHAR(200),
676
		REF_ID INT,
677
		REF_CODE VARCHAR(20),
678
		REF_NAME NVARCHAR(200),
679
		GOOD_ID varchar(15),
680
		GOOD_CODE VARCHAR(15),
681
		GOOD_NAME NVARCHAR(200),
682
		QTY INT,
683
		TOTAL_AMT NUMERIC(18,2),
684
		NOTES NVARCHAR(1000)
685
);
686
Declare @hdoc INT
687
	Exec sp_xml_preparedocument @hdoc Output, @p_XMLData	
688

    
689
INSERT INTO @TableTmp
690
 SELECT *
691
	FROM OPENXML(@hDoc,'/Root/PLIMPORT',2)
692
	WITH 
693
	(
694
	    IMP_YEAR VARCHAR(4),
695
		PLAN_TYPE_ID VARCHAR(15),
696
		PLAN_TYPE_CODE VARCHAR(15),
697
		PLAN_TYPE_NAME NVARCHAR(200), 
698
		COST_ID VARCHAR(15),
699
		COST_CODE VARCHAR(15),
700
		COST_NAME NVARCHAR(200),
701
		BRANCH_ID VARCHAR(15),
702
		BRANCH_CODE VARCHAR(15),
703
		BRANCH_NAME NVARCHAR(200),
704
		DEP_ID	varchar(15),
705
		DEP_CODE VARCHAR(15),
706
		DEP_NAME NVARCHAR(200),
707
		REF_ID INT,
708
		REF_CODE VARCHAR(20),
709
		REF_NAME NVARCHAR(200),
710
		GOOD_ID varchar(15),
711
		GOOD_CODE VARCHAR(15),
712
		GOOD_NAME NVARCHAR(200),
713
		QTY INT,
714
		TOTAL_AMT NUMERIC(18,2),
715
		NOTES NVARCHAR(1000)
716
	)
717

    
718
	--Update ID
719
UPDATE @TableTmp  SET BRANCH_ID=(SELECT  TOP 1 BRANCH_ID FROM dbo.CM_BRANCH WHERE dbo.CM_BRANCH.BRANCH_CODE=[@TableTmp].BRANCH_CODE),
720
DEP_ID=(SELECT  TOP 1 DEP_ID FROM dbo.CM_DEPARTMENT WHERE dbo.CM_DEPARTMENT.DEP_CODE=[@TableTmp].DEP_CODE),
721
COST_ID=(SELECT  TOP 1 DVDM_ID FROM dbo.CM_DVDM WHERE dbo.CM_DVDM.DVDM_CODE=[@TableTmp].COST_CODE AND IS_DVDM=1),
722
PLAN_TYPE_ID=(SELECT  TOP 1 PLAN_TYPE_ID FROM dbo.CM_PLAN_TYPE WHERE dbo.CM_PLAN_TYPE.PLAN_TYPE_CODE=[@TableTmp].PLAN_TYPE_CODE),
723
GOOD_ID=(SELECT  TOP 1 GD_ID FROM dbo.CM_GOODS WHERE dbo.CM_GOODS.GD_CODE=[@TableTmp].GOOD_CODE)
724

    
725
DECLARE @Error NVARCHAR(MAX)
726
--- Validate dữ liệu
727
IF(EXISTS(SELECT BRANCH_ID FROM @TableTmp WHERE BRANCH_ID IS NULL OR BRANCH_ID=''))
728
BEGIN
729

    
730
SET @Error=(select STUFF( (select ';' + BRANCH_CODE from @TableTmp  WHERE BRANCH_ID IS NULL OR BRANCH_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))	
731
	
732

    
733
		ROLLBACK TRANSACTION
734
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã đơn vị chưa tồn tại trên hệ thống: '+ @Error ErrorDesc
735
		RETURN '-1'
736

    
737

    
738

    
739
END
740

    
741
IF(EXISTS(SELECT DEP_ID FROM @TableTmp WHERE DEP_ID IS NULL OR DEP_ID=''))
742
BEGIN
743

    
744
		
745
		SET @Error=(select STUFF( (select ';' + DEP_CODE from @TableTmp  WHERE DEP_ID IS NULL OR DEP_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
746

    
747
		ROLLBACK TRANSACTION
748
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã phòng ban chưa tồn tại trên hệ thống: '+@Error ErrorDesc
749
		RETURN '-1'
750
END
751

    
752
IF(EXISTS(SELECT COST_ID FROM @TableTmp WHERE (COST_ID IS NULL OR COST_ID='') AND COST_CODE IS NOT NULL AND COST_CODE <>''))
753
BEGIN
754

    
755
			SET @Error=(select STUFF( (select ';' + COST_CODE from @TableTmp  WHERE COST_ID IS NULL OR COST_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))	
756
		
757
		ROLLBACK TRANSACTION
758
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã đơn vị đầu mối chưa tồn tại trên hệ thống: '+@Error ErrorDesc
759
		RETURN '-1'
760
END
761

    
762
IF(EXISTS(SELECT PLAN_TYPE_ID FROM @TableTmp WHERE PLAN_TYPE_ID IS NULL OR PLAN_TYPE_ID=''))
763
BEGIN
764

    
765

    
766
		SET @Error=(select STUFF( (select ';' + PLAN_TYPE_CODE from @TableTmp  WHERE PLAN_TYPE_ID IS NULL OR PLAN_TYPE_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))	
767

    
768
		ROLLBACK TRANSACTION
769
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã loại ngân sách chưa tồn tại trên hệ thống: '+@Error ErrorDesc
770
		RETURN '-1'
771
END
772

    
773
IF(EXISTS(SELECT GOOD_ID FROM @TableTmp WHERE GOOD_ID IS NULL OR GOOD_ID=''))
774
BEGIN
775

    
776
		SET @Error=(select STUFF( (select ';' + GOOD_CODE from @TableTmp  WHERE GOOD_ID IS NULL OR GOOD_ID='' FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))	
777

    
778
		ROLLBACK TRANSACTION
779
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã hạn mục chưa tồn tại trên hệ thống: '+@Error ErrorDesc
780
		RETURN '-1'
781
END
782

    
783

    
784

    
785

    
786

    
787
	--IF(EXISTS(
788
	--SELECT DT.TRADE_ID FROM dbo.PL_MASTER PM 
789
	--LEFT JOIN dbo.PL_TRADEDETAIL DT ON PM.PLAN_ID=DT.PLAN_ID
790
	--WHERE EXISTS()
791
	--BEGIN
792

    
793
	--		ROLLBACK TRANSACTION
794
	--		SELECT '-1' as Result, '' IMPORT_ID, N'Hạn mục chỉnh sửa đã sử dụng vượt hạn mức chỉnh sửa' ErrorDesc
795
	--		RETURN '-1'
796
	--END
797

    
798

    
799

    
800
	UPDATE dbo.PL_IMPORT SET PLAN_CODE=@p_PLAN_CODE,IMP_NAME=@p_IMP_NAME,FILE_NAME=@p_FILE_NAME,IMP_YEAR=@p_IMP_YEAR,IMP_QTY=@p_TOTAL_QTY,
801
	IMP_ATM=@p_TOTAL_ATM,NOTES=@p_NOTES,EDITER_ID=@p_MAKER_ID,EDIT_DT=CAST(@p_CREATE_DT AS DATE),CHECKER_ID=@p_CHECKER_ID,APPROVE_DT=CAST(@p_APPROVE_DT AS DATE),AUTH_STATUS=@p_AUTH_STATUS,IS_UPDATE=1
802
	WHERE IMPORT_ID=@p_IMPORT_ID
803

    
804

    
805
	
806
	DECLARE ImportDT CURSOR FOR
807
	SELECT IMP_YEAR,
808
           PLAN_TYPE_ID,
809
           PLAN_TYPE_CODE,
810
           PLAN_TYPE_NAME,
811
           COST_ID,
812
           COST_CODE,
813
           COST_NAME,
814
           BRANCH_ID,
815
           BRANCH_CODE,
816
           BRANCH_NAME,
817
           DEP_ID,
818
           DEP_CODE,
819
           DEP_NAME,
820
		  REF_ID,
821
		  REF_CODE,
822
		  REF_NAME,
823
           GOOD_ID,
824
           GOOD_CODE,
825
           GOOD_NAME,
826
           QTY,
827
           TOTAL_AMT,
828
           NOTES FROM @TableTmp
829
	
830
	OPEN ImportDT
831

    
832

    
833
	DECLARE 
834
	    @PLAN_TYPE_ID VARCHAR(15),
835
		@PLAN_TYPE_CODE VARCHAR(15),
836
		@PLAN_TYPE_NAME NVARCHAR(200), 
837
		@COST_ID VARCHAR(15),
838
		@COST_CODE VARCHAR(15),
839
		@COST_NAME NVARCHAR(200),
840
		@BRANCH_ID VARCHAR(15),
841
		@BRANCH_CODE VARCHAR(15),
842
		@BRANCH_NAME NVARCHAR(200),
843
		@DEP_ID	varchar(15),
844
		@DEP_CODE VARCHAR(15),
845
		@DEP_NAME NVARCHAR(200),
846
		@REF_ID INT,
847
		@REF_CODE VARCHAR(20),
848
		@REF_NAME NVARCHAR(200),
849
		@GOOD_ID varchar(15),
850
		@GODD_CODE VARCHAR(15),
851
		@GOOD_NAME NVARCHAR(200),@QTY INT,@TOTAL_AMT NUMERIC(18,2),@NOTES NVARCHAR(1000),
852
		@IMP_YEAR VARCHAR(4)
853

    
854
		,@IMP_LOG_CODE VARCHAR(15)
855
		EXEC SYS_CodeMasters_Gen 'IMP_LOG_CODE', @IMP_LOG_CODE out
856
		IF @IMP_LOG_CODE='' OR @IMP_LOG_CODE IS NULL GOTO ABORT		
857

    
858
	FETCH NEXT FROM ImportDT INTO @IMP_YEAR, @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
859
	@BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_ID,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,@QTY,@TOTAL_AMT,@NOTES
860
	
861
	WHILE @@FETCH_STATUS = 0	
862
	BEGIN		
863
	
864
		DECLARE @l_IMPORTDT_ID VARCHAR(20)
865

    
866
		SET @l_IMPORTDT_ID= (SELECT TOP 1 IMP_DT_ID FROM  PL_IMPORT_DT WHERE IMPORT_ID=@p_IMPORT_ID AND PLAN_TYPE_ID=@PLAN_TYPE_ID AND COST_ID=@COST_ID AND BRANCH_ID=@BRANCH_ID AND REF_CODE= @REF_CODE
867
		AND DEP_ID=@DEP_ID AND GOOD_ID=@GOOD_ID)
868
		IF(@l_IMPORTDT_ID IS NULL OR @l_IMPORTDT_ID='')
869
		BEGIN
870
			EXEC SYS_CodeMasters_Gen 'IMPORT_DT', @l_IMPORTDT_ID out
871
			IF @l_IMPORTDT_ID='' OR @l_IMPORTDT_ID IS NULL GOTO ABORT	
872
				INSERT INTO dbo.PL_IMPORT_DT
873
			(
874
		    IMP_DT_ID,
875
		    IMPORT_ID,
876
		    PLAN_TYPE_ID,
877
			PLAN_TYPE_CODE,
878
			PLAN_TYPE_NAME,
879
		    COST_ID,
880
			COST_CODE,
881
			COST_NAME,
882
		    BRANCH_ID,
883
			BRANCH_CODE,
884
			BRANCH_NAME,
885
		    DEP_ID,
886
			DEP_CODE,
887
			DEP_NAME,
888
			REF_CODE,
889
			REF_NAME,
890
		    GOOD_ID,
891
			GOOD_CODE,
892
			GOOD_NAME,
893
		    QTY,
894
		    TOTAL_AMT,
895
		    NOTES,
896
			IMP_YEAR
897
		)
898
		VALUES
899
		(   @l_IMPORTDT_ID,   -- IMP_DT_ID - varchar(20)
900
		    @p_IMPORT_ID,   -- IMPORT_ID - varchar(20)
901
		   @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
902
	        @BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,@QTY,@TOTAL_AMT,@NOTES,@IMP_YEAR
903
		  )
904
		END
905
	
906
		ELSE
907
		BEGIN
908
			UPDATE dbo.PL_IMPORT_DT SET QTY=QTY+@QTY,TOTAL_AMT=TOTAL_AMT+@TOTAL_AMT,REF_NAME=@REF_NAME
909
			WHERE IMPORT_ID=@p_IMPORT_ID AND PLAN_TYPE_ID=@PLAN_TYPE_ID AND COST_ID=@COST_ID AND BRANCH_ID=@BRANCH_ID AND REF_CODE=@REF_CODE
910
			AND DEP_ID=@DEP_ID AND GOOD_ID=@GOOD_ID 
911
		END
912
		  INSERT INTO dbo.PL_IMPORT_LOG
913
		  (
914
		     IMP_LOG_CODE,
915
		      IMP_ID,
916
		      FILE_NAME,
917
		      IMP_YEAR,
918
		      NOTES,
919
		      RECORD_STATUS,
920
		      AUTH_STATUS,
921
		      MAKER_ID,
922
		      CREATE_DT,
923
		      EDITER_ID,
924
		      EDIT_DT,
925
		      CHECKER_ID,
926
		      APPROVE_DT,
927
			 PLAN_TYPE_ID,
928
			PLAN_TYPE_CODE,
929
			PLAN_TYPE_NAME,
930
		    COST_ID,
931
			COST_CODE,
932
			COST_NAME,
933
		    BRANCH_ID,
934
			BRANCH_CODE,
935
			BRANCH_NAME,
936
		    DEP_ID,
937
			DEP_CODE,
938
			DEP_NAME,
939
			REF_CODE,
940
			REF_NAME,
941
		    GOOD_ID,
942
			GOOD_CODE,
943
			GOOD_NAME,
944
		      QTY,
945
		      TOTAL_AMT
946
		  )
947
		  VALUES
948
		  (   
949
				@IMP_LOG_CODE,
950
		      @p_IMPORT_ID,        -- IMP_ID_OLD - varchar(20)
951
		      @p_FILE_NAME,       -- FILE_NAME - nvarchar(200)
952
		      @p_IMP_YEAR,         -- IMP_YEAR - int
953
		      @p_NOTES,       -- NOTES - nvarchar(1000)
954
		      @p_RECORD_STATUS,        -- RECORD_STATUS - varchar(1)
955
		      @p_AUTH_STATUS,        -- AUTH_STATUS - varchar(1)
956
		      @p_MAKER_ID,        -- MAKER_ID - varchar(15)
957
		      @p_CREATE_DT, -- CREATE_DT - datetime
958
			  @p_MAKER_ID,        -- EDITER_ID - varchar(15)
959
		      CAST(@p_CREATE_DT AS DATE), -- EDIT_DT - datetime
960
		      @p_CHECKER_ID,        -- CHECKER_ID - varchar(15)
961
		      CAST(@p_APPROVE_DT AS DATE),  -- APPROVE_DT - datetime
962
		      @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
963
	        @BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,
964
		      @QTY,    -- QTY - int
965
		      @TOTAL_AMT -- TOTAL_AMT - numeric(18, 2)
966
		      )
967
		  	
968
		
969
		IF @@Error <> 0 GOTO ABORT	
970
	
971
		FETCH NEXT FROM ImportDT INTO  @IMP_YEAR,@PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
972
	@BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_ID,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME	,@QTY,@TOTAL_AMT,@NOTES
973
	
974
	END
975
	CLOSE ImportDT
976
	DEALLOCATE ImportDT
977

    
978
	SET @p_TOTAL_ATM=(SELECT SUM(ISNULL(TOTAL_AMT,0)) FROM dbo.PL_IMPORT_DT WHERE IMPORT_ID=@p_IMPORT_ID)
979
	SELECT @p_TOTAL_QTY=(SELECT SUM(ISNULL(QTY,0)) FROM dbo.PL_IMPORT_DT WHERE IMPORT_ID=@p_IMPORT_ID)
980

    
981
	UPDATE dbo.PL_IMPORT SET IMP_QTY=@p_TOTAL_QTY,IMP_ATM=@p_TOTAL_ATM WHERE IMPORT_ID=@p_IMPORT_ID
982
		IF @@Error <> 0 GOTO ABORT
983
COMMIT TRANSACTION
984
SELECT '0' as Result, @p_IMPORT_ID  IMPORT_ID, '' ErrorDesc
985
RETURN '0'
986
ABORT:
987
BEGIN
988
		ROLLBACK TRANSACTION
989
		SELECT '-1' as Result, '' IMPORT_ID, '' ErrorDesc
990
		RETURN '-1'
991
End
992
¿
993
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Appr]
994
--Luanlt 2019/17/10 - Sửa params
995
@p_REQ_PAY_ID	varchar(15)= NULL,
996
@p_CHECKER_ID	varchar(15)	= NULL,
997
@p_AUTH_STATUS varchar(15) = NULL,
998
@p_COST_ID VARCHAR(15) = NULL
999
AS
1000
BEGIN TRANSACTION
1001
		DECLARE @BRANCH_CREATE VARCHAR(15), @p_DEP_ID VARCHAR(15) 
1002
		--PRINT @BRANCH_CREATE 
1003
		SET @BRANCH_CREATE =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1004
		DECLARE @DEP_CODE_NEXT VARCHAR(15)
1005
		IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_CREATE)<>'HS')
1006
		BEGIN
1007
			SET @p_DEP_ID =(SELECT TOP 1 DEP_ID FROM CM_DEPARTMENT WHERE LEFT(DEP_CODE,5) IN (SELECT TOP 1 LEFT(DVDM_CODE,5) FROM CM_DVDM WHERE DVDM_ID =@p_COST_ID))
1008
			SET @DEP_CODE_NEXT = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
1009
			--PRINT @DEP_CODE_NEXT
1010
		END
1011
		ELSE
1012
		BEGIN
1013
			SET @p_DEP_ID =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
1014
			SET @DEP_CODE_NEXT = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
1015
		END
1016
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE MAKER_ID =@p_CHECKER_ID AND REQ_PAY_ID =@p_REQ_PAY_ID)
1017
		BEGIN
1018
			ROLLBACK TRANSACTION
1019
			SELECT '-1' as Result, ''  REQ_PAY_ID, N'Người phê duyệt phiếu phải khác với người tạo phiếu! Bạn không được phép duyệt đối tượng này' ErrorDesc
1020
			RETURN '-1'
1021
		END
1022
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
1023
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
1024
		BEGIN
1025
			ROLLBACK TRANSACTION
1026
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đ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
1027
			RETURN '-1'
1028
		END
1029
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
1030
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
1031
		BEGIN
1032
			ROLLBACK TRANSACTION
1033
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đ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
1034
			RETURN '-1'
1035
		END
1036
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
1037
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
1038
		BEGIN
1039
			ROLLBACK TRANSACTION
1040
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được KSV phê duyệt trước đó' ErrorDesc
1041
			RETURN '-1'
1042
		END
1043
		--CAP NHAT CODE TRONG QUA TRINH TEST UAT
1044
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_TYPE='I'))
1045
		BEGIN
1046
			DECLARE @ROLE_ID VARCHAR(200), @BRANCH_TYPE VARCHAR(15), @TOTAL_ADVANCE DECIMAL(18,0), @TOTAL_PAYBACK DECIMAL(18,0), @BRANCH_ID VARCHAR(15),
1047
			@DEP_ID VARCHAR(15), @COSTCENTER_ID VARCHAR(15)= NULL, @BRANCH_RQ VARCHAR(15) = NULL,@DEP_ID_RQ VARCHAR(15), @BRANCH_LOGIN VARCHAR(15),@LIMIT_ONE_OF DECIMAL(18,2)
1048
			DECLARE @LIMIT_AMT DECIMAL(18,0), @REQ_AMT DECIMAL(18,2) =0, @TONG_PGD DECIMAL(18,0), @TONG_PGD_HOAN DECIMAL(18,0)
1049
			SET @REQ_AMT = (SELECT REQ_AMT *ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1050
			--SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
1051
			SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER_V2 WHERE TLNANME=@p_CHECKER_ID)
1052
			SET @BRANCH_ID = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
1053
			SET @BRANCH_RQ =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1054
			SET @DEP_ID_RQ =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1055
			SET @BRANCH_TYPE = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
1056
			DECLARE @tmp table(BRANCH_ID varchar(15))
1057
			INSERT into @tmp  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_ID)
1058
			DECLARE @tmp_CN table(BRANCH_ID varchar(15))
1059
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='CN')
1060
			BEGIN
1061
				INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_RQ)
1062
			END
1063
			ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='PGD')
1064
			BEGIN
1065
				DECLARE @FATHER_ID VARCHAR(15) = NULL
1066
				SET @FATHER_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
1067
				INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@FATHER_ID)
1068
			END
1069
			--DECLARE @DEP_ID_LG VARCHAR(15) = NULL	
1070
			--SET @DEP_ID_LG =(SELECT SECUR_CODE FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
1071
			DECLARE @TMP_DVDM TABLE(DVDM_ID VARCHAR(15))
1072
			INSERT INTO @TMP_DVDM
1073
			SELECT A.DVDM_ID--, A.COST_CODE, A.COST_NAME, B.DEP_ID --, C.DEP_CODE, C.DEP_NAME
1074
			FROM PL_COSTCENTER A
1075
			LEFT JOIN PL_COSTCENTER_DT B ON A.COST_ID = B.COST_ID
1076
			WHERE B.DEP_ID = @DEP_ID_RQ
1077
			GROUP BY A.DVDM_ID
1078
			-- KHAI BAO BRANCH CUA USER DUYET
1079
			SET @BRANCH_LOGIN = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
1080
			IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID))
1081
			BEGIN
1082
					ROLLBACK TRANSACTION
1083
					SELECT '-1' as Result, ''  REQ_PAY_ID, N'Bạn không có quyền phê duyệt phiếu tạm ứng nội bộ. Vui lòng chọn giao dịch khác để duyệt' ErrorDesc
1084
					RETURN '-1'
1085
			END
1086
			--IF(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID AND BRANCH_ID= @BRANCH_ID AND STATUS ='P'))
1087
			--BEGIN
1088
			--		ROLLBACK TRANSACTION
1089
			--		SELECT '-1' as Result, ''  REQ_PAY_ID, N'Bạn đã thực hiện xác nhận phiếu tạm ứng trước đó' ErrorDesc
1090
			--		RETURN '-1'
1091
			--END
1092
			-- KIEM TRA AUTH_STATUS TRUYEN XUONG LA GI, A: DUYET, C: CONFIRM  
1093
			IF(@p_AUTH_STATUS='U') -- KIEM TRA HAN MUC CON LAI CUA USER VA THONG BAO CHO NGUOI DUYET
1094
			BEGIN
1095
			-- BAT DAU DUYET THEO NGAN SACH			
1096
			--- LAY HAN MUC CUA USER
1097
			SET @LIMIT_AMT =(SELECT LIMIT_VALUE FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@ROLE_ID AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
1098

    
1099
			print @LIMIT_AMT
1100
			--
1101
			SET @LIMIT_ONE_OF =(SELECT LIMIT_PERCENT FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@ROLE_ID AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
1102
			-- NEU LA HOI SO THI LAY TONG SO TIEN TAM UNG CUA CAC PHONG BAN CHUNG VOI KHOI CUA PHIEU DANG DUOC DUYET
1103
			SET @TONG_PGD =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID = @BRANCH_RQ
1104
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A') + @REQ_AMT
1105
			SET @TONG_PGD_HOAN =(
1106
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
1107
						FROM TR_REQ_PAYMENT_DT B
1108
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
1109
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
1110
						WHERE A.BRANCH_ID = @BRANCH_RQ
1111
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I') 
1112
				IF(@BRANCH_TYPE='HS')
1113
				BEGIN
1114
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
1115
					 DEP_ID IN
1116
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
1117
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
1118
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
1119
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
1120
					SET @TOTAL_PAYBACK =
1121
					ISNULL(
1122
					(
1123
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
1124
						FROM TR_REQ_PAYMENT_DT B
1125
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
1126
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
1127
						WHERE A.DEP_ID IN 
1128
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
1129
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
1130
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_ID)
1131
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
1132
					),0)
1133
				END
1134
			
1135
				-- NEU PHIEU DUOC TAO KHAC VOI HOI SO THI TIEN HANH TINH TONG SO TIEN TAM UNG CUA CN VA PHONG GIAO DICH TRUC THUOC
1136
				ELSE IF(@BRANCH_TYPE <>'HS')
1137
				BEGIN
1138
					SET @TOTAL_ADVANCE =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID IN (SELECT BRANCH_ID FROM @tmp_CN)
1139
					 AND REQ_TYPE ='I' AND AUTH_STATUS='A')
1140
					SET @TOTAL_PAYBACK =
1141
					(
1142
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
1143
						FROM TR_REQ_PAYMENT_DT B
1144
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
1145
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
1146
						WHERE A.BRANCH_ID IN 
1147
						(SELECT BRANCH_ID FROM @tmp_CN)
1148
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
1149
					)
1150
				END
1151
				DECLARE @LIMIT_REMAIN DECIMAL(18,0)
1152
				SET @LIMIT_REMAIN =ISNULL(@TOTAL_ADVANCE,0) - ISNULL(@TOTAL_PAYBACK,0)
1153
				-- KIEM TRA NEU LA CHU TICH HDQT THI PHE DUYET LUON, KHONG CAN XET HAN MUC GI
1154
				IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName ='HDQT'))
1155
				BEGIN
1156
					ROLLBACK TRANSACTION
1157
					SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1158
					--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1159
					--+ CHAR(10) +
1160
					--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1161
					--+ CHAR(10) + CHAR(13) +
1162
					N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
1163
					+ CHAR(10) + 
1164
					N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1165
					RETURN '-4'
1166
				END
1167
				IF(@LIMIT_AMT <(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) + @LIMIT_REMAIN)
1168
				BEGIN
1169
					ROLLBACK TRANSACTION
1170
					SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
1171
					N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') + CHAR(10)+
1172
					N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1173
					+ CHAR(10) + CHAR(13)+
1174
					N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN +@REQ_AMT ,'#,#', 'vi-VN') 
1175
					+ CHAR(10) +
1176
					N'Số tiền tạm ứng đã vượt mức phê duyệt là: '+ FORMAT((@LIMIT_REMAIN +@REQ_AMT) -@LIMIT_AMT,'#,#', 'vi-VN') 
1177
					+ CHAR(10) +
1178
					N'Bạn muốn chuyển giao dịch lên cấp cao hơn để duyệt hay tiếp tục chờ duyệt' ErrorDesc
1179
					RETURN '-2'
1180
				END
1181
				--- NEU DU HAN MUC THI THONG BAO DE NGUOI DUYET CAN NHAC CO NEN DUYET PHIEU HAY KHONG
1182
				IF(@LIMIT_AMT >=(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) +@LIMIT_REMAIN)
1183
				BEGIN
1184
					IF(@REQ_AMT >@LIMIT_ONE_OF)
1185
					BEGIN
1186
						ROLLBACK TRANSACTION
1187
						SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1188
						N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') 
1189
						+ CHAR(10)+
1190
						N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1191
						+ CHAR(10) + CHAR(13) +
1192
						N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN +@REQ_AMT ,'#,#', 'vi-VN') 
1193
						+ CHAR(10) + 
1194
						N'Số tiền tạm ứng đã vượt mức so với số tiền của một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1195
						+ CHAR(10) + 
1196
						N'Bạn muốn chuyển giao dịch lên cấp cao hơn để duyệt hay tiếp tục chờ duyệt' ErrorDesc
1197
						RETURN '-2'
1198
					END
1199
					ELSE
1200
					BEGIN
1201
						-- KIEM TRA NEU LA PGD THI CANH BAO
1202
						IF(@BRANCH_TYPE ='HS')
1203
						BEGIN
1204
							IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName NOT IN('TGD','HQDT')))
1205
							BEGIN
1206
								ROLLBACK TRANSACTION
1207
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1208
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1209
								+ CHAR(10) + CHAR(13) +  
1210
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1211
								+ CHAR(10) + 
1212
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
1213
								+ CHAR(10) + 
1214
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1215
								RETURN '-4'
1216
							END
1217
							ELSE
1218
							BEGIN
1219
								ROLLBACK TRANSACTION
1220
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1221
								--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1222
								--+ CHAR(10) + CHAR(13) +  
1223
								--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1224
								--+ CHAR(10) + 
1225
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
1226
								+ CHAR(10) + 
1227
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1228
								RETURN '-4'
1229
							END
1230
						END
1231
						ELSE IF(@BRANCH_TYPE ='CN')
1232
						BEGIN
1233
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 40000000)
1234
							BEGIN
1235
								ROLLBACK TRANSACTION
1236
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1237
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1238
								+ CHAR(10) + 
1239
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1240
								+ CHAR(10) + CHAR(13) +
1241
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
1242
								+ CHAR(10) +
1243
								N'Số tiền tạm ứng đang vượt quá số tổng hạn mức tạm ứng của 1 CN: '+ FORMAT(40000000,'#,#', 'vi-VN') +N'. Số tiền vượt là: '+ FORMAT(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0)-40000000,'#,#', 'vi-VN')
1244
								+ CHAR(10) + 
1245
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1246
								RETURN '-4'
1247
							END
1248
							ELSE
1249
							BEGIN
1250
								IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName NOT IN('TGD','HQDT')))
1251
								BEGIN
1252
									ROLLBACK TRANSACTION
1253
									SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1254
									N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1255
									+ CHAR(10) +
1256
									N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1257
									+ CHAR(10) + CHAR(13) +
1258
									N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
1259
									+ CHAR(10) + 
1260
									N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1261
									RETURN '-4'
1262
								END
1263
								ELSE
1264
								BEGIN
1265
									ROLLBACK TRANSACTION
1266
									SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1267
									--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1268
									--+ CHAR(10) +
1269
									--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1270
									--+ CHAR(10) + CHAR(13) +
1271
									N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
1272
									+ CHAR(10) + 
1273
									N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1274
									RETURN '-4'
1275
								END
1276
							END
1277
						END
1278
						ELSE IF(@BRANCH_TYPE ='PGD')
1279
						BEGIN
1280
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 10000000)
1281
							BEGIN
1282
								ROLLBACK TRANSACTION
1283
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
1284
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')+ CHAR(10) +
1285
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1286
								+ CHAR(10) + CHAR(13) + 
1287
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
1288
								+ CHAR(10) + 
1289
								N'Số tiền tạm ứng đang vượt quá số tổng hạn mức tạm ứng của 1 PGD: '+ FORMAT(10000000,'#,#', 'vi-VN') +N'. Số tiền vượt là: '+ FORMAT(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0)-10000000,'#,#', 'vi-VN')
1290
								+ CHAR(10) + 
1291
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1292
								RETURN '-4'
1293
							END
1294
							ELSE
1295
							BEGIN
1296
								ROLLBACK TRANSACTION
1297
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
1298
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
1299
								+ CHAR(10) + 
1300
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
1301
								+ CHAR(10) + CHAR(13) +
1302
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
1303
								+ CHAR(10) + 
1304
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
1305
								RETURN '-4'
1306
							END
1307
						END
1308
					END
1309
				END
1310
			-- NEU THOA MAN CAC DIEU KIEN SE TIEN HANH DUYET
1311
			END -- END DU HAN MUC DUYET
1312
			ELSE IF(@p_AUTH_STATUS='A')
1313
			BEGIN
1314
				UPDATE TR_REQ_ADVANCE_PAYMENT
1315
				SET    AUTH_STATUS='A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT =  GETDATE(), AUTH_STATUS_KT='U'
1316
				WHERE  REQ_PAY_ID = @p_REQ_PAY_ID
1317
				--- CAP NHAT LAI TINH TRANG TRONG REQUEST_PROCESS
1318
				DECLARE @PROCESS_CURR VARCHAR(5)
1319
				SET @PROCESS_CURR =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER =@ROLE_ID)
1320
				INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@PROCESS_CURR,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N' duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
1321
				--- CAP NHAT PROCESS CUA PHIEU DE NGHI TAM UNG LA DA DUYET
1322
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS=@PROCESS_CURR WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1323
				--
1324
				UPDATE PL_REQUEST_PROCESS SET STATUS ='A', NOTES = (SELECT ROLE_DESC + N' duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID) WHERE  ROLE_USER =@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID
1325
			
1326
			END
1327
			ELSE -- NEW KHONG DU HAN MUC THI BAT DAU XAC NHAN VA DUYET THEO HAN MUC
1328
			BEGIN
1329
				DECLARE @t_REQ_AMT DECIMAL(18,0) = (SELECT REQ_AMT FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
1330
				--PRINT @t_REQ_AMT
1331
				--- NEU GIAM DOC KHOI VAN CHUA DU HAN MUC THI GIAM DOC KHOI XAC NHAN VÀ TIEP TUC BUOC TIEP THEO LA PHO TONG GIAM DOC
1332
				DECLARE @MAX_STEP INT, @NEXT_ROLE VARCHAR(20), @MESSAGE NVARCHAR(100), @PROCESS_ID_NEXT VARCHAR(5), @PROCESS_PARENT VARCHAR(5),
1333
				@BRANCH_ID_PROC VARCHAR(15), @NEX_ROLE_STEP VARCHAR(25), @CURRENT_PROCESS VARCHAR(15)
1334
				SET @CURRENT_PROCESS =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER=@ROLE_ID)
1335
				SET @NEX_ROLE_STEP = (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE PARENT_PROCESS_ID =@CURRENT_PROCESS AND REQ_ID = @p_REQ_PAY_ID )
1336
				--PRINT @NEX_ROLE_STEP
1337
				--SET @MAX_STEP = CONVERT(INT,(SELECT MAX(PROCESS_ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID))
1338
				SET @PROCESS_ID_NEXT = CONVERT(VARCHAR(5),@CURRENT_PROCESS+1)
1339
				--SET @PROCESS_PARENT = CONVERT(VARCHAR(5),@MAX_STEP)
1340
				DECLARE @TMP_ROLE TABLE (ROLE_ID VARCHAR(15), BRANCH_ID VARCHAR(15), LIMIT_VALUE DECIMAL(18,0),LIMIT_TYPE VARCHAR(15))
1341
				--IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
1342
					IF(LEFT(@DEP_CODE_NEXT,5) ='06908')
1343
					BEGIN
1344
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
1345
					END
1346
					--ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1347
					ELSE IF(LEFT(@DEP_CODE_NEXT,5) ='06910')
1348
					BEGIN
1349
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
1350
					END
1351
					--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)
1352
					--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) 
1353
					--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))
1354
					ELSE IF((LEFT(@DEP_CODE_NEXT,5) ='06900') OR (LEFT(@DEP_CODE_NEXT,5)) ='06901' OR (LEFT(@DEP_CODE_NEXT,5))='06904'
1355
					OR (LEFT(@DEP_CODE_NEXT,5))='06902' OR (LEFT(@DEP_CODE_NEXT,5))='06903'  OR (LEFT(@DEP_CODE_NEXT,5))='06920')
1356
					BEGIN
1357
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID NOT IN ('GDK','PTGD')
1358
					END
1359
					--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)
1360
					--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) 
1361
					--OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
1362
					ELSE IF((LEFT(@DEP_CODE_NEXT,5) ='06907') OR (LEFT(@DEP_CODE_NEXT,5)) ='06909' OR (LEFT(@DEP_CODE_NEXT,5))='06911'
1363
					OR (LEFT(@DEP_CODE_NEXT,5))='06922' OR (LEFT(@DEP_CODE_NEXT,5))='06921'  OR (LEFT(@DEP_CODE_NEXT,5))='06920')
1364
					BEGIN
1365
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'PTGD'
1366
					END
1367
					ELSE
1368
					BEGIN
1369
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
1370
					END
1371
				SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM @TMP_ROLE WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
1372
				print @DEP_CODE_NEXT
1373
				print @BRANCH_ID_PROC 
1374
			    print @NEX_ROLE_STEP
1375
				IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@NEX_ROLE_STEP AND REQ_ID= @p_REQ_PAY_ID))
1376
				BEGIN
1377
					SET @NEXT_ROLE =(SELECT TOP 1 ROLE_ID FROM @TMP_ROLE WHERE LIMIT_VALUE >@t_REQ_AMT 
1378
					AND ROLE_ID NOT IN (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID) AND LIMIT_TYPE ='ADV_PAY')
1379
					--print @NEXT_ROLE
1380
					SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM @TMP_ROLE WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
1381
					SET @MESSAGE = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @NEXT_ROLE)
1382
					INSERT INTO PL_REQUEST_PROCESS (REQ_ID,PROCESS_ID,STATUS,ROLE_USER,BRANCH_ID,CHECKER_ID,APPROVE_DT,PARENT_PROCESS_ID,IS_LEAF, COST_ID, DVDM_ID, NOTES)  
1383
					VALUES (@p_REQ_PAY_ID,@PROCESS_ID_NEXT,'C',@NEXT_ROLE,@BRANCH_ID_PROC,@NEXT_ROLE,GETDATE(),@PROCESS_PARENT,'Y',NULL,@p_COST_ID,@MESSAGE)
1384
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@CURRENT_PROCESS,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
1385
				END
1386
				ELSE
1387
				BEGIN
1388
					--print @NEX_ROLE_STEP
1389
					SET @NEXT_ROLE =@NEX_ROLE_STEP
1390
					UPDATE PL_REQUEST_PROCESS SET STATUS='C',DVDM_ID=@p_COST_ID WHERE ROLE_USER =@NEXT_ROLE AND REQ_ID = @p_REQ_PAY_ID	
1391
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@CURRENT_PROCESS,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
1392
				END
1393
				--				
1394
				IF @@Error <> 0 GOTO ABORT
1395
					-- UPDATE STATUS CUA STEP HIEN TAI
1396
				UPDATE PL_REQUEST_PROCESS SET STATUS='P',IS_LEAF ='N', NOTES = (SELECT ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID) WHERE ROLE_USER =@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID		
1397
				--INSERT VAO TR_PROCESS		
1398
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS =@CURRENT_PROCESS , AUTH_STATUS='U',DVDM_ID = @p_COST_ID WHERE REQ_PAY_ID =@p_REQ_PAY_ID	
1399
				--- 
1400
				UPDATE PL_REQUEST_PROCESS SET DVDM_ID= @p_COST_ID WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER <>@ROLE_ID
1401
		  END
1402
		END	
1403
		ELSE
1404
		BEGIN
1405
			--- NEU LA TAM UNG NHA CUNG CAP THI CHECK XEM KI TAM UNG DO DA HOAN THANH HAY CHUA, NEU DA HOAN THANH THI KHONG CHO DUYET
1406
			DECLARE @PAY_ID VARCHAR(15), @SUM_OF_PAY_ID DECIMAL(18,2), @SUM_ADVANCE DECIMAL(18,2),
1407
			@AMOUNT DECIMAL(18,2),@AMT_PAY_DO DECIMAL(18,2),@SCH_ID VARCHAR(15),@AMT_ADVANCE DECIMAL(18,0)
1408
			DECLARE CUR_SH CURSOR FOR SELECT A.PAY_ID,A.AMT_PAY, A.AMT_PAY_DO,A.SCHEDULE_ID,A.AMT_ADVANCE FROM TR_REQ_PAY_SCHEDULE A WHERE A.REQ_PAY_ID= @p_REQ_PAY_ID
1409
			OPEN CUR_SH
1410
			FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
1411
			WHILE @@FETCH_STATUS =0
1412
			BEGIN
1413
				SET @SUM_OF_PAY_ID =(SELECT SUM(AMT_PAY_DO) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
1414
				SET @SUM_ADVANCE =(SELECT SUM(AMT_ADVANCE) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
1415
				IF(@SUM_OF_PAY_ID +@AMT_PAY_DO >@AMOUNT)
1416
				BEGIN
1417
					ROLLBACK TRANSACTION
1418
					SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Số tiền tạm ứng đã vượt mức số tiền còn lại cần phải thanh toán'
1419
					RETURN '-1'
1420
				END
1421
				IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE < @AMOUNT)
1422
				BEGIN
1423
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTU' WHERE SCHEDULE_ID=@SCH_ID
1424
				END
1425
				ELSE IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE = @AMOUNT)
1426
				BEGIN
1427
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTT' WHERE SCHEDULE_ID=@SCH_ID
1428
				END
1429
				ELSE IF(@SUM_OF_PAY_ID=0 AND @SUM_ADVANCE =0 )
1430
				BEGIN
1431
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='CTT' WHERE SCHEDULE_ID=@SCH_ID
1432
				END
1433
				FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
1434
			END
1435
			CLOSE CUR_SH
1436
			DEALLOCATE CUR_SH 
1437
			UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS='A', CHECKER_ID=@p_CHECKER_ID, APPROVE_DT = GETDATE(),AUTH_STATUS_KT='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1438
			SET @p_AUTH_STATUS ='A'
1439
			--- INSERT 1 DONG VAO PL_PROCESS
1440
			-- INSERT VAO BANG PL_PROCESS 1 DONG TRA VE
1441
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1442
				   VALUES(@p_REQ_PAY_ID,'APP',@p_CHECKER_ID,GETDATE(), N'Trưởng đơn vị đã phê duyệt',N'Trưởng đơn vị phê duyệt')			
1443
		END	
1444
		IF @@Error <> 0 GOTO ABORT
1445
COMMIT TRANSACTION
1446
	IF(@p_AUTH_STATUS='A')
1447
	BEGIN
1448
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'12345' +@DEP_CODE_NEXT ErrorDesc
1449
		RETURN '0'
1450
	END
1451
	ELSE
1452
	BEGIN
1453
		SELECT '1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,'' ErrorDesc
1454
		RETURN '1'
1455
	END
1456
ABORT:
1457
BEGIN
1458
		ROLLBACK TRANSACTION
1459
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1460
		RETURN '-1'
1461
END
1462
¿
1463
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]
1464
@p_REQ_PAY_ID	varchar(15)= NULL,
1465
@p_REQ_PAY_CODE	varchar(50)	= NULL,
1466
@p_REQ_DT VARCHAR(10)= NULL,
1467
@p_BRANCH_ID	varchar(15)	= NULL,
1468
@p_DEP_ID	varchar(15)	= NULL,
1469
@p_REQ_REASON	nvarchar(MAX)	= NULL,
1470
@p_REQ_TYPE	varchar(15)	= NULL,
1471
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
1472
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
1473
@p_REF_ID	varchar(15)	= NULL,
1474
@p_RECEIVER_PO	nvarchar(250)	= NULL,
1475
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
1476
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
1477
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
1478
@p_REQ_AMT	decimal(18, 0)	= NULL,
1479
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
1480
@p_MAKER_ID	varchar(15)	= NULL,
1481
@p_CREATE_DT	varchar(25)	= NULL,
1482
@p_EDITOR_ID	varchar(15)	= NULL,
1483
@p_AUTH_STATUS	varchar(1)	= NULL,
1484
@p_CHECKER_ID	varchar(15)	= NULL,
1485
@p_APPROVE_DT	varchar(25)	= NULL,
1486
@p_CREATE_DT_KT	varchar(25)	= NULL,
1487
@p_MAKER_ID_KT	varchar(15)	= NULL,
1488
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
1489
@p_CHECKER_ID_KT	varchar(1)	= NULL,
1490
@p_APPROVE_DT_KT  varchar(25)= null,
1491
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
1492
@p_BRANCH_CREATE	varchar(15)	= NULL,
1493
@p_NOTES	varchar(15)	= NULL,
1494
@p_RECORD_STATUS	varchar(1)	= NULL,
1495
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
1496
@p_TRANSFER_DT	varchar(25)	= NULL,
1497
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
1498
@p_PROCESS	varchar(15)	= NULL,
1499
@p_PAY_PHASE VARCHAR(15)= NULL,
1500
@p_DVDM_ID VARCHAR(15) = NULL,
1501
@p_RATE DECIMAL(18,0)= NULL,
1502
@p_RECIVER_MONEY VARCHAR(15) = NULL,
1503
@p_IS_PERIOD VARCHAR(5) = NULL,
1504
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
1505
@p_XMP_TEMP XML = NULL
1506
AS
1507
--Validation is here
1508
/*
1509
DECLARE @ERRORSYS NVARCHAR(15) = '' 
1510
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
1511
	 SET @ERRORSYS = ''
1512
IF @ERRORSYS <> '' 
1513
BEGIN
1514
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1515
	RETURN '0'
1516
END 
1517
*/
1518
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
1519
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
1520
	--BEGIN
1521
	--	SET @ERRORSYS = 'ASSC-00005'
1522
	--	SELECT ErrorCode Result, '' COLLECT_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1523
	--	RETURN '0'
1524
	--END
1525
	IF(@p_REQ_TYPE ='I')
1526
	BEGIN
1527
		DECLARE @AMT_AD_PAY DECIMAL(18,0) =0
1528
		DECLARE @AMT_AD_PAY_BACK DECIMAL(18,0) =0
1529
		DECLARE @AMT_AD_PAY_REMAIN DECIMAL(18,0) =0
1530
		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')
1531
		SET @AMT_AD_PAY_BACK = (SELECT SUM(D.AMT_USE) +SUM(D.AMT_REVERT) - SUM (D.AMT_ADD)
1532
					FROM TR_REQ_PAYMENT_DT D
1533
					LEFT JOIN TR_REQ_ADVANCE_PAYMENT X ON D.PAY_ADV_ID = X.REQ_PAY_ID  AND D.AUTH_STATUS_KT ='A'
1534
					WHERE X.REF_ID =@p_REF_ID)
1535
	 SET @AMT_AD_PAY_REMAIN =ISNULL(@AMT_AD_PAY,0) -ISNULL(@AMT_AD_PAY_BACK,0)
1536
	 SET @p_REQ_TEMP_AMT =ISNULL(@AMT_AD_PAY_REMAIN,0)
1537
	 END
1538
BEGIN TRANSACTION
1539
	-- LUCTV 17H51 BO SUNG LAY SO TIEN DA TAM UNG CUA NHAN VIEN --
1540
		--SET @AMT_DO =(SELECT * FROM [dbo].TR_RE)
1541
	--THIEUVQ 281119---
1542
		DECLARE @REC_DEBIT_AUTO VARCHAR(15)
1543
		SET @REC_DEBIT_AUTO =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID = @p_REF_ID)
1544
		IF (@p_REQ_TYPE='I')
1545
		BEGIN
1546
			--SET @p_REF_ID = @p_MAKER_ID
1547
			--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT))
1548
			--BEGIN
1549
			--	SET @p_RECEIVER_DEBIT = @p_RECEIVER_DEBIT+''
1550
			--END
1551
			--ELSE
1552
			--BEGIN
1553
			--	IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT AND REF_ID != @p_REF_ID ) AND @p_TYPE_FUNCTION ='SEND')
1554
			--	BEGIN
1555
			--		SET @p_RECEIVER_DEBIT =(SELECT ACC_NUM FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT)
1556
			--	END
1557
			--END
1558
			IF(@p_RECEIVER_DEBIT IS NOT NULL AND @p_RECEIVER_DEBIT <>'')
1559
			BEGIN
1560
				IF(@REC_DEBIT_AUTO IS NOT NULL AND @REC_DEBIT_AUTO <>''  AND @REC_DEBIT_AUTO <> @p_RECEIVER_DEBIT)
1561
				BEGIN
1562
					SET @p_RECEIVER_DEBIT =@REC_DEBIT_AUTO
1563
				END
1564
				--IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID <> @p_REF_ID AND ACC_NUM =@p_RECEIVER_DEBIT))
1565
				--BEGIN
1566
				--	ROLLBACK TRANSACTION
1567
				--	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
1568
				--	RETURN '-1'
1569
				--END
1570
			END
1571
			ELSE
1572
			BEGIN
1573
				SET @p_RECEIVER_DEBIT =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) 
1574
			END
1575

    
1576
		END
1577
		EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
1578
	--END--
1579
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
1580
		BEGIN
1581
			ROLLBACK TRANSACTION
1582
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
1583
			RETURN '-1'
1584
		END
1585
		IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT ='') AND @p_TYPE_FUNCTION ='SEND')
1586
		BEGIN
1587
			ROLLBACK TRANSACTION
1588
			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
1589
			RETURN '-1'
1590
		END
1591
		IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
1592
		BEGIN
1593
			ROLLBACK TRANSACTION
1594
			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
1595
			RETURN '-1'
1596
		END
1597
		IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
1598
		BEGIN
1599
				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
1600
				RETURN '-1'
1601
		END
1602
		-- START 19-11-2019
1603
		-- LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU UAT- KIEM TRA NEU DOT THANH TOAN CHUA CO THI KHONG DUOC THEM MOI
1604
		--IF(@p_REQ_TYPE='P' AND (@p_PAY_PHASE IS NULL OR @p_PAY_PHASE =''))
1605
		--BEGIN
1606
		--	ROLLBACK TRANSACTION
1607
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Đợt thanh toán không được phép để trống' ErrorDesc
1608
		--	RETURN '-1'
1609
		--END
1610
		---- NEU THANH TOAN XU LY NO THI NHAN VIEN NHAN TIEN TAM UNG KHONG DUOC PHEP TRONG
1611
		--IF(@p_REQ_TYPE='D' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
1612
		--BEGIN
1613
		--	ROLLBACK TRANSACTION
1614
		--	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
1615
		--	RETURN '-1'
1616
		--END
1617
		-- SO TIEN THANH TOÁN PHAI LON HON KHONG
1618
		IF(@p_REQ_AMT <=0)
1619
		BEGIN
1620
			ROLLBACK TRANSACTION
1621
			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
1622
			RETURN '-1'
1623
		END
1624
		-----
1625
		---- KIEM TRA NEU CHUA CHON KHOI PHE DUYET THI TU DONG CHUYEN VÊ KHOI TAI CHINH
1626
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
1627
		--BEGIN
1628
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
1629
		--END
1630
		--
1631
		--KIEM TRA NEU TAI KHOAN NHAN VIEN TAM UNG NEU CHUA TON TAI TRONG HE THONG THI BAO LOI
1632
		IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
1633
		BEGIN
1634
			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')
1635
		END
1636
		ELSE
1637
		BEGIN
1638
			IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
1639
			BEGIN
1640
				ROLLBACK TRANSACTION
1641
				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
1642
				RETURN '-1'
1643
			END
1644
		END
1645
		EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
1646
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
1647
		INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
1648
           ([REQ_PAY_ID]
1649
           ,[REQ_PAY_CODE]
1650
           ,[BRANCH_ID],[REQ_DT],
1651
           [DEP_ID]
1652
           ,[REQ_REASON]
1653
           ,[REQ_TYPE],REQ_ENTRIES,
1654
            [REQ_DESCRIPTION]
1655
           ,REF_ID,
1656
			RECEIVER_PO, RECEIVER_DEBIT
1657
           ,[REQ_PAY_TYPE]
1658
           ,[REQ_TYPE_CURRENCY]
1659
           ,[REQ_AMT]
1660
           ,[REQ_TEMP_AMT]
1661
           ,[MAKER_ID]
1662
           ,[CREATE_DT]
1663
           ,[EDITOR_ID]
1664
           ,[AUTH_STATUS]
1665
           ,[CHECKER_ID]
1666
           ,[APPROVE_DT]
1667
           ,[CREATE_DT_KT]
1668
           ,[MAKER_ID_KT]
1669
           ,[AUTH_STATUS_KT]
1670
           ,[CHECKER_ID_KT]
1671
		   ,[APPROVE_DT_KT]
1672
           ,[CONFIRM_NOTES]
1673
           ,[BRANCH_CREATE]
1674
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD)
1675
			VALUES
1676
           (@p_REQ_PAY_ID,
1677
			@p_REQ_PAY_CODE,
1678
			@p_BRANCH_ID,CONVERT(DATE,@p_REQ_DT,103),
1679
			@p_DEP_ID,
1680
			@p_REQ_REASON,
1681
			@p_REQ_TYPE,
1682
			@P_REQ_ENTRIES,
1683
			@p_REQ_DESCRIPTION,
1684
			@p_REF_ID,
1685
			@p_RECEIVER_PO,
1686
			@p_RECEIVER_DEBIT,
1687
			@p_REQ_PAY_TYPE,
1688
			@p_REQ_TYPE_CURRENCY,
1689
			@p_REQ_AMT,
1690
			@p_REQ_TEMP_AMT,
1691
			@p_MAKER_ID,
1692
			GETDATE(),
1693
			@p_EDITOR_ID,
1694
			'E',
1695
			NULL,
1696
			NULL,
1697
			NULL,
1698
			NULL,
1699
			NULL,
1700
			NULL,
1701
			NULL,
1702
			NULL,
1703
			@p_BRANCH_CREATE,
1704
			@p_NOTES,@p_RECORD_STATUS,
1705
			@p_TRANSFER_MAKER,
1706
			NULL,
1707
			@p_TRASFER_USER_RECIVE,
1708
			@p_PROCESS,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD)
1709
			IF @@Error <> 0 GOTO ABORT
1710
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
1711
			DECLARE @hdoc INT
1712
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
1713
			
1714
			-- KIEM TRA NEU TAM UNG THANH TOAN
1715
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
1716
			BEGIN
1717
				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,2),
1718
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
1719
				@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),
1720
				@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
1721
				DECLARE XmlDataPO CURSOR FOR
1722
				SELECT *
1723
				FROM
1724
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1725
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1726
				OPEN XmlDataPO;
1727
				DECLARE @INDEX_PO INT =0
1728
				SET @INDEX_PO = 0
1729
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1730
				WHILE @@fetch_status=0 
1731
				BEGIN
1732
					SET @INDEX_PO = @INDEX_PO +1
1733
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1734
					--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))
1735
					--BEGIN
1736
					--	ROLLBACK TRANSACTION
1737
					--	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
1738
					--	RETURN '-1'
1739
					--END
1740
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1741
					--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)))
1742
					--BEGIN
1743
					--	ROLLBACK TRANSACTION
1744
					--	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
1745
					--	RETURN '-1'
1746
					--END
1747
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1748
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1749
					IF(@p_TYPE_FUNCTION ='SEND')
1750
					BEGIN
1751
							
1752
				
1753
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
1754
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1755
					BEGIN
1756
						ROLLBACK TRANSACTION
1757
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1758
						(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
1759
						RETURN '-1'
1760
					END
1761
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1762
					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))
1763
					BEGIN
1764
						ROLLBACK TRANSACTION
1765
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1766
						(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
1767
						RETURN '-1'
1768
					END
1769
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1770
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
1771
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1772
					BEGIN
1773
						ROLLBACK TRANSACTION
1774
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1775
						(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
1776
						RETURN '-1'
1777
					END
1778
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1779
					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))
1780
					BEGIN
1781
						ROLLBACK TRANSACTION
1782
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1783
						(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
1784
						RETURN '-1'
1785
					END
1786
					END
1787
					DECLARE @REQ_PAYDTID VARCHAR(15);
1788
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1789
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1790
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1791
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1792
				IF @@error<>0 GOTO ABORT;
1793
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1794
				END
1795
				CLOSE XmlDataPO;
1796
				DEALLOCATE XmlDataPO;
1797
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1798
				DECLARE XmlDataSchedule CURSOR FOR
1799
				SELECT *
1800
				FROM
1801
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
1802
				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),
1803
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
1804
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
1805
				OPEN XmlDataSchedule
1806
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1807
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1808
				WHILE @@fetch_status=0 
1809
				BEGIN
1810
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1811
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1812
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1813
					INSERT INTO TR_REQ_PAY_SCHEDULE(
1814
					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,
1815
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
1816
					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,
1817
					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)
1818
				--- END KHAI BAO CURSOR
1819
				IF @@error<>0 GOTO ABORT;
1820
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1821
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1822
				END
1823
				CLOSE XmlDataSchedule;
1824
				DEALLOCATE XmlDataSchedule;
1825
			END
1826
		--- END TẠM ỨNG THANH TOÁN
1827
		--- TẠM ỨNG HĐ ĐỊNH KỲ
1828
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1829
		BEGIN
1830
				
1831
				DECLARE XmlDataPO CURSOR FOR
1832
				SELECT *
1833
				FROM
1834
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1835
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1836
				OPEN XmlDataPO;
1837
				SET @INDEX_PO = 0
1838
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1839
				WHILE @@fetch_status=0 
1840
				BEGIN
1841
					SET @INDEX_PO = @INDEX_PO +1
1842
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
1843
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
1844
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
1845
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1846
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1847
				IF @@error<>0 GOTO ABORT;
1848
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1849
				END
1850
				CLOSE XmlDataPO;
1851
				DEALLOCATE XmlDataPO;
1852
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1853
			----------------------------
1854
			--INSERT FROM PERIOD	
1855
				DECLARE XmlDataPeriod CURSOR FOR
1856
				SELECT *
1857
				FROM
1858
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
1859
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1860
				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))
1861
				OPEN XmlDataPeriod;
1862
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
1863
				@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)
1864
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1865
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1866
				WHILE @@fetch_status=0 
1867
				BEGIN
1868
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1869
					IF(@p_TYPE_FUNCTION ='SEND')
1870
					BEGIN
1871
					
1872
						IF(EXISTS(SELECT CONTRACT_ID 
1873
						FROM TR_CONTRACT 
1874
						WHERE CONTRACT_ID = @REF_ID
1875
						AND IS_CLOSED='Y' ))
1876
						BEGIN
1877
							ROLLBACK TRANSACTION
1878
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
1879
							RETURN '-1'
1880
						END
1881

    
1882
					
1883
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
1884
					BEGIN
1885
						ROLLBACK TRANSACTION
1886
						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
1887
						RETURN '-1'
1888
					END
1889
					END
1890
					DECLARE @PERIOD_ID VARCHAR(15);
1891
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
1892
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
1893
					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)
1894
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
1895
				@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)
1896
			IF @@error<>0 GOTO ABORT;
1897
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1898
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1899
			END
1900
			CLOSE XmlDataPeriod;
1901
			DEALLOCATE XmlDataPeriod;
1902
			-- VALIDATE SO TIEN
1903
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
1904
			--BEGIN
1905
			--	ROLLBACK TRANSACTION
1906
			--	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
1907
			--	RETURN '-1'
1908
			--END
1909
			----
1910
		END
1911
		---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
1912
		--- INSERT PHƯƠNG THỨC THANH TOÁN
1913
		----MethodCursor
1914
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),@REQ_PAY_TYPE varchar(1),
1915
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15)
1916
			DECLARE XmlDataMethod CURSOR FOR
1917
			SELECT *
1918
			FROM
1919
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
1920
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
1921
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
1922
			ACC_NAME NVARCHAR(50), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
1923
			OPEN XmlDataMethod
1924
			FETCH NEXT FROM XmlDataMethod 
1925
			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
1926
			WHILE @@fetch_status=0 
1927
			BEGIN
1928
				IF(@REQ_PAY_TYPE <>'1')
1929
				BEGIN
1930
					SET @ISSUED_DT = NULL
1931
				END
1932
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
1933
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
1934
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
1935
				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,
1936
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
1937
				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,'',
1938
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
1939
			IF @@error<>0 GOTO ABORT;
1940
			FETCH NEXT FROM XmlDataMethod 
1941
			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
1942
			END
1943
			CLOSE XmlDataMethod;
1944
			DEALLOCATE XmlDataMethod
1945
		----END INSERT PHƯƠNG THỨC THANH TOÁN
1946
		----INSERT VAO BANG DS KHACH HANG
1947
			DECLARE XmlDataCus CURSOR FOR
1948
			SELECT *
1949
			FROM
1950
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
1951
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
1952
			OPEN XmlDataCus;
1953
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1954
				WHILE @@fetch_status=0 
1955
				BEGIN		
1956
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
1957
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
1958
				--- END KHAI BAO CURSOR
1959
				IF @@error<>0 GOTO ABORT;
1960
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1961
				END
1962
				CLOSE XmlDataCus;
1963
				DEALLOCATE XmlDataCus;
1964
		----END
1965
			-- HANG MUC CHI PHI VA NGAN SACH
1966
			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)
1967
			DECLARE XmlDataGood CURSOR FOR
1968
			SELECT *
1969
			FROM
1970
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
1971
			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))
1972
			OPEN XmlDataGood
1973
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1974
			WHILE @@fetch_status=0 BEGIN
1975
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1976
				SET @INDEX_NS = @INDEX_NS +1
1977
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1978
				--IF(@p_TYPE_FUNCTION ='SEND')
1979
				--BEGIN
1980
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
1981
				--BEGIN
1982
				--		ROLLBACK TRANSACTION
1983
				--		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
1984
				--		RETURN '-1'
1985
				--END
1986
				--END
1987
				DECLARE @p_BUDGET_ID VARCHAR(15);
1988
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1989
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1990
				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) 
1991
				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)
1992
			IF @@error<>0 GOTO ABORT;
1993
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1994
			END;
1995
		CLOSE XmlDataGood;
1996
		DEALLOCATE XmlDataGood;
1997
		--- END INSERT NGAN SACH
1998
		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)
1999
		DECLARE XmlAttach CURSOR FOR
2000
		SELECT *
2001
		FROM
2002
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
2003
		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))
2004
		OPEN XmlAttach
2005
		--INSERT CHUNG TU DINH KEM
2006
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
2007
				WHILE @@fetch_status=0 
2008
				BEGIN
2009
					IF (@REF_DT='')
2010
					BEGIN
2011
						SET @REF_DT = NULL
2012
					END
2013
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
2014
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
2015
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
2016
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
2017
				IF @@error<>0 GOTO ABORT;
2018
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
2019
				END
2020
				CLOSE XmlAttach;
2021
				DEALLOCATE XmlAttach;
2022
		----END
2023
		--- BAT DAU VALIDATE
2024
		IF(@p_TYPE_FUNCTION ='SEND')
2025
		BEGIN
2026
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
2027
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
2028
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
2029
			BEGIN
2030
				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)
2031
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
2032
				BEGIN
2033
					ROLLBACK TRANSACTION
2034
					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
2035
					RETURN '-1'
2036
				END
2037
			END
2038
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
2039
			BEGIN
2040
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
2041
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
2042
				BEGIN
2043
					ROLLBACK TRANSACTION
2044
					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
2045
					RETURN '-1'
2046
				END
2047
			END
2048
			ELSE
2049
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
2050
			BEGIN
2051
				ROLLBACK TRANSACTION
2052
				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
2053
				RETURN '-1'
2054
			END
2055
			
2056
		END
2057
		----END
2058
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
2059
			IF(@p_REQ_TYPE ='I')
2060
			BEGIN
2061
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
2062
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
2063
				BEGIN
2064
					--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'
2065
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
2066
					BEGIN
2067
						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'
2068
					END
2069
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
2070
					BEGIN
2071
						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'
2072
					END
2073
					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)
2074
					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) 
2075
					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))
2076
					BEGIN
2077
						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')
2078
					END
2079
					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)
2080
					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) 
2081
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
2082
					BEGIN
2083
						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'
2084
					END
2085
					ELSE
2086
					BEGIN
2087
						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'
2088
					END
2089
				END
2090
				ELSE
2091
				BEGIN
2092
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
2093
					BEGIN
2094
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
2095
						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
2096
						--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'
2097
					END
2098
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
2099
					BEGIN
2100
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'
2101
						AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
2102
						--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'
2103
					END
2104
				END
2105
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
2106
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
2107
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
2108
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
2109
				OPEN CUR_PR
2110
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
2111
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
2112
				BEGIN								
2113
					SET @INDEX= @INDEX+1
2114
					IF @INDEX = @SL_ROLE
2115
						SET @ISLEAF = 'Y'
2116
					ELSE
2117
						SET @ISLEAF = 'N'
2118
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
2119

    
2120
					IF(@INDEX=1 )
2121
					BEGIN		
2122
						SET @PARENT_ID = NULL
2123
						SET @STATUS = 'C'							
2124
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
2125
					END				
2126
					ELSE 
2127
					BEGIN
2128
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
2129
						SET @STATUS = 'U'
2130
					END
2131
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
2132
						BEGIN
2133
							INSERT INTO dbo.PL_REQUEST_PROCESS
2134
							(
2135
								REQ_ID,
2136
								PROCESS_ID,
2137
								STATUS,
2138
								ROLE_USER,
2139
								BRANCH_ID,
2140
								CHECKER_ID,
2141
								APPROVE_DT,
2142
								PARENT_PROCESS_ID,
2143
								IS_LEAF, COST_ID, DVDM_ID, NOTES
2144
							)
2145
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
2146
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
2147
							BREAK;
2148
						END
2149
						ELSE
2150
							INSERT INTO PL_REQUEST_PROCESS (
2151
								REQ_ID,
2152
								PROCESS_ID,
2153
								STATUS,
2154
								ROLE_USER,
2155
								BRANCH_ID,
2156
								CHECKER_ID,
2157
								APPROVE_DT,
2158
								PARENT_PROCESS_ID,
2159
								IS_LEAF, COST_ID, DVDM_ID, NOTES
2160
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
2161
					--END
2162
					
2163
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
2164
				END
2165
				CLOSE CUR_PR
2166
				DEALLOCATE CUR_PR
2167
			END
2168
			--- CAP NHAT THANG CUOI CUNG LA Y
2169
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
2170
		COMMIT TRANSACTION
2171
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
2172
		BEGIN
2173
				--ROLLBACK TRANSACTION
2174
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
2175
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2176
				--INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
2177
				--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')
2178
				--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
2179
				--RETURN '4'
2180
				IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
2181
				BEGIN
2182
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
2183
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
2184
				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')
2185
				BEGIN
2186
					DECLARE @USER_TP VARCHAR(15) =''
2187
					--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
2188
					--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
2189
					IF(@USER_TP IS NULL OR @USER_TP ='')
2190
					BEGIN
2191
						SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
2192
							AND (RoleName IN ('GDDV','TPTC','TC','KTT')))
2193
					END
2194
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2195
				END
2196
				ELSE IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
2197
				BEGIN
2198
					DECLARE @USER_TPGD VARCHAR(15) =''
2199
					--SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))
2200
					--SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND (RoleName IN ('TPGD') OR
2201
					--RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='TPGD')))
2202
					IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
2203
					BEGIN
2204
						SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID =@p_BRANCH_CREATE 
2205
							AND RoleName ='TPGD')
2206
					END
2207
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2208
				END
2209
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
2210
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2211
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
2212
				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')
2213
				SELECT '4' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
2214
				RETURN '4'
2215
			END
2216
		END
2217
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, '' ErrorDesc
2218
		RETURN '0'
2219
ABORT:
2220
BEGIN
2221
		ROLLBACK TRANSACTION
2222
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
2223
		RETURN '-1'
2224
End
2225
¿
2226
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Search]
2227
@p_REQ_PAY_ID	varchar(15)= NULL,
2228
@p_REQ_PAY_CODE	varchar(50)	= NULL,
2229
@p_REQ_DT VARCHAR(20)= NULL,
2230
@p_BRANCH_ID	varchar(15)	= NULL,
2231
@p_DEP_ID	varchar(15)	= NULL,
2232
@p_REQ_REASON	nvarchar(MAX)	= NULL,
2233
@p_REQ_TYPE	varchar(15)	= NULL,
2234
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
2235
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
2236
@p_REF_ID	varchar(15)	= NULL,
2237
@p_RECEIVER_PO	nvarchar(250)	= NULL,
2238
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
2239
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
2240
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
2241
@p_REQ_AMT	decimal(18, 0)	= NULL,
2242
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
2243
@p_MAKER_ID	varchar(15)	= NULL,
2244
@p_CREATE_DT	varchar(25)	= NULL,
2245
@p_EDITOR_ID	varchar(15)	= NULL,
2246
@p_AUTH_STATUS	varchar(1)	= NULL,
2247
@p_CHECKER_ID	varchar(15)	= NULL,
2248
@p_APPROVE_DT	varchar(25)	= NULL,
2249
@p_CREATE_DT_KT	varchar(25)	= NULL,
2250
@p_MAKER_ID_KT	varchar(15)	= NULL,
2251
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
2252
@p_CHECKER_ID_KT	varchar(1)	= NULL,
2253
@p_APPROVE_DT_KT  varchar(25)= null,
2254
@p_CORE_NOTE	nvarchar(500)	= NULL,
2255
@p_BRANCH_CREATE	varchar(15)	= NULL,
2256
@p_NOTES	varchar(15)	= NULL,
2257
@p_RECORD_STATUS	varchar(1)	= NULL,
2258
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
2259
@p_TRANSFER_DT	varchar(25)	= NULL,
2260
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
2261
@p_PROCESS	varchar(15)	= NULL,
2262
@p_PAY_PHASE VARCHAR(15)= NULL,
2263
@p_XMP_TEMP XML = NULL,
2264
@p_TOP INT = 10,
2265
@p_LEVEL varchar(10) = NULL,
2266
@p_FRMDATE VARCHAR(20)= NULL,
2267
@p_TODATE VARCHAR(20) = NULL,
2268
@p_BRANCH_LOGIN VARCHAR(15) = NULL,
2269
@p_IS_UPDATE_KT VARCHAR(15) = NULL,
2270
@p_IS_TRANSFER VARCHAR(15)= NULL,
2271
@p_DVDM_ID VARCHAR(15)= NULL,
2272
@p_USER_LOGIN VARCHAR(15) = NULL,
2273
@p_RATE DECIMAL(18,0) =0,
2274
@p_FUNCTION VARCHAR(15) = NULL,
2275
@p_TYPE_SEARCH VARCHAR(15) = NULL,
2276
@p_TEMP_PAY_STATUS VARCHAR(10) = NULL
2277
--select * from CM_ALLCODE where  CDTYPE = 'TEMPPAYSTATUS'
2278
--HT	Hoàn tất
2279
--DCHU	Đang chờ hoàn ứng
2280
--DHU	Đã hoàn ứng
2281
--''	tất cả
2282
AS
2283
SET @p_TOP = NULL
2284
DECLARE @TB_TYPE TABLE (BRANCH_TYPE VARCHAR(15))
2285
IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_LOGIN)='HS')
2286
BEGIN
2287
	INSERT INTO @TB_TYPE VALUES('HS')
2288
END
2289
ELSE
2290
BEGIN
2291
	INSERT INTO @TB_TYPE VALUES('PGD')
2292
	INSERT INTO @TB_TYPE VALUES('CN')
2293
END
2294
declare @tmp table(BRANCH_ID varchar(15))
2295
insert into @tmp  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@p_BRANCH_ID)
2296
declare @tmp_Login table(BRANCH_ID varchar(15))
2297
insert into @tmp_Login  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@p_BRANCH_LOGIN)
2298
DECLARE @ROLE_ID VARCHAR(20) , @DEP_ID_LG VARCHAR(15) = NULL, @COST_LG VARCHAR(15), @DVDM_ID VARCHAR(15)
2299
DECLARE @BRANCH_TYPE VARCHAR(15)
2300
SET @BRANCH_TYPE =(SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID=(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
2301
SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_USER_LOGIN)
2302
SET @DEP_ID_LG =(SELECT SECUR_CODE FROM TL_USER WHERE TLNANME=@p_USER_LOGIN)
2303
DECLARE @TMP_DEP TABLE(DEP_ID VARCHAR(15))
2304
SET @COST_LG =(SELECT TOP 1 COST_ID FROM PL_COSTCENTER_DT WHERE DEP_ID =@DEP_ID_LG)
2305
SET @DVDM_ID =(SELECT TOP 1 DVDM_ID FROM PL_COSTCENTER WHERE COST_ID =@COST_LG)
2306
INSERT INTO @TMP_DEP SELECT B.DEP_ID FROM PL_COSTCENTER_DT B  WHERE COST_ID =@COST_LG
2307
DECLARE @BRANCH_TYPE_LG VARCHAR(15)
2308
SET @BRANCH_TYPE_LG = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID=@p_BRANCH_LOGIN)
2309

    
2310
--IF(EXISTS(SELECT * FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_OLD=@ROLE_ID))
2311
--	SET @ROLE_ID=(SELECT ROLE_NEW FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_OLD=@ROLE_ID)
2312
SET @ROLE_ID =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_USER_LOGIN)
2313

    
2314
IF(@p_TOP=NULL OR @p_TOP='' OR @p_TOP=0)BEGIN
2315
		SELECT A.*,'' as TEMP_PAY_STATUS ,
2316
		PR.PROCESS_DESC AS AUTH_STATUS_NAME, C.AUTH_STATUS_NAME AUTH_STATUS_NAME_KT, TL.TLFullName CREATE_FULLNAME,
2317
		TL1.TLFullName APPROVE_FULLNAME,TL2.TLFullName CREATE_FULLNAME_KT,TL3.TLFullName APPROVE_FULLNAME_KT,
2318
		BR.BRANCH_NAME BRANCH_NAME_REQ, BR1.BRANCH_NAME BRANCH_NAME_CRE, DP.DEP_NAME, DP.DEP_CODE, BR.BRANCH_CODE BRANCH_CODE_REQ,
2319
		--Luanlt--2019/10/15-Sửa AL,AL1
2320
		BR1.BRANCH_CODE BRANCH_CODE_CRE,  AL.CONTENT REQ_TYPE_NAME,AL1.CONTENT REQ_PAY_TYPE_NAME,
2321
		A.REQ_AMT AS TOTAL_AMT_TEMP,CASE WHEN H.SOTIEN_TT IS NULL THEN ISNULL(A.PAY_AMT,0) ELSE  ISNULL(H.SOTIEN_TT,0) END AS TOTAL_AMT_PAY_HIS,
2322
		TL4.TLFullName AS TRANSFER_FULLNAME,TL5.TLFullName AS TRANSFER_RECIEVER_FULLNAME,TL6.TLFullName AS REC_DEBIT_NAME, TL6.TLNANME AS REC_DEBIT_CODE,
2323
		TL7.TLFullName AS EMP_NAME, TL7.TLNANME AS EMP_CODE,
2324
		PO.PO_CODE, PO.PO_NAME,SUP.SUP_NAME,SUP.TAX_NO AS SUP_TAX_NO,CUS.CUSTOMER_CODE AS CUST_CODE, CUS.CUSTOMER_NAME AS CUST_NAME, PM.PAY_PHASE AS KY_TAM_UNG,
2325
		DV.DVDM_CODE, DV.DVDM_NAME, PC.ROLE_USER AS ROLE_CONF, PR.PROCESS_DESC AS CONF_STATUS, PC1.NOTES AS NEXT_STEP, PC3.LEVEL_JOB, PC3.STATUS_JOB,PC3.TYPE_JOB,
2326
		PC3.TLNAME AS EXEC_USER, TL8.TLFullName AS RECIVER_MONEY_FULLNAME, BR1.BRANCH_TYPE AS BRANCH_TYPE_CR, BR.BRANCH_TYPE, @p_TYPE_SEARCH AS TYPE_SEARCH,SR.ROLE_ID AS ROLE_ID_CRE
2327
        FROM TR_REQ_ADVANCE_PAYMENT A
2328
             LEFT JOIN CM_AUTH_STATUS B ON A.AUTH_STATUS=B.AUTH_STATUS
2329
             LEFT JOIN CM_AUTH_STATUS C ON A.AUTH_STATUS_KT=C.AUTH_STATUS
2330
             LEFT JOIN TL_USER TL ON A.MAKER_ID=TL.TLNANME
2331
             LEFT JOIN TL_USER TL1 ON A.CHECKER_ID=TL1.TLNANME
2332
             LEFT JOIN TL_USER TL2 ON A.MAKER_ID_KT=TL2.TLNANME
2333
             LEFT JOIN TL_USER TL3 ON A.CHECKER_ID_KT=TL3.TLNANME
2334
             LEFT JOIN dbo.CM_BRANCH BR ON A.BRANCH_ID=BR.BRANCH_ID
2335
			 LEFT JOIN dbo.CM_BRANCH BR1 ON A.BRANCH_CREATE=BR1.BRANCH_ID
2336
             LEFT JOIN dbo.CM_DEPARTMENT DP ON DP.DEP_ID=A.DEP_ID
2337
			 --Luanlt--2019/10/15-Sửa AL,AL1
2338
			 LEFT JOIN CM_ALLCODE AL ON A.REQ_TYPE = AL.CDVAL AND AL.CDNAME='REQ_TYPE'--Loại thanh toán (Nội bộ/Thanh toán/Nợ)
2339
			 LEFT JOIN CM_ALLCODE AL1 ON A.REQ_PAY_TYPE = AL1.CDVAL AND AL1.CDNAME='REQ_PAY_TYPE'--Hình thức thanh toán( Tiền mặt/Chuyển khoản)			 
2340
			 LEFT JOIN TL_USER TL4 ON A.TRANSFER_MAKER = TL4.TLNANME
2341
			 LEFT JOIN TL_USER TL5 ON A.TRASFER_USER_RECIVE = TL5.TLNANME
2342
			 LEFT JOIN TL_USER TL6 ON A.RECEIVER_DEBIT = TL6.TLNANME AND A.REQ_TYPE='D'
2343
			 LEFT JOIN
2344
			 (
2345
			 SELECT PAY_ADV_ID,(ISNULL(SUM(AMT_USE),0) - ISNULL(SUM(AMT_ADD),0) + ISNULL(SUM(AMT_REVERT),0)) AS SOTIEN_TT FROM TR_REQ_PAYMENT_DT WHERE AUTH_STATUS_KT ='A' GROUP BY PAY_ADV_ID
2346
			 ) H ON A.REQ_PAY_ID = H.PAY_ADV_ID
2347
			 LEFT JOIN TL_USER TL7 ON TL7.TLNANME = A.REF_ID AND A.REQ_TYPE='I'
2348
			 LEFT JOIN TR_PO_MASTER PO ON A.REF_ID = PO.PO_ID AND A.REQ_TYPE='P'
2349
			 LEFT JOIN CM_SUPPLIER SUP ON PO.SUP_ID = SUP.SUP_ID AND A.REQ_TYPE='P'
2350
			 LEFT JOIN LS_CUSTOMER CUS ON A.REF_ID = CUS.CUSTOMER_ID AND A.REQ_TYPE='D'
2351
			 LEFT JOIN TR_PO_PAYMENT PM ON A.PAY_PHASE = PM.PAY_ID AND A.REQ_TYPE='P'
2352
			 LEFT JOIN CM_DVDM DV ON A.DVDM_ID = DV.DVDM_ID
2353
			 LEFT JOIN PL_PROCESS PR ON A.PROCESS = PR.PROCESS_ID AND A.REQ_PAY_ID = PR.REQ_ID
2354
			 LEFT JOIN PL_REQUEST_PROCESS PC ON PC.REQ_ID= A.REQ_PAY_ID AND PC.ROLE_USER = @ROLE_ID AND PC.STATUS='C'
2355
			 LEFT JOIN PL_REQUEST_PROCESS PC1 ON PC1.REQ_ID= A.REQ_PAY_ID AND PC1.STATUS='C'
2356
			 LEFT JOIN PL_REQUEST_PROCESS_CHILD PC3 ON PC3.REQ_ID = A.REQ_PAY_ID AND PC3.STATUS_JOB ='C'
2357
			 LEFT JOIN PL_REQUEST_PROCESS_CHILD PC4 ON PC4.REQ_ID = A.REQ_PAY_ID AND PC4.STATUS_JOB ='C'
2358
			 LEFT JOIN TL_USER TL8 ON A.RECIVER_MONEY = TL8.TLNANME
2359
			 LEFT JOIN TL_SYSROLE SR ON TL.RoleName = SR.ROLE_ID
2360
        WHERE 1=1 
2361
			 AND (A.REQ_PAY_ID =@p_REQ_PAY_ID OR @p_REQ_PAY_ID IS NULL OR @p_REQ_PAY_ID ='')
2362
			  AND(A.REQ_REASON LIKE N'%'+@p_REQ_REASON+'%' OR @p_REQ_REASON='' OR @p_REQ_REASON IS NULL)
2363
			  AND(A.AUTH_STATUS=@p_AUTH_STATUS OR @p_AUTH_STATUS='' OR @p_AUTH_STATUS IS NULL)
2364
			  AND((A.MAKER_ID_KT IS NOT NULL AND @p_IS_UPDATE_KT='Y') --Lay danh sach chua duoc phong KT cap nhat va duoc cap nhat
2365
              OR((A.MAKER_ID_KT IS NULL AND @p_IS_UPDATE_KT='N'))OR @p_IS_UPDATE_KT IS NULL OR @p_IS_UPDATE_KT='')
2366
			  AND(A.NOTES LIKE N'%'+@p_NOTES+'%' OR @p_NOTES='' OR @p_NOTES IS NULL)
2367
			  --Luanlt-2019/10/14-Thêm Filter  REQ_TYPE,FROMDATE TODATE REF_ID
2368
			  AND(A.REQ_TYPE LIKE N'%'+@p_REQ_TYPE+'%' OR @p_REQ_TYPE = '' OR @p_REQ_TYPE IS NULL)
2369
			  AND(CONVERT(DATE, A.CREATE_DT)>=CONVERT(DATE, @p_FRMDATE, 103)OR @p_FRMDATE IS NULL OR @p_FRMDATE='')
2370
              AND(CONVERT(DATE, A.CREATE_DT)<=CONVERT(DATE, @p_TODATE, 103)OR @p_TODATE IS NULL OR @p_TODATE='')
2371
			  --Luanlt-2019/10/17-Thêm Filter REQ_PAY_CODE REQ_PAY_NAME  BRANCH_ID DEP_ID KT_AUTH
2372
			  AND(A.REQ_PAY_CODE LIKE N'%'+@p_REQ_PAY_CODE+'%' or @p_REQ_PAY_CODE='' OR @p_REQ_PAY_CODE IS NULL)
2373
			  AND(A.TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE or @p_TRASFER_USER_RECIVE='' OR @p_TRASFER_USER_RECIVE IS NULL OR A.MAKER_ID_KT IS NOT NULL OR A.MAKER_ID_KT <>'')
2374
			  AND(A.BRANCH_CREATE = @p_BRANCH_CREATE or @p_BRANCH_CREATE='' OR @p_BRANCH_CREATE IS NULL)
2375
			  AND(A.DEP_ID = @p_DEP_ID  or @p_DEP_ID='' OR @p_DEP_ID IS NULL)
2376
			  AND(A.AUTH_STATUS_KT=@p_AUTH_STATUS_KT OR @p_AUTH_STATUS_KT='' OR @p_AUTH_STATUS_KT IS NULL)
2377
			  AND(A.REF_ID =@p_REF_ID OR @p_REF_ID='' OR @p_REF_ID IS NULL)
2378
			  AND((A.TRANSFER_MAKER IS NOT NULL AND @p_IS_TRANSFER='Y') --Lay danh sach chua duoc phong KT cap nhat va duoc cap nhat
2379
              OR((A.TRANSFER_MAKER IS NULL AND @p_IS_TRANSFER='N'))OR @p_IS_TRANSFER IS NULL OR @p_IS_TRANSFER='')
2380
			  AND((@p_LEVEL='ALL' AND A.BRANCH_ID IN(SELECT BRANCH_ID FROM @tmp))
2381
              OR((@p_LEVEL='UNIT' AND A.BRANCH_ID=@p_BRANCH_ID)OR(@p_BRANCH_ID='' OR @p_BRANCH_ID IS NULL)))
2382
			  AND((@p_LEVEL='ALL' AND A.BRANCH_CREATE IN(SELECT BRANCH_ID FROM @tmp_Login))
2383
              OR((@p_LEVEL='UNIT' AND A.BRANCH_CREATE=@p_BRANCH_CREATE)OR(@p_BRANCH_CREATE='' OR @p_BRANCH_CREATE IS NULL)))
2384
			  --- KIEM TRA NEU LA MAN HINH TIM KIEM PHIEU TAM UNG DE HOAN TAM UNG THI CHI LAY NHUNG PHIEU TAM UNG CO SO TIEN TAM UNG CON LAI =0
2385
			  AND(((@p_PROCESS='PM' AND  (A.REQ_AMT- ISNULL(H.SOTIEN_TT,0)) >0) AND A.REQ_TYPE='I') OR @p_PROCESS IS NULL OR @p_PROCESS ='')
2386
			  AND ((@p_FUNCTION ='KT' AND A.MAKER_ID_KT IS NOT NULL AND A.MAKER_ID_KT ='') OR @p_FUNCTION IS NULL OR @p_FUNCTION ='')	  
2387
			  AND(PC4.TLNAME = @p_TRASFER_USER_RECIVE OR @p_TRASFER_USER_RECIVE IS NULL OR @p_TRASFER_USER_RECIVE ='')
2388
			  AND (
2389
			    (A.REQ_TYPE IN ('I','P','D')
2390
				AND (@p_TYPE_SEARCH='HC' AND EXISTS(SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = @p_BRANCH_LOGIN AND BRANCH_TYPE ='HS') 
2391
										  AND ( (A.PROCESS IS NOT NULL AND A.PROCESS <> '' AND (SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =A.MAKER_ID) = (SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_USER_LOGIN))
2392
										   OR(A.MAKER_ID =@P_USER_LOGIN OR A.TRASFER_USER_RECIVE =@p_USER_LOGIN))
2393
				OR (@p_TYPE_SEARCH='HC' AND NOT EXISTS(SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_LOGIN AND BRANCH_TYPE ='HS')
2394
										  AND A.BRANCH_ID IN (SELECT BRANCH_ID from @tmp_Login))
2395
				OR (@p_TYPE_SEARCH ='HC' AND (A.DVDM_ID IS NOT NULL OR A.DVDM_ID <>'' AND A.DVDM_ID =@DVDM_ID AND A.PROCESS IS NOT NULL AND A.PROCESS <>'') OR (A.DEP_ID IN (SELECT * FROM @TMP_DEP) AND A.PROCESS IS NOT NULL AND A.PROCESS <>''))
2396
				OR (@p_TYPE_SEARCH ='HC' AND EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE REQ_ID= A.REQ_PAY_ID AND ROLE_USER ='TGD' AND STATUS ='C'))
2397
				-- HOAC NGUOC LAI NEU HC NHUNG PHIEU DUOC TAO O PGD, CN
2398
				OR (@p_TYPE_SEARCH='KT' AND  A.BRANCH_ID IN (SELECT BRANCH_ID from @tmp_Login)))
2399
				)
2400
				OR @p_TYPE_SEARCH IS NULL OR @p_TYPE_SEARCH ='')
2401
			 --AND (
2402
				--(A.PAY_AMT = A.REQ_AMT AND (@p_TEMP_PAY_STATUS = 'HT'))
2403
				--OR (A.PAY_AMT = 0 AND (@p_TEMP_PAY_STATUS = 'DCHU') )
2404
				--OR (A.PAY_AMT <> 0 and A.PAY_AMT < A.REQ_AMT AND (@p_TEMP_PAY_STATUS = 'DHU')) 
2405
				--OR @p_TEMP_PAY_STATUS IS NULL OR @p_TEMP_PAY_STATUS = ''
2406
				--)	 
2407
		ORDER BY A.CREATE_DT DESC;
2408
    END;
2409
    ELSE BEGIN
2410
        SELECT A.*,'' as TEMP_PAY_STATUS ,ISNULL(B.AUTH_STATUS_NAME,N'Chờ duyệt') AS AUTH_STATUS_NAME, C.AUTH_STATUS_NAME AUTH_STATUS_NAME_KT, TL.TLFullName CREATE_FULLNAME,
2411
		TL1.TLFullName APPROVE_FULLNAME,TL2.TLFullName CREATE_FULLNAME_KT,TL3.TLFullName APPROVE_FULLNAME_KT,
2412
		BR.BRANCH_NAME BRANCH_NAME_REQ, BR1.BRANCH_NAME BRANCH_NAME_CRE, DP.DEP_NAME AS DEP_NAME, DP.DEP_CODE AS DEP_CODE, BR.BRANCH_CODE BRANCH_CODE_REQ,
2413
		--Luanlt--2019/10/15-Sửa AL,AL1
2414
		BR1.BRANCH_CODE BRANCH_CODE_CRE, AL.CONTENT REQ_TYPE_NAME,AL1.CONTENT REQ_PAY_TYPE_NAME, 
2415
		A.REQ_AMT AS TOTAL_AMT_TEMP,CASE WHEN H.SOTIEN_TT IS NULL THEN ISNULL(A.PAY_AMT,0) ELSE  ISNULL(H.SOTIEN_TT,0) END AS TOTAL_AMT_PAY_HIS,
2416
		TL4.TLFullName AS TRANSFER_FULLNAME,TL5.TLFullName AS TRANSFER_RECIEVER_FULLNAME,
2417
		TL6.TLFullName AS REC_DEBIT_NAME, TL6.TLNANME AS REC_DEBIT_CODE, TL7.TLFullName AS EMP_NAME, TL7.TLNANME AS EMP_CODE,
2418
		PO.PO_CODE, PO.PO_NAME,SUP.SUP_NAME,SUP.TAX_NO AS SUP_TAX_NO,CUS.CUSTOMER_CODE AS CUST_CODE, CUS.CUSTOMER_NAME AS CUST_NAME,PM.PAY_PHASE AS KY_TAM_UNG,
2419
		DV.DVDM_CODE, DV.DVDM_NAME, CASE WHEN PC.ROLE_USER ='GDDV' THEN (SELECT RoleName FROM TL_USER WHERE TLNANME =@p_USER_LOGIN) ELSE PC.ROLE_USER END AS ROLE_CONF, PR.PROCESS_DESC +N' vào lúc '+ CONVERT(VARCHAR(30), CONVERT(DATETIME, PR.APP_DT,103))  AS CONF_STATUS, PC1.NOTES AS NEXT_STEP,
2420
		PC3.LEVEL_JOB, PC3.STATUS_JOB,PC3.TYPE_JOB,PC3.TLNAME AS EXEC_USER,TL8.TLFullName AS RECIVER_MONEY_FULLNAME, BR1.BRANCH_TYPE AS BRANCH_TYPE_CR, BR.BRANCH_TYPE,@p_TYPE_SEARCH AS TYPE_SEARCH,
2421
		SR.ROLE_ID AS ROLE_ID_CRE, ISNULL(H.SOTIEN_TT,0) AS STTT, A.REQ_AMT - ISNULL(H.SOTIEN_TT,0) AS SL_CL
2422
        FROM TR_REQ_ADVANCE_PAYMENT A
2423
             LEFT JOIN CM_AUTH_STATUS B ON A.AUTH_STATUS=B.AUTH_STATUS
2424
             LEFT JOIN CM_AUTH_STATUS C ON A.AUTH_STATUS_KT=C.AUTH_STATUS
2425
             LEFT JOIN TL_USER TL ON A.MAKER_ID=TL.TLNANME
2426
             LEFT JOIN TL_USER TL1 ON A.CHECKER_ID=TL1.TLNANME
2427
             LEFT JOIN TL_USER TL2 ON A.MAKER_ID_KT=TL2.TLNANME
2428
             LEFT JOIN TL_USER TL3 ON A.CHECKER_ID_KT=TL3.TLNANME
2429
             LEFT JOIN dbo.CM_BRANCH BR ON A.BRANCH_ID=BR.BRANCH_ID
2430
			 LEFT JOIN dbo.CM_BRANCH BR1 ON A.BRANCH_CREATE=BR1.BRANCH_ID
2431
             LEFT JOIN dbo.CM_DEPARTMENT DP ON A.DEP_ID= DP.DEP_ID
2432
			 --Luanlt--2019/10/15-Sửa AL,AL1
2433
			 LEFT JOIN CM_ALLCODE AL ON A.REQ_TYPE = AL.CDVAL AND AL.CDNAME='REQ_TYPE'
2434
			 LEFT JOIN CM_ALLCODE AL1 ON A.REQ_PAY_TYPE = AL1.CDVAL AND AL1.CDNAME='REQ_PAY_TYPE'
2435
			 LEFT JOIN TL_USER TL4 ON A.TRANSFER_MAKER = TL4.TLNANME
2436
			 LEFT JOIN TL_USER TL5 ON A.TRASFER_USER_RECIVE = TL5.TLNANME
2437
			LEFT JOIN TL_USER TL6 ON A.RECEIVER_DEBIT = TL6.TLNANME AND A.REQ_TYPE='D'
2438
			 LEFT JOIN
2439
			 (
2440
			 SELECT PAY_ADV_ID,(ISNULL(SUM(AMT_USE),0) - ISNULL(SUM(AMT_ADD),0) + ISNULL(SUM(AMT_REVERT),0)) AS SOTIEN_TT FROM TR_REQ_PAYMENT_DT WHERE AUTH_STATUS_KT ='A' GROUP BY PAY_ADV_ID
2441
			 ) H ON A.REQ_PAY_ID = H.PAY_ADV_ID
2442
			 LEFT JOIN TL_USER TL7 ON TL7.TLNANME = A.REF_ID AND A.REQ_TYPE='I'
2443
			 LEFT JOIN TR_PO_MASTER PO ON A.REF_ID = PO.PO_ID AND A.REQ_TYPE='P'
2444
			 LEFT JOIN CM_SUPPLIER SUP ON PO.SUP_ID = SUP.SUP_ID AND A.REQ_TYPE='P'
2445
			 LEFT JOIN LS_CUSTOMER CUS ON A.REF_ID = CUS.CUSTOMER_ID AND A.REQ_TYPE='D'
2446
			 LEFT JOIN TR_PO_PAYMENT PM ON A.PAY_PHASE = PM.PAY_ID AND A.REQ_TYPE='P'
2447
			 LEFT JOIN CM_DVDM DV ON A.DVDM_ID = DV.DVDM_ID
2448
			 --LEFT JOIN PL_PROCESS PR ON A.PROCESS = PR.PROCESS_ID AND A.REQ_PAY_ID = PR.REQ_ID
2449
			 LEFT JOIN 
2450
			 (
2451
				SELECT P.REQ_ID, P.PROCESS_DESC, P.APPROVE_DT AS APP_DT FROM PL_PROCESS P
2452
				INNER JOIN 
2453
				(
2454
					SELECT MAX (PR.ID) AS ID, MAX(PR.REQ_ID) AS REQ_ID FROM PL_PROCESS PR
2455
					GROUP BY PR.REQ_ID
2456
				) PR ON PR.REQ_ID = P.REQ_ID AND P.ID = PR.ID
2457
			 ) AS PR ON A.REQ_PAY_ID = PR.REQ_ID
2458
			 LEFT JOIN PL_REQUEST_PROCESS PC ON PC.REQ_ID= A.REQ_PAY_ID AND PC.ROLE_USER = @ROLE_ID AND PC.STATUS='C'
2459
			 LEFT JOIN PL_REQUEST_PROCESS PC1 ON PC1.REQ_ID= A.REQ_PAY_ID AND PC1.STATUS='C'
2460
			 LEFT JOIN PL_REQUEST_PROCESS_CHILD PC3 ON PC3.REQ_ID = A.REQ_PAY_ID AND PC3.STATUS_JOB ='C'
2461
			 LEFT JOIN PL_REQUEST_PROCESS_CHILD PC4 ON PC4.REQ_ID = A.REQ_PAY_ID AND PC4.STATUS_JOB ='C'
2462
			 LEFT JOIN TL_USER TL8 ON A.RECIVER_MONEY = TL8.TLNANME	
2463
			 LEFT JOIN TL_SYSROLE SR ON TL.RoleName = SR.ROLE_ID
2464
        WHERE 1=1 
2465
			  AND(A.REQ_PAY_CODE LIKE N'%'+@p_REQ_PAY_CODE+'%' OR @p_REQ_PAY_CODE='' OR @p_REQ_PAY_CODE IS NULL)
2466
			  AND(A.REQ_REASON LIKE N'%'+@p_REQ_REASON+'%' OR @p_REQ_REASON='' OR @p_REQ_REASON IS NULL)
2467
			  AND(A.AUTH_STATUS=@p_AUTH_STATUS OR @p_AUTH_STATUS='' OR @p_AUTH_STATUS IS NULL)
2468
			  AND((A.MAKER_ID_KT IS NOT NULL AND @p_IS_UPDATE_KT='Y') --Lay danh sach chua duoc phong KT cap nhat va duoc cap nhat
2469
			 OR((A.MAKER_ID_KT IS NULL AND @p_IS_UPDATE_KT='N'))OR @p_IS_UPDATE_KT IS NULL OR @p_IS_UPDATE_KT='')
2470
			  AND(A.NOTES LIKE N'%'+@p_NOTES+'%' OR @p_NOTES='' OR @p_NOTES IS NULL)
2471
			  --Luanlt-2019/10/14-Thêm Filter  REQ_TYPE,FROMDATE TODATE REF_ID
2472
			  AND(A.REQ_TYPE LIKE N'%'+@p_REQ_TYPE+'%' OR @p_REQ_TYPE = '' OR @p_REQ_TYPE IS NULL)
2473
			  AND(CONVERT(DATE, A.CREATE_DT)>=CONVERT(DATE, @p_FRMDATE, 103)OR @p_FRMDATE IS NULL OR @p_FRMDATE='')
2474
              AND(CONVERT(DATE, A.CREATE_DT)<=CONVERT(DATE, @p_TODATE, 103)OR @p_TODATE IS NULL OR @p_TODATE='')
2475
			  --Luanlt-2019/10/17-Thêm Filter REQ_PAY_CODE REQ_PAY_NAME  BRANCH_ID DEP_ID KT_AUTH
2476
			  AND(A.REQ_PAY_CODE LIKE N'%'+@p_REQ_PAY_CODE+'%' or @p_REQ_PAY_CODE='' OR @p_REQ_PAY_CODE IS NULL)
2477
			  --AND(A.TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE or @p_TRASFER_USER_RECIVE='' OR @p_TRASFER_USER_RECIVE IS NULL OR A.MAKER_ID_KT IS NOT NULL OR A.MAKER_ID_KT <>'')
2478
			  AND(A.DEP_ID = @p_DEP_ID  or @p_DEP_ID='' OR @p_DEP_ID IS NULL)
2479
			  AND((A.AUTH_STATUS_KT=@p_AUTH_STATUS_KT OR @p_AUTH_STATUS_KT='' OR @p_AUTH_STATUS_KT IS NULL) OR (@p_AUTH_STATUS_KT ='P' AND A.AUTH_STATUS_KT IN ('P','S')))
2480
			  AND(A.REF_ID =@p_REF_ID OR @p_REF_ID='' OR @p_REF_ID IS NULL)
2481
			  AND(( @p_IS_TRANSFER='Y' AND (EXISTS (SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = A.REQ_PAY_ID) OR A.AUTH_STATUS_KT ='A')) --Lay danh sach chua duoc phong KT cap nhat va duoc cap nhat
2482
              OR((@p_IS_TRANSFER='N' AND NOT EXISTS (SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = A.REQ_PAY_ID) AND A.AUTH_STATUS_KT <>'A'))OR @p_IS_TRANSFER IS NULL OR @p_IS_TRANSFER='')
2483
			 AND(((@p_PROCESS='PM' AND  (A.REQ_AMT- ISNULL(H.SOTIEN_TT,0.00)) >0)  AND A.REQ_TYPE='I') OR @p_PROCESS IS NULL OR @p_PROCESS ='')	
2484
			  AND((@p_LEVEL='ALL' AND A.BRANCH_ID IN(SELECT BRANCH_ID FROM @tmp))
2485
              OR((@p_LEVEL='UNIT' AND A.BRANCH_ID=@p_BRANCH_ID)OR(@p_BRANCH_ID='' OR @p_BRANCH_ID IS NULL)))
2486

    
2487
				AND((@p_LEVEL='ALL' AND A.BRANCH_CREATE IN(SELECT BRANCH_ID FROM @tmp_Login))
2488
              OR((@p_LEVEL='UNIT' AND A.BRANCH_CREATE=@p_BRANCH_CREATE)OR(@p_BRANCH_CREATE='' OR @p_BRANCH_CREATE IS NULL)))
2489
			  --AND ((@p_TRASFER_USER_RECIVE IS NOT NULL AND EXISTS (SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE TLNAME = @p_TRASFER_USER_RECIVE ))
2490
			  --OR @p_TRASFER_USER_RECIVE IS NULL OR @p_TRASFER_USER_RECIVE ='')	
2491
			  AND ((@p_FUNCTION ='KT' AND (EXISTS(SELECT TOP 1 * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = A.REQ_PAY_ID AND TLNAME= @p_USER_LOGIN)) OR A.CHECKER_ID_KT ='admin' OR A.AUTH_STATUS_KT ='A')
2492
					OR @p_FUNCTION IS NULL OR @p_FUNCTION ='' OR @p_FUNCTION ='TF')	  
2493
			  AND(A.MAKER_ID LIKE '%'+@p_MAKER_ID+'%' OR @p_MAKER_ID IS NULL OR @p_MAKER_ID ='')
2494
			  --AND(A.MAKER_ID_KT LIKE '%'+@p_TRASFER_USER_RECIVE+'%' OR @p_TRASFER_USER_RECIVE IS NULL OR @p_TRASFER_USER_RECIVE ='')
2495
			  --AND(PC4.TLNAME = @p_TRASFER_USER_RECIVE OR @p_TRASFER_USER_RECIVE IS NULL OR @p_TRASFER_USER_RECIVE ='')
2496
			 AND(EXISTS(SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE TLNAME =@p_TRASFER_USER_RECIVE AND TYPE_JOB='XL' AND REQ_ID = A.REQ_PAY_ID) OR @p_TRASFER_USER_RECIVE IS NULL OR @p_TRASFER_USER_RECIVE='')
2497
			  AND
2498
			  ( 
2499
			  A.MAKER_ID =@p_USER_LOGIN OR (A.TRASFER_USER_RECIVE = @p_USER_LOGIN AND A.AUTH_STATUS NOT IN ('E','R'))
2500
			  OR(
2501
			  A.AUTH_STATUS <>'E' AND((@p_TYPE_SEARCH ='HC' AND @BRANCH_TYPE_LG ='HS' AND A.REQ_TYPE ='I' 
2502
										AND (A.TRASFER_USER_RECIVE = @p_USER_LOGIN 
2503
										OR (@ROLE_ID = (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID =A.REQ_PAY_ID AND ROLE_USER =@ROLE_ID)
2504
										OR (A.DVDM_ID IS NULL AND A.DEP_ID =@DEP_ID_LG))
2505
										))
2506
			  OR(@p_TYPE_SEARCH ='HC' AND @BRANCH_TYPE_LG ='HS' AND A.REQ_TYPE <> 'I' AND 
2507
			  (A.TRASFER_USER_RECIVE = @p_USER_LOGIN OR (@ROLE_ID IN ('GDDV','GDK','KTT','TPTC') AND A.BRANCH_ID =@p_BRANCH_LOGIN AND A.DEP_ID =@DEP_ID_LG 
2508
																					AND( A.TRASFER_USER_RECIVE IS NULL OR A.TRASFER_USER_RECIVE ='' OR (A.TRASFER_USER_RECIVE IS NOT NULL AND A.TRASFER_USER_RECIVE <>'' AND A.PROCESS IS NOT NULL AND A.PROCESS <>'')))))
2509
			  OR(@p_TYPE_SEARCH ='HC' AND @BRANCH_TYPE_LG = 'CN' AND (@ROLE_ID = 'GDDV' AND 
2510
			  (
2511
			  (A.TRASFER_USER_RECIVE IS NOT NULL AND A.TRASFER_USER_RECIVE <>'' AND A.PROCESS IS NOT NULL AND A.PROCESS <>'')
2512
			  OR A.TRASFER_USER_RECIVE ='' OR A.TRASFER_USER_RECIVE IS NULL)
2513

    
2514
			  OR ((A.BRANCH_CREATE <> @p_BRANCH_LOGIN AND A.TRASFER_USER_RECIVE IS NOT NULL AND A.TRASFER_USER_RECIVE <>'') OR A.BRANCH_CREATE = @p_BRANCH_LOGIN)
2515
			  AND A.BRANCH_ID IN (SELECT * FROM @tmp)))
2516
			  OR (@p_TYPE_SEARCH ='HC' AND @BRANCH_TYPE_LG = 'CN' AND A.BRANCH_ID IN (SELECT * FROM @tmp))
2517
			  OR(@p_TYPE_SEARCH ='HC' AND @BRANCH_TYPE_LG = 'PGD' AND (@ROLE_ID IN ('GDDV','TPGD') AND A.BRANCH_ID =@p_BRANCH_LOGIN))
2518
			  OR(@p_TYPE_SEARCH ='HC' AND (A.DVDM_ID IS NOT NULL AND A.DVDM_ID <>'' AND A.DVDM_ID =@DVDM_ID AND A.PROCESS IS NOT NULL AND A.PROCESS <>'' AND @ROLE_ID IN (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID =A.REQ_PAY_ID))
2519
			  OR(A.DEP_ID IN (SELECT * FROM @TMP_DEP) AND A.PROCESS IS NOT NULL AND A.PROCESS <>'' AND @ROLE_ID IN (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID =A.REQ_PAY_ID)))
2520
			  OR(@p_TYPE_SEARCH ='HC' AND (@ROLE_ID = (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID= A.REQ_PAY_ID AND ROLE_USER  IN ('TGD','HDQT') AND STATUS ='C')))
2521
			  OR(@p_TYPE_SEARCH='KT' AND A.BRANCH_ID IN (SELECT BRANCH_ID from @tmp_Login))
2522
			  OR(@p_TYPE_SEARCH='PAY' AND (A.REQ_AMT -ISNULL(A.PAY_AMT,0)) >=0)
2523
			  )))
2524
			  AND (
2525
				(A.PAY_AMT = A.REQ_AMT AND (@p_TEMP_PAY_STATUS = 'HT'))
2526
				OR (A.PAY_AMT = 0 AND (@p_TEMP_PAY_STATUS = 'DCHU') )
2527
				OR (A.PAY_AMT <> 0 and A.PAY_AMT < A.REQ_AMT AND (@p_TEMP_PAY_STATUS = 'DHU')) 
2528
				OR @p_TEMP_PAY_STATUS IS NULL OR @p_TEMP_PAY_STATUS = ''
2529
				)	 
2530
		ORDER BY A.CREATE_DT DESC;
2531
    END;
2532
¿
2533
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
2534
@p_REQ_PAY_ID	varchar(15)= NULL,
2535
@p_REQ_PAY_CODE	varchar(50)	= NULL,
2536
@p_REQ_DT VARCHAR(20)= NULL,
2537
@p_BRANCH_ID	varchar(15)	= NULL,
2538
@p_DEP_ID	varchar(15)	= NULL,
2539
@p_REQ_REASON	nvarchar(MAX)	= NULL,
2540
@p_REQ_TYPE	varchar(15)	= NULL,
2541
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
2542
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
2543
@p_REF_ID	varchar(15)	= NULL,
2544
@p_RECEIVER_PO	nvarchar(250)	= NULL,
2545
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
2546
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
2547
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
2548
@p_REQ_AMT	decimal(18, 0)	= NULL,
2549
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
2550
@p_MAKER_ID	varchar(15)	= NULL,
2551
@p_CREATE_DT	varchar(25)	= NULL,
2552
@p_EDITOR_ID	varchar(15)	= NULL,
2553
@p_AUTH_STATUS	varchar(1)	= NULL,
2554
@p_CHECKER_ID	varchar(15)	= NULL,
2555
@p_APPROVE_DT	varchar(25)	= NULL,
2556
@p_CREATE_DT_KT	varchar(25)	= NULL,
2557
@p_MAKER_ID_KT	varchar(15)	= NULL,
2558
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
2559
@p_CHECKER_ID_KT	varchar(1)	= NULL,
2560
@p_APPROVE_DT_KT  varchar(25)= null,
2561
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
2562
@p_BRANCH_CREATE	varchar(15)	= NULL,
2563
@p_NOTES	varchar(15)	= NULL,
2564
@p_RECORD_STATUS	varchar(1)	= NULL,
2565
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
2566
@p_TRANSFER_DT	varchar(25)	= NULL,
2567
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
2568
@p_PROCESS	varchar(15)	= NULL,
2569
@p_PAY_PHASE VARCHAR(15)= NULL,
2570
@p_DVDM_ID VARCHAR(15)= NULL,
2571
@p_RATE DECIMAL(18,0) =0,
2572
@p_RECIVER_MONEY VARCHAR(15)= NULL,
2573
@p_XMP_TEMP XML = NULL,
2574
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
2575
@p_IS_PERIOD VARCHAR(5) = NULL
2576
AS
2577
--Validation is here
2578
/*
2579
DECLARE @ERRORSYS NVARCHAR(15) = '' 
2580
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
2581
	 SET @ERRORSYS = ''
2582
IF @ERRORSYS <> '' 
2583
BEGIN
2584
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
2585
	RETURN '0'
2586
END 
2587
*/
2588
	--Luanlt-2019/10/15 Disable Validation
2589
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
2590
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
2591
	--BEGIN
2592
	--	SET @ERRORSYS = 'ASSC-00005'
2593
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
2594
	--	RETURN '-1'
2595
	--END
2596
	DECLARE @BRANCH_TYPE_CR VARCHAR(15)
2597
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
2598
	DECLARE @ACC_NUM VARCHAR(15)
2599
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
2600
	IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
2601
	BEGIN
2602
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
2603
		RETURN '-1'
2604
	END
2605
	IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
2606
	BEGIN
2607
		SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
2608
		RETURN '-1'
2609
	END
2610
	IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
2611
	BEGIN
2612
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
2613
		RETURN '-1'
2614
	END
2615
	--IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
2616
	--IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
2617
	--BEGIN
2618
	--	SELECT '-1' as Result, '' REQ_PAY_ID, 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
2619
	--	RETURN '-1'
2620
	--END
2621
	IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
2622
		BEGIN
2623
			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')
2624
		END
2625
	ELSE
2626
		BEGIN
2627
			IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
2628
			BEGIN
2629
				--ROLLBACK TRANSACTION
2630
				SELECT '-1' as Result, '' REQ_PAY_ID, 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
2631
				RETURN '-1'
2632
			END
2633
	END
2634
	--IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID <> @p_REF_ID))
2635
	--BEGIN
2636
	--			SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng này đã tồn tại trong hệ thống và được gán cho một nhân viên khác' ErrorDesc
2637
	--			RETURN '-1'
2638
	--END
2639
	IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
2640
	BEGIN
2641
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng này không được vượt quá 15 kí tự' ErrorDesc
2642
				RETURN '-1'
2643
	END
2644
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
2645
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
2646
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
2647
		IF(@p_REQ_AMT <=0)
2648
		BEGIN	
2649
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
2650
			RETURN '-1'
2651
		END
2652
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
2653
		BEGIN TRANSACTION
2654
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
2655
		--BEGIN
2656
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
2657
		--END
2658
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
2659
		REF_ID = @p_REF_ID,
2660
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,REQ_DT = CONVERT(DATE,@p_REQ_DT,103),
2661
		REQ_AMT = @p_REQ_AMT,
2662
		NOTES= @p_NOTES,
2663
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
2664
		REQ_TEMP_AMT=@p_REQ_TEMP_AMT,REQ_ENTRIES = @P_REQ_ENTRIES,BRANCH_ID = @p_BRANCH_ID,REQ_PAY_CODE = @p_REQ_PAY_CODE, PAY_PHASE =@p_PAY_PHASE,
2665
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD
2666
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2667
		IF @@Error <> 0 GOTO ABORT
2668
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
2669
			DECLARE @hdoc INT
2670
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
2671
			
2672
			-- KIEM TRA NEU TAM UNG THANH TOAN
2673
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
2674
			BEGIN
2675
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
2676
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
2677
				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,2),
2678
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
2679
				@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),
2680
				@EMP_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2),@CHECK_IN VARCHAR(15),@IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
2681
				DECLARE XmlDataPO CURSOR FOR
2682
				SELECT *
2683
				FROM
2684
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
2685
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
2686
				OPEN XmlDataPO;
2687
				DECLARE @INDEX_PO INT =0
2688
				SET @INDEX_PO = 0
2689
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2690
				WHILE @@fetch_status=0 
2691
				BEGIN
2692
					SET @INDEX_PO = @INDEX_PO +1
2693
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
2694
					IF(@p_TYPE_FUNCTION ='SEND')
2695
					BEGIN
2696
					
2697
					
2698
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2699
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
2700
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
2701
					BEGIN
2702
						ROLLBACK TRANSACTION
2703
						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ố '+
2704
						(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
2705
						RETURN '-1'
2706
					END
2707
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2708
					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))
2709
					BEGIN
2710
						ROLLBACK TRANSACTION
2711
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
2712
						(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
2713
						RETURN '-1'
2714
					END
2715
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2716
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
2717
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
2718
					BEGIN
2719
						ROLLBACK TRANSACTION
2720
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
2721
						(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
2722
						RETURN '-1'
2723
					END
2724
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
2725
					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))
2726
					BEGIN
2727
						ROLLBACK TRANSACTION
2728
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
2729
						(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
2730
						RETURN '-1'
2731
					END
2732
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
2733
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED ='Y' )))
2734
					BEGIN
2735
						ROLLBACK TRANSACTION
2736
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
2737
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán. Vui lòng hủy bản nháp!' ErrorDesc
2738
						RETURN '-1'
2739
					END
2740
					END
2741
					DECLARE @REQ_PAYDTID VARCHAR(15);
2742
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
2743
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
2744
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
2745
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
2746
				IF @@error<>0 GOTO ABORT;
2747
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2748
				END
2749
				CLOSE XmlDataPO;
2750
				DEALLOCATE XmlDataPO;
2751
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
2752
				DECLARE XmlDataSchedule CURSOR FOR
2753
				SELECT *
2754
				FROM
2755
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
2756
				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,2),
2757
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
2758
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
2759
				OPEN XmlDataSchedule
2760
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
2761
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
2762
				WHILE @@fetch_status=0 
2763
				BEGIN
2764
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
2765
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
2766
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
2767
					INSERT INTO TR_REQ_PAY_SCHEDULE(
2768
					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,
2769
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
2770
					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,
2771
					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)
2772
				--- END KHAI BAO CURSOR
2773
				IF @@error<>0 GOTO ABORT;
2774
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
2775
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
2776
				END
2777
				CLOSE XmlDataSchedule;
2778
				DEALLOCATE XmlDataSchedule;
2779
			END
2780
		--- END TẠM ỨNG THANH TOÁN
2781
		---- TẠM ỨNG HĐ ĐỊNH KÌ
2782
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
2783
			BEGIN
2784
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2785
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2786
				DECLARE XmlDataPO CURSOR FOR
2787
				SELECT *
2788
				FROM
2789
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
2790
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
2791
				OPEN XmlDataPO;
2792
				SET @INDEX_PO = 0
2793
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2794
				WHILE @@fetch_status=0 
2795
				BEGIN
2796
					SET @INDEX_PO = @INDEX_PO +1
2797
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
2798
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
2799
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
2800
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
2801
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
2802
				IF @@error<>0 GOTO ABORT;
2803
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
2804
				END
2805
				CLOSE XmlDataPO;
2806
				DEALLOCATE XmlDataPO;
2807
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
2808
			----------------------------
2809
			--INSERT FROM PERIOD	
2810
				DECLARE XmlDataPeriod CURSOR FOR
2811
				SELECT *
2812
				FROM
2813
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
2814
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
2815
				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) )
2816
				OPEN XmlDataPeriod;
2817
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
2818
				@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)
2819
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
2820
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
2821
				WHILE @@fetch_status=0 
2822
				BEGIN
2823
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
2824
					IF(@p_TYPE_FUNCTION ='SEND')
2825
					BEGIN
2826
					
2827
					IF(EXISTS(SELECT CONTRACT_ID 
2828
					FROM TR_CONTRACT 
2829
					WHERE CONTRACT_ID = @REF_ID AND CONVERT(DATE,END_DT,103) < CONVERT(DATE,GETDATE(),103) AND END_DT IS NOT NULL AND CONT_TYPE ='DK' AND CONT_TYPE IS NOT NULL AND  CONT_TYPE <>''))
2830
					
2831
					--AND IS_CLOSED='Y' ))
2832
					BEGIN
2833
						ROLLBACK TRANSACTION
2834
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
2835
						RETURN '-1'
2836
					END
2837

    
2838
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
2839
					BEGIN
2840
						ROLLBACK TRANSACTION
2841
						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
2842
						RETURN '-1'
2843
					END
2844
					END
2845
					DECLARE @PERIOD_ID VARCHAR(15);
2846
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
2847
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
2848
					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)
2849
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
2850
				@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)
2851
			IF @@error<>0 GOTO ABORT;
2852
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
2853
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
2854
			END
2855
			CLOSE XmlDataPeriod;
2856
			DEALLOCATE XmlDataPeriod;
2857
			-- VALIDATE SO TIEN
2858
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
2859
			--BEGIN
2860
			--	ROLLBACK TRANSACTION
2861
			--	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
2862
			--	RETURN '-1'
2863
			--END
2864
			----
2865
			END
2866
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
2867
		--- INSERT PHƯƠNG THỨC THANH TOÁN
2868
		----MethodCursor
2869
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2870
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),@REQ_PAY_TYPE varchar(1),
2871
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20)
2872
			DECLARE XmlDataMethod CURSOR FOR
2873
			SELECT *
2874
			FROM
2875
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
2876
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
2877
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(50), 
2878
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
2879
			OPEN XmlDataMethod
2880
			FETCH NEXT FROM XmlDataMethod 
2881
			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 
2882
			WHILE @@fetch_status=0 
2883
			BEGIN
2884
				IF(@REQ_PAY_TYPE<>'1')
2885
				BEGIN
2886
					SET @ISSUED_DT = NULL
2887
				END
2888
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
2889
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
2890
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
2891
				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,
2892
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
2893
				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,'',
2894
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
2895
			IF @@error<>0 GOTO ABORT;
2896
			FETCH NEXT FROM XmlDataMethod 
2897
			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
2898
			END
2899
			CLOSE XmlDataMethod;
2900
			DEALLOCATE XmlDataMethod
2901
		----END INSERT PHƯƠNG THỨC THANH TOÁN
2902
		----INSERT VAO BANG DS KHACH HANG
2903
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
2904
			DECLARE XmlDataCus CURSOR FOR
2905
			SELECT *
2906
			FROM
2907
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
2908
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
2909
			OPEN XmlDataCus;
2910
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
2911
				WHILE @@fetch_status=0 
2912
				BEGIN		
2913
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
2914
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
2915
				--- END KHAI BAO CURSOR
2916
				IF @@error<>0 GOTO ABORT;
2917
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
2918
				END
2919
				CLOSE XmlDataCus;
2920
				DEALLOCATE XmlDataCus;
2921
		----END
2922
		-- HANG MUC CHI PHI VA NGAN SACH
2923
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2924
			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)
2925
			DECLARE XmlDataGood CURSOR FOR
2926
			SELECT *
2927
			FROM
2928
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
2929
			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))
2930
			OPEN XmlDataGood
2931
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
2932
			WHILE @@fetch_status=0 BEGIN
2933
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
2934
				SET @INDEX_NS = @INDEX_NS +1
2935
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
2936
				--IF(@p_TYPE_FUNCTION ='SEND')
2937
				--BEGIN
2938
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
2939
				--BEGIN
2940
				--		ROLLBACK TRANSACTION
2941
				--		SELECT '-1' as Result, '' REQ_PAY_ID, 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
2942
				--		RETURN '-1'
2943
				--END	
2944
				--END
2945
				DECLARE @p_BUDGET_ID VARCHAR(15);
2946
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
2947
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
2948
				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) 
2949
				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)
2950
			IF @@error<>0 GOTO ABORT;
2951
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
2952
			END;
2953
		CLOSE XmlDataGood;
2954
		DEALLOCATE XmlDataGood;
2955
		--- END INSERT NGAN SACH
2956
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2957
		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)
2958
		DECLARE XmlAttach CURSOR FOR
2959
		SELECT *
2960
		FROM
2961
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
2962
		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))
2963
		OPEN XmlAttach
2964
		--INSERT CHUNG TU DINH KEM
2965
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
2966
				WHILE @@fetch_status=0 
2967
				BEGIN
2968
					IF (@REF_DT='')
2969
					BEGIN
2970
						SET @REF_DT = NULL
2971
					END
2972
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
2973
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
2974
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
2975
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
2976
				IF @@error<>0 GOTO ABORT;
2977
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
2978
				END
2979
				CLOSE XmlAttach;
2980
				DEALLOCATE XmlAttach;
2981
		----END
2982
		--- BAT DAU VALIDATE
2983
		IF(@p_TYPE_FUNCTION ='SEND')
2984
		BEGIN
2985
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
2986
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
2987
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
2988
			BEGIN
2989
				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)
2990
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
2991
				BEGIN
2992
					ROLLBACK TRANSACTION
2993
					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
2994
					RETURN '-1'
2995
				END
2996
			END
2997
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
2998
			BEGIN
2999
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
3000
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
3001
				BEGIN
3002
					ROLLBACK TRANSACTION
3003
					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
3004
					RETURN '-1'
3005
				END
3006
			END
3007
			ELSE
3008
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
3009
			BEGIN
3010
				ROLLBACK TRANSACTION
3011
				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
3012
				RETURN '-1'
3013
			END
3014
			
3015
		END
3016
		----END
3017
		IF(@p_REQ_TYPE ='I')
3018
			BEGIN
3019
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
3020
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
3021
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
3022
				BEGIN
3023
					--DECLARE @DEP_CODE VARCHAR(15)
3024
					--SET @DEP_CODE =(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
3025
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
3026
					BEGIN
3027
						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'
3028
					END
3029
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
3030
					BEGIN
3031
						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'
3032
					END
3033
					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)
3034
					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) 
3035
					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))
3036
					BEGIN
3037
						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')
3038
					END
3039
					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)
3040
					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) 
3041
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
3042
					BEGIN
3043
						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'
3044
					END
3045
					ELSE
3046
					BEGIN
3047
						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'
3048
					END
3049
				END
3050
				ELSE
3051
				BEGIN
3052
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
3053
					BEGIN
3054
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
3055
						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
3056
						--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'
3057
				END
3058
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
3059
					BEGIN
3060
						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 =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
3061
						--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'
3062
				END
3063
				END
3064
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
3065
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
3066
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
3067
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
3068
				OPEN CUR_PR
3069
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
3070
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
3071
				BEGIN								
3072
					SET @INDEX= @INDEX+1
3073
					IF @INDEX = @SL_ROLE
3074
						SET @ISLEAF = 'Y'
3075
					ELSE
3076
						SET @ISLEAF = 'N'
3077
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
3078

    
3079
					IF(@INDEX=1 )
3080
					BEGIN		
3081
						SET @PARENT_ID = NULL
3082
						SET @STATUS = 'C'							
3083
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
3084
					END				
3085
					ELSE 
3086
					BEGIN
3087
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
3088
						SET @STATUS = 'U'
3089
					END
3090
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
3091
						BEGIN
3092
							INSERT INTO dbo.PL_REQUEST_PROCESS
3093
							(
3094
								REQ_ID,
3095
								PROCESS_ID,
3096
								STATUS,
3097
								ROLE_USER,
3098
								BRANCH_ID,
3099
								CHECKER_ID,
3100
								APPROVE_DT,
3101
								PARENT_PROCESS_ID,
3102
								IS_LEAF, COST_ID, DVDM_ID, NOTES
3103
							)
3104
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
3105
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
3106
							BREAK;
3107
						END
3108
						ELSE
3109
							INSERT INTO PL_REQUEST_PROCESS (
3110
								REQ_ID,
3111
								PROCESS_ID,
3112
								STATUS,
3113
								ROLE_USER,
3114
								BRANCH_ID,
3115
								CHECKER_ID,
3116
								APPROVE_DT,
3117
								PARENT_PROCESS_ID,
3118
								IS_LEAF, COST_ID, DVDM_ID, NOTES
3119
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
3120
					--END
3121
					
3122
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
3123
				END
3124
				CLOSE CUR_PR
3125
				DEALLOCATE CUR_PR
3126
			END
3127
COMMIT TRANSACTION
3128
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
3129
		BEGIN
3130
				--ROLLBACK TRANSACTION
3131
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
3132
				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')
3133
				BEGIN
3134
					DECLARE @USER_TP VARCHAR(15) =''
3135
					--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
3136
					--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
3137
					IF(@USER_TP IS NULL OR @USER_TP ='')
3138
					BEGIN
3139
						SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
3140
							AND (RoleName IN ('GDDV','TPTC','TC','KTT')))
3141
					END
3142
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3143
				END
3144
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
3145
				BEGIN
3146
					DECLARE @USER_TPGD VARCHAR(15) =''
3147
					--SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND (RoleName IN ('TPGD') OR
3148
					--RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='TPGD')))
3149
					IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
3150
					BEGIN
3151
						SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID =@p_BRANCH_CREATE 
3152
							AND RoleName ='TPGD')
3153
					END
3154
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3155
				END
3156
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3157
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
3158
				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')
3159
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
3160
				RETURN '4'
3161
		END
3162
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
3163
RETURN '0'
3164
ABORT:
3165
BEGIN
3166
		ROLLBACK TRANSACTION
3167
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
3168
		RETURN '-1'
3169
End
3170

    
3171
¿
3172
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_Ins]
3173
@p_REQ_PAY_ID	varchar(15)= NULL,
3174
@p_REQ_PAY_CODE	varchar(50)	= NULL,
3175
@p_REQ_DT VARCHAR(20)= NULL,
3176
@p_BRANCH_ID	varchar(15)	= NULL,
3177
@p_DEP_ID	varchar(15)	= NULL,
3178
@p_REQ_REASON	nvarchar(MAX)	= NULL,
3179
@p_REQ_TYPE	varchar(15)	= NULL,
3180
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
3181
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
3182
@p_REF_ID	varchar(15)	= NULL,
3183
@p_RECEIVER_PO	nvarchar(250)	= NULL,
3184
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
3185
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
3186
@p_REQ_AMT	decimal(18, 0)	= NULL,
3187
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
3188
@p_MAKER_ID	varchar(15)	= NULL,
3189
@p_CREATE_DT	varchar(25)	= NULL,
3190
@p_EDITOR_ID	varchar(15)	= NULL,
3191
@p_AUTH_STATUS	varchar(1)	= NULL,
3192
@p_CHECKER_ID	varchar(15)	= NULL,
3193
@p_APPROVE_DT	varchar(25)	= NULL,
3194
@p_CREATE_DT_KT	varchar(25)	= NULL,
3195
@p_MAKER_ID_KT	varchar(15)	= NULL,
3196
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
3197
@p_CHECKER_ID_KT	varchar(1)	= NULL,
3198
@p_APPROVE_DT_KT  varchar(25)= null,
3199
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
3200
@p_BRANCH_CREATE	varchar(15)	= NULL,
3201
@p_NOTES	varchar(15)	= NULL,
3202
@p_RECORD_STATUS	varchar(1)	= NULL,
3203
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
3204
@p_TRANSFER_DT	varchar(25)	= NULL,
3205
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
3206
@p_PROCESS	varchar(15)	= NULL,
3207
@p_PAY_PHASE VARCHAR(15) = NULL,
3208
@p_RATE	DECIMAL(18,2) = 0,
3209
@p_IS_PERIOD VARCHAR(5) = NULL,
3210
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
3211
@p_XMP_TEMP XML = NULL,
3212
@p_XMP_TEMP_2 XML = NULL
3213

    
3214
AS
3215
	BEGIN TRANSACTION
3216
		DECLARE @VAT decimal(18, 0) =NULL, @TRANS_NO nvarchar(50)=NULL, @TRANS_DT VARCHAR(20)=NULL,@INVOICE_SIGN nvarchar(50) = NULL,@INVOICE_NO_SIGN nvarchar(50)=null,
3217
		@INVOICE_NO nvarchar(50) = NULL,@INVOICE_DT VARCHAR(20) = NULL,@SELLER nvarchar(50) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(500) = NULL,
3218
		@PRICE decimal(18, 0) = NULL,@TAX decimal(18, 0) = NULL,@NOTES NVARCHAR(MAX) = NULL,@VAT_RATE decimal(18,2), @REF_ID VARCHAR(15),@IS_CLOSED VARCHAR(1),
3219
		@ACC_NO VARCHAR(25),@ACC_NAME NVARCHAR(250),@ISSUED_BY NVARCHAR(250),@ISSUED_DT VARCHAR(20),@CURRENCY VARCHAR(15)= NULL,@RATE DECIMAL(18,2),@TYPE_TRANS VARCHAR(15),
3220
		@TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15),@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
3221
		DECLARE @PAY_ADV_ID VARCHAR(15), @REQ_PAY_ADV_CODE VARCHAR(15)
3222
		DECLARE @AMT_ADVANCED decimal(18,2),@AMT_DO decimal(18,2),
3223
		@AMT_REMAIN decimal(18,2),@AMT_PAY decimal(18,2),@AMT_USE decimal(18,2),@AMT_REVERT DECIMAL(18,2), @AMT_ADD DECIMAL(18,2)
3224
		DECLARE @TOTAL_SCHEDULE_AMT decimal(18,2) =0
3225
		DECLARE @INDEX_PO INT =0, @INDEX_AD INT =0, @INDEX_IV INT=0,@INDEX_NS INT =0
3226
		DECLARE @hdoc INT, @hDoc2 INT
3227
		EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
3228
		EXEC sp_xml_preparedocument @hDoc2 OUTPUT, @p_XMP_TEMP_2;
3229
		DECLARE XmlData CURSOR LOCAL FOR
3230
		SELECT *
3231
		FROM
3232
		OPENXML(@hdoc, '/Root/XmlData', 2)
3233
		WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),
3234
		 INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(50),TAX_NO nvarchar(15),GOODS_NAME nvarchar(500) ,
3235
		PRICE decimal(18,2),TAX decimal(18, 2),VAT decimal(18,2),NOTE NVARCHAR(MAX),VAT_RATE decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),TYPE_VAT VARCHAR(15), TYPE_FUNC VARCHAR(15))
3236
		OPEN XmlData;
3237
		--CURSOR 2
3238
		DECLARE XmlDataPay CURSOR LOCAL FOR
3239
		SELECT *
3240
		FROM
3241
		OPENXML(@hDoc2, '/Root/XmlDataPay', 2)
3242
		WITH(PAY_ADV_ID nvarchar(50),AMT_ADVANCED decimal(18, 0),AMT_DO decimal(18,2),
3243
		AMT_REMAIN decimal(18,2),AMT_PAY decimal(18,2),AMT_USE decimal(18,2),AMT_REVERT DECIMAL(18,2),AMT_ADD DECIMAL(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
3244
		OPEN XmlDataPay;
3245
	------------------------
3246
		--Luanlt---
3247
		--MethodCursor
3248
		DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),
3249
		@REQ_PAY_TYPE varchar(1),@REQ_PAY_DESC nvarchar(MAX),@REQ_PAY_ENTRIES nvarchar(MAX),@CHECK_IN VARCHAR(15)
3250
		DECLARE XmlDataMethod CURSOR LOCAL FOR
3251
		SELECT *
3252
		FROM
3253
		OPENXML(@hdoc, 'Root/XmlDataMethod',2)
3254
		WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),
3255
		REQ_PAY_TYPE varchar(1),REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(25), 
3256
		ACC_NAME NVARCHAR(250),ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),CHECK_IN VARCHAR(15),TYPE_TRANS VARCHAR(15))
3257
		OPEN XmlDataMethod
3258
		----------
3259
		--CatCursor
3260
		DECLARE @REQ_ADV_ID varchar(15),@CAT_NAME nvarchar(100),@TOTAL_AMT_CAT decimal(18,2), @DEPT_ID VARCHAR(15)
3261
		DECLARE XmlDataCat CURSOR LOCAL FOR
3262
		SELECT *
3263
		FROM
3264
		OPENXML(@hdoc, 'Root/XmlDataCat',2) 
3265
		WITH(REQ_ADV_ID VARCHAR(15),CAT_NAME nvarchar(100),TOTAL_AMT decimal(18,2), DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
3266
		OPEN XmlDataCat
3267
	---------------
3268
	--ServiceCursor
3269
		DECLARE @REQ_PAY_SERVICE_NAME nvarchar(100),@RECEIVE_ID_SERVICE varchar(15),@RECEIVE_NAME_SERVICE nvarchar(100),@REQ_PAY_REASON_SERVICE nvarchar(MAX),
3270
		@TOTAL_AMT_SERVICE decimal(18,2),
3271
		@REQ_PAY_TYPE_SERVICE varchar(1),@REQ_PAY_DESC_SERVICE nvarchar(MAX),@REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),@DEPT_ID_SRV VARCHAR(15)
3272
		DECLARE XmlDataService CURSOR LOCAL FOR
3273
		SELECT *
3274
		FROM
3275
		OPENXML(@hdoc, 'Root/XmlDataService',2)
3276
		WITH(REQ_PAY_SERVICE_NAME nvarchar(100),RECEIVE_ID_SERVICE varchar(15),RECEIVE_NAME_SERVICE nvarchar(100),REQ_PAY_REASON_SERVICE nvarchar(MAX),
3277
		TOTAL_AMT_SERVICE decimal(18,2),REQ_PAY_TYPE_SERVICE varchar(1),REQ_PAY_DESC_SERVICE nvarchar(MAX),REQ_PAY_ENTRIES_SERVICE nvarchar(MAX), 
3278
		DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
3279
		OPEN XmlDataService
3280
			---------------
3281
	--ScheduleCursor
3282
		DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,2),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,2),
3283
		@AMT_REMAIN_SCHEDULE decimal(18,2),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2), @AMT_PAY_DO DECIMAL(18,2)
3284
		DECLARE XmlDataSchedule CURSOR LOCAL FOR
3285
		SELECT *
3286
		FROM
3287
		OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
3288
		WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,2),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,2),
3289
		AMT_REMAIN_SCHEDULE decimal(18,2),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),REQ_PAY_DESC NVARCHAR(250),
3290
		REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),AMT_PAY_DO DECIMAL(18,2),AMT_PAY_REAL DECIMAL(18,2))
3291
		OPEN XmlDataSchedule
3292
	--END luanlt---
3293
	-- DS HANG MUC NGAN SACH
3294
		DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2),@AMT_EXE decimal(18,2),@AMT_REMAIN_GD decimal(18,2)
3295
		DECLARE XmlDataGood CURSOR LOCAL FOR
3296
		SELECT *
3297
		FROM
3298
		OPENXML(@hdoc, 'Root/XmlDataGood',2) 
3299
		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))
3300
		OPEN XmlDataGood
3301
	---- END CURSOR
3302
	--CatCursor
3303
		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)
3304
		DECLARE XmlAttach CURSOR LOCAL FOR
3305
		SELECT *
3306
		FROM
3307
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
3308
		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))
3309
		OPEN XmlAttach
3310
	--THIEUVQ 281119---
3311
		EXEC [dbo].[PAY_CODE_GenKey] 'TR_REQ_PAYMENT', '','', @p_REQ_PAY_CODE out
3312
	--END--
3313
		DECLARE @INDEX INT  =0
3314
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
3315
		BEGIN
3316
			ROLLBACK TRANSACTION
3317
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
3318
			RETURN '-1'
3319
		END
3320
		IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
3321
		BEGIN
3322
			ROLLBACK TRANSACTION
3323
			SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Số phiếu đề nghị thanh toán đã tồn tại trong hệ thống' ErrorDesc
3324
			RETURN '-1'
3325
		END
3326
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT', @p_REQ_PAY_ID out
3327
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
3328
		INSERT INTO [dbo].[TR_REQ_PAYMENT]
3329
           ([REQ_PAY_ID]
3330
           ,[REQ_PAY_CODE],[REQ_DT]
3331
           ,[BRANCH_ID]
3332
           ,[DEP_ID]
3333
           ,[REQ_REASON]
3334
           ,[REQ_TYPE],REQ_ENTRIES,
3335
            [REQ_DESCRIPTION]
3336
           ,REF_ID,
3337
			RECEIVER_PO
3338
           ,[REQ_PAY_TYPE]
3339
           ,[REQ_TYPE_CURRENCY]
3340
           ,[REQ_AMT]
3341
           ,[REQ_TEMP_AMT]
3342
           ,[MAKER_ID]
3343
           ,[CREATE_DT]
3344
           ,[EDITOR_ID]
3345
           ,[AUTH_STATUS]
3346
           ,[CHECKER_ID]
3347
           ,[APPROVE_DT]
3348
           ,[CREATE_DT_KT]
3349
           ,[MAKER_ID_KT]
3350
           ,[AUTH_STATUS_KT]
3351
           ,[CHECKER_ID_KT]
3352
		   ,[APPROVE_DT_KT]
3353
           ,[CONFIRM_NOTE]
3354
           ,[BRANCH_CREATE]
3355
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS, PAY_PHASE,IS_PERIOD)
3356
			VALUES
3357
           (@p_REQ_PAY_ID,
3358
			@p_REQ_PAY_CODE,CONVERT(DATE,@p_REQ_DT,103),
3359
			@p_BRANCH_ID,
3360
			@p_DEP_ID,
3361
			@p_REQ_REASON,
3362
			@p_REQ_TYPE,
3363
			@P_REQ_ENTRIES,
3364
			@p_REQ_DESCRIPTION,
3365
			@p_REF_ID,
3366
			@p_RECEIVER_PO,
3367
			@p_REQ_PAY_TYPE,
3368
			@p_REQ_TYPE_CURRENCY,
3369
			@p_REQ_AMT,
3370
			@p_REQ_TEMP_AMT,
3371
			@p_MAKER_ID,
3372
			GETDATE(),
3373
			@p_EDITOR_ID,
3374
			'E',
3375
			NULL,
3376
			NULL,
3377
			NULL,
3378
			NULL,
3379
			NULL,
3380
			NULL,
3381
			NULL,
3382
			NULL,
3383
			@p_BRANCH_CREATE,
3384
			@p_NOTES,@p_RECORD_STATUS,
3385
			@p_TRANSFER_MAKER,
3386
			NULL,
3387
			@p_TRASFER_USER_RECIVE,
3388
			NULL,@p_PAY_PHASE,ISNULL(@p_IS_PERIOD,'N'))
3389
		IF @@Error <> 0 GOTO ABORT
3390
		--- INSERT LICH THANH TOAN
3391
			--INSERT FROM MethodCursor
3392
			SET @INDEX = 0
3393
			FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,
3394
			@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS
3395
			WHILE @@fetch_status=0 
3396
			BEGIN
3397
				IF(@REQ_PAY_TYPE<>'1')
3398
				BEGIN
3399
					SET @ISSUED_DT = NULL
3400
				END
3401
				SET @INDEX = @INDEX +1
3402
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
3403
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
3404
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
3405
				INSERT INTO TR_REQ_PAY_METHOD
3406
				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,'',@p_MAKER_ID,GETDATE(),@ACC_NO, @ACC_NAME,@ISSUED_BY,CONVERT(DATE,@ISSUED_DT,103),@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS)
3407
			IF @@error<>0 GOTO ABORT;
3408
			FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,
3409
			@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS
3410
			END
3411
			CLOSE XmlDataMethod;
3412
			DEALLOCATE XmlDataMethod;
3413
			-------------------------
3414
		-- INSERT CHUNG TU DINH KEM
3415
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
3416
				WHILE @@fetch_status=0 
3417
				BEGIN
3418
					IF (@REF_DT='')
3419
					BEGIN
3420
						SET @REF_DT = NULL
3421
					END
3422
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
3423
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
3424
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
3425
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
3426
				IF @@error<>0 GOTO ABORT;
3427
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
3428
				END
3429
				CLOSE XmlAttach;
3430
				DEALLOCATE XmlAttach;
3431
		----END
3432
		--Insert XmlData
3433
		FETCH NEXT FROM XmlData INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
3434
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
3435
		WHILE @@fetch_status=0 BEGIN
3436
			-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
3437
			IF(@p_TYPE_FUNCTION ='SEND')
3438
			BEGIN
3439
			SET @INDEX_IV = @INDEX_IV+1
3440
			IF(LEN(@INVOICE_NO) >7)
3441
				BEGIN
3442
					ROLLBACK TRANSACTION
3443
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' không được vượt quá 7 kí tự' ErrorDesc
3444
					RETURN '-1'
3445
				END	
3446
				 IF(LEN(@INVOICE_NO) <7)
3447
				BEGIN
3448
					ROLLBACK TRANSACTION
3449
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' phải đủ 7 kí tự' ErrorDesc
3450
					RETURN '-1'
3451
				END	
3452
				IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX))
3453
				BEGIN
3454
					ROLLBACK TRANSACTION
3455
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' đã tồn tại trong hệ thống' ErrorDesc
3456
					RETURN '-1'
3457
				END	
3458
			END
3459
			SET @INDEX = @INDEX +1
3460
			DECLARE @p_REQ_INV_ID VARCHAR(15);
3461
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
3462
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
3463
			INSERT INTO TR_REQ_PAY_INVOICE(REQ_PAYDT_ID,REQ_PAY_ID,TRANS_NO,TRANS_DT,INVOICE_SIGN,INVOICE_NO,INVOICE_DT,SELLER,TAX_NO,GOODS_NAME,PRICE,TAX,VAT,NOTE,
3464
		MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,CHECKER_ID,APPROVE_DT,
3465
		CREATE_DT_KT,MAKER_ID_KT,AUTH_STATUS_KT,CHECKER_ID_KT,APPROVE_DT_KT,RECORD_STATUS,INVOICE_NO_SIGN,VAT_RATE,CURRENCY,RATE,PRICE_KT,VAT_KT,TOTAL_AMT_KT,TYPE_VAT,TYPE_FUNC) 
3466
		VALUES (@p_REQ_INV_ID,@p_REQ_PAY_ID , @TRANS_NO , NULL  ,@INVOICE_SIGN ,@INVOICE_NO ,CONVERT(DATE,@INVOICE_DT,103) ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,
3467
		@p_MAKER_ID,GETDATE(),NULL,'U',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',@INVOICE_NO_SIGN,@VAT_RATE,@CURRENCY,@RATE,@PRICE,@VAT,@PRICE+@VAT,@TYPE_VAT,@TYPE_FUNC)
3468
		IF @@error<>0 GOTO ABORT;
3469
		FETCH NEXT FROM XmlData
3470
		INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
3471
		END;
3472
		CLOSE XmlData;
3473
		DEALLOCATE XmlData;
3474
		--- INSERT CAC HANG MUC NGAN SACH		
3475
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
3476
		WHILE @@fetch_status=0 BEGIN
3477
		--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
3478
			SET @INDEX_NS = @INDEX_NS +1
3479
			-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
3480
			--IF(@p_TYPE_FUNCTION ='SEND')
3481
			--BEGIN
3482
			--	IF((@AMT_EXE  > @AMT_REMAIN_GD))
3483
			--	BEGIN
3484
			--			ROLLBACK TRANSACTION
3485
			--			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
3486
			--			RETURN '-1'
3487
			--	END		
3488
			--END
3489
			DECLARE @p_BUDGET_ID VARCHAR(15);
3490
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
3491
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
3492
			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) 
3493
			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)
3494
		IF @@error<>0 GOTO ABORT;
3495
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
3496
		END;
3497
		CLOSE XmlDataGood;
3498
		DEALLOCATE XmlDataGood;
3499
		--- END INSERT NGAN SACH
3500
		---------------------------
3501
		--Luanlt--
3502
		------------------------
3503
		IF(@p_REQ_TYPE = 'I')	
3504
		BEGIN
3505
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE
3506
			WHILE @@fetch_status=0 
3507
			BEGIN
3508
				SET @REQ_PAY_ADV_CODE = (SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID)
3509
				SET @INDEX_AD = @INDEX_AD +1
3510
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
3511
				IF(@p_TYPE_FUNCTION ='SEND')
3512
				BEGIN
3513
				-- KIEM TRA XEM CO PHIEU NAO DANG DUOC THANH TOAN HOAN TAM UNG MA CHUA DUYET HAY CHUA
3514
				IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_DT WHERE (PAY_ADV_ID =@PAY_ADV_ID AND (AUTH_STATUS_KT <>'A' OR AUTH_STATUS_KT IS NULL)) AND PAY_ID <>@p_REQ_PAY_ID))
3515
				BEGIN
3516
					ROLLBACK TRANSACTION
3517
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Phiếu tạm ứng số '+@REQ_PAY_ADV_CODE+ N' đang được thanh toán hoàn tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
3518
					RETURN '-1'
3519
				END		
3520
				-- KIEM TRA NEU SO TIEN DE NGHI HOAN TAM ƯNG LON HON SO TIEN CON LAI CAN PHAI TAM UNG
3521
				IF(@AMT_REVERT>(@AMT_REMAIN -@AMT_USE) AND @AMT_REVERT >0)
3522
				BEGIN
3523
					ROLLBACK TRANSACTION
3524
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Số tiền hoàn ứng không được vượt quá '+FORMAT((@AMT_REMAIN -@AMT_USE),'#,#', 'vi-VN') ErrorDesc
3525
					RETURN '-1'
3526
				END		
3527
				END
3528
				DECLARE @p_REQ_PAYDT_ID VARCHAR(15);
3529
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT_DT', @p_REQ_PAYDT_ID OUT;
3530
				IF @p_REQ_PAYDT_ID='' OR @p_REQ_PAYDT_ID IS NULL GOTO ABORT;
3531
				INSERT INTO TR_REQ_PAYMENT_DT
3532
				VALUES (@p_REQ_PAYDT_ID,@PAY_ADV_ID,@p_REQ_PAY_ID , ISNULL(@AMT_ADVANCED,0) ,ISNULL(@AMT_DO,0),ISNULL(@AMT_REMAIN,0),
3533
				ISNULL(@AMT_PAY,0) ,ISNULL(@AMT_USE,0) ,ISNULL(@AMT_REVERT,0), ISNULL(@AMT_ADD,0), GETDATE()  ,@p_MAKER_ID ,GETDATE() ,NULL ,NULL,'U' ,NULL ,NULL ,NULL ,NULL,NULL,@CURRENCY,@RATE)
3534
			IF @@error<>0 GOTO ABORT;
3535
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE
3536
			END
3537
			CLOSE XmlDataPay;
3538
			DEALLOCATE XmlDataPay;
3539
			--INSERT FROM CatCursor
3540
			SET @INDEX = 0
3541
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
3542
			WHILE @@fetch_status=0 
3543
			BEGIN
3544
				SET @INDEX = @INDEX +1
3545
				DECLARE @p_REQ_PAY_CAT_ID VARCHAR(15);
3546
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_CAT', @p_REQ_PAY_CAT_ID OUT;
3547
				IF @p_REQ_PAY_CAT_ID='' OR @p_REQ_PAY_CAT_ID IS NULL GOTO ABORT;
3548
				INSERT INTO TR_REQ_PAY_CAT
3549
				VALUES (@p_REQ_PAY_CAT_ID,@p_REQ_PAY_ID,@REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@p_MAKER_ID,GETDATE(),@CURRENCY,@RATE)
3550
			IF @@error<>0 GOTO ABORT;
3551
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
3552
			END
3553
			CLOSE XmlDataCat;
3554
			DEALLOCATE XmlDataCat;
3555
		END
3556
		IF(@p_REQ_TYPE = 'D' OR @p_REQ_TYPE='I')
3557
		BEGIN
3558
			----------------------------
3559
			--INSERT FROM ServiceCursor
3560
			SET @INDEX = 0
3561
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
3562
			@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
3563
			WHILE @@fetch_status=0 
3564
			BEGIN
3565
				SET @INDEX = @INDEX +1
3566
				DECLARE @p_REQ_PAY_SERVICE_ID VARCHAR(15);
3567
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SERVICE', @p_REQ_PAY_SERVICE_ID OUT;
3568
				IF @p_REQ_PAY_SERVICE_ID='' OR @p_REQ_PAY_SERVICE_ID IS NULL GOTO ABORT;
3569
				INSERT INTO TR_REQ_PAY_SERVICE(SERVICE_ID,REQ_PAY_ID,SERVICE_NAME,EMP_ID,REQ_PAY_REASON,TOTAL_AMT,REQ_PAY_TYPE,REQ_PAY_DESC,REQ_PAY_ENTRIES,MAKER_ID,CREATE_DT,DEPT_ID,CURRENCY,RATE)
3570
				VALUES (@p_REQ_PAY_SERVICE_ID,@p_REQ_PAY_ID,@REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
3571
				@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@p_MAKER_ID,GETDATE(),@DEPT_ID_SRV,@CURRENCY,@RATE)
3572
			IF @@error<>0 GOTO ABORT;
3573
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,@REQ_PAY_TYPE_SERVICE,
3574
			@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
3575
			END
3576
			CLOSE XmlDataService;
3577
			DEALLOCATE XmlDataService;
3578
		END
3579
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE ='I')
3580
		BEGIN
3581
				DECLARE XmlDataPO CURSOR LOCAL FOR
3582
				SELECT *
3583
				FROM
3584
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
3585
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
3586
				OPEN XmlDataPO;
3587
				SET @INDEX_PO = 0
3588
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
3589
				WHILE @@fetch_status=0 
3590
				BEGIN
3591
					SET @INDEX_PO = @INDEX_PO +1
3592
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3593
					--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)))
3594
					--BEGIN
3595
					--	ROLLBACK TRANSACTION
3596
					--	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
3597
					--	RETURN '-1'
3598
					--END
3599
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3600
					--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)))
3601
					--BEGIN
3602
					--	ROLLBACK TRANSACTION
3603
					--	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
3604
					--	RETURN '-1'
3605
					--END
3606
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3607
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
3608
					IF(@p_TYPE_FUNCTION ='SEND')
3609
					BEGIN
3610
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' AND REQ_PAY_ID 
3611
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
3612
					BEGIN
3613
						ROLLBACK TRANSACTION
3614
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
3615
						(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
3616
						RETURN '-1'
3617
					END
3618
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3619
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_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))
3620
					BEGIN
3621
						ROLLBACK TRANSACTION
3622
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
3623
						(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
3624
						RETURN '-1'
3625
					END
3626
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3627
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID 
3628
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
3629
					BEGIN
3630
						ROLLBACK TRANSACTION
3631
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
3632
						(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
3633
						RETURN '-1'
3634
					END
3635
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
3636
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_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))
3637
					BEGIN
3638
						ROLLBACK TRANSACTION
3639
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
3640
						(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
3641
						RETURN '-1'
3642
					END
3643
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
3644
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED ='Y' )))
3645
					BEGIN
3646
						ROLLBACK TRANSACTION
3647
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
3648
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán xong. Vui lòng chọn PO khác để thanh toán hoặc xóa bản nháp này!' ErrorDesc
3649
						RETURN '-1'
3650
					END
3651
					END
3652
					DECLARE @REQ_PAYDTID VARCHAR(15);
3653
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
3654
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
3655
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
3656
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
3657
				IF @@error<>0 GOTO ABORT;
3658
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
3659
				END
3660
				CLOSE XmlDataPO;
3661
				DEALLOCATE XmlDataPO;
3662
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
3663
			----------------------------
3664
			--INSERT FROM ScheduleCursor
3665
			SET @INDEX_PO = 0
3666
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,
3667
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
3668
			WHILE @@fetch_status=0 
3669
			BEGIN
3670
				--IF(@AMT_REMAIN_SCHEDULE =0)
3671
				--BEGIN
3672
				--	SET @PROCESS ='3'
3673
				--END
3674
				--IF(@PROCESS <>'2')
3675
				--BEGIN
3676
				--	SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +@AMT_REMAIN_SCHEDULE
3677
				--END
3678
				----
3679
				SET @TOTAL_SCHEDULE_AMT =@TOTAL_SCHEDULE_AMT+(@AMT_PAY_SCHEDULE -@AMT_ADVANCE_SCHEDULE-@AMT_PAY_DO)
3680
				SET @INDEX_PO = @INDEX_PO +1
3681
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
3682
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
3683
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
3684
				INSERT INTO TR_REQ_PAY_SCHEDULE (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,
3685
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
3686
				VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,
3687
				--IIF(@PROCESS<>'2',(@AMT_PAY_SCHEDULE-@AMT_ADVANCE_SCHEDULE),0),
3688
				@AMT_PAY_DO,
3689
				@AMT_REMAIN_SCHEDULE,GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),@PROCESS,@p_MAKER_ID,GETDATE(),'U','','PAY',
3690
				@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL)
3691
			IF @@error<>0 GOTO ABORT;
3692
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,
3693
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
3694
			END
3695
			CLOSE XmlDataSchedule;
3696
			DEALLOCATE XmlDataSchedule;
3697
			-- VALIDATE DANH SACH HOAN UNG -- LUCTV BO SUNG 19-11-2019. CHUA BIET CO VALIDATE HAY KHONG NEN VALIDATE DUOI STORE
3698
			--IF(@INDEX_PO =0)
3699
			--BEGIN
3700
			--	ROLLBACK TRANSACTION
3701
			--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Danh sách các khoản hoàn tạm ứng không được phép trống' ErrorDesc
3702
			--	RETURN '-1'
3703
			--END
3704
			-- VALIDATE SO TIEN
3705
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
3706
			--BEGIN
3707
			--	ROLLBACK TRANSACTION
3708
			--	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
3709
			--	RETURN '-1'
3710
			--END
3711
			----
3712
		END
3713
		IF((@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y') OR @p_REQ_TYPE ='I')
3714
		BEGIN
3715
				
3716
				DECLARE XmlDataPO CURSOR LOCAL FOR
3717
				SELECT *
3718
				FROM
3719
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
3720
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
3721
				OPEN XmlDataPO;
3722
				SET @INDEX_PO = 0
3723
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
3724
				WHILE @@fetch_status=0 
3725
				BEGIN
3726
					SET @INDEX_PO = @INDEX_PO +1
3727
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
3728
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
3729
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
3730
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
3731
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
3732
				IF @@error<>0 GOTO ABORT;
3733
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
3734
				END
3735
				CLOSE XmlDataPO;
3736
				DEALLOCATE XmlDataPO;
3737
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
3738
			----------------------------
3739
			--INSERT FROM PERIOD	
3740
				DECLARE XmlDataPeriod CURSOR LOCAL FOR
3741
				SELECT *
3742
				FROM
3743
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
3744
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
3745
				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),AD_PAY_ID VARCHAR(15), PROCESS VARCHAR(5), PARENT_ID VARCHAR(15), PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))
3746
				OPEN XmlDataPeriod;
3747
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
3748
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@AD_PAY_ID VARCHAR(15), @_PROCESS VARCHAR(5),@PARENT_ID VARCHAR(15),@PAY_PHASE NVARCHAR(250),@REASON_TTDK NVARCHAR(2000)
3749
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
3750
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
3751
				WHILE @@fetch_status=0 
3752
				BEGIN
3753
					
3754
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
3755
					IF(@p_TYPE_FUNCTION ='SEND')
3756
					BEGIN
3757
					
3758
					IF(EXISTS(SELECT CONTRACT_ID 
3759
					FROM TR_CONTRACT 
3760
					WHERE CONTRACT_ID = @REF_ID AND CONVERT(DATE,END_DT,103) < CONVERT(DATE,GETDATE(),103) AND END_DT IS NOT NULL AND CONT_TYPE ='DK' AND CONT_TYPE IS NOT NULL AND  CONT_TYPE <>''))
3761
						BEGIN
3762
							ROLLBACK TRANSACTION
3763
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Thanh toán hợp đồng định kì đã đóng' ErrorDesc
3764
							RETURN '-1'
3765
						END
3766

    
3767
					IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
3768
					BEGIN
3769
						ROLLBACK TRANSACTION
3770
						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
3771
						RETURN '-1'
3772
					END
3773
					END
3774
					DECLARE @PERIOD_ID VARCHAR(15);
3775
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
3776
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
3777
					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,PARENT_ID,PAY_PHASE,REASON)
3778
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
3779
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK)
3780
			IF @@error<>0 GOTO ABORT;
3781
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
3782
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
3783
			END
3784
			CLOSE XmlDataPeriod;
3785
			DEALLOCATE XmlDataPeriod;
3786
			-- VALIDATE SO TIEN
3787
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
3788
			--BEGIN
3789
			--	ROLLBACK TRANSACTION
3790
			--	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
3791
			--	RETURN '-1'
3792
			--END
3793
			----
3794
		END
3795
COMMIT TRANSACTION
3796
IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
3797
		BEGIN
3798
				--ROLLBACK TRANSACTION
3799
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
3800
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
3801
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
3802
			    IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
3803
				BEGIN
3804
					DECLARE @USER_TPGD VARCHAR(15)
3805
					SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND 
3806
					(RoleName IN ('TPGD') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
3807
					IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
3808
					BEGIN
3809
						SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID =@p_BRANCH_CREATE
3810
							AND RoleName ='TPGD')
3811
					END
3812
					UPDATE TR_REQ_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3813
				END
3814
				UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
3815
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
3816
				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 thanh toán và gửi phê duyệt')
3817
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
3818
				RETURN '4'
3819
		END
3820
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, @p_REQ_PAY_CODE  AS REQ_PAY_CODE,'' ErrorDesc
3821
RETURN '0'
3822
ABORT:
3823
BEGIN
3824
		ROLLBACK TRANSACTION
3825
		CLOSE XmlData;
3826
		DEALLOCATE XmlData;
3827
		CLOSE XmlDataPay;
3828
		DEALLOCATE XmlDataPay;
3829
		Close XmlDataMethod;
3830
		Close XmlDataCat;
3831
		CLOSE XmlDataService;
3832
		CLOSE XmlDataSchedule;
3833
		Deallocate XmlDataMethod;
3834
		Deallocate XmlDataCat;
3835
		DEALLOCATE XmlDataService;
3836
		DEALLOCATE XmlDataSchedule;
3837
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
3838
		RETURN '-1'
3839
End
3840

    
3841
¿
3842
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_Search]
3843
@p_REQ_PAY_ID	varchar(15)= NULL,
3844
@p_REQ_PAY_CODE	varchar(50)	= NULL,
3845
@p_REQ_DT VARCHAR(20)= NULL,
3846
@p_BRANCH_ID	varchar(15)	= NULL,
3847
@p_DEP_ID	varchar(15)	= NULL,
3848
@p_REQ_REASON	nvarchar(MAX)	= NULL,
3849
@p_REQ_TYPE	varchar(15)	= NULL,
3850
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
3851
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
3852
@p_REF_ID	varchar(15)	= NULL,
3853
@p_RECEIVER_PO	nvarchar(250)	= NULL,
3854
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
3855
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
3856
@p_REQ_AMT	decimal(18, 0)	= NULL,
3857
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
3858
@p_MAKER_ID	varchar(15)	= NULL,
3859
@p_CREATE_DT	varchar(25)	= NULL,
3860
@p_EDITOR_ID	varchar(15)	= NULL,
3861
@p_AUTH_STATUS	varchar(1)	= NULL,
3862
@p_CHECKER_ID	varchar(15)	= NULL,
3863
@p_APPROVE_DT	varchar(25)	= NULL,
3864
@p_CREATE_DT_KT	varchar(25)	= NULL,
3865
@p_MAKER_ID_KT	varchar(15)	= NULL,
3866
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
3867
@p_CHECKER_ID_KT	varchar(1)	= NULL,
3868
@p_APPROVE_DT_KT  varchar(25)= null,
3869
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
3870
@p_BRANCH_CREATE	varchar(15)	= NULL,
3871
@p_NOTES	varchar(15)	= NULL,
3872
@p_RECORD_STATUS	varchar(1)	= NULL,
3873
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
3874
@p_TRANSFER_DT	varchar(25)	= NULL,
3875
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
3876
@p_PROCESS	varchar(15)	= NULL,
3877
@p_PAY_PHASE VARCHAR(15) = NULL,
3878
@p_TOP INT = 10,
3879
@p_LEVEL varchar(10) = NULL,
3880
@p_FRMDATE VARCHAR(20)= NULL,
3881
@p_TODATE VARCHAR(20) = NULL,
3882
@p_BRANCH_LOGIN VARCHAR(15) = NULL,
3883
@p_IS_UPDATE_KT VARCHAR(15) = NULL,
3884
@P_IS_TRANSFER VARCHAR(15) = NULL,
3885
@p_TERM_ID VARCHAR(15) = NULL,
3886
@P_USER_LOGIN VARCHAR(15)= NULL,
3887
@p_FUNCTION VARCHAR(15) = NULL,
3888
@p_TYPE_SEARCH VARCHAR(15) = NULL
3889
AS
3890
SET @p_TOP = NULL
3891
declare @tmp table(BRANCH_ID varchar(15))
3892
insert into @tmp  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@p_BRANCH_ID)
3893
declare @tmp_Login table(BRANCH_ID varchar(15))
3894
insert into @tmp_Login  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@p_BRANCH_LOGIN)
3895
DECLARE @ROLE_ID VARCHAR(20) , @DEP_ID_LG VARCHAR(15) = NULL, @COST_LG VARCHAR(15), @DVDM_ID VARCHAR(15)
3896
DECLARE @BRANCH_TYPE VARCHAR(15)
3897
SET @BRANCH_TYPE =(SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID=(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
3898
SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_USER_LOGIN)
3899
SET @DEP_ID_LG =(SELECT SECUR_CODE FROM TL_USER WHERE TLNANME=@p_USER_LOGIN)
3900
DECLARE @TMP_DEP TABLE(DEP_ID VARCHAR(15))
3901
SET @COST_LG =(SELECT TOP 1 COST_ID FROM PL_COSTCENTER_DT WHERE DEP_ID =@DEP_ID_LG)
3902
SET @DVDM_ID =(SELECT TOP 1 DVDM_ID FROM PL_COSTCENTER WHERE COST_ID =@COST_LG)
3903
INSERT INTO @TMP_DEP SELECT B.DEP_ID FROM PL_COSTCENTER_DT B  WHERE COST_ID =@COST_LG
3904
DECLARE @BRANCH_TYPE_LG VARCHAR(15)
3905
SET @BRANCH_TYPE_LG = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID=@p_BRANCH_LOGIN)
3906

    
3907
--IF(EXISTS(SELECT * FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_OLD=@ROLE_ID))
3908
--	SET @ROLE_ID=(SELECT ROLE_NEW FROM dbo.TL_SYS_ROLE_MAPPING WHERE ROLE_OLD=@ROLE_ID)
3909
SET @ROLE_ID =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_USER_LOGIN)
3910

    
3911
IF(@p_TOP=NULL OR @p_TOP='' OR @p_TOP=0)BEGIN
3912
		SELECT A.*,B.AUTH_STATUS_NAME, C.AUTH_STATUS_NAME AUTH_STATUS_NAME_KT, TL.TLFullName CREATE_FULLNAME,
3913
		TL1.TLFullName APPROVE_FULLNAME,TL2.TLFullName CREATE_FULLNAME_KT,TL3.TLFullName APPROVE_FULLNAME_KT,
3914
		BR.BRANCH_NAME BRANCH_NAME_REQ, BR1.BRANCH_NAME BRANCH_NAME_CRE, DP.DEP_NAME, DP.DEP_CODE, BR.BRANCH_CODE BRANCH_CODE_REQ,
3915
		--Luanlt--2019/10/15-Sửa AL,AL1
3916
		BR1.BRANCH_CODE BRANCH_CODE_CRE,  AL.CONTENT REQ_TYPE_NAME,AL1.CONTENT REQ_PAY_TYPE_NAME, ISNULL((A.REQ_AMT -H.SOTIEN_TT),0) AS TOTAL_AMT_TEMP, 
3917
		ISNULL(H.SOTIEN_TT,0) TOTAL_AMT_PAY_HIS,
3918
		TL4.TLFullName AS TRANSFER_FULLNAME,TL5.TLFullName AS TRANSFER_RECIEVER_FULLNAME, '' EMP_FULLNAME, PO.PO_CODE, PO.PO_NAME, S.SUP_NAME,S.TAX_NO SUP_TAX_NO,
3919
		PC3.LEVEL_JOB, PC3.STATUS_JOB,PC3.TYPE_JOB,PC3.TLNAME AS EXEC_USER,@p_TYPE_SEARCH AS TYPE_SEARCH,SR.ROLE_ID AS ROLE_ID_CRE, '' AS BRANCH_TYPE_CR
3920
        FROM TR_REQ_PAYMENT A
3921
             LEFT JOIN CM_AUTH_STATUS B ON A.AUTH_STATUS=B.AUTH_STATUS
3922
             LEFT JOIN CM_AUTH_STATUS C ON A.AUTH_STATUS_KT=C.AUTH_STATUS
3923
             LEFT JOIN TL_USER TL ON A.MAKER_ID=TL.TLNANME
3924
             LEFT JOIN TL_USER TL1 ON A.CHECKER_ID=TL1.TLNANME
3925
             LEFT JOIN TL_USER TL2 ON A.MAKER_ID_KT=TL2.TLNANME
3926
             LEFT JOIN TL_USER TL3 ON A.CHECKER_ID_KT=TL3.TLNANME
3927
             LEFT JOIN dbo.CM_BRANCH BR ON A.BRANCH_ID=BR.BRANCH_ID
3928
			 LEFT JOIN dbo.CM_BRANCH BR1 ON A.BRANCH_CREATE=BR1.BRANCH_ID
3929
             LEFT JOIN dbo.CM_DEPARTMENT DP ON DP.DEP_ID=A.DEP_ID
3930
			 --Luanlt--2019/10/15-Sửa AL,AL1
3931
			 LEFT JOIN CM_ALLCODE AL ON A.REQ_TYPE = AL.CDVAL AND AL.CDNAME='PAY_TYPE'--Loại thanh toán (Nội bộ/Thanh toán/Nợ)
3932
			 LEFT JOIN CM_ALLCODE AL1 ON A.REQ_PAY_TYPE = AL1.CDVAL AND AL1.CDNAME='REQ_PAY_TYPE'--Hình thức thanh toán( Tiền mặt/Chuyển khoản)			 
3933
			 LEFT JOIN TL_USER TL4 ON A.TRANSFER_MAKER = TL4.TLNANME
3934
			 LEFT JOIN TL_USER TL5 ON A.TRASFER_USER_RECIVE = TL5.TLNANME
3935
			 LEFT JOIN 
3936
			 (
3937
			 SELECT PAY_ADV_ID, SUM(AMT_PAY) SOTIEN_TT FROM TR_REQ_PAYMENT_DT WHERE AUTH_STATUS_KT ='A' GROUP BY PAY_ADV_ID
3938
			 ) H ON A.REQ_PAY_ID =H.PAY_ADV_ID
3939
			 LEFT JOIN TR_PO_MASTER PO ON A.REF_ID = PO.PO_ID AND A.REQ_TYPE='P'
3940
			 LEFT JOIN CM_SUPPLIER S ON S.SUP_ID = PO.SUP_ID AND A.REQ_TYPE='P'
3941
			 LEFT JOIN PL_REQUEST_PROCESS_CHILD PC3 ON PC3.REQ_ID = A.REQ_PAY_ID AND PC3.STATUS_JOB ='C'
3942
			 LEFT JOIN PL_REQUEST_PROCESS_CHILD PC4 ON PC4.REQ_ID = A.REQ_PAY_ID AND PC4.STATUS_JOB ='C'
3943
			 LEFT JOIN TL_SYSROLE SR ON TL.RoleName = SR.ROLE_ID
3944
        WHERE 1=1 
3945
			  AND(A.AUTH_STATUS=@p_AUTH_STATUS OR @p_AUTH_STATUS='' OR @p_AUTH_STATUS IS NULL)
3946
              AND((@p_LEVEL='ALL' AND A.BRANCH_CREATE IN(SELECT BRANCH_ID FROM @tmp))
3947
              OR((@p_LEVEL='UNIT' AND A.BRANCH_CREATE=@p_BRANCH_CREATE)OR(@p_BRANCH_CREATE='' OR @p_BRANCH_CREATE IS NULL)))
3948
			  AND((A.MAKER_ID_KT IS NOT NULL AND @p_IS_UPDATE_KT='Y') --Lay danh sach chua duoc phong KT cap nhat va duoc cap nhat
3949
              OR((A.MAKER_ID_KT IS NULL AND @p_IS_UPDATE_KT='N'))OR @p_IS_UPDATE_KT IS NULL OR @p_IS_UPDATE_KT='')
3950
			  AND(A.NOTES LIKE N'%'+@p_NOTES+'%' OR @p_NOTES='' OR @p_NOTES IS NULL)
3951
			  --Luanlt-2019/10/14-Thêm Filter  REQ_TYPE,FROMDATE TODATE REF_ID
3952
			  AND(A.REQ_TYPE LIKE N'%'+@p_REQ_TYPE+'%' OR @p_REQ_TYPE = '' OR @p_REQ_TYPE IS NULL)
3953
			  AND(CONVERT(DATE, A.CREATE_DT)>=CONVERT(DATE, @p_FRMDATE, 103)OR @p_FRMDATE IS NULL OR @p_FRMDATE='')
3954
              AND(CONVERT(DATE, A.CREATE_DT)<=CONVERT(DATE, @p_TODATE, 103)OR @p_TODATE IS NULL OR @p_TODATE='')
3955
			  --Luanlt-2019/10/17-Thêm Filter REQ_PAY_CODE REQ_PAY_NAME  BRANCH_ID DEP_ID KT_AUTH
3956
			  AND(A.REQ_PAY_CODE LIKE N'%'+@p_REQ_PAY_CODE+'%' or @p_REQ_PAY_CODE='' OR @p_REQ_PAY_CODE IS NULL)
3957
			  AND(A.TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE or @p_TRASFER_USER_RECIVE='' OR @p_TRASFER_USER_RECIVE IS NULL OR A.MAKER_ID_KT IS NOT NULL OR A.MAKER_ID_KT <>'')
3958
			  AND(A.BRANCH_CREATE = @p_BRANCH_CREATE or @p_BRANCH_CREATE='' OR @p_BRANCH_CREATE IS NULL)
3959
			  AND(A.DEP_ID = @p_DEP_ID  or @p_DEP_ID='' OR @p_DEP_ID IS NULL)
3960
			  AND(A.AUTH_STATUS_KT=@p_AUTH_STATUS_KT OR @p_AUTH_STATUS_KT='' OR @p_AUTH_STATUS_KT IS NULL)
3961
			  AND(A.REF_ID =@p_REF_ID OR @p_REF_ID='' OR @p_REF_ID IS NULL)
3962
			  -- Neu ben phan he ke toan thi chi lay nhung user co maker_id khac null
3963
			  AND ((@p_FUNCTION ='KT' AND A.MAKER_ID_KT IS NOT NULL AND A.MAKER_ID_KT ='') OR @p_FUNCTION IS NULL OR @p_FUNCTION ='' OR @p_FUNCTION ='TF')	
3964
			  AND(PC4.TLNAME = @p_TRASFER_USER_RECIVE OR @p_TRASFER_USER_RECIVE IS NULL OR @p_TRASFER_USER_RECIVE ='')
3965
			  -- BO SUNG DOAN CODE DO DON VI THI TRUONG PHONG NAO CHI DUOC THAY CAC GIAO DICH CUA PHONG DO THOI
3966
			   -- NEU LA PHIEU DE NGHI TAM UNG NOI BO DO HOI SO TAO THI TRUONG PHONG CHI DUOC PHEP THAY CAC GIAO DICH DO NHAN VIEN CUA MINH TAO
3967
			--AND ( 
3968
			--  (@p_FUNCTION <>'TF' AND A.REQ_TYPE IN ('I','P','D') AND EXISTS(SELECT * FROM CM_BRANCH WHERE BRANCH_TYPE ='HS' AND BRANCH_ID = A.BRANCH_ID) AND A.DEP_ID = @DEP_ID_LG)
3969
			--  OR (@p_FUNCTION <>'TF' AND EXISTS(SELECT * FROM CM_BRANCH WHERE BRANCH_TYPE IN ('CN', 'PGD') AND BRANCH_ID = A.BRANCH_ID))
3970
			--  OR (@p_FUNCTION ='TF' AND A.BRANCH_CREATE IN(SELECT BRANCH_ID FROM @tmp_Login))
3971
			--  )
3972
			--- CHECK NEU TIM KIEM O HCQT THI PHONG BAN NAO THAY GIAO DICH CUA PHONG BAN DO
3973
			AND (@p_TYPE_SEARCH='HC' AND EXISTS(SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = A.BRANCH_ID AND BRANCH_TYPE ='HS') 
3974
									  AND ( ((A.PROCESS IS NOT NULL AND A.PROCESS <> '' OR A.TRASFER_USER_RECIVE IS NULL OR A.TRASFER_USER_RECIVE ='') AND (SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =A.MAKER_ID) = (SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_USER_LOGIN))
3975
										   OR(A.MAKER_ID =@P_USER_LOGIN OR A.TRASFER_USER_RECIVE =@p_USER_LOGIN))
3976
			OR (@p_TYPE_SEARCH='HC' AND NOT EXISTS(SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = A.BRANCH_ID AND BRANCH_TYPE ='HS')
3977
									  AND A.BRANCH_ID IN (SELECT BRANCH_ID from @tmp_Login))
3978
			-- HOAC NGUOC LAI NEU HC NHUNG PHIEU DUOC TAO O PGD, CN
3979
			OR (@p_TYPE_SEARCH='KT' AND  A.BRANCH_ID IN (SELECT BRANCH_ID from @tmp_Login))
3980
			OR @p_TYPE_SEARCH IS NULL OR @p_TYPE_SEARCH ='')
3981
		ORDER BY A.CREATE_DT DESC;
3982
    END;
3983
    ELSE BEGIN
3984
        SELECT A.*,B.AUTH_STATUS_NAME, C.AUTH_STATUS_NAME AUTH_STATUS_NAME_KT, TL.TLFullName CREATE_FULLNAME,
3985
		TL1.TLFullName APPROVE_FULLNAME,TL2.TLFullName CREATE_FULLNAME_KT,TL3.TLFullName APPROVE_FULLNAME_KT,
3986
		BR.BRANCH_NAME BRANCH_NAME_REQ, BR1.BRANCH_NAME BRANCH_NAME_CRE, DP.DEP_NAME, DP.DEP_CODE, BR.BRANCH_CODE BRANCH_CODE_REQ,
3987
		--Luanlt--2019/10/15-Sửa AL,AL1
3988
		BR1.BRANCH_CODE BRANCH_CODE_CRE, AL.CONTENT REQ_TYPE_NAME,AL1.CONTENT REQ_PAY_TYPE_NAME, ISNULL((A.REQ_AMT -H.SOTIEN_TT),0) AS TOTAL_AMT_TEMP, 
3989
		ISNULL(H.SOTIEN_TT,0) TOTAL_AMT_PAY_HIS,
3990
		TL4.TLFullName AS TRANSFER_FULLNAME,TL5.TLFullName AS TRANSFER_RECIEVER_FULLNAME,'' EMP_FULLNAME,PO.PO_CODE, PO.PO_NAME, S.SUP_NAME,S.TAX_NO SUP_TAX_NO,
3991
		PC3.LEVEL_JOB, PC3.STATUS_JOB,PC3.TYPE_JOB,PC3.TLNAME AS EXEC_USER,@p_TYPE_SEARCH AS TYPE_SEARCH,SR.ROLE_ID AS ROLE_ID_CRE,BR1.BRANCH_TYPE AS BRANCH_TYPE_CR
3992
        FROM TR_REQ_PAYMENT A
3993
             LEFT JOIN CM_AUTH_STATUS B ON A.AUTH_STATUS=B.AUTH_STATUS
3994
             LEFT JOIN CM_AUTH_STATUS C ON A.AUTH_STATUS_KT=C.AUTH_STATUS
3995
             LEFT JOIN TL_USER TL ON A.MAKER_ID=TL.TLNANME
3996
             LEFT JOIN TL_USER TL1 ON A.CHECKER_ID=TL1.TLNANME
3997
             LEFT JOIN TL_USER TL2 ON A.MAKER_ID_KT=TL2.TLNANME
3998
             LEFT JOIN TL_USER TL3 ON A.CHECKER_ID_KT=TL3.TLNANME
3999
             LEFT JOIN dbo.CM_BRANCH BR ON A.BRANCH_ID=BR.BRANCH_ID
4000
			 LEFT JOIN dbo.CM_BRANCH BR1 ON A.BRANCH_CREATE=BR1.BRANCH_ID
4001
             LEFT JOIN dbo.CM_DEPARTMENT DP ON DP.DEP_ID=A.DEP_ID
4002
			 --Luanlt--2019/10/15-Sửa AL,AL1
4003
			 LEFT JOIN CM_ALLCODE AL ON A.REQ_TYPE = AL.CDVAL AND AL.CDNAME='PAY_TYPE'
4004
			 LEFT JOIN CM_ALLCODE AL1 ON A.REQ_PAY_TYPE = AL1.CDVAL AND AL1.CDNAME='REQ_PAY_TYPE'
4005
			 LEFT JOIN TL_USER TL4 ON A.TRANSFER_MAKER = TL4.TLNANME
4006
			 LEFT JOIN TL_USER TL5 ON A.TRASFER_USER_RECIVE = TL5.TLNANME
4007
			 LEFT JOIN 
4008
			 (
4009
			 SELECT PAY_ADV_ID, SUM(AMT_PAY) SOTIEN_TT FROM TR_REQ_PAYMENT_DT WHERE AUTH_STATUS_KT ='A' GROUP BY PAY_ADV_ID
4010
			 ) H ON A.REQ_PAY_ID =H.PAY_ADV_ID
4011
			 LEFT JOIN TR_PO_MASTER PO ON A.REF_ID = PO.PO_ID AND A.REQ_TYPE='P'
4012
			 LEFT JOIN CM_SUPPLIER S ON S.SUP_ID = PO.SUP_ID AND A.REQ_TYPE='P'
4013
			 LEFT JOIN PL_REQUEST_PROCESS_CHILD PC3 ON PC3.REQ_ID = A.REQ_PAY_ID AND PC3.STATUS_JOB ='C' 
4014
			 LEFT JOIN PL_REQUEST_PROCESS_CHILD PC4 ON PC4.REQ_ID = A.REQ_PAY_ID AND PC4.STATUS_JOB ='C'
4015
			  LEFT JOIN TL_SYSROLE SR ON TL.RoleName = SR.ROLE_ID
4016
        WHERE 1=1 
4017
			  AND(A.AUTH_STATUS=@p_AUTH_STATUS OR @p_AUTH_STATUS='' OR @p_AUTH_STATUS IS NULL)
4018
			  AND(A.MAKER_ID =@p_MAKER_ID OR @p_MAKER_ID='' OR @p_MAKER_ID IS NULL)
4019
			  AND(A.DEP_ID=@p_DEP_ID OR @p_DEP_ID='' OR @p_DEP_ID IS NULL)
4020
			  AND((@p_LEVEL='ALL' AND A.BRANCH_ID IN(SELECT BRANCH_ID FROM @tmp_Login))
4021
              OR((@p_LEVEL='UNIT' AND A.BRANCH_ID=@p_BRANCH_ID)OR(@p_BRANCH_ID='' OR @p_BRANCH_ID IS NULL)))
4022
              AND((@p_LEVEL='ALL' AND A.BRANCH_CREATE IN(SELECT BRANCH_ID FROM @tmp_Login))
4023
              OR((@p_LEVEL='UNIT' AND A.BRANCH_CREATE=@p_BRANCH_CREATE)OR(@p_BRANCH_CREATE='' OR @p_BRANCH_CREATE IS NULL)))
4024
			  AND((A.MAKER_ID_KT IS NOT NULL AND @p_IS_UPDATE_KT='Y') --Lay danh sach chua duoc phong KT cap nhat va duoc cap nhat
4025
              OR((A.MAKER_ID_KT IS NULL AND @p_IS_UPDATE_KT='N'))OR @p_IS_UPDATE_KT IS NULL OR @p_IS_UPDATE_KT='')
4026
			  AND(A.NOTES LIKE N'%'+@p_NOTES+'%' OR @p_NOTES='' OR @p_NOTES IS NULL)
4027
			  --Luanlt-2019/10/14-Thêm Filter  REQ_TYPE,FROMDATE TODATE REF_ID
4028
			  AND(A.REQ_TYPE LIKE N'%'+@p_REQ_TYPE+'%' OR @p_REQ_TYPE = '' OR @p_REQ_TYPE IS NULL)
4029
			  AND(CONVERT(DATE, A.CREATE_DT)>=CONVERT(DATE, @p_FRMDATE, 103)OR @p_FRMDATE IS NULL OR @p_FRMDATE='')
4030
              AND(CONVERT(DATE, A.CREATE_DT)<=CONVERT(DATE, @p_TODATE, 103)OR @p_TODATE IS NULL OR @p_TODATE='')
4031
			  --Luanlt-2019/10/17-Thêm Filter REQ_PAY_CODE REQ_PAY_NAME  BRANCH_ID DEP_ID KT_AUTH
4032
			  AND(A.REQ_PAY_CODE LIKE N'%'+@p_REQ_PAY_CODE+'%' or @p_REQ_PAY_CODE='' OR @p_REQ_PAY_CODE IS NULL)
4033
			  AND(A.REQ_REASON LIKE N'%'+@p_REQ_REASON+'%' or @p_REQ_REASON='' OR @p_REQ_REASON IS NULL)
4034
			  --AND(A.TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE or @p_TRASFER_USER_RECIVE='' OR @p_TRASFER_USER_RECIVE IS NULL OR A.MAKER_ID_KT IS NOT NULL OR A.MAKER_ID_KT <>'')
4035
			  --AND(A.BRANCH_CREATE = @p_BRANCH_CREATE or @p_BRANCH_CREATE='' OR @p_BRANCH_CREATE IS NULL)
4036
			  AND(A.DEP_ID = @p_DEP_ID  or @p_DEP_ID='' OR @p_DEP_ID IS NULL)
4037
			  AND((A.AUTH_STATUS_KT=@p_AUTH_STATUS_KT OR @p_AUTH_STATUS_KT='' OR @p_AUTH_STATUS_KT IS NULL) OR (@p_AUTH_STATUS_KT ='P' AND A.AUTH_STATUS_KT IN ('P','S')))
4038
			  AND(A.REF_ID =@p_REF_ID OR @p_REF_ID='' OR @p_REF_ID IS NULL)
4039
			  --AND((A.TRANSFER_MAKER IS NOT NULL AND @p_IS_TRANSFER='Y') --Lay danh sach chua duoc phong KT cap nhat va duoc cap nhat
4040
              --OR((A.TRANSFER_MAKER IS NULL AND @p_IS_TRANSFER='N'))OR @p_IS_TRANSFER IS NULL OR @p_IS_TRANSFER='')
4041
			  -- Neu ben phan he ke toan thi chi lay nhung user co maker_id khac null
4042
			    AND ((@p_FUNCTION ='KT' AND (EXISTS(SELECT TOP 1 * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = A.REQ_PAY_ID AND TLNAME= @p_USER_LOGIN)) OR A.CHECKER_ID_KT ='admin' OR A.AUTH_STATUS_KT='A' )
4043
				OR @p_FUNCTION ='' OR @p_FUNCTION IS NULL OR @p_FUNCTION ='TF' )	  
4044
			 -- AND ((@p_FUNCTION ='KT' AND A.MAKER_ID_KT IS NOT NULL AND A.MAKER_ID_KT ='') OR @p_FUNCTION IS NULL OR @p_FUNCTION ='')
4045
			  AND(( @p_IS_TRANSFER='Y' AND (EXISTS (SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = A.REQ_PAY_ID) OR A.AUTH_STATUS_KT ='A')) --Lay danh sach chua duoc phong KT cap nhat va duoc cap nhat
4046
              OR((@p_IS_TRANSFER='N' AND (NOT EXISTS (SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = A.REQ_PAY_ID )) AND A.AUTH_STATUS_KT <>'A'))OR @p_IS_TRANSFER IS NULL OR @p_IS_TRANSFER='')	
4047
			AND
4048
			  ( 
4049
			  A.MAKER_ID =@p_USER_LOGIN  OR ( A.TRASFER_USER_RECIVE = @P_USER_LOGIN AND A.AUTH_STATUS NOT IN ('E','R'))
4050
			  OR(A.AUTH_STATUS <>'E' AND
4051
			  (
4052
			  (@p_TYPE_SEARCH ='HC' AND @BRANCH_TYPE_LG ='HS'  AND (A.TRASFER_USER_RECIVE = @p_USER_LOGIN OR (@ROLE_ID IN ('GDDV','GDK','KTT','TPTC') AND A.BRANCH_ID =@p_BRANCH_LOGIN AND A.DEP_ID =@DEP_ID_LG 
4053
																																		  AND( A.TRASFER_USER_RECIVE IS NULL OR A.TRASFER_USER_RECIVE ='' OR (A.TRASFER_USER_RECIVE IS NOT NULL AND A.TRASFER_USER_RECIVE <>'' AND A.PROCESS IS NOT NULL AND A.PROCESS <>'')))))
4054
			  OR(@p_TYPE_SEARCH ='HC' AND @BRANCH_TYPE_LG = 'CN' AND (@ROLE_ID = 'GDDV' AND 
4055
			  ((A.TRASFER_USER_RECIVE IS NOT NULL AND A.TRASFER_USER_RECIVE <>'' AND A.PROCESS IS NOT NULL AND A.PROCESS <>'') OR A.TRASFER_USER_RECIVE ='' OR A.TRASFER_USER_RECIVE IS NULL)
4056
			  OR ((A.BRANCH_CREATE <> @p_BRANCH_LOGIN AND A.TRASFER_USER_RECIVE IS NOT NULL AND A.TRASFER_USER_RECIVE <>'') OR A.BRANCH_CREATE = @p_BRANCH_LOGIN)
4057
			  AND A.BRANCH_ID IN (SELECT * FROM @tmp)))
4058
			  OR(@p_TYPE_SEARCH ='HC' AND @BRANCH_TYPE_LG = 'PGD' AND (@ROLE_ID IN ('GDDV','TPGD') AND A.BRANCH_ID =@p_BRANCH_LOGIN))
4059
			  OR(@p_TYPE_SEARCH ='HC' AND @ROLE_ID ='KSV' AND A.BRANCH_ID IN (SELECT BRANCH_ID from @tmp_Login))
4060
			  OR(@p_TYPE_SEARCH='KT' AND  A.BRANCH_ID IN (SELECT BRANCH_ID from @tmp_Login))
4061
			  OR @p_TYPE_SEARCH IS NULL OR @p_TYPE_SEARCH =''
4062
			  )))	
4063
		ORDER BY A.CREATE_DT DESC;
4064
    END;
4065
¿
4066
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_Upd]
4067
@p_REQ_PAY_ID	varchar(15)= NULL,
4068
@p_REQ_PAY_CODE	varchar(50)	= NULL,
4069
@p_REQ_DT VARCHAR(20)= NULL,
4070
@p_BRANCH_ID	varchar(15)	= NULL,
4071
@p_DEP_ID	varchar(15)	= NULL,
4072
@p_REQ_REASON	nvarchar(MAX)	= NULL,
4073
@p_REQ_TYPE	varchar(15)	= NULL,
4074
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
4075
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
4076
@p_REF_ID	varchar(15)	= NULL,
4077
@p_RECEIVER_PO	nvarchar(250)	= NULL,
4078
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
4079
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
4080
@p_REQ_AMT	decimal(18, 0)	= NULL,
4081
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
4082
@p_MAKER_ID	varchar(15)	= NULL,
4083
@p_CREATE_DT	varchar(25)	= NULL,
4084
@p_EDITOR_ID	varchar(15)	= NULL,
4085
@p_AUTH_STATUS	varchar(1)	= NULL,
4086
@p_CHECKER_ID	varchar(15)	= NULL,
4087
@p_APPROVE_DT	varchar(25)	= NULL,
4088
@p_CREATE_DT_KT	varchar(25)	= NULL,
4089
@p_MAKER_ID_KT	varchar(15)	= NULL,
4090
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
4091
@p_CHECKER_ID_KT	varchar(1)	= NULL,
4092
@p_APPROVE_DT_KT  varchar(25)= null,
4093
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
4094
@p_BRANCH_CREATE	varchar(15)	= NULL,
4095
@p_NOTES	varchar(15)	= NULL,
4096
@p_RECORD_STATUS	varchar(1)	= NULL,
4097
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
4098
@p_TRANSFER_DT	varchar(25)	= NULL,
4099
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
4100
@p_PROCESS	varchar(15)	= NULL,
4101
@p_PAY_PHASE VARCHAR(15) = NULL,
4102
@p_RATE	DECIMAL(18,2) = 0,
4103
@p_IS_PERIOD VARCHAR(5) = NULL,
4104
@p_XMP_TEMP XML = NULL,
4105
@p_XMP_TEMP_2 XML = NULL,
4106
@p_TYPE_FUNCTION VARCHAR(15) = NULL
4107
AS
4108
--Validation is here
4109
/*
4110
DECLARE @ERRORSYS NVARCHAR(15) = '' 
4111
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
4112
	 SET @ERRORSYS = ''
4113
IF @ERRORSYS <> '' 
4114
BEGIN
4115
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
4116
	RETURN '0'
4117
END 
4118
*/
4119

    
4120
	--Luanlt-2019/10/15 Disable Validation
4121
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
4122
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
4123
	--BEGIN
4124
	--	SET @ERRORSYS = 'ASSC-00005'
4125
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
4126
	--	RETURN '-1'
4127
	--END
4128
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
4129
		BEGIN
4130
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được phép để trống' ErrorDesc
4131
			RETURN '-1'
4132
		END
4133
		IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
4134
		BEGIN
4135
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
4136
			RETURN '-1'
4137
		END
4138
		BEGIN TRANSACTION
4139
		DECLARE @VAT decimal(18, 0) =NULL, @TRANS_NO nvarchar(50)=NULL,
4140
		 @TRANS_DT VARCHAR(20)=NULL,@INVOICE_SIGN nvarchar(50) = NULL,@INVOICE_NO_SIGN nvarchar(50) = NULL,@INVOICE_NO nvarchar(50) = NULL,@INVOICE_DT VARCHAR(20) = NULL,@SELLER nvarchar(50) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(500) = NULL,
4141
		 @PRICE decimal(18, 0) = NULL,@TAX decimal(18, 0) = NULL,@NOTES NVARCHAR(MAX) = NULL,@VAT_RATE DECIMAL(18,0),@ACC_NO VARCHAR(25),@ACC_NAME NVARCHAR(250),@ISSUED_BY NVARCHAR(250),
4142
		 @ISSUED_DT VARCHAR(20),@CURRENCY VARCHAR(15)= NULL,@RATE DECIMAL(18,2), @TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15)
4143
		DECLARE @PAY_ADV_ID VARCHAR(15),@TYPE_TRANS VARCHAR(15),@REQ_PAY_ADV_CODE VARCHAR(15),@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
4144
		DECLARE @AMT_ADVANCED DECIMAL(18,0),@AMT_DO DECIMAL(18,0),
4145
		@AMT_REMAIN DECIMAL(18,0),@AMT_PAY DECIMAL(18,0),@AMT_USE DECIMAL(18,2),@AMT_REVERT DECIMAL(18,2), @AMT_ADD DECIMAL(18,2)
4146
		DECLARE @TOTAL_SCHEDULE_AMT DECIMAL(18,0) =0
4147
		DECLARE @INDEX_AD INT =0, @INDEX_SV INT =0,@INDEX INT =0, @INDEX_IV INT =0, @INDEX_NS INT =0
4148
		DECLARE @hdoc INT, @hDoc2 INT
4149
		EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
4150
		EXEC sp_xml_preparedocument @hDoc2 OUTPUT, @p_XMP_TEMP_2;
4151
		DECLARE XmlData CURSOR FOR
4152
		SELECT *
4153
		FROM
4154
		OPENXML(@hdoc, '/Root/XmlData', 2)
4155
		WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),
4156
		 INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(50),TAX_NO nvarchar(15),GOODS_NAME nvarchar(500) ,
4157
		PRICE decimal(18,2),TAX decimal(18, 2),VAT decimal(18,2),NOTE NVARCHAR(MAX),VAT_RATE decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),TYPE_VAT VARCHAR(15),TYPE_FUNC VARCHAR(15))
4158
		OPEN XmlData;
4159
		--CURSOR 2
4160
		DECLARE XmlDataPay CURSOR FOR
4161
		SELECT *
4162
		FROM
4163
		OPENXML(@hDoc2, '/Root/XmlDataPay', 2)
4164
		WITH(PAY_ADV_ID nvarchar(50),AMT_ADVANCED decimal(18, 0),AMT_DO decimal(18,2),
4165
		AMT_REMAIN decimal(18,2),AMT_PAY decimal(18,2),AMT_USE decimal(18,2),AMT_REVERT DECIMAL(18,0),AMT_ADD DECIMAL(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
4166
		OPEN XmlDataPay;
4167
	------------------------
4168
		--Luanlt---
4169
		--MethodCursor
4170
		DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),
4171
		@REQ_PAY_TYPE varchar(1),@REQ_PAY_DESC nvarchar(MAX),@REQ_PAY_ENTRIES nvarchar(MAX),@CHECK_IN VARCHAR(15)
4172
		DECLARE XmlDataMethod CURSOR FOR
4173
		SELECT *
4174
		FROM
4175
		OPENXML(@hdoc, 'Root/XmlDataMethod',2)
4176
		WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),
4177
		REQ_PAY_TYPE varchar(1),REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(25), 
4178
		ACC_NAME NVARCHAR(250),ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),CHECK_IN VARCHAR(15),TYPE_TRANS VARCHAR(15))
4179
		OPEN XmlDataMethod
4180
		----------
4181
		--CatCursor
4182
		DECLARE @REQ_ADV_ID varchar(15),@CAT_NAME nvarchar(100),@TOTAL_AMT_CAT decimal(18,2), @DEPT_ID VARCHAR(15)
4183
		DECLARE XmlDataCat CURSOR FOR
4184
		SELECT *
4185
		FROM
4186
		OPENXML(@hdoc, 'Root/XmlDataCat',2) 
4187
		WITH(REQ_ADV_ID VARCHAR(15),CAT_NAME nvarchar(100),TOTAL_AMT decimal(18,2), DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
4188
		OPEN XmlDataCat
4189
	---------------
4190
	--ServiceCursor
4191
		DECLARE @REQ_PAY_SERVICE_NAME nvarchar(100),@RECEIVE_ID_SERVICE varchar(15),@RECEIVE_NAME_SERVICE nvarchar(100),@REQ_PAY_REASON_SERVICE nvarchar(MAX),
4192
		@TOTAL_AMT_SERVICE decimal(18,2),
4193
		@REQ_PAY_TYPE_SERVICE varchar(1),@REQ_PAY_DESC_SERVICE nvarchar(MAX),@REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),@DEPT_ID_SRV VARCHAR(15)
4194
		DECLARE XmlDataService CURSOR FOR
4195
		SELECT *
4196
		FROM
4197
		OPENXML(@hdoc, 'Root/XmlDataService',2)
4198
		WITH(REQ_PAY_SERVICE_NAME nvarchar(100),RECEIVE_ID_SERVICE varchar(15),RECEIVE_NAME_SERVICE nvarchar(100),REQ_PAY_REASON_SERVICE nvarchar(MAX),
4199
		TOTAL_AMT_SERVICE decimal(18,2),REQ_PAY_TYPE_SERVICE varchar(1),REQ_PAY_DESC_SERVICE nvarchar(MAX),REQ_PAY_ENTRIES_SERVICE nvarchar(MAX), 
4200
		DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))
4201
		OPEN XmlDataService
4202
			---------------
4203
	--ScheduleCursor
4204
		DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,2),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,2),
4205
		@AMT_REMAIN_SCHEDULE decimal(18,2),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),@AMT_PAY_DO DECIMAL(18,2),@AMT_PAY_REAL DECIMAL(18,2)
4206
		DECLARE XmlDataSchedule CURSOR FOR
4207
		SELECT *
4208
		FROM
4209
		OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
4210
		WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,2),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,2),
4211
		AMT_REMAIN_SCHEDULE decimal(18,2),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),REQ_PAY_DESC NVARCHAR(250),
4212
		REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),AMT_PAY_DO DECIMAL(18,2),AMT_PAY_REAL DECIMAL(18,2))
4213
		OPEN XmlDataSchedule
4214
	 --END luanlt---
4215
	-- DS HANG MUC NGAN SACH
4216
		DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2),@AMT_EXE decimal(18,2),@AMT_REMAIN_GD decimal(18,2)
4217
		DECLARE XmlDataGood CURSOR FOR
4218
		SELECT *
4219
		FROM
4220
		OPENXML(@hdoc, 'Root/XmlDataGood',2) 
4221
		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))
4222
		OPEN XmlDataGood
4223
		---- END CURSOR HANG MUC NGAN SACH
4224
		--  DINH KEM CHUNG TU DINH KEM
4225
		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)
4226
		DECLARE XmlAttach CURSOR FOR
4227
		SELECT *
4228
		FROM
4229
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
4230
		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))
4231
		OPEN XmlAttach
4232
		-- END
4233
		UPDATE TR_REQ_PAYMENT SET 
4234
		REF_ID = @p_REF_ID,
4235
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,REQ_AMT = @p_REQ_AMT,REQ_DT =CONVERT(DATE,@p_REQ_DT,103),
4236
		 NOTES= @p_NOTES,
4237
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO = @p_RECEIVER_PO,TRANSFER_MAKER =@p_TRANSFER_MAKER,
4238
		REQ_TEMP_AMT=@p_REQ_TEMP_AMT,REQ_ENTRIES = @P_REQ_ENTRIES,BRANCH_ID = @p_BRANCH_ID,REQ_PAY_CODE = @p_REQ_PAY_CODE, AUTH_STATUS='E', IS_PERIOD =@p_IS_PERIOD, TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE
4239
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
4240
		IF @@Error <> 0 GOTO ABORT
4241
		--Insert XmlData
4242
		DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4243
		FETCH NEXT FROM XmlData INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
4244
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
4245
		WHILE @@fetch_status=0 BEGIN
4246
		SET @INDEX_IV = @INDEX_IV +1
4247
		-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
4248
		IF(@p_TYPE_FUNCTION ='SEND') 
4249
		BEGIN
4250
		IF(LEN(@INVOICE_NO) >7)
4251
				BEGIN
4252
					ROLLBACK TRANSACTION
4253
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' không được vượt quá 7 kí tự' ErrorDesc
4254
					RETURN '-1'
4255
				END	
4256
		 IF(LEN(@INVOICE_NO) <7)
4257
				BEGIN
4258
					ROLLBACK TRANSACTION
4259
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' phải đủ 7 kí tự' ErrorDesc
4260
					RETURN '-1'
4261
				END	
4262
		IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX))
4263
			BEGIN
4264
					ROLLBACK TRANSACTION
4265
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' đã tồn tại trong hệ thống' ErrorDesc
4266
			RETURN '-1'
4267
			END		
4268
		END
4269
			--SET @INDEX = @INDEX +1
4270
			DECLARE @p_REQ_INV_ID VARCHAR(15);
4271
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
4272
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
4273
			INSERT INTO TR_REQ_PAY_INVOICE(REQ_PAYDT_ID,REQ_PAY_ID,TRANS_NO,TRANS_DT,INVOICE_SIGN,INVOICE_NO,INVOICE_DT,SELLER,TAX_NO,GOODS_NAME,PRICE,TAX,VAT,NOTE,
4274
			MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,CHECKER_ID,APPROVE_DT,
4275
			CREATE_DT_KT,MAKER_ID_KT,AUTH_STATUS_KT,CHECKER_ID_KT,APPROVE_DT_KT,RECORD_STATUS,INVOICE_NO_SIGN,VAT_RATE,CURRENCY,RATE,PRICE_KT,VAT_KT,TOTAL_AMT_KT,TYPE_VAT,TYPE_FUNC) 
4276
			VALUES (@p_REQ_INV_ID,@p_REQ_PAY_ID , @TRANS_NO , NULL  ,@INVOICE_SIGN ,@INVOICE_NO ,CONVERT(DATE,@INVOICE_DT,103) ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,
4277
			@p_MAKER_ID,GETDATE(),NULL,'U',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',@INVOICE_NO_SIGN,@VAT_RATE,@CURRENCY,@RATE,@PRICE,@VAT,@PRICE+@VAT,@TYPE_VAT,@TYPE_FUNC)
4278
		IF @@error<>0 GOTO ABORT;
4279
			FETCH NEXT FROM XmlData
4280
			INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC
4281
		END;
4282
		CLOSE XmlData;
4283
		DEALLOCATE XmlData;
4284
		--- INSERT CAC HANG MUC NGAN SACH	
4285
		DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID=@p_REQ_PAY_ID	
4286
		--- INSERT CAC HANG MUC NGAN SACH		
4287
		FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
4288
		WHILE @@fetch_status=0 BEGIN
4289
			--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
4290
			SET @INDEX_NS = @INDEX_NS +1
4291
			-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
4292
			--IF(@p_TYPE_FUNCTION ='SEND') -- TAM THOI BO QUA CHUA CHECK NGAN SACH
4293
			--BEGIN
4294
			--	IF((@AMT_EXE  > @AMT_REMAIN_GD))
4295
			--	BEGIN
4296
			--			ROLLBACK TRANSACTION
4297
			--			SELECT '-1' as Result, '' REQ_PAY_ID, 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
4298
			--			RETURN '-1'
4299
			--	END	
4300
			--END
4301
			DECLARE @p_BUDGET_ID VARCHAR(15);
4302
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
4303
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
4304
			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) 
4305
			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)
4306
			IF @@error<>0 GOTO ABORT;
4307
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
4308
		END;
4309
		CLOSE XmlDataGood;
4310
		DEALLOCATE XmlDataGood;
4311
		--INSERT FROM MethodCursor
4312
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4313
			SET @INDEX = 0
4314
			FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,
4315
			@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS
4316
			WHILE @@fetch_status=0 
4317
			BEGIN
4318
				IF(@REQ_PAY_TYPE<>'1')
4319
				BEGIN
4320
					SET @ISSUED_DT = NULL
4321
				END
4322
				SET @INDEX = @INDEX +1
4323
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
4324
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
4325
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
4326
				INSERT INTO TR_REQ_PAY_METHOD
4327
				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,'',@p_MAKER_ID,GETDATE(),@ACC_NO, @ACC_NAME,@ISSUED_BY,CONVERT(DATE,@ISSUED_DT,103),@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS)
4328
			IF @@error<>0 GOTO ABORT;
4329
			FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS
4330
			END
4331
			CLOSE XmlDataMethod;
4332
			DEALLOCATE XmlDataMethod;
4333
		--- END INSERT NGAN SACH
4334
		--- INSERT VAO BANG CHUNG TU DINH KEM
4335
		-- INSERT CHUNG TU DINH KEM
4336
			DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
4337
		    --OPEN XmlAttach;
4338
			FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
4339
				WHILE @@fetch_status=0 
4340
				BEGIN
4341
					IF (@REF_DT='')
4342
					BEGIN
4343
						SET @REF_DT = NULL
4344
					END
4345
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
4346
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
4347
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],[AMT],REF_DT) VALUES
4348
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,CONVERT(DATE,@REF_DT,103))
4349
				IF @@error<>0 GOTO ABORT;
4350
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
4351
				END
4352
			CLOSE XmlAttach;
4353
			DEALLOCATE XmlAttach;    
4354
		----END
4355
		------------------------
4356
		IF(@p_REQ_TYPE = 'I')
4357
		BEGIN
4358
			--BEGIN CURRSOR 2
4359
			DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID
4360
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE
4361
			WHILE @@fetch_status=0 
4362
			BEGIN
4363
				SET @INDEX_AD = @INDEX_AD +1
4364
				SET @REQ_PAY_ADV_CODE = (SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID)
4365
				SET @INDEX_AD = @INDEX_AD +1
4366
				-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
4367
				IF(@p_TYPE_FUNCTION ='SEND') 
4368
				BEGIN
4369
					-- KIEM TRA XEM CO PHIEU NAO DANG DUOC THANH TOAN HOAN TAM UNG MA CHUA DUYET HAY CHUA
4370
					IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_DT WHERE (PAY_ADV_ID =@PAY_ADV_ID AND (AUTH_STATUS_KT <>'A' OR AUTH_STATUS_KT IS NULL)) AND PAY_ID <> @p_REQ_PAY_ID))
4371
					BEGIN
4372
						ROLLBACK TRANSACTION
4373
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Phiếu tạm ứng số '+@REQ_PAY_ADV_CODE+ N' đang được thanh toán hoàn tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
4374
						RETURN '-1'
4375
					END		
4376
					-- KIEM TRA NEU SO TIEN DE NGHI HOAN TAM ƯNG LON HON SO TIEN CON LAI CAN PHAI TAM UNG
4377
					IF(@AMT_REVERT>(@AMT_REMAIN -@AMT_USE) AND @AMT_REVERT >0)
4378
					BEGIN
4379
						ROLLBACK TRANSACTION
4380
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_AD)+ N': Số tiền hoàn ứng không được vượt quá '+FORMAT((@AMT_REMAIN -@AMT_USE),'#,#', 'vi-VN') ErrorDesc
4381
						RETURN '-1'
4382
					END		
4383
				END
4384
				DECLARE @p_REQ_PAYDT_ID VARCHAR(15);
4385
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT_DT', @p_REQ_PAYDT_ID OUT;
4386
				IF @p_REQ_PAYDT_ID='' OR @p_REQ_PAYDT_ID IS NULL GOTO ABORT;
4387
				INSERT INTO TR_REQ_PAYMENT_DT
4388
				VALUES (@p_REQ_PAYDT_ID,@PAY_ADV_ID,@p_REQ_PAY_ID , ISNULL(@AMT_ADVANCED,0) ,ISNULL(@AMT_DO,0),ISNULL(@AMT_REMAIN,0),
4389
				ISNULL(@AMT_PAY,0) ,ISNULL(@AMT_USE,0) ,ISNULL(@AMT_REVERT,0), ISNULL(@AMT_ADD,0), GETDATE()  ,@p_MAKER_ID ,GETDATE() ,NULL ,NULL,'U' ,NULL ,NULL ,NULL ,NULL,NULL,@CURRENCY,@RATE)
4390
			IF @@error<>0 GOTO ABORT;
4391
			FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE
4392
			END
4393
			CLOSE XmlDataPay;
4394
			DEALLOCATE XmlDataPay;
4395
		--END CURSOR 2--------------------------
4396
			-------------------------
4397
			--INSERT FROM CatCursor
4398
			DELETE FROM TR_REQ_PAY_CAT WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4399
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
4400
			WHILE @@fetch_status=0 
4401
			BEGIN
4402
				SET @INDEX = @INDEX +1
4403
				DECLARE @p_REQ_PAY_CAT_ID VARCHAR(15);
4404
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_CAT', @p_REQ_PAY_CAT_ID OUT;
4405
				IF @p_REQ_PAY_CAT_ID='' OR @p_REQ_PAY_CAT_ID IS NULL GOTO ABORT;
4406
				INSERT INTO TR_REQ_PAY_CAT
4407
				VALUES (@p_REQ_PAY_CAT_ID,@p_REQ_PAY_ID,@REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@p_MAKER_ID,GETDATE(),@CURRENCY,@RATE)
4408
			IF @@error<>0 GOTO ABORT;
4409
			FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE
4410
			END
4411
			CLOSE XmlDataCat;
4412
			DEALLOCATE XmlDataCat;
4413
			DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4414
			DECLARE XmlDataPeriod CURSOR FOR
4415
				SELECT *
4416
				FROM
4417
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
4418
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
4419
				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), AD_PAY_ID VARCHAR(15), PROCESS VARCHAR(5),PARENT_ID VARCHAR(15),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))
4420
				OPEN XmlDataPeriod;
4421
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
4422
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@AD_PAY_ID VARCHAR(15), @_PROCESS VARCHAR(15),@PARENT_ID VARCHAR(15),@PAY_PHASE NVARCHAR(250),@REASON_TTDK NVARCHAR(2000)
4423
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
4424
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
4425
				WHILE @@fetch_status=0 
4426
				BEGIN
4427
					-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
4428
					IF(@p_TYPE_FUNCTION ='SEND') 
4429
					BEGIN
4430
						IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
4431
						BEGIN
4432
							ROLLBACK TRANSACTION
4433
							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
4434
							RETURN '-1'
4435
						END
4436
					END
4437
					DECLARE @PERIOD_ID VARCHAR(15);
4438
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
4439
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
4440
					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,PARENT_ID,PAY_PHASE,REASON)
4441
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
4442
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY,@RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK)
4443
			IF @@error<>0 GOTO ABORT;
4444
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
4445
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
4446
			END
4447
			CLOSE XmlDataPeriod;
4448
			DEALLOCATE XmlDataPeriod;
4449
			-- VALIDATE SO TIEN
4450
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
4451
			--BEGIN
4452
			--	ROLLBACK TRANSACTION
4453
			--	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
4454
			--	RETURN '-1'
4455
			--END
4456
		END
4457
		IF(@p_REQ_TYPE = 'D' OR @p_REQ_TYPE ='I')
4458
		BEGIN
4459
			----------------------------
4460
			DELETE FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4461
			--INSERT FROM ServiceCursor
4462
			SET @INDEX = 0
4463
			FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
4464
			@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
4465
			WHILE @@fetch_status=0 
4466
			BEGIN
4467
				SET @INDEX = @INDEX +1
4468
				DECLARE @p_REQ_PAY_SERVICE_ID VARCHAR(15);
4469
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SERVICE', @p_REQ_PAY_SERVICE_ID OUT;
4470
				IF @p_REQ_PAY_SERVICE_ID='' OR @p_REQ_PAY_SERVICE_ID IS NULL GOTO ABORT;
4471
				INSERT INTO TR_REQ_PAY_SERVICE(SERVICE_ID,REQ_PAY_ID,SERVICE_NAME,EMP_ID,REQ_PAY_REASON,TOTAL_AMT,REQ_PAY_TYPE,REQ_PAY_DESC,REQ_PAY_ENTRIES,MAKER_ID,CREATE_DT,DEPT_ID,CURRENCY,RATE)
4472
				VALUES (@p_REQ_PAY_SERVICE_ID,@p_REQ_PAY_ID,@REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,
4473
				@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@p_MAKER_ID,GETDATE(),@DEPT_ID_SRV,@CURRENCY,@RATE)
4474
			IF @@error<>0 GOTO ABORT;
4475
				FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,@REQ_PAY_TYPE_SERVICE,
4476
				@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE
4477
			END
4478
			CLOSE XmlDataService;
4479
			DEALLOCATE XmlDataService;
4480
		END
4481
		IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE ='I')
4482
		BEGIN
4483
			----------------------------
4484
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID
4485
				DECLARE @INDEX_PO INT, @REF_ID VARCHAR(15),@IS_CLOSED VARCHAR(1)
4486
				DECLARE XmlDataPO CURSOR FOR
4487
				SELECT *
4488
				FROM
4489
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
4490
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
4491
				OPEN XmlDataPO;
4492
				SET @INDEX_PO = 0
4493
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
4494
				WHILE @@fetch_status=0 
4495
				BEGIN
4496
					SET @INDEX_PO = @INDEX_PO +1
4497
					-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
4498
					IF(@p_TYPE_FUNCTION ='SEND') 
4499
					BEGIN
4500
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
4501
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' AND REQ_PAY_ID 
4502
						IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
4503
						BEGIN
4504
							ROLLBACK TRANSACTION
4505
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
4506
							(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
4507
							RETURN '-1'
4508
						END
4509
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
4510
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_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))
4511
						BEGIN
4512
							ROLLBACK TRANSACTION
4513
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
4514
							(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
4515
							RETURN '-1'
4516
						END
4517
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
4518
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID 
4519
						IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
4520
						BEGIN
4521
							ROLLBACK TRANSACTION
4522
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO số '+
4523
							(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
4524
							RETURN '-1'
4525
						END
4526
						-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
4527
						IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED='Y')))
4528
						BEGIN
4529
							ROLLBACK TRANSACTION
4530
							SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
4531
							(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán xong. Vui lòng chọn PO khác để tạm ứng hoặc xóa bản nháp này' ErrorDesc
4532
							RETURN '-1'
4533
						END
4534
					END
4535
					DECLARE @REQ_PAYDTID VARCHAR(15);
4536
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
4537
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
4538
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
4539
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
4540
				IF @@error<>0 GOTO ABORT;
4541
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
4542
				END
4543
				CLOSE XmlDataPO;
4544
				DEALLOCATE XmlDataPO;
4545
			--INSERT FROM ScheduleCursor
4546
			DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4547
			SET @INDEX_PO = 0
4548
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,
4549
			@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
4550
			WHILE @@fetch_status=0 
4551
			BEGIN
4552
				--IF(@AMT_REMAIN_SCHEDULE =0)
4553
				--BEGIN
4554
				--	SET @PROCESS ='3'
4555
				--END
4556
				--IF(@PROCESS <>'2')
4557
				--BEGIN
4558
				--	SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +@AMT_REMAIN_SCHEDULE
4559
				--END
4560
				SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +(@AMT_PAY_SCHEDULE -@AMT_ADVANCE_SCHEDULE -@AMT_PAY_DO)
4561
				----
4562
				SET @INDEX_PO = @INDEX_PO +1
4563
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
4564
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
4565
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
4566
				INSERT INTO TR_REQ_PAY_SCHEDULE (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,
4567
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
4568
				VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,
4569
				--IIF(@PROCESS<>'2',(@AMT_PAY_SCHEDULE-@AMT_ADVANCE_SCHEDULE),0),
4570
				@AMT_PAY_DO,
4571
				@AMT_REMAIN_SCHEDULE,GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),@PROCESS,@p_MAKER_ID,GETDATE(),'U','','PAY',@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL)
4572
				IF @@error<>0 GOTO ABORT;
4573
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,
4574
				@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL
4575
			END
4576
			CLOSE XmlDataSchedule;
4577
			DEALLOCATE XmlDataSchedule;
4578
			---- VALIDATE SO TIEN
4579
			--IF(@p_REQ_AMT > ISNULL(@TOTAL_SCHEDULE_AMT,0))
4580
			--BEGIN
4581
			--	ROLLBACK TRANSACTION
4582
			--	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
4583
			--	RETURN '-1'
4584
			--END
4585
	     ------
4586
		END
4587
		-- NEU LA THANH TOAN CAC HOP DONG DINH KY
4588
		ELSE IF((@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y') OR @p_REQ_TYPE='I')
4589
		BEGIN
4590
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
4591
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID
4592
				DECLARE XmlDataPO CURSOR FOR
4593
				SELECT *
4594
				FROM
4595
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
4596
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
4597
				OPEN XmlDataPO;
4598
				SET @INDEX_PO = 0
4599
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
4600
				WHILE @@fetch_status=0 
4601
				BEGIN
4602
					SET @INDEX_PO = @INDEX_PO +1
4603
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
4604
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
4605
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
4606
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
4607
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
4608
				IF @@error<>0 GOTO ABORT;
4609
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
4610
				END
4611
				CLOSE XmlDataPO;
4612
				DEALLOCATE XmlDataPO;
4613
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
4614
			----------------------------
4615
			--INSERT FROM PERIOD	
4616
				DECLARE XmlDataPeriod CURSOR FOR
4617
				SELECT *
4618
				FROM
4619
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
4620
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
4621
				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), AD_PAY_ID VARCHAR(15), 
4622
				PROCESS VARCHAR(5),PARENT_ID VARCHAR(15),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))
4623
				OPEN XmlDataPeriod;
4624
				--DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
4625
				--@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@AD_PAY_ID VARCHAR(15), @_PROCESS VARCHAR(15),@PARENT_ID VARCHAR(15),@PAY_PHASE NVARCHAR(250)
4626
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
4627
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
4628
				WHILE @@fetch_status=0 
4629
				BEGIN
4630
					-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE
4631
					IF(@p_TYPE_FUNCTION ='SEND') 
4632
					BEGIN
4633
						IF(EXISTS(SELECT CONTRACT_ID 
4634
						FROM TR_CONTRACT 
4635
						WHERE CONTRACT_ID = @REF_ID AND CONVERT(DATE,END_DT,103) < CONVERT(DATE,GETDATE(),103) AND END_DT IS NOT NULL AND CONT_TYPE ='DK' AND CONT_TYPE IS NOT NULL AND  CONT_TYPE <>''))
4636
						BEGIN
4637
							ROLLBACK TRANSACTION
4638
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Thanh toán hợp đồng định kì đã đóng' ErrorDesc
4639
							RETURN '-1'
4640
						END
4641
						
4642
						IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )
4643
						BEGIN
4644
							ROLLBACK TRANSACTION
4645
							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
4646
							RETURN '-1'
4647
						END
4648
					END
4649
					--DECLARE @PERIOD_ID VARCHAR(15);
4650
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
4651
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
4652
					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,PARENT_ID,PAY_PHASE,REASON)
4653
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
4654
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY,@RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK)
4655
			IF @@error<>0 GOTO ABORT;
4656
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
4657
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK
4658
			END
4659
			CLOSE XmlDataPeriod;
4660
			DEALLOCATE XmlDataPeriod;
4661
			---- VALIDATE SO TIEN
4662
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
4663
			--BEGIN
4664
			--	ROLLBACK TRANSACTION
4665
			--	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
4666
			--	RETURN '-1'
4667
			--END
4668
			--
4669
			END	
4670
COMMIT TRANSACTION
4671
			IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
4672
			BEGIN
4673
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
4674
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
4675
				--IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='HS' AND @p_REQ_TYPE ='I')
4676
				--BEGIN
4677
				--	DECLARE @USER_TP VARCHAR(15)
4678
				--	SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('GDDV','TPTC','TC','KTT'))
4679
				--	UPDATE TR_REQ_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
4680
				--END
4681
				--ELSE 
4682
				IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
4683
				BEGIN
4684
					--DECLARE @USER_TPGD VARCHAR(15)
4685
					--SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))
4686
					DECLARE @USER_TPGD VARCHAR(15)
4687
					SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND 
4688
					(RoleName IN ('TPGD') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
4689
					IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
4690
					BEGIN
4691
						SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID = @p_BRANCH_CREATE
4692
							AND RoleName ='TPGD')
4693
					END
4694
					UPDATE TR_REQ_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
4695
				END
4696
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
4697
				UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
4698
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
4699
				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 thanh toán và gửi phê duyệt')
4700
				SELECT '4' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
4701
				RETURN '4'
4702
			END
4703
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
4704
RETURN '0'
4705
ABORT:
4706
BEGIN
4707
		CLOSE XmlData;
4708
		DEALLOCATE XmlData;
4709
		CLOSE XmlDataPay;
4710
		DEALLOCATE XmlDataPay;
4711
		Close XmlDataMethod;
4712
		Close XmlDataCat;
4713
		CLOSE XmlDataService;
4714
		CLOSE XmlDataSchedule;
4715
		Deallocate XmlDataMethod;
4716
		Deallocate XmlDataCat;
4717
		DEALLOCATE XmlDataService;
4718
		DEALLOCATE XmlDataSchedule;
4719
		ROLLBACK TRANSACTION
4720
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
4721
		RETURN '-1'
4722
End