Project

General

Profile

script_upd_payment_auto.txt

Luc Tran Van, 06/21/2023 09:40 AM

 
1
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_AUTO_Upd]
2
@p_REQ_PAY_AUTO_ID	VARCHAR(20)= NULL,
3
@p_REQ_PAY_AUTO_CODE	VARCHAR(20)= NULL,
4
@p_REQ_PAY_AUTO_DT	VARCHAR(20)= NULL,
5
@p_REQ_PAY_AUTO_TYPE	VARCHAR(20)= NULL,
6
@p_REQ_PAY_AUTO_SERVICE_TYPE	VARCHAR(20)= NULL,
7
@p_REQ_PAY_AUTO_STATUS	VARCHAR(20)= NULL,
8
@p_REQ_PAY_AUTO_EFFECTIVE_DT	VARCHAR(20)= NULL,
9
@p_BRANCH_ID	VARCHAR(20)= NULL,
10
@p_DEP_ID	VARCHAR(20)= NULL,
11
@p_BRANCH_CREATE	VARCHAR(20)= NULL,
12
@p_TRANSFER_USER_RECEIVE	VARCHAR(20)= NULL,
13
@p_CONFIRM_NOTE	VARCHAR(20)= NULL,
14
@p_CONTRACT_ID	VARCHAR(20)= NULL,
15
@p_PROCESS	VARCHAR(20)= NULL,
16
@p_TRANSFER_MAKER	VARCHAR(20)= NULL,
17
@p_TRANSFER_DT	VARCHAR(20)= NULL,
18
@p_MAKER_ID	VARCHAR(20)= NULL,
19
@p_CREATE_DT	VARCHAR(20)= NULL,
20
@p_EDITOR_ID	VARCHAR(20)= NULL,
21
@p_EDIT_DT	VARCHAR(20)= NULL,
22
@p_CHECKER_ID	VARCHAR(20)= NULL,
23
@p_APPROVE_DT	VARCHAR(20)= NULL,
24
@p_AUTH_STATUS	VARCHAR(20)= NULL,
25
@p_MAKER_ID_KT	VARCHAR(20)= NULL,
26
@p_CREATE_DT_KT	VARCHAR(20)= NULL,
27
@p_CHECKER_ID_KT	VARCHAR(20)= NULL,
28
@p_APPROVE_DT_KT	VARCHAR(20)= NULL,
29
@p_AUTH_STATUS_KT	VARCHAR(20)= NULL,
30
@p_RECORD_STATUS	VARCHAR(20)= NULL,
31
@p_FRMDATE	VARCHAR(20)= NULL,
32
@p_TODATE	VARCHAR(20)= NULL,
33
@p_LEVEL	VARCHAR(20)= NULL,
34
@p_USER_LOGIN	VARCHAR(20)= NULL,
35
@p_IS_SEND_APPR	VARCHAR(20)= NULL,
36
@p_TYPE_SEARCH	VARCHAR(20)= NULL,
37
@p_BRANCH_LOGIN	VARCHAR(20)= NULL,
38
@p_NOTIFI_EXPIRED_DT	VARCHAR(20)= NULL,
39
@p_IS_MAKER_CONFIRM_CHECKBOX	VARCHAR(20)= NULL,
40
@p_XMP_SCHEDULE XML = NULL,
41
@p_XMP_SCHEDULE_DETAIL XML = NULL,
42
@p_XMP_RECURRING XML = NULL,
43
@p_XMP_BUDGET_ALLOCATION XML = NULL,
44
@p_XMP_BUDGET_ALLOCATION_TYPE_A XML = NULL,
45
@p_XMP_METHOD XML = NULL
46
AS
47
-- BEGIN VALIDATE MASTER
48
	IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_AUTO WHERE ISNULL(MAKER_ID, '') <> @p_USER_LOGIN AND REQ_PAY_AUTO_ID =@p_REQ_PAY_AUTO_ID))
49
	BEGIN
50
		SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Chỉnh sửa phiếu thất bại! Chỉ người tạo phiếu mới có quyền chỉnh sửa phiếu' ErrorDesc
51
		RETURN '-1'
52
	END
53
	IF(ISNULL(@p_REQ_PAY_AUTO_TYPE, '') = '' OR ISNULL(@p_MAKER_ID, '') = '' OR ISNULL(@p_BRANCH_ID, '') = '' OR ISNULL(@p_DEP_ID, '') = '' OR ISNULL(@p_REQ_PAY_AUTO_SERVICE_TYPE, '') = '')
54
	BEGIN
55
		SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Các thông tin sau không được để trống: loại thanh toán tự động, người tạo yêu cầu, đơn vị tạo yêu cầu, phòng ban tạo yêu cầu, loại dịch vụ thanh toán' ErrorDesc
56
		RETURN '-1'
57
	END
58
	IF(ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '' OR ISNULL(@p_REQ_PAY_AUTO_ID, '') = '')
59
	BEGIN
60
		SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Mã số phiếu không được đế trống' ErrorDesc
61
		RETURN '-1'
62
	END
63
	IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT_AUTO WHERE REQ_PAY_AUTO_ID <> @p_REQ_PAY_AUTO_ID AND CONTRACT_ID = @p_CONTRACT_ID AND AUTH_STATUS NOT IN ('E', 'R', 'D') AND REQ_PAY_AUTO_TYPE = 'A'))
64
	BEGIN
65
		SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Số hợp đồng(ID hệ thống) ' + @p_CONTRACT_ID + N' đang được đề nghị thanh toán tự động trong hệ thống' ErrorDesc
66
		RETURN '-1'
67
	END
68
	IF(@p_IS_SEND_APPR ='SEND')
69
	BEGIN
70
		IF(ISNULL(@p_CONTRACT_ID, '') = '')
71
		BEGIN
72
			SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Số hợp đồng(ID hệ thống) không được đế trống' ErrorDesc
73
			RETURN '-1'
74
		END
75
	END
76
-- END VALIDATE MASTER
77
-- BEGIN VALIDATE FLOW
78
	IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_AUTO WHERE AUTH_STATUS = 'A' AND REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID))
79
	BEGIN
80
		SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Phê duyệt thất bại! Phiếu yêu cầu thanh toán tự động đã được trưởng đơn vị phê duyệt trước đó' ErrorDesc
81
		RETURN '-1'
82
	END
83
	IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_AUTO WHERE AUTH_STATUS_KT = 'A' AND REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID))
84
	BEGIN
85
		SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Phê duyệt thất bại! Phiếu yêu cầu thanh toán tự động đã được kiểm sát viên phê duyệt' ErrorDesc
86
		RETURN '-1'
87
	END
88
	IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_AUTO WHERE ISNULL(PROCESS, '') <> '' AND REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID))
89
	BEGIN
90
		SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Cập nhật thất bại! Phiếu yêu cầu thanh toán tự động đã được gửi phê duyệt trước đó' ErrorDesc
91
		RETURN '-1'
92
	END
93
-- END VALIDATE FLOW
94
BEGIN TRANSACTION
95
	DECLARE @BRANCH_MANAGE_ID VARCHAR(20)
96
	SET @BRANCH_MANAGE_ID = ISNULL((SELECT TOP 1 BRANCH_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID), '');
97
	UPDATE TR_REQ_PAYMENT_AUTO
98
	SET REQ_PAY_AUTO_SERVICE_TYPE = @p_REQ_PAY_AUTO_SERVICE_TYPE, AUTH_STATUS = 'E', CREATE_DT = GETDATE(),
99
	TRANSFER_USER_RECEIVE = @p_TRANSFER_USER_RECEIVE, CONTRACT_ID = @p_CONTRACT_ID, 
100
	NOTIFI_EXPIRED_DT = CONVERT(DATE, @p_NOTIFI_EXPIRED_DT, 103), IS_MAKER_CONFIRM = @p_IS_MAKER_CONFIRM_CHECKBOX, 
101
	IS_MAKER_CONFIRM_CHECKBOX = @p_IS_MAKER_CONFIRM_CHECKBOX, BRANCH_MANAGE_ID = @BRANCH_MANAGE_ID, IS_SEND_MAIL_EXPIRED = NULL
102
	WHERE 1 = 1 
103
	AND REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID
104
	IF @@Error <> 0 GOTO ABORT
105
	
106
--- INSERT LICH THANH TOAN
107
	DELETE FROM TR_REQ_PAY_AUTO_SCHEDULE WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID
108
	DECLARE @hDocSchedule INT
109
	EXEC sp_xml_preparedocument @hDocSchedule OUTPUT, @p_XMP_SCHEDULE;
110
	IF(@p_IS_SEND_APPR ='SEND')
111
	BEGIN
112
		IF(@p_REQ_PAY_AUTO_TYPE = 'A' AND NOT EXISTS(SELECT * FROM OPENXML(@hDocSchedule, '/Root/XmlDataSchedule', 2) WITH(REQ_PAY_AUTO_ID varchar(20))))
113
		BEGIN
114
			ROLLBACK TRANSACTION
115
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách thông tin định kỳ thanh toán không được phép để trống' ErrorDesc
116
			RETURN '-1'
117
		END
118
	END
119

    
120
	DECLARE @REQ_PAY_AUTO_SCHEDULE_ID VARCHAR(20), @CONTRACT_ID VARCHAR(20), @TYPE_PERIOD VARCHAR(20), @START_DT VARCHAR(20), @END_DT VARCHAR(20), @PERIOD_AMT DECIMAL(18,2), @PERIOD_NUMBER DECIMAL(18,2), @PERIOD_PAY_DT VARCHAR(20), @PERIOD_PAY_DAY DECIMAL(18,0)
121

    
122
	DECLARE XmlDataSchedule CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDocSchedule, 'Root/XmlDataSchedule',2)
123
	WITH(REQ_PAY_AUTO_CONTRACT_ID VARCHAR(20), CONTRACT_ID VARCHAR(20), TYPE_PERIOD VARCHAR(20), START_DT VARCHAR(20), END_DT VARCHAR(20), PERIOD_AMT DECIMAL(18,2), PERIOD_NUMBER DECIMAL(18,2), PERIOD_PAY_DT VARCHAR(20), PERIOD_PAY_DAY DECIMAL(18,0))
124
	OPEN XmlDataSchedule
125

    
126
	DECLARE @INDEX_SCHEDULE INT = 0;
127
	FETCH NEXT FROM XmlDataSchedule INTO @REQ_PAY_AUTO_SCHEDULE_ID, @CONTRACT_ID, @TYPE_PERIOD, @START_DT, @END_DT, @PERIOD_AMT, @PERIOD_NUMBER , @PERIOD_PAY_DT, @PERIOD_PAY_DAY
128
	WHILE @@fetch_status=0 
129
	BEGIN
130
		-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
131
		IF(@p_IS_SEND_APPR ='SEND')
132
		BEGIN
133
			SET @INDEX_SCHEDULE = @INDEX_SCHEDULE + 1
134

    
135
			IF(@TYPE_PERIOD IS NULL OR @TYPE_PERIOD = '')
136
			BEGIN
137
				ROLLBACK TRANSACTION
138
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin định kỳ thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE)+N': Định kỳ không được để trống' ErrorDesc
139
				RETURN '-1'
140
			END
141
			IF(@START_DT IS NULL OR @START_DT = '')
142
			BEGIN
143
				ROLLBACK TRANSACTION
144
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin định kỳ thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE)+N': Ngày bắt đầu không được để trống' ErrorDesc
145
				RETURN '-1'
146
			END
147
			IF(@END_DT IS NULL OR @END_DT = '')
148
			BEGIN
149
				ROLLBACK TRANSACTION
150
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin định kỳ thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE)+N': Ngày kết thúc không được để trống' ErrorDesc
151
				RETURN '-1'
152
			END
153
			IF(@PERIOD_AMT IS NULL OR @PERIOD_AMT < 0)
154
			BEGIN
155
				ROLLBACK TRANSACTION
156
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin định kỳ thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE)+N': Số tiền định kỳ thanh toán không được để trống hoặc bé hơn 0' ErrorDesc
157
				RETURN '-1'
158
			END
159
			IF(@PERIOD_PAY_DAY IS NULL OR @PERIOD_PAY_DAY < 0)
160
			BEGIN
161
				ROLLBACK TRANSACTION
162
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin định kỳ thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE)+N': Ngày thanh toán định kỳ không được để trống' ErrorDesc
163
				RETURN '-1'
164
			END
165
			IF(CONVERT(DATE, @START_DT, 103) > CONVERT(DATE, @END_DT, 103))
166
			BEGIN
167
				ROLLBACK TRANSACTION
168
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin định kỳ thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE)+N': Ngày bắt đầu phải bé hơn ngày kết thúc' ErrorDesc
169
				RETURN '-1'
170
			END
171
		END
172

    
173
		EXEC SYS_CodeMasters_Gen 'REQ_PAY_AUTO_SCHEDULE_ID', @REQ_PAY_AUTO_SCHEDULE_ID OUT;
174
		IF @REQ_PAY_AUTO_SCHEDULE_ID='' OR @REQ_PAY_AUTO_SCHEDULE_ID IS NULL GOTO ABORT;
175

    
176
		INSERT INTO TR_REQ_PAY_AUTO_SCHEDULE(REQ_PAY_AUTO_SCHEDULE_ID, REQ_PAY_AUTO_ID, CONTRACT_ID,	TYPE_PERIOD,	START_DT,	END_DT,	PERIOD_AMT,	PERIOD_NUMBER,	PERIOD_PAY_DT,	MAKER_ID,	CREATE_DT,	CHECKER_ID,	APPROVE_DT,	AUTH_STATUS,	RECORD_STATUS, PERIOD_PAY_DAY)
177
		VALUES (@REQ_PAY_AUTO_SCHEDULE_ID, @p_REQ_PAY_AUTO_ID, @CONTRACT_ID, @TYPE_PERIOD, CONVERT(DATE,@START_DT,103), CONVERT(DATE,@END_DT,103), @PERIOD_AMT, @PERIOD_NUMBER, CONVERT(DATE,@PERIOD_PAY_DT,103), @p_MAKER_ID, GETDATE(), NULL, NULL, 'A', '1', @PERIOD_PAY_DAY)
178
	
179
	IF @@error<>0 GOTO ABORT;
180
	FETCH NEXT FROM XmlDataSchedule INTO @REQ_PAY_AUTO_SCHEDULE_ID, @CONTRACT_ID, @TYPE_PERIOD, @START_DT, @END_DT, @PERIOD_AMT, @PERIOD_NUMBER , @PERIOD_PAY_DT, @PERIOD_PAY_DAY
181
	END
182
	CLOSE XmlDataSchedule;
183
	DEALLOCATE XmlDataSchedule;
184
	
185
--- INSERT CHI TIET LICH THANH TOAN
186
	DELETE FROM TR_REQ_PAY_AUTO_SCHEDULE_DETAIL WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID AND PAY_AUTO_STATUS <> 'Y'
187

    
188
	DECLARE @hDocScheduleDetail INT
189
	EXEC sp_xml_preparedocument @hDocScheduleDetail OUTPUT, @p_XMP_SCHEDULE_DETAIL;
190
	IF(@p_IS_SEND_APPR ='SEND')
191
	BEGIN
192
		IF(@p_REQ_PAY_AUTO_TYPE = 'A' AND NOT EXISTS(SELECT * FROM OPENXML(@hDocScheduleDetail, '/Root/XmlDataScheduleDetail', 2) WITH(REQ_PAY_AUTO_ID varchar(20))))
193
		BEGIN
194
			ROLLBACK TRANSACTION
195
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách lịch thanh toán chi tiết không được phép để trống' ErrorDesc
196
			RETURN '-1'
197
		END
198
	END
199
	
200
	DECLARE @REQ_PAY_AUTO_SCHEDULE_DETAIL_ID VARCHAR(20), @EXPECTED_DT VARCHAR(20), @PAY_AUTO_AMT DECIMAL(18,2), @PAY_AUTO_DESC NVARCHAR(1000), @PAY_AUTO_STATUS VARCHAR(20), @EXACT_DT VARCHAR(20), @END_PERIOD_DT VARCHAR(20), @NOTES NVARCHAR(1000), @PAY_PHASE NVARCHAR(500)
201

    
202
	DECLARE XmlDataScheduleDetail CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDocScheduleDetail, 'Root/XmlDataScheduleDetail',2)
203
	WITH(REQ_PAY_AUTO_SCHEDULE_DETAIL_ID VARCHAR(20),REQ_PAY_AUTO_SCHEDULE_ID VARCHAR(20),EXPECTED_DT VARCHAR(20),PAY_AUTO_AMT DECIMAL(18,2),PAY_AUTO_DESC NVARCHAR(1000),PAY_AUTO_STATUS VARCHAR(20), EXACT_DT VARCHAR(20), START_DT VARCHAR(20), END_DT VARCHAR(20), TYPE_PERIOD VARCHAR(20), END_PERIOD_DT VARCHAR(20), NOTES NVARCHAR(255), PAY_PHASE NVARCHAR(500))
204
	OPEN XmlDataScheduleDetail
205

    
206
	DECLARE @INDEX_SCHEDULE_DETAIL INT = 0
207
	FETCH NEXT FROM XmlDataScheduleDetail INTO @REQ_PAY_AUTO_SCHEDULE_DETAIL_ID, @REQ_PAY_AUTO_SCHEDULE_ID, @EXPECTED_DT, @PAY_AUTO_AMT, @PAY_AUTO_DESC, @PAY_AUTO_STATUS, @EXACT_DT, @START_DT, @END_DT, @TYPE_PERIOD, @END_PERIOD_DT, @NOTES, @PAY_PHASE
208
	WHILE @@fetch_status=0 
209
	BEGIN
210
		-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
211
		IF(@p_IS_SEND_APPR ='SEND')
212
		BEGIN
213
			SET @INDEX_SCHEDULE_DETAIL = @INDEX_SCHEDULE_DETAIL + 1
214
			
215
			IF(@EXPECTED_DT IS NULL OR @EXPECTED_DT = '')
216
			BEGIN
217
				ROLLBACK TRANSACTION
218
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lịch thanh toán chi tiết, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE_DETAIL)+N': Ngày dự kiến  thanh toán không được để trống' ErrorDesc
219
				RETURN '-1'
220
			END
221
			IF(@PAY_AUTO_AMT IS NULL OR @PAY_AUTO_AMT < 0)
222
			BEGIN
223
				ROLLBACK TRANSACTION
224
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lịch thanh toán chi tiết, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE_DETAIL)+N': Số tiền thanh toán không được để trống' ErrorDesc
225
				RETURN '-1'
226
			END
227
			IF(@PAY_AUTO_STATUS IS NULL OR @PAY_AUTO_STATUS = '')
228
			BEGIN
229
				ROLLBACK TRANSACTION
230
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lịch thanh toán chi tiết, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE_DETAIL)+N': Tình trạng không được để trống' ErrorDesc
231
				RETURN '-1'
232
			END
233

    
234
			IF(ISNULL(@PAY_PHASE, '') = '')
235
			BEGIN
236
				ROLLBACK TRANSACTION
237
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lịch thanh toán chi tiết, dòng ' + CONVERT(VARCHAR(5),@INDEX_SCHEDULE_DETAIL)+N': Kỳ thanh toán không được để trống' ErrorDesc
238
				RETURN '-1'
239
			END
240
		END
241

    
242
		IF(ISNULL(@PAY_AUTO_STATUS, '') <> 'Y')
243
		BEGIN
244
			EXEC SYS_CodeMasters_Gen 'REQ_PAY_AUTO_SCHEDULE_DETAIL_ID', @REQ_PAY_AUTO_SCHEDULE_DETAIL_ID OUT;
245
			IF @REQ_PAY_AUTO_SCHEDULE_DETAIL_ID='' OR @REQ_PAY_AUTO_SCHEDULE_DETAIL_ID IS NULL GOTO ABORT;
246

    
247
			INSERT INTO TR_REQ_PAY_AUTO_SCHEDULE_DETAIL(REQ_PAY_AUTO_SCHEDULE_DETAIL_ID,	REQ_PAY_AUTO_SCHEDULE_ID, REQ_PAY_AUTO_ID,	EXPECTED_DT,	PAY_AUTO_AMT,	PAY_AUTO_DESC,	PAY_AUTO_STATUS,	EXACT_DT,	MAKER_ID,	CREATE_DT,	CHECKER_ID,	APPROVE_DT,	AUTH_STATUS,	RECORD_STATUS, START_DT, END_DT, TYPE_PERIOD, END_PERIOD_DT, NOTES, PAY_PHASE)
248
			VALUES (@REQ_PAY_AUTO_SCHEDULE_DETAIL_ID, @REQ_PAY_AUTO_SCHEDULE_ID, @p_REQ_PAY_AUTO_ID, CONVERT(DATE,@EXPECTED_DT,103), @PAY_AUTO_AMT, @PAY_AUTO_DESC, @PAY_AUTO_STATUS, CONVERT(DATE,@EXACT_DT,103), @p_MAKER_ID, GETDATE(), NULL, NULL, 'A', '1', CONVERT(DATE,@START_DT,103), CONVERT(DATE,@END_DT,103), @TYPE_PERIOD, CONVERT(DATE,@END_PERIOD_DT,103), @NOTES, @PAY_PHASE)
249
		END
250
		
251
	
252
	IF @@error<>0 GOTO ABORT;
253
	FETCH NEXT FROM XmlDataScheduleDetail INTO @REQ_PAY_AUTO_SCHEDULE_DETAIL_ID, @REQ_PAY_AUTO_SCHEDULE_ID, @EXPECTED_DT, @PAY_AUTO_AMT, @PAY_AUTO_DESC, @PAY_AUTO_STATUS, @EXACT_DT, @START_DT, @END_DT, @TYPE_PERIOD, @END_PERIOD_DT, @NOTES, @PAY_PHASE
254
	END
255
	CLOSE XmlDataScheduleDetail;
256
	DEALLOCATE XmlDataScheduleDetail;
257
	
258
--- INSERT PHUONG THUC THANH TOAN
259
	DELETE FROM TR_REQ_PAY_AUTO_METHOD WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID
260
	
261
	DECLARE @hDocMeThod INT
262
	EXEC sp_xml_preparedocument @hDocMeThod OUTPUT, @p_XMP_METHOD;
263
	IF(@p_IS_SEND_APPR ='SEND')
264
	BEGIN
265
		IF(@p_REQ_PAY_AUTO_TYPE = 'A' AND NOT EXISTS(SELECT * FROM OPENXML(@hDocMeThod, '/Root/XmlDataMethod', 2) WITH(REQ_PAY_AUTO_ID varchar(20))))
266
		BEGIN
267
			ROLLBACK TRANSACTION
268
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách phương thức thanh toán không được phép để trống' ErrorDesc
269
			RETURN '-1'
270
		END
271
	END
272
	
273
	DECLARE @RECEIVE_ID VARCHAR(15), @RECEIVE_NAME NVARCHAR(100), @REQ_PAY_REASON NVARCHAR(MAX), @TOTAL_AMT DECIMAL(18,2),
274
	@REQ_PAY_TYPE VARCHAR(1), @REQ_PAY_DESC NVARCHAR(MAX), @REQ_PAY_ENTRIES NVARCHAR(MAX), @ACC_NO VARCHAR(25), @ACC_NAME NVARCHAR(250),
275
	@ISSUED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20), @CURRENCY VARCHAR(15), @RATE DECIMAL(18,2), @CHECK_IN VARCHAR(15), @TYPE_TRANSFER VARCHAR(15), 
276
	@BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME VARCHAR(250), @SUB_ISSUED_BY NVARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
277

    
278
	DECLARE XmlDataMethod CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDocMeThod, 'Root/XmlDataMethod',2)
279
	WITH(RECEIVE_ID VARCHAR(15),RECEIVE_NAME NVARCHAR(100),REQ_PAY_REASON NVARCHAR(MAX),TOTAL_AMT DECIMAL(18,2),
280
	REQ_PAY_TYPE VARCHAR(1),REQ_PAY_DESC NVARCHAR(MAX),REQ_PAY_ENTRIES NVARCHAR(MAX),ACC_NO VARCHAR(25), 
281
	ACC_NAME NVARCHAR(250),ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),CHECK_IN VARCHAR(15),TYPE_TRANSFER VARCHAR(15), 
282
	BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME VARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT VARCHAR(20))
283
	OPEN XmlDataMethod
284

    
285
	DECLARE @INDEX_METHOD INT = 0
286
	FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT,@REQ_PAY_TYPE,
287
	@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
288
	WHILE @@fetch_status=0 
289
	BEGIN
290
		-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
291
		IF(@p_IS_SEND_APPR ='SEND')
292
		BEGIN
293
			SET @INDEX_METHOD = @INDEX_METHOD + 1
294
			----------------------- begin validate ------------------------
295
			IF(@ACC_NO IS NULL OR @ACC_NO = '')
296
			BEGIN
297
				ROLLBACK TRANSACTION
298
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_METHOD)+N': số tài khoản '+ N' không được để trống' ErrorDesc
299
				RETURN '-1'
300
			END
301

    
302
			IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT = '' OR @ISSUED_DT IS NULL))
303
			BEGIN
304
				ROLLBACK TRANSACTION
305
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_METHOD)+N': Ngày cấp CMND '+ N' không được để trống nếu phương thức thanh toán là bằng tiền mặt' ErrorDesc
306
				RETURN '-1'
307
			END
308

    
309
			IF(@TOTAL_AMT IS NULL OR @TOTAL_AMT < 0)
310
			BEGIN
311
				ROLLBACK TRANSACTION
312
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_METHOD)+N': Số tiền thanh toán không được để trống hoặc bé hơn 0' ErrorDesc
313
				RETURN '-1'
314
			END
315
		END
316

    
317
		IF(@REQ_PAY_TYPE<>'1')
318
		BEGIN
319
			SET @ISSUED_DT = NULL
320
		END
321
		IF(@TYPE_TRANSFER IS NULL OR @TYPE_TRANSFER ='')
322
		BEGIN
323
			SET @TYPE_TRANSFER ='A'
324
		END
325

    
326
		DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
327
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
328
		IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
329

    
330
		INSERT INTO TR_REQ_PAY_AUTO_METHOD(METHOD_ID, REQ_PAY_AUTO_ID, EMP_ID, REQ_PAY_REASON, TOTAL_AMT, REQ_PAY_TYPE, REQ_PAY_DESC, REQ_PAY_ENTRIES, TEMP, MAKER_ID, CREATE_DT, ACC_NO, ACC_NAME, ISSUED_BY, ISSUED_DT, CURRENCY, RATE, CHECK_IN, TYPE_TRANSFER, BANKCODE_NAPAS, BANKCODE, BANKNAME, SUB_ISSUED_BY, RECEIVER_DEBIT)
331
		VALUES (@p_REQ_PAY_METHOD_ID,@p_REQ_PAY_AUTO_ID,@RECEIVE_ID,@REQ_PAY_REASON, @TOTAL_AMT,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,'',@p_MAKER_ID,GETDATE(),@ACC_NO, @ACC_NAME,@ISSUED_BY,CONVERT(DATE,@ISSUED_DT,103), 'VND' ,'1',@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME,@SUB_ISSUED_BY, @RECEIVER_DEBIT )
332
	
333
	IF @@error<>0 GOTO ABORT;
334
	FETCH NEXT FROM XmlDataMethod INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT,@REQ_PAY_TYPE,
335
	@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
336
	END
337
	CLOSE XmlDataMethod;
338
	DEALLOCATE XmlDataMethod;
339

    
340
--- INSERT THÔNG TIN DỊCH VỤ
341
	DECLARE @hDocRecurring INT
342
	EXEC sp_xml_preparedocument @hDocRecurring OUTPUT, @p_XMP_RECURRING;
343

    
344
	IF(@p_IS_SEND_APPR = 'SEND')
345
	BEGIN
346
		IF(@p_REQ_PAY_AUTO_TYPE ='B')
347
		BEGIN
348
			IF(NOT EXISTS(SELECT * FROM OPENXML(@hDocRecurring, '/Root/XmlDataManufacturer', 2) WITH(REQ_PAY_AUTO_MANUFACTURER_ID VARCHAR(20))))
349
			BEGIN
350
				ROLLBACK TRANSACTION
351
				SELECT '-1' Result, '' REQ_PAY_ID, N'Lưới Thông tin dịch vụ không được để trống' ErrorDesc
352
				RETURN '-1'
353
			END
354
		END
355
	END
356

    
357
	DECLARE @REQ_PAY_AUTO_MANUFACTURER_ID VARCHAR(20), @SEVCODE VARCHAR(20), @SEVNAME NVARCHAR(255), @PRVCODE VARCHAR(20), @PRVNAME NVARCHAR(255), @ROUTETO VARCHAR(20), @TRANSACCOUNT VARCHAR(20), @TRANSACCOUNT_NAME VARCHAR(250), 
358
	@TRANS_GLCODE VARCHAR(20), @TRANS_GLNAME VARCHAR(250), @RECEIVE_GLCODE VARCHAR(20), @RECEIVE_GLNAME VARCHAR(250), 
359
	@CUSTOMER_ID VARCHAR(20), @CUSTOMER_CODE VARCHAR(20), @CUSTOMER_NAME NVARCHAR(255), @CUSTOMER_CODE_SYSTEM VARCHAR(20), @CUSTOMER_NAME_SYSTEM NVARCHAR(255), @CUSTOMER_ADDRESS_SYSTEM NVARCHAR(255), @IS_REGISTER VARCHAR(2), @IS_VALID VARCHAR(2),
360
	@BILLCODE VARCHAR(50), @BILLALIAS NVARCHAR(255), @BILLID VARCHAR(20), @BILLTIME VARCHAR(20), @IS_CHECKED VARCHAR(1)
361

    
362
	DECLARE XmlDataRecurring CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDocRecurring, 'Root/XmlDataManufacturer',2)
363
	WITH(REQ_PAY_AUTO_MANUFACTURER_ID VARCHAR(20), SEVCODE VARCHAR(20), SEVNAME NVARCHAR(255), PRVCODE VARCHAR(20), PRVNAME NVARCHAR(255), ROUTETO VARCHAR(20), TRANSACCOUNT VARCHAR(20), TRANSACCOUNT_NAME VARCHAR(250), TRANS_GLCODE VARCHAR(20), TRANS_GLNAME VARCHAR(250), 
364
	RECEIVE_GLCODE VARCHAR(20), RECEIVE_GLNAME VARCHAR(250), CUSTOMER_ID VARCHAR(20), CUSTOMER_CODE VARCHAR(20), CUSTOMER_NAME NVARCHAR(255), CUSTOMER_CODE_SYSTEM VARCHAR(20), CUSTOMER_NAME_SYSTEM NVARCHAR(255), CUSTOMER_ADDRESS_SYSTEM NVARCHAR(255), 
365
	IS_REGISTER VARCHAR(2), IS_VALID VARCHAR(2), BILLCODE VARCHAR(50), BILLALIAS NVARCHAR(255), BILLID VARCHAR(20), BILLTIME VARCHAR(20), IS_CHECKED VARCHAR(1))
366
	OPEN XmlDataRecurring
367

    
368
	DELETE FROM TR_REQ_PAY_AUTO_RECURRING WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID
369
	DECLARE @INDEX_AUTO_RECURRING INT = 0
370
	FETCH NEXT FROM XmlDataRecurring INTO @REQ_PAY_AUTO_MANUFACTURER_ID, @SEVCODE, @SEVNAME, @PRVCODE, @PRVNAME, @ROUTETO, @TRANSACCOUNT, @TRANSACCOUNT_NAME, @TRANS_GLCODE, @TRANS_GLNAME, @RECEIVE_GLCODE, @RECEIVE_GLNAME,
371
	@CUSTOMER_ID, @CUSTOMER_CODE, @CUSTOMER_NAME, @CUSTOMER_CODE_SYSTEM, @CUSTOMER_NAME_SYSTEM, @CUSTOMER_ADDRESS_SYSTEM, @IS_REGISTER, @IS_VALID, @BILLCODE, @BILLALIAS, @BILLID, @BILLTIME, @IS_CHECKED
372
	WHILE @@fetch_status=0 
373
	BEGIN
374
		-- BEGIN VALIDATE
375
		IF(@p_IS_SEND_APPR ='SEND')
376
		BEGIN
377
			SET @INDEX_AUTO_RECURRING = @INDEX_AUTO_RECURRING + 1
378

    
379
			IF(ISNULL(@IS_CHECKED, '') = '')
380
			BEGIN
381
				ROLLBACK TRANSACTION
382
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin dịch vụ, dòng ' + CONVERT(VARCHAR(5),@INDEX_AUTO_RECURRING)+N', cột kiểm tra thông tin: Chưa nhấn nút kiểm tra thông tin! Bạn cần kiểm tra thông tin trước khi gửi phê duyệt' ErrorDesc
383
				RETURN '-1'
384
			END
385
			IF(ISNULL(@CUSTOMER_CODE_SYSTEM, '') = '')
386
			BEGIN
387
				ROLLBACK TRANSACTION
388
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin dịch vụ, dòng ' + CONVERT(VARCHAR(5),@INDEX_AUTO_RECURRING)+N', Mã khách hàng tại NCC sai, hoặc quá trình kiểm tra thông tin gặp sự cố! Vui lòng kiểm tra lại mã khách hàng tại NCC trước khi gửi phê duyệt' ErrorDesc
389
				RETURN '-1'
390
			END
391
			IF(ISNULL(@CUSTOMER_CODE_SYSTEM, '') <> ISNULL(@BILLCODE, ''))
392
			BEGIN
393
				ROLLBACK TRANSACTION
394
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin dịch vụ, dòng ' + CONVERT(VARCHAR(5),@INDEX_AUTO_RECURRING)+N', Mã khách hàng tại NCC không giống với Mã khách hàng tại NCC(Hệ thống)! Vui lòng kiểm tra lại thông tin trước khi gửi phê duyệt' ErrorDesc
395
				RETURN '-1'
396
			END
397
			IF(ISNULL(@IS_REGISTER, '') = '1')
398
			BEGIN
399
				ROLLBACK TRANSACTION
400
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin dịch vụ, dòng ' + CONVERT(VARCHAR(5),@INDEX_AUTO_RECURRING)+N', Mã khách hàng tại NCC đã được đăng ký thanh toán tự động trước đó.' ErrorDesc
401
				RETURN '-1'
402
			END
403
		END
404
		-- END VALIDATE
405
		
406
		DECLARE @REQ_PAY_AUTO_RECURRING_ID VARCHAR(20)
407
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_AUTO_RECURRING', @REQ_PAY_AUTO_RECURRING_ID OUT;
408
		IF @REQ_PAY_AUTO_RECURRING_ID = '' OR @REQ_PAY_AUTO_RECURRING_ID IS NULL GOTO ABORT;
409

    
410
		INSERT INTO TR_REQ_PAY_AUTO_RECURRING(REQ_PAY_AUTO_RECURRING_ID, REQ_PAY_AUTO_MANUFACTURER_ID, REQ_PAY_AUTO_ID, SEVCODE, SEVNAME, PRVCODE, PRVNAME, ROUTETO, TRANSACCOUNT, TRANSACCOUNT_NAME, TRANS_GLCODE, TRANS_GLNAME, RECEIVE_GLCODE, RECEIVE_GLNAME, 
411
		CUSTOMER_CODE, CUSTOMER_NAME, CUSTOMER_CODE_SYSTEM, CUSTOMER_NAME_SYSTEM, CUSTOMER_ADDRESS_SYSTEM, IS_REGISTER, IS_VALID, MAKER_ID, CREATE_DT, RECORD_STATUS, BILLCODE, BILLALIAS, BILLID, BILLTIME, IS_CHECKED)
412
		VALUES (@REQ_PAY_AUTO_RECURRING_ID, @REQ_PAY_AUTO_MANUFACTURER_ID, @p_REQ_PAY_AUTO_ID, @SEVCODE, @SEVNAME, @PRVCODE, @PRVNAME, @ROUTETO, @TRANSACCOUNT, @TRANSACCOUNT_NAME, @TRANS_GLCODE, @TRANS_GLNAME, @RECEIVE_GLCODE, @RECEIVE_GLNAME, 
413
		@CUSTOMER_CODE, @CUSTOMER_NAME, @CUSTOMER_CODE_SYSTEM, @CUSTOMER_NAME_SYSTEM, @CUSTOMER_ADDRESS_SYSTEM, @IS_REGISTER, @IS_VALID, @p_MAKER_ID, GETDATE(), '1', @BILLCODE, @BILLALIAS, @BILLID, CONVERT(DATE, @BILLTIME, 103), @IS_CHECKED)
414
	
415
	IF @@error<>0 GOTO ABORT;
416
	FETCH NEXT FROM XmlDataRecurring INTO @REQ_PAY_AUTO_MANUFACTURER_ID, @SEVCODE, @SEVNAME, @PRVCODE, @PRVNAME, @ROUTETO, @TRANSACCOUNT, @TRANSACCOUNT_NAME, @TRANS_GLCODE, @TRANS_GLNAME, @RECEIVE_GLCODE, @RECEIVE_GLNAME,
417
	@CUSTOMER_ID, @CUSTOMER_CODE, @CUSTOMER_NAME, @CUSTOMER_CODE_SYSTEM, @CUSTOMER_NAME_SYSTEM, @CUSTOMER_ADDRESS_SYSTEM, @IS_REGISTER, @IS_VALID, @BILLCODE, @BILLALIAS, @BILLID, @BILLTIME, @IS_CHECKED
418
	END
419
	CLOSE XmlDataRecurring;
420
	DEALLOCATE XmlDataRecurring;
421

    
422
--- INSERT PHÂN CHIA
423
	DECLARE @INDEX_BUDGET_ALLOCATION INT = 0;
424
	DECLARE @hDocBudgetAllocation INT
425
	EXEC sp_xml_preparedocument @hDocBudgetAllocation OUTPUT, @p_XMP_BUDGET_ALLOCATION;
426

    
427
	DECLARE @BRANCH_ID VARCHAR(20), @DEP_ID NVARCHAR(255), @TYPE_BUDGET_ALLOCAITON VARCHAR(20), @PERCENT_BUDGET_ALLOCAITON DECIMAL(18,2), @AMT_BUDGET_ALLOCAITON DECIMAL(18,2)
428

    
429
	DECLARE XmlDataBudgetAllocation CURSOR FOR SELECT * FROM OPENXML(@hDocBudgetAllocation, 'Root/XmlDataBudgetAllocation',2)
430
	WITH(REQ_PAY_AUTO_MANUFACTURER_ID VARCHAR(20), ACC_NO VARCHAR(20), ACC_NAME NVARCHAR(255), BRANCH_ID VARCHAR(20), DEP_ID NVARCHAR(255), TYPE_BUDGET_ALLOCAITON VARCHAR(20), PERCENT_BUDGET_ALLOCAITON DECIMAL(18,2), AMT_BUDGET_ALLOCAITON DECIMAL(18,2))
431
	OPEN XmlDataBudgetAllocation
432

    
433
	DELETE FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID
434
	FETCH NEXT FROM XmlDataBudgetAllocation INTO @REQ_PAY_AUTO_MANUFACTURER_ID, @ACC_NO, @ACC_NAME, @BRANCH_ID, @DEP_ID, @TYPE_BUDGET_ALLOCAITON, @PERCENT_BUDGET_ALLOCAITON, @AMT_BUDGET_ALLOCAITON
435
	WHILE @@fetch_status=0 
436
	BEGIN
437
		SET @INDEX_BUDGET_ALLOCATION = @INDEX_BUDGET_ALLOCATION + 1;
438
		IF(@p_IS_SEND_APPR ='SEND')
439
		BEGIN
440
			IF(ISNULL(@ACC_NO, '') = '')
441
			BEGIN
442
				ROLLBACK TRANSACTION
443
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION)+N': Số tài khoản không được để trống.' ErrorDesc
444
				RETURN '-1'
445
			END
446
			IF(ISNULL(@ACC_NAME, '') = '')
447
			BEGIN
448
				ROLLBACK TRANSACTION
449
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION)+N': Tên tài khoản không được để trống.' ErrorDesc
450
				RETURN '-1'
451
			END
452
			IF(ISNULL(@BRANCH_ID, '') = '')
453
			BEGIN
454
				ROLLBACK TRANSACTION
455
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION)+N': Đơn vị không được để trống.' ErrorDesc
456
				RETURN '-1'
457
			END
458
			IF(ISNULL(@DEP_ID, '') = '')
459
			BEGIN
460
				ROLLBACK TRANSACTION
461
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION)+N': Phòng ban không được để trống.' ErrorDesc
462
				RETURN '-1'
463
			END
464
			IF(ISNULL(@TYPE_BUDGET_ALLOCAITON, '') = '')
465
			BEGIN
466
				ROLLBACK TRANSACTION
467
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION)+N': Loại phân chia không được để trống.' ErrorDesc
468
				RETURN '-1'
469
			END
470
		END
471
		DECLARE @REQ_PAY_AUTO_BUDGET_ALLOCATION_ID VARCHAR(20)
472
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_AUTO_ALLCOTION', @REQ_PAY_AUTO_BUDGET_ALLOCATION_ID OUT;
473
		IF @REQ_PAY_AUTO_BUDGET_ALLOCATION_ID = '' OR @REQ_PAY_AUTO_BUDGET_ALLOCATION_ID IS NULL GOTO ABORT;
474
		
475
		INSERT INTO TR_REQ_PAY_AUTO_BUDGET_ALLOCATION(REQ_PAY_AUTO_BUDGET_ALLOCATION_ID, REQ_PAY_AUTO_MANUFACTURER_ID, REQ_PAY_AUTO_ID, ACC_NO, ACC_NAME, BRANCH_ID, DEP_ID, TYPE_BUDGET_ALLOCAITON, PERCENT_BUDGET_ALLOCAITON, AMT_BUDGET_ALLOCAITON, MAKER_ID, CREATE_DT, RECORD_STATUS)
476
		VALUES (@REQ_PAY_AUTO_BUDGET_ALLOCATION_ID, @REQ_PAY_AUTO_MANUFACTURER_ID, @p_REQ_PAY_AUTO_ID, @ACC_NO, @ACC_NAME, @BRANCH_ID, @DEP_ID, @TYPE_BUDGET_ALLOCAITON, @PERCENT_BUDGET_ALLOCAITON, @AMT_BUDGET_ALLOCAITON, @p_MAKER_ID, GETDATE(), '1')
477
	
478
	IF @@error<>0 GOTO ABORT;
479
	FETCH NEXT FROM XmlDataBudgetAllocation INTO @REQ_PAY_AUTO_MANUFACTURER_ID, @ACC_NO, @ACC_NAME, @BRANCH_ID, @DEP_ID, @TYPE_BUDGET_ALLOCAITON, @PERCENT_BUDGET_ALLOCAITON, @AMT_BUDGET_ALLOCAITON
480
	END
481
	CLOSE XmlDataBudgetAllocation;
482
	DEALLOCATE XmlDataBudgetAllocation;
483

    
484
--- INSERT PHÂN CHIA THUÊ TÀI SẢN
485
	DECLARE @INDEX_BUDGET_ALLOCATION_TYPE_A INT = 0;
486
	DECLARE @hDocBudgetAllocationTypeA INT
487
	EXEC sp_xml_preparedocument @hDocBudgetAllocationTypeA OUTPUT, @p_XMP_BUDGET_ALLOCATION_TYPE_A;
488

    
489
	DECLARE XmlDataBudgetAllocationTypeA CURSOR FOR SELECT * FROM OPENXML(@hDocBudgetAllocationTypeA, 'Root/XmlDataBudgetAllocation',2)
490
	WITH(REQ_PAY_AUTO_MANUFACTURER_ID VARCHAR(20), ACC_NO VARCHAR(20), ACC_NAME NVARCHAR(255), BRANCH_ID VARCHAR(20), DEP_ID NVARCHAR(255), TYPE_BUDGET_ALLOCAITON VARCHAR(20), PERCENT_BUDGET_ALLOCAITON DECIMAL(18,2), AMT_BUDGET_ALLOCAITON DECIMAL(18,2))
491
	OPEN XmlDataBudgetAllocationTypeA
492

    
493
	DELETE FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID
494
	FETCH NEXT FROM XmlDataBudgetAllocationTypeA INTO @REQ_PAY_AUTO_MANUFACTURER_ID, @ACC_NO, @ACC_NAME, @BRANCH_ID, @DEP_ID, @TYPE_BUDGET_ALLOCAITON, @PERCENT_BUDGET_ALLOCAITON, @AMT_BUDGET_ALLOCAITON
495
	WHILE @@fetch_status=0 
496
	BEGIN
497
		SET @INDEX_BUDGET_ALLOCATION_TYPE_A = @INDEX_BUDGET_ALLOCATION_TYPE_A + 1;
498
		IF(@p_IS_SEND_APPR ='SEND')
499
		BEGIN
500
			IF(ISNULL(@ACC_NO, '') = '')
501
			BEGIN
502
				ROLLBACK TRANSACTION
503
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION_TYPE_A)+N': Số tài khoản không được để trống.' ErrorDesc
504
				RETURN '-1'
505
			END
506
			IF(ISNULL(@ACC_NAME, '') = '')
507
			BEGIN
508
				ROLLBACK TRANSACTION
509
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION_TYPE_A)+N': Tên tài khoản không được để trống.' ErrorDesc
510
				RETURN '-1'
511
			END
512
			IF(ISNULL(@BRANCH_ID, '') = '')
513
			BEGIN
514
				ROLLBACK TRANSACTION
515
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION_TYPE_A)+N': Đơn vị không được để trống.' ErrorDesc
516
				RETURN '-1'
517
			END
518
			IF(ISNULL(@DEP_ID, '') = '')
519
			BEGIN
520
				ROLLBACK TRANSACTION
521
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION_TYPE_A)+N': Phòng ban không được để trống.' ErrorDesc
522
				RETURN '-1'
523
			END
524
			IF(ISNULL(@TYPE_BUDGET_ALLOCAITON, '') = '')
525
			BEGIN
526
				ROLLBACK TRANSACTION
527
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lưới thông tin phân chia, dòng ' + CONVERT(VARCHAR(5),@INDEX_BUDGET_ALLOCATION_TYPE_A)+N': Loại phân chia không được để trống.' ErrorDesc
528
				RETURN '-1'
529
			END
530
		END
531
		DECLARE @REQ_PAY_AUTO_BUDGET_ALLOCATION_TYPE_A_ID VARCHAR(20)
532
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_AUTO_ALLCOTION', @REQ_PAY_AUTO_BUDGET_ALLOCATION_TYPE_A_ID OUT;
533
		IF @REQ_PAY_AUTO_BUDGET_ALLOCATION_TYPE_A_ID = '' OR @REQ_PAY_AUTO_BUDGET_ALLOCATION_TYPE_A_ID IS NULL GOTO ABORT;
534
		
535
		INSERT INTO TR_REQ_PAY_AUTO_BUDGET_ALLOCATION(REQ_PAY_AUTO_BUDGET_ALLOCATION_ID, REQ_PAY_AUTO_MANUFACTURER_ID, REQ_PAY_AUTO_ID, ACC_NO, ACC_NAME, BRANCH_ID, DEP_ID, TYPE_BUDGET_ALLOCAITON, PERCENT_BUDGET_ALLOCAITON, AMT_BUDGET_ALLOCAITON, MAKER_ID, CREATE_DT, RECORD_STATUS)
536
		VALUES (@REQ_PAY_AUTO_BUDGET_ALLOCATION_TYPE_A_ID, NULL, @p_REQ_PAY_AUTO_ID, @ACC_NO, @ACC_NAME, @BRANCH_ID, @DEP_ID, @TYPE_BUDGET_ALLOCAITON, @PERCENT_BUDGET_ALLOCAITON, @AMT_BUDGET_ALLOCAITON, @p_MAKER_ID, GETDATE(), '1')
537
	
538
	IF @@error<>0 GOTO ABORT;
539
	FETCH NEXT FROM XmlDataBudgetAllocationTypeA INTO @REQ_PAY_AUTO_MANUFACTURER_ID, @ACC_NO, @ACC_NAME, @BRANCH_ID, @DEP_ID, @TYPE_BUDGET_ALLOCAITON, @PERCENT_BUDGET_ALLOCAITON, @AMT_BUDGET_ALLOCAITON
540
	END
541
	CLOSE XmlDataBudgetAllocationTypeA;
542
	DEALLOCATE XmlDataBudgetAllocationTypeA;
543

    
544
COMMIT TRANSACTION
545

    
546
	IF(@p_IS_SEND_APPR ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
547
	BEGIN
548
		IF((SELECT COUNT(*) FROM TR_REQ_PAY_AUTO_RECURRING WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID) > 1)
549
		BEGIN
550
			SELECT '-1' as Result, @p_REQ_PAY_AUTO_ID  REQ_PAY_ID, N'Gửi phê duyệt phiếu yêu cầu thanh toán tự động thất bại! Lưới thông tin dịch vụ hiện tại chỉ hỗ trợ chọn 1 dòng' ErrorDesc
551
			RETURN '-1'
552
		END
553

    
554
		IF((SELECT COUNT(DISTINCT TYPE_BUDGET_ALLOCAITON) FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID) > 1)
555
		BEGIN
556
			SELECT '-1' as Result, @p_REQ_PAY_AUTO_ID  REQ_PAY_ID, N'Gửi phê duyệt phiếu yêu cầu thanh toán tự động thất bại! Lưới thông tin phân chia, cột loại phân chia chỉ được chọn 1 loại phân chia' ErrorDesc
557
			RETURN '-1'
558
		END
559
		IF	(	(SELECT COUNT(*) FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID AND TYPE_BUDGET_ALLOCAITON = 'PERCENT') > 0
560
				AND (SELECT SUM(ISNULL(PERCENT_BUDGET_ALLOCAITON, 0)) FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID) <> 100
561
			)
562
		BEGIN
563
			SELECT '-1' as Result, @p_REQ_PAY_AUTO_ID  REQ_PAY_ID, N'Gửi phê duyệt phiếu yêu cầu thanh toán tự động thất bại! Lưới thông tin phân chia, với loại phân chia là theo tỷ lệ, cột tổng tỷ lệ phân chia phải bằng 100' ErrorDesc
564
			RETURN '-1'
565
		END
566
		/*
567
		IF(1=1)
568
		BEGIN
569
			SELECT '-1' as Result, @p_REQ_PAY_AUTO_ID  REQ_PAY_ID, N'Check data' ErrorDesc
570
			RETURN '-1'
571
		END
572
		*/
573
		UPDATE TR_REQ_PAYMENT_AUTO SET AUTH_STATUS = 'U', PROCESS = '0' WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID
574
		-- INSERT VAO PL_PROCESS
575
	   INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
576
	   VALUES(@p_REQ_PAY_AUTO_ID,'SEND',@p_MAKER_ID,GETDATE(), N'Người tạo gửi phê duyệt',N'Gửi phê duyệt cấp đơn vị')
577

    
578
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT_AUTO WHERE (TRANSFER_USER_RECEIVE <> '' AND TRANSFER_USER_RECEIVE IS NOT NULL) AND REQ_PAY_AUTO_ID =@p_REQ_PAY_AUTO_ID))
579
		BEGIN
580
			SELECT '1' as Result, @p_REQ_PAY_AUTO_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu yêu cầu thanh toán tự động số: ' + ISNULL(@p_REQ_PAY_AUTO_CODE,'') + N' thành công. Vui lòng đợi cấp phê duyệt trung gian xác nhận phiếu' ErrorDesc
581
			RETURN '1'
582
		END
583
		ELSE
584
		BEGIN
585
			SELECT '2' as Result, @p_REQ_PAY_AUTO_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu yêu cầu thanh toán tự động số: ' + ISNULL(@p_REQ_PAY_AUTO_CODE,'') + N' thành công. Vui lòng đợi trưởng đơn vị phê duyệt phiếu' ErrorDesc
586
			RETURN '2'
587
		END
588
	END
589

    
590
SELECT '0' as Result, @p_REQ_PAY_AUTO_ID  REQ_PAY_AUTO_ID, @p_REQ_PAY_AUTO_CODE  AS REQ_PAY_AUTO_CODE, N'Thêm mới thành công' ErrorDesc
591
RETURN '0'
592

    
593
ABORT:
594
BEGIN
595
	ROLLBACK TRANSACTION
596
	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Lỗi không xác định' ErrorDesc
597
	RETURN '-1'
598
End
599

    
600
GO
601
--21062023_secretkey