ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_AUTO_Upd] @p_REQ_PAY_AUTO_ID VARCHAR(20)= NULL, @p_REQ_PAY_AUTO_CODE VARCHAR(20)= NULL, @p_REQ_PAY_AUTO_DT VARCHAR(20)= NULL, @p_REQ_PAY_AUTO_TYPE VARCHAR(20)= NULL, @p_REQ_PAY_AUTO_SERVICE_TYPE VARCHAR(20)= NULL, @p_REQ_PAY_AUTO_STATUS VARCHAR(20)= NULL, @p_REQ_PAY_AUTO_EFFECTIVE_DT VARCHAR(20)= NULL, @p_BRANCH_ID VARCHAR(20)= NULL, @p_DEP_ID VARCHAR(20)= NULL, @p_BRANCH_CREATE VARCHAR(20)= NULL, @p_TRANSFER_USER_RECEIVE VARCHAR(20)= NULL, @p_CONFIRM_NOTE VARCHAR(20)= NULL, @p_CONTRACT_ID VARCHAR(20)= NULL, @p_PROCESS VARCHAR(20)= NULL, @p_TRANSFER_MAKER VARCHAR(20)= NULL, @p_TRANSFER_DT VARCHAR(20)= NULL, @p_MAKER_ID VARCHAR(20)= NULL, @p_CREATE_DT VARCHAR(20)= NULL, @p_EDITOR_ID VARCHAR(20)= NULL, @p_EDIT_DT VARCHAR(20)= NULL, @p_CHECKER_ID VARCHAR(20)= NULL, @p_APPROVE_DT VARCHAR(20)= NULL, @p_AUTH_STATUS VARCHAR(20)= NULL, @p_MAKER_ID_KT VARCHAR(20)= NULL, @p_CREATE_DT_KT VARCHAR(20)= NULL, @p_CHECKER_ID_KT VARCHAR(20)= NULL, @p_APPROVE_DT_KT VARCHAR(20)= NULL, @p_AUTH_STATUS_KT VARCHAR(20)= NULL, @p_RECORD_STATUS VARCHAR(20)= NULL, @p_FRMDATE VARCHAR(20)= NULL, @p_TODATE VARCHAR(20)= NULL, @p_LEVEL VARCHAR(20)= NULL, @p_USER_LOGIN VARCHAR(20)= NULL, @p_IS_SEND_APPR VARCHAR(20)= NULL, @p_TYPE_SEARCH VARCHAR(20)= NULL, @p_BRANCH_LOGIN VARCHAR(20)= NULL, @p_NOTIFI_EXPIRED_DT VARCHAR(20)= NULL, @p_IS_MAKER_CONFIRM_CHECKBOX VARCHAR(20)= NULL, @p_XMP_SCHEDULE XML = NULL, @p_XMP_SCHEDULE_DETAIL XML = NULL, @p_XMP_RECURRING XML = NULL, @p_XMP_BUDGET_ALLOCATION XML = NULL, @p_XMP_BUDGET_ALLOCATION_TYPE_A XML = NULL, @p_XMP_METHOD XML = NULL AS -- BEGIN VALIDATE MASTER 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)) BEGIN 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 RETURN '-1' END 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, '') = '') BEGIN 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 RETURN '-1' END IF(ISNULL(@p_REQ_PAY_AUTO_CODE, '') = '' OR ISNULL(@p_REQ_PAY_AUTO_ID, '') = '') BEGIN SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Mã số phiếu không được đế trống' ErrorDesc RETURN '-1' END 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')) BEGIN 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 RETURN '-1' END IF(@p_IS_SEND_APPR ='SEND') BEGIN IF(ISNULL(@p_CONTRACT_ID, '') = '') BEGIN SELECT '-1' as Result, '' REQ_PAY_AUTO_ID, N'Số hợp đồng(ID hệ thống) không được đế trống' ErrorDesc RETURN '-1' END END -- END VALIDATE MASTER -- BEGIN VALIDATE FLOW IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_AUTO WHERE AUTH_STATUS = 'A' AND REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID)) BEGIN 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 RETURN '-1' END IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_AUTO WHERE AUTH_STATUS_KT = 'A' AND REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID)) BEGIN 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 RETURN '-1' END IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT_AUTO WHERE ISNULL(PROCESS, '') <> '' AND REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID)) BEGIN 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 RETURN '-1' END -- END VALIDATE FLOW BEGIN TRANSACTION DECLARE @BRANCH_MANAGE_ID VARCHAR(20) SET @BRANCH_MANAGE_ID = ISNULL((SELECT TOP 1 BRANCH_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @p_CONTRACT_ID), ''); UPDATE TR_REQ_PAYMENT_AUTO SET REQ_PAY_AUTO_SERVICE_TYPE = @p_REQ_PAY_AUTO_SERVICE_TYPE, AUTH_STATUS = 'E', CREATE_DT = GETDATE(), TRANSFER_USER_RECEIVE = @p_TRANSFER_USER_RECEIVE, CONTRACT_ID = @p_CONTRACT_ID, NOTIFI_EXPIRED_DT = CONVERT(DATE, @p_NOTIFI_EXPIRED_DT, 103), IS_MAKER_CONFIRM = @p_IS_MAKER_CONFIRM_CHECKBOX, IS_MAKER_CONFIRM_CHECKBOX = @p_IS_MAKER_CONFIRM_CHECKBOX, BRANCH_MANAGE_ID = @BRANCH_MANAGE_ID, IS_SEND_MAIL_EXPIRED = NULL WHERE 1 = 1 AND REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID IF @@Error <> 0 GOTO ABORT --- INSERT LICH THANH TOAN DELETE FROM TR_REQ_PAY_AUTO_SCHEDULE WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID DECLARE @hDocSchedule INT EXEC sp_xml_preparedocument @hDocSchedule OUTPUT, @p_XMP_SCHEDULE; IF(@p_IS_SEND_APPR ='SEND') BEGIN IF(@p_REQ_PAY_AUTO_TYPE = 'A' AND NOT EXISTS(SELECT * FROM OPENXML(@hDocSchedule, '/Root/XmlDataSchedule', 2) WITH(REQ_PAY_AUTO_ID varchar(20)))) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END END 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) DECLARE XmlDataSchedule CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDocSchedule, 'Root/XmlDataSchedule',2) 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)) OPEN XmlDataSchedule DECLARE @INDEX_SCHEDULE INT = 0; 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 WHILE @@fetch_status=0 BEGIN -- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE IF(@p_IS_SEND_APPR ='SEND') BEGIN SET @INDEX_SCHEDULE = @INDEX_SCHEDULE + 1 IF(@TYPE_PERIOD IS NULL OR @TYPE_PERIOD = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(@START_DT IS NULL OR @START_DT = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(@END_DT IS NULL OR @END_DT = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(@PERIOD_AMT IS NULL OR @PERIOD_AMT < 0) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(@PERIOD_PAY_DAY IS NULL OR @PERIOD_PAY_DAY < 0) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(CONVERT(DATE, @START_DT, 103) > CONVERT(DATE, @END_DT, 103)) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END END EXEC SYS_CodeMasters_Gen 'REQ_PAY_AUTO_SCHEDULE_ID', @REQ_PAY_AUTO_SCHEDULE_ID OUT; IF @REQ_PAY_AUTO_SCHEDULE_ID='' OR @REQ_PAY_AUTO_SCHEDULE_ID IS NULL GOTO ABORT; 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) 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) IF @@error<>0 GOTO ABORT; 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 END CLOSE XmlDataSchedule; DEALLOCATE XmlDataSchedule; --- INSERT CHI TIET LICH THANH TOAN DELETE FROM TR_REQ_PAY_AUTO_SCHEDULE_DETAIL WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID AND PAY_AUTO_STATUS <> 'Y' DECLARE @hDocScheduleDetail INT EXEC sp_xml_preparedocument @hDocScheduleDetail OUTPUT, @p_XMP_SCHEDULE_DETAIL; IF(@p_IS_SEND_APPR ='SEND') BEGIN IF(@p_REQ_PAY_AUTO_TYPE = 'A' AND NOT EXISTS(SELECT * FROM OPENXML(@hDocScheduleDetail, '/Root/XmlDataScheduleDetail', 2) WITH(REQ_PAY_AUTO_ID varchar(20)))) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END END 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) DECLARE XmlDataScheduleDetail CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDocScheduleDetail, 'Root/XmlDataScheduleDetail',2) 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)) OPEN XmlDataScheduleDetail DECLARE @INDEX_SCHEDULE_DETAIL INT = 0 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 WHILE @@fetch_status=0 BEGIN -- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE IF(@p_IS_SEND_APPR ='SEND') BEGIN SET @INDEX_SCHEDULE_DETAIL = @INDEX_SCHEDULE_DETAIL + 1 IF(@EXPECTED_DT IS NULL OR @EXPECTED_DT = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(@PAY_AUTO_AMT IS NULL OR @PAY_AUTO_AMT < 0) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(@PAY_AUTO_STATUS IS NULL OR @PAY_AUTO_STATUS = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@PAY_PHASE, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END END IF(ISNULL(@PAY_AUTO_STATUS, '') <> 'Y') BEGIN EXEC SYS_CodeMasters_Gen 'REQ_PAY_AUTO_SCHEDULE_DETAIL_ID', @REQ_PAY_AUTO_SCHEDULE_DETAIL_ID OUT; IF @REQ_PAY_AUTO_SCHEDULE_DETAIL_ID='' OR @REQ_PAY_AUTO_SCHEDULE_DETAIL_ID IS NULL GOTO ABORT; 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) 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) END IF @@error<>0 GOTO ABORT; 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 END CLOSE XmlDataScheduleDetail; DEALLOCATE XmlDataScheduleDetail; --- INSERT PHUONG THUC THANH TOAN DELETE FROM TR_REQ_PAY_AUTO_METHOD WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID DECLARE @hDocMeThod INT EXEC sp_xml_preparedocument @hDocMeThod OUTPUT, @p_XMP_METHOD; IF(@p_IS_SEND_APPR ='SEND') BEGIN IF(@p_REQ_PAY_AUTO_TYPE = 'A' AND NOT EXISTS(SELECT * FROM OPENXML(@hDocMeThod, '/Root/XmlDataMethod', 2) WITH(REQ_PAY_AUTO_ID varchar(20)))) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END END DECLARE @RECEIVE_ID VARCHAR(15), @RECEIVE_NAME NVARCHAR(100), @REQ_PAY_REASON NVARCHAR(MAX), @TOTAL_AMT DECIMAL(18,2), @REQ_PAY_TYPE VARCHAR(1), @REQ_PAY_DESC NVARCHAR(MAX), @REQ_PAY_ENTRIES NVARCHAR(MAX), @ACC_NO VARCHAR(25), @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), @BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME VARCHAR(250), @SUB_ISSUED_BY NVARCHAR(250), @RECEIVER_DEBIT VARCHAR(20) DECLARE XmlDataMethod CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDocMeThod, 'Root/XmlDataMethod',2) WITH(RECEIVE_ID VARCHAR(15),RECEIVE_NAME NVARCHAR(100),REQ_PAY_REASON NVARCHAR(MAX),TOTAL_AMT DECIMAL(18,2), REQ_PAY_TYPE VARCHAR(1),REQ_PAY_DESC NVARCHAR(MAX),REQ_PAY_ENTRIES NVARCHAR(MAX),ACC_NO VARCHAR(25), 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), BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME VARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT VARCHAR(20)) OPEN XmlDataMethod DECLARE @INDEX_METHOD INT = 0 FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT,@REQ_PAY_TYPE, @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 WHILE @@fetch_status=0 BEGIN -- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE IF(@p_IS_SEND_APPR ='SEND') BEGIN SET @INDEX_METHOD = @INDEX_METHOD + 1 ----------------------- begin validate ------------------------ IF(@ACC_NO IS NULL OR @ACC_NO = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT = '' OR @ISSUED_DT IS NULL)) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(@TOTAL_AMT IS NULL OR @TOTAL_AMT < 0) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END END IF(@REQ_PAY_TYPE<>'1') BEGIN SET @ISSUED_DT = NULL END IF(@TYPE_TRANSFER IS NULL OR @TYPE_TRANSFER ='') BEGIN SET @TYPE_TRANSFER ='A' END DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15); EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT; IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT; 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) 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 ) IF @@error<>0 GOTO ABORT; FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT,@REQ_PAY_TYPE, @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 END CLOSE XmlDataMethod; DEALLOCATE XmlDataMethod; --- INSERT THÔNG TIN DỊCH VỤ DECLARE @hDocRecurring INT EXEC sp_xml_preparedocument @hDocRecurring OUTPUT, @p_XMP_RECURRING; IF(@p_IS_SEND_APPR = 'SEND') BEGIN IF(@p_REQ_PAY_AUTO_TYPE ='B') BEGIN IF(NOT EXISTS(SELECT * FROM OPENXML(@hDocRecurring, '/Root/XmlDataManufacturer', 2) WITH(REQ_PAY_AUTO_MANUFACTURER_ID VARCHAR(20)))) BEGIN ROLLBACK TRANSACTION SELECT '-1' Result, '' REQ_PAY_ID, N'Lưới Thông tin dịch vụ không được để trống' ErrorDesc RETURN '-1' END END END 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), @TRANS_GLCODE VARCHAR(20), @TRANS_GLNAME VARCHAR(250), @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), @IS_REGISTER VARCHAR(2), @IS_VALID VARCHAR(2), @BILLCODE VARCHAR(50), @BILLALIAS NVARCHAR(255), @BILLID VARCHAR(20), @BILLTIME VARCHAR(20), @IS_CHECKED VARCHAR(1) DECLARE XmlDataRecurring CURSOR LOCAL FOR SELECT * FROM OPENXML(@hDocRecurring, 'Root/XmlDataManufacturer',2) 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), 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), IS_REGISTER VARCHAR(2), IS_VALID VARCHAR(2), BILLCODE VARCHAR(50), BILLALIAS NVARCHAR(255), BILLID VARCHAR(20), BILLTIME VARCHAR(20), IS_CHECKED VARCHAR(1)) OPEN XmlDataRecurring DELETE FROM TR_REQ_PAY_AUTO_RECURRING WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID DECLARE @INDEX_AUTO_RECURRING INT = 0 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, @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 WHILE @@fetch_status=0 BEGIN -- BEGIN VALIDATE IF(@p_IS_SEND_APPR ='SEND') BEGIN SET @INDEX_AUTO_RECURRING = @INDEX_AUTO_RECURRING + 1 IF(ISNULL(@IS_CHECKED, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@CUSTOMER_CODE_SYSTEM, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@CUSTOMER_CODE_SYSTEM, '') <> ISNULL(@BILLCODE, '')) BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@IS_REGISTER, '') = '1') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END END -- END VALIDATE DECLARE @REQ_PAY_AUTO_RECURRING_ID VARCHAR(20) EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_AUTO_RECURRING', @REQ_PAY_AUTO_RECURRING_ID OUT; IF @REQ_PAY_AUTO_RECURRING_ID = '' OR @REQ_PAY_AUTO_RECURRING_ID IS NULL GOTO ABORT; 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, 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) 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, @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) IF @@error<>0 GOTO ABORT; 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, @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 END CLOSE XmlDataRecurring; DEALLOCATE XmlDataRecurring; --- INSERT PHÂN CHIA DECLARE @INDEX_BUDGET_ALLOCATION INT = 0; DECLARE @hDocBudgetAllocation INT EXEC sp_xml_preparedocument @hDocBudgetAllocation OUTPUT, @p_XMP_BUDGET_ALLOCATION; 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) DECLARE XmlDataBudgetAllocation CURSOR FOR SELECT * FROM OPENXML(@hDocBudgetAllocation, 'Root/XmlDataBudgetAllocation',2) 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)) OPEN XmlDataBudgetAllocation DELETE FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID 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 WHILE @@fetch_status=0 BEGIN SET @INDEX_BUDGET_ALLOCATION = @INDEX_BUDGET_ALLOCATION + 1; IF(@p_IS_SEND_APPR ='SEND') BEGIN IF(ISNULL(@ACC_NO, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@ACC_NAME, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@BRANCH_ID, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@DEP_ID, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@TYPE_BUDGET_ALLOCAITON, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END END DECLARE @REQ_PAY_AUTO_BUDGET_ALLOCATION_ID VARCHAR(20) EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_AUTO_ALLCOTION', @REQ_PAY_AUTO_BUDGET_ALLOCATION_ID OUT; IF @REQ_PAY_AUTO_BUDGET_ALLOCATION_ID = '' OR @REQ_PAY_AUTO_BUDGET_ALLOCATION_ID IS NULL GOTO ABORT; 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) 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') IF @@error<>0 GOTO ABORT; 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 END CLOSE XmlDataBudgetAllocation; DEALLOCATE XmlDataBudgetAllocation; --- INSERT PHÂN CHIA THUÊ TÀI SẢN DECLARE @INDEX_BUDGET_ALLOCATION_TYPE_A INT = 0; DECLARE @hDocBudgetAllocationTypeA INT EXEC sp_xml_preparedocument @hDocBudgetAllocationTypeA OUTPUT, @p_XMP_BUDGET_ALLOCATION_TYPE_A; DECLARE XmlDataBudgetAllocationTypeA CURSOR FOR SELECT * FROM OPENXML(@hDocBudgetAllocationTypeA, 'Root/XmlDataBudgetAllocation',2) 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)) OPEN XmlDataBudgetAllocationTypeA DELETE FROM TR_REQ_PAY_AUTO_BUDGET_ALLOCATION WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID 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 WHILE @@fetch_status=0 BEGIN SET @INDEX_BUDGET_ALLOCATION_TYPE_A = @INDEX_BUDGET_ALLOCATION_TYPE_A + 1; IF(@p_IS_SEND_APPR ='SEND') BEGIN IF(ISNULL(@ACC_NO, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@ACC_NAME, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@BRANCH_ID, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@DEP_ID, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END IF(ISNULL(@TYPE_BUDGET_ALLOCAITON, '') = '') BEGIN ROLLBACK TRANSACTION 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 RETURN '-1' END END DECLARE @REQ_PAY_AUTO_BUDGET_ALLOCATION_TYPE_A_ID VARCHAR(20) EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_AUTO_ALLCOTION', @REQ_PAY_AUTO_BUDGET_ALLOCATION_TYPE_A_ID OUT; IF @REQ_PAY_AUTO_BUDGET_ALLOCATION_TYPE_A_ID = '' OR @REQ_PAY_AUTO_BUDGET_ALLOCATION_TYPE_A_ID IS NULL GOTO ABORT; 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) 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') IF @@error<>0 GOTO ABORT; 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 END CLOSE XmlDataBudgetAllocationTypeA; DEALLOCATE XmlDataBudgetAllocationTypeA; COMMIT TRANSACTION IF(@p_IS_SEND_APPR ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP BEGIN IF((SELECT COUNT(*) FROM TR_REQ_PAY_AUTO_RECURRING WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID) > 1) BEGIN 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 RETURN '-1' END 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) BEGIN 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 RETURN '-1' END 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 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 ) BEGIN 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 RETURN '-1' END /* IF(1=1) BEGIN SELECT '-1' as Result, @p_REQ_PAY_AUTO_ID REQ_PAY_ID, N'Check data' ErrorDesc RETURN '-1' END */ UPDATE TR_REQ_PAYMENT_AUTO SET AUTH_STATUS = 'U', PROCESS = '0' WHERE REQ_PAY_AUTO_ID = @p_REQ_PAY_AUTO_ID -- INSERT VAO PL_PROCESS INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES) 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ị') 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)) BEGIN 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 RETURN '1' END ELSE BEGIN 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 RETURN '2' END END 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 RETURN '0' ABORT: BEGIN ROLLBACK TRANSACTION SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Lỗi không xác định' ErrorDesc RETURN '-1' End GO --21062023_secretkey