Project

General

Profile

TR_REQ_PAYMENT_UPD.txt

Luc Tran Van, 02/01/2021 10:47 AM

 
1
??CREATE PROCEDURE [dbo].[TR_REQ_PAYMENT_Upd]  

2
@p_REQ_PAY_ID varchar(15)= NULL,  

3
@p_REQ_PAY_CODE varchar(50) = NULL,  

4
@p_REQ_DT VARCHAR(20)= NULL,  

5
@p_BRANCH_ID varchar(15) = NULL,  

6
@p_DEP_ID varchar(15) = NULL,  

7
@p_REQ_REASON nvarchar(MAX) = NULL,  

8
@p_REQ_TYPE varchar(15) = NULL,  

9
@P_REQ_ENTRIES nvarchar(MAX) = NULL,  

10
@p_REQ_DESCRIPTION nvarchar(MAX) = NULL,  

11
@p_REF_ID varchar(15) = NULL,  

12
@p_RECEIVER_PO nvarchar(250) = NULL,  

13
@p_REQ_PAY_TYPE varchar(15) = NULL,  

14
@p_REQ_TYPE_CURRENCY nvarchar(50) = NULL,  

15
@p_REQ_AMT decimal(18, 0) = NULL,  

16
@p_REQ_TEMP_AMT decimal(18, 0) = NULL,  

17
@p_MAKER_ID varchar(15) = NULL,  

18
@p_CREATE_DT varchar(25) = NULL,  

19
@p_EDITOR_ID varchar(15) = NULL,  

20
@p_AUTH_STATUS varchar(1) = NULL,  

21
@p_CHECKER_ID varchar(15) = NULL,  

22
@p_APPROVE_DT varchar(25) = NULL,  

23
@p_CREATE_DT_KT varchar(25) = NULL,  

24
@p_MAKER_ID_KT varchar(15) = NULL,  

25
@p_AUTH_STATUS_KT varchar(1) = NULL,  

26
@p_CHECKER_ID_KT varchar(1) = NULL,  

27
@p_APPROVE_DT_KT varchar(25)= null,  

28
@p_CONFIRM_NOTE nvarchar(500) = NULL,  

29
@p_BRANCH_CREATE varchar(15) = NULL,  

30
@p_NOTES varchar(15) = NULL,  

31
@p_RECORD_STATUS varchar(1) = NULL,  

32
@p_TRANSFER_MAKER nvarchar(50) = NULL,  

33
@p_TRANSFER_DT varchar(25) = NULL,  

34
@p_TRASFER_USER_RECIVE varchar(15) = NULL,  

35
@p_PROCESS varchar(15) = NULL,  

36
@p_PAY_PHASE VARCHAR(15) = NULL,  

37
@p_RATE DECIMAL(18,2) = 0,  

38
@p_IS_PERIOD VARCHAR(5) = NULL,  

39
@p_XMP_TEMP XML = NULL,  

40
@p_XMP_TEMP_2 XML = NULL,  

41
@p_TYPE_FUNCTION VARCHAR(15) = NULL  

42
AS  

43
--Validation is here  

44
/*  

45
DECLARE @ERRORSYS NVARCHAR(15) = ''  

46
IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))  

47
SET @ERRORSYS = ''  

48
IF @ERRORSYS <> ''  

49
BEGIN  

50
SELECT ErrorCode Result, '' CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS  

51
RETURN '0'  

52
END  

53
*/  

54
 

55
--Luanlt-2019/10/15 Disable Validation  

56
--DECLARE @ERRORSYS NVARCHAR(15) = ''  

57
--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID = @p_REF_ID )  

58
--BEGIN  

59
-- SET @ERRORSYS = 'ASSC-00005'  

60
-- SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS  

61
-- RETURN '-1'  

62
--END  

63
IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS ='U'))  

64
BEGIN  

65
SELECT '-1' Result, '' REQ_PAY_ID, N'Phi?u ? ngh? thanh to?n ? ??c g?i ph? duy?t th?nh c?ng tr??c ?. B?n kh?ng ??c quy?n ch?nh s?a' ErrorDesc  

66
RETURN '-1'  

67
END  

68
IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND PROCESS IS NOT NULL AND PROCESS <>''))  

69
BEGIN  

70
SELECT '-1' Result, '' REQ_PAY_ID, N'Phi?u ? ngh? thanh to?n ? ??c k? x?c nh?n t? c?c c?p. B?n kh?ng ??c quy?n ch?nh s?a' ErrorDesc  

71
RETURN '-1'  

72
END  

73
IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''  

74
BEGIN  

75
SELECT '-1' Result, '' REQ_PAY_ID, N'M? s? phi?u kh?ng ??c ph?p ? tr?ng' ErrorDesc  

76
RETURN '-1'  

77
END  

78
--IF EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)  

79
--BEGIN  

80
-- SELECT '-1' Result, '' REQ_PAY_ID, N'M? s? phi?u ? t?n t?i trong h? th?ng' ErrorDesc  

81
-- RETURN '-1'  

82
--END  

83
DECLARE @ROLE_KI_NHAY VARCHAR(50)  

84
SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)  

85
IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <>'' AND @ROLE_KI_NHAY IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','TBP','KTT','GDK','KSV','TC','NVTC','TPTC'))  

86
BEGIN  

87
PRINT @ROLE_KI_NHAY  

88
END  

89
ELSE  

90
BEGIN  

91
SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)  

92
IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')  

93
BEGIN  

94
SET @ROLE_KI_NHAY =(SELECT TOP 1 ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT TOP 1 ROLENAME FROM TL_USER WHERE TLNANME=@p_TRASFER_USER_RECIVE))  

95
END  

96
END  

97
--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)  

98
IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC','TPGD'))  

99
BEGIN  

100
SELECT '-1' Result, '' REQ_PAY_ID, N'B?n kh?ng ??c ph?p ch?n c?p tr??ng ?n v? l?m c?p ph? duy?t trung gian. Vui l?ng b? qua ho?c ch?n c?p ph? ph?ng, tr??ng b? ph?n' ErrorDesc  

101
RETURN '-1'  

102
END  

103
 

104
BEGIN TRANSACTION  

105
DECLARE @VAT decimal(18, 0) =NULL, @TRANS_NO nvarchar(50)=NULL,  

106
@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,  

107
@SELLER nvarchar(500) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(500) = NULL,  

108
@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),  

109
@ISSUED_DT VARCHAR(20),@CURRENCY VARCHAR(15)= NULL,@RATE DECIMAL(18,2), @TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15)  

110
DECLARE @PAY_ADV_ID VARCHAR(15),@TYPE_TRANS VARCHAR(15),@REQ_PAY_ADV_CODE VARCHAR(15),@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)  

111
DECLARE @AMT_ADVANCED DECIMAL(18,0),@AMT_DO DECIMAL(18,0),  

112
@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)  

113
DECLARE @TOTAL_SCHEDULE_AMT DECIMAL(18,0) =0  

114
DECLARE @INDEX_AD INT =0, @INDEX_SV INT =0,@INDEX INT =0, @INDEX_IV INT =0, @INDEX_NS INT =0  

115
DECLARE @hdoc INT, @hDoc2 INT  

116
EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;  

117
EXEC sp_xml_preparedocument @hDoc2 OUTPUT, @p_XMP_TEMP_2;  

118
DECLARE XmlData CURSOR FOR  

119
SELECT *  

120
FROM  

121
OPENXML(@hdoc, '/Root/XmlData', 2)  

122
WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),  

123
INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(500),TAX_NO nvarchar(15),GOODS_NAME nvarchar(500) ,  

124
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))  

125
OPEN XmlData;  

126
--CURSOR 2  

127
DECLARE XmlDataPay CURSOR FOR  

128
SELECT *  

129
FROM  

130
OPENXML(@hDoc2, '/Root/XmlDataPay', 2)  

131
WITH(PAY_ADV_ID nvarchar(50),AMT_ADVANCED decimal(18, 0),AMT_DO decimal(18,2),  

132
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))  

133
OPEN XmlDataPay;  

134
------------------------  

135
--Luanlt---  

136
--MethodCursor  

137
DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),  

138
@REQ_PAY_TYPE varchar(1),@REQ_PAY_DESC nvarchar(MAX),@REQ_PAY_ENTRIES nvarchar(MAX),@CHECK_IN VARCHAR(15)  

139
DECLARE XmlDataMethod CURSOR FOR  

140
SELECT *  

141
FROM  

142
OPENXML(@hdoc, 'Root/XmlDataMethod',2)  

143
WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),  

144
REQ_PAY_TYPE varchar(1),REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(250),  

145
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))  

146
OPEN XmlDataMethod  

147
----------  

148
--CatCursor  

149
DECLARE @REQ_ADV_ID varchar(15),@CAT_NAME nvarchar(100),@TOTAL_AMT_CAT decimal(18,2), @DEPT_ID VARCHAR(15)  

150
DECLARE XmlDataCat CURSOR FOR  

151
SELECT *  

152
FROM  

153
OPENXML(@hdoc, 'Root/XmlDataCat',2)  

154
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))  

155
OPEN XmlDataCat  

156
---------------  

157
--ServiceCursor  

158
DECLARE @REQ_PAY_SERVICE_NAME nvarchar(100),@RECEIVE_ID_SERVICE varchar(15),@RECEIVE_NAME_SERVICE nvarchar(100),@REQ_PAY_REASON_SERVICE nvarchar(MAX),  

159
@TOTAL_AMT_SERVICE decimal(18,2),  

160
@REQ_PAY_TYPE_SERVICE varchar(1),@REQ_PAY_DESC_SERVICE nvarchar(MAX),@REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),@DEPT_ID_SRV VARCHAR(15)  

161
DECLARE XmlDataService CURSOR FOR  

162
SELECT *  

163
FROM  

164
OPENXML(@hdoc, 'Root/XmlDataService',2)  

165
WITH(REQ_PAY_SERVICE_NAME nvarchar(100),RECEIVE_ID_SERVICE varchar(15),RECEIVE_NAME_SERVICE nvarchar(100),REQ_PAY_REASON_SERVICE nvarchar(MAX),  

166
TOTAL_AMT_SERVICE decimal(18,2),REQ_PAY_TYPE_SERVICE varchar(1),REQ_PAY_DESC_SERVICE nvarchar(MAX),REQ_PAY_ENTRIES_SERVICE nvarchar(MAX),  

167
DEPT_ID VARCHAR(15),CURRENCY VARCHAR(15), RATE DECIMAL(18,2))  

168
OPEN XmlDataService  

169
---------------  

170
--ScheduleCursor  

171
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),  

172
@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)  

173
DECLARE XmlDataSchedule CURSOR FOR  

174
SELECT *  

175
FROM  

176
OPENXML(@hdoc, 'Root/XmlDataSchedule',2)  

177
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),  

178
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),  

179
REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),AMT_PAY_DO DECIMAL(18,2),AMT_PAY_REAL DECIMAL(18,2))  

180
OPEN XmlDataSchedule  

181
--END luanlt---  

182
-- DS HANG MUC NGAN SACH  

183
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)  

184
DECLARE XmlDataGood CURSOR FOR  

185
SELECT *  

186
FROM  

187
OPENXML(@hdoc, 'Root/XmlDataGood',2)  

188
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))  

189
OPEN XmlDataGood  

190
---- END CURSOR HANG MUC NGAN SACH  

191
-- DINH KEM CHUNG TU DINH KEM  

192
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)  

193
DECLARE XmlAttach CURSOR FOR  

194
SELECT *  

195
FROM  

196
OPENXML(@hdoc, 'Root/XmlAttach',2)  

197
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))  

198
OPEN XmlAttach  

199
-- END  

200
UPDATE TR_REQ_PAYMENT SET  

201
REF_ID = @p_REF_ID,  

202
DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,REQ_AMT = @p_REQ_AMT,  

203
NOTES= @p_NOTES,  

204
REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO = @p_RECEIVER_PO,TRANSFER_MAKER =@p_TRANSFER_MAKER,  

205
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,  

206
TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE  

207
WHERE REQ_PAY_ID =@p_REQ_PAY_ID  

208
-- BUA DOAN NAY DE XU LY LOI KHONG TIM DUOC NHA CUNG CAP  

209
UPDATE CM_SUPPLIER SET ACC_NUM ='' WHERE ACC_NUM IS NULL  

210
UPDATE CM_SUPPLIER SET ACC_NUM_OUT ='' WHERE ACC_NUM_OUT IS NULL  

211
--  

212
UPDATE TR_REQ_PAY_SERVICE SET REQ_PAY_ID= 'XX'+ RIGHT(REQ_PAY_ID,13)  

213
WHERE REQ_PAY_ID NOT IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE REQ_TYPE IN ('I','D'))  

214
--  

215
UPDATE TR_REQ_PAY_SCHEDULE SET REQ_PAY_ID= 'XX'+ RIGHT(REQ_PAY_ID,13)  

216
WHERE REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE REQ_TYPE ='P' AND IS_PERIOD IS NOT NULL AND IS_PERIOD <>'' AND IS_PERIOD='Y') AND TRN_TYPE ='PAY' AND REQ_PAY_ID =@p_REQ_PAY_ID  

217
IF @@Error <> 0 GOTO ABORT  

218
--Insert XmlData  

219
DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID  

220
FETCH NEXT FROM XmlData INTO @TRANS_NO , @TRANS_DT ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,  

221
@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@TYPE_VAT,@TYPE_FUNC  

222
WHILE @@fetch_status=0 BEGIN  

223
SET @INDEX_IV = @INDEX_IV +1  

224
-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE  

225
IF(@p_TYPE_FUNCTION ='SEND')  

226
BEGIN  

227
IF(LEN(@INVOICE_NO) >7)  

228
BEGIN  

229
ROLLBACK TRANSACTION  

230
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  

231
RETURN '-1'  

232
END  

233
IF(LEN(@INVOICE_NO) <7)  

234
BEGIN  

235
ROLLBACK TRANSACTION  

236
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  

237
RETURN '-1'  

238
END  

239
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 AND AUTH_STATUS <>'D'))  

240
BEGIN  

241
ROLLBACK TRANSACTION  

242
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  

243
RETURN '-1'  

244
END  

245
IF(@GOODS_NAME IS NULL OR @GOODS_NAME ='')  

246
BEGIN  

247
ROLLBACK TRANSACTION  

248
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'D?ng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': T?n m?t h?ng trong l??i h?a ?n kh?ng ??c ? tr?ng' ErrorDesc  

249
RETURN '-1'  

250
END  

251
-- T?N NG??I B?N  

252
IF(@SELLER IS NULL OR @SELLER ='')  

253
BEGIN  

254
ROLLBACK TRANSACTION  

255
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'D?ng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Ng??i b?n trong l??i h?a ?n kh?ng ??c ? tr?ng' ErrorDesc  

256
RETURN '-1'  

257
END  

258
-- M? S? THU?  

259
-- T?N NG??I B?N  

260
IF(@TAX_NO IS NULL OR @TAX_NO ='')  

261
BEGIN  

262
ROLLBACK TRANSACTION  

263
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'D?ng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': M? s? thu? trong l??i h?a ?n kh?ng ??c ? tr?ng' ErrorDesc  

264
RETURN '-1'  

265
END  

266
-- NG?Y H?A ?N  

267
IF(@INVOICE_DT IS NULL OR @INVOICE_DT ='')  

268
BEGIN  

269
ROLLBACK TRANSACTION  

270
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'D?ng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Ng?y h?a ?n trong l??i h?a ?n kh?ng ??c ? tr?ng' ErrorDesc  

271
RETURN '-1'  

272
END  

273
-- S? H?A ?N  

274
IF(@INVOICE_NO IS NULL OR @INVOICE_NO ='')  

275
BEGIN  

276
ROLLBACK TRANSACTION  

277
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'D?ng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': S? h?a ?n trong l??i h?a ?n kh?ng ??c ? tr?ng' ErrorDesc  

278
RETURN '-1'  

279
END  

280
-- K? HI?U H?A ?N  

281
IF(@INVOICE_NO_SIGN IS NULL OR @INVOICE_NO_SIGN ='')  

282
BEGIN  

283
ROLLBACK TRANSACTION  

284
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'D?ng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': K? hi?u s? h?a ?n trong l??i h?a ?n kh?ng ??c ? tr?ng' ErrorDesc  

285
RETURN '-1'  

286
END  

287
-- K? HI?U H?A ?N  

288
IF(@INVOICE_SIGN IS NULL OR @INVOICE_SIGN ='')  

289
BEGIN  

290
ROLLBACK TRANSACTION  

291
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'D?ng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': K? hi?u m?u h?a ?n trong l??i h?a ?n kh?ng ??c ? tr?ng' ErrorDesc  

292
RETURN '-1'  

293
END  

294
-- K? HI?U H?A ?N  

295
IF(@PRICE IS NULL OR @PRICE =0)  

296
BEGIN  

297
ROLLBACK TRANSACTION  

298
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'D?ng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': S? ti?n h?a ?n trong l??i h?a ?n kh?ng ??c ? tr?ng' ErrorDesc  

299
RETURN '-1'  

300
END  

301
END  

302
--SET @INDEX = @INDEX +1  

303
DECLARE @p_REQ_INV_ID VARCHAR(15);  

304
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;  

305
IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;  

306
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,  

307
MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,CHECKER_ID,APPROVE_DT,  

308
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)  

309
VALUES (@p_REQ_INV_ID,@p_REQ_PAY_ID , @TRANS_NO , NULL ,@INVOICE_SIGN ,@INVOICE_NO ,CONVERT(DATE,@INVOICE_DT,103) ,UPPER(([dbo].[RemoveVietNamese](@SELLER))),@TAX_NO ,UPPER(([dbo].[RemoveVietNamese](@GOODS_NAME))) ,@PRICE ,@TAX,@VAT,@NOTES,  

310
@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)  

311
IF @@error<>0 GOTO ABORT;  

312
FETCH NEXT FROM XmlData  

313
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  

314
END;  

315
CLOSE XmlData;  

316
DEALLOCATE XmlData;  

317
--- INSERT CAC HANG MUC NGAN SACH  

318
DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID=@p_REQ_PAY_ID  

319
--- INSERT CAC HANG MUC NGAN SACH  

320
FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON  

321
WHILE @@fetch_status=0 BEGIN  

322
--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI  

323
SET @INDEX_NS = @INDEX_NS +1  

324
-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE  

325
IF(@p_TYPE_FUNCTION ='SEND')  

326
BEGIN  

327
IF(ISNULL(@AMT_EXE,0) =0)  

328
BEGIN  

329
ROLLBACK TRANSACTION  

330
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Dong '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ng?n s?ch s? d?ng th?c t? ph?i l?n h?n kh?ng.' ErrorDesc  

331
RETURN '-1'  

332
END  

333
--IF((@AMT_EXE > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))  

334
--BEGIN  

335
-- ROLLBACK TRANSACTION  

336
-- SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Dong '+ 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  

337
-- RETURN '-1'  

338
--END  

339
END  

340
DECLARE @p_BUDGET_ID VARCHAR(15);  

341
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;  

342
IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;  

343
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)  

344
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)  

345
IF @@error<>0 GOTO ABORT;  

346
FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON  

347
END;  

348
CLOSE XmlDataGood;  

349
DEALLOCATE XmlDataGood;  

350
--INSERT FROM MethodCursor  

351
DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID  

352
SET @INDEX = 0  

353
FETCH NEXT FROM XmlDataMethod INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,  

354
@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO, @ACC_NAME,@ISSUED_BY, @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANS  

355
WHILE @@fetch_status=0  

356
BEGIN  

357
IF(@REQ_PAY_TYPE<>'1')  

358
BEGIN  

359
SET @ISSUED_DT = NULL  

360
END  

361
--IF(@p_REQ_TYPE<>'I')  

362
--BEGIN  

363
-- SET @TYPE_TRANS = ''  

364
--END  

365
SET @INDEX = @INDEX +1  

366
DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);  

367
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;  

368
IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;  

369
INSERT INTO TR_REQ_PAY_METHOD  

370
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_T 

371
RANS)  

372
IF @@error<>0 GOTO ABORT;  

373
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  

374
END  

375
CLOSE XmlDataMethod;  

376
DEALLOCATE XmlDataMethod;  

377
--- END INSERT NGAN SACH  

378
--- INSERT VAO BANG CHUNG TU DINH KEM  

379
-- INSERT CHUNG TU DINH KEM  

380
DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID  

381
--OPEN XmlAttach;  

382
FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT  

383
WHILE @@fetch_status=0  

384
BEGIN  

385
IF (@REF_DT='')  

386
BEGIN  

387
SET @REF_DT = NULL  

388
END  

389
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;  

390
IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;  

391
INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],[AMT],REF_DT) VALUES  

392
(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,CONVERT(DATE,@REF_DT,103))  

393
IF @@error<>0 GOTO ABORT;  

394
FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT  

395
END  

396
CLOSE XmlAttach;  

397
DEALLOCATE XmlAttach;  

398
----END  

399
------------------------  

400
IF(@p_REQ_TYPE = 'I')  

401
BEGIN  

402
--BEGIN CURRSOR 2  

403
DELETE FROM TR_REQ_PAYMENT_DT WHERE PAY_ID = @p_REQ_PAY_ID  

404
FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE  

405
WHILE @@fetch_status=0  

406
BEGIN  

407
SET @INDEX_AD = @INDEX_AD +1  

408
SET @REQ_PAY_ADV_CODE = (SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID)  

409
SET @INDEX_AD = @INDEX_AD +1  

410
-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE  

411
IF(@p_TYPE_FUNCTION ='SEND')  

412
BEGIN  

413
-- KIEM TRA XEM CO PHIEU NAO DANG DUOC THANH TOAN HOAN TAM UNG MA CHUA DUYET HAY CHUA  

414
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))  

415
BEGIN  

416
ROLLBACK TRANSACTION  

417
SELECT '-1' as Result, '' REQ_PAY_ID, N'Dong '+ 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  

418
RETURN '-1'  

419
END  

420
-- KIEM TRA NEU SO TIEN DE NGHI HOAN TAM ?NG LON HON SO TIEN CON LAI CAN PHAI TAM UNG  

421
IF(@AMT_REVERT>(@AMT_REMAIN -@AMT_USE) AND @AMT_REVERT >0)  

422
BEGIN  

423
ROLLBACK TRANSACTION  

424
SELECT '-1' as Result, '' REQ_PAY_ID, N'Dong '+ 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  

425
RETURN '-1'  

426
END  

427
END  

428
DECLARE @p_REQ_PAYDT_ID VARCHAR(15);  

429
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAYMENT_DT', @p_REQ_PAYDT_ID OUT;  

430
IF @p_REQ_PAYDT_ID='' OR @p_REQ_PAYDT_ID IS NULL GOTO ABORT;  

431
INSERT INTO TR_REQ_PAYMENT_DT  

432
VALUES (@p_REQ_PAYDT_ID,@PAY_ADV_ID,@p_REQ_PAY_ID , ISNULL(@AMT_ADVANCED,0) ,ISNULL(@AMT_DO,0),ISNULL(@AMT_REMAIN,0),  

433
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)  

434
IF @@error<>0 GOTO ABORT;  

435
FETCH NEXT FROM XmlDataPay INTO @PAY_ADV_ID, @AMT_ADVANCED ,@AMT_DO,@AMT_REMAIN,@AMT_PAY ,@AMT_USE ,@AMT_REVERT,@AMT_ADD,@CURRENCY,@RATE  

436
END  

437
CLOSE XmlDataPay;  

438
DEALLOCATE XmlDataPay;  

439
--END CURSOR 2--------------------------  

440
-------------------------  

441
--INSERT FROM CatCursor  

442
DELETE FROM TR_REQ_PAY_CAT WHERE REQ_PAY_ID = @p_REQ_PAY_ID  

443
FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE  

444
WHILE @@fetch_status=0  

445
BEGIN  

446
SET @INDEX = @INDEX +1  

447
DECLARE @p_REQ_PAY_CAT_ID VARCHAR(15);  

448
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_CAT', @p_REQ_PAY_CAT_ID OUT;  

449
IF @p_REQ_PAY_CAT_ID='' OR @p_REQ_PAY_CAT_ID IS NULL GOTO ABORT;  

450
INSERT INTO TR_REQ_PAY_CAT  

451
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)  

452
IF @@error<>0 GOTO ABORT;  

453
FETCH NEXT FROM XmlDataCat INTO @REQ_ADV_ID,@CAT_NAME,@TOTAL_AMT_CAT,@DEPT_ID,@CURRENCY,@RATE  

454
END  

455
CLOSE XmlDataCat;  

456
DEALLOCATE XmlDataCat;  

457
DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID  

458
DECLARE XmlDataPeriod CURSOR FOR  

459
SELECT *  

460
FROM  

461
OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)  

462
WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),  

463
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 NV 

464
ARCHAR(2000))  

465
OPEN XmlDataPeriod;  

466
DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),  

467
@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)  

468
FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,  

469
@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK  

470
WHILE @@fetch_status=0  

471
BEGIN  

472
-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE  

473
IF(@p_TYPE_FUNCTION ='SEND')  

474
BEGIN  

475
IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )  

476
BEGIN  

477
ROLLBACK TRANSACTION  

478
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? ci' ErrorDesc  

479
RETURN '-1'  

480
END  

481
END  

482
DECLARE @PERIOD_ID VARCHAR(15);  

483
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;  

484
IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;  

485
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)  

486
VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),  

487
@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)  

488
IF @@error<>0 GOTO ABORT;  

489
FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,  

490
@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK  

491
END  

492
CLOSE XmlDataPeriod;  

493
DEALLOCATE XmlDataPeriod;  

494
-- VALIDATE SO TIEN  

495
--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)  

496
--BEGIN  

497
-- ROLLBACK TRANSACTION  

498
-- 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  

499
-- RETURN '-1'  

500
--END  

501
END  

502
IF(@p_REQ_TYPE = 'D' OR @p_REQ_TYPE ='I')  

503
BEGIN  

504
DECLARE @SUM_TTCT_LINK DECIMAL(18,0), @SUM_TT_CT DECIMAL(18,0), @SUM_KUY_KE_TT DECIMAL(18,0),@SUM_PYCMS_LINK DECIMAL(18,0)  

505
SET @SUM_KUY_KE_TT=0  

506
 

507
----------------------------  

508
DELETE FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID = @p_REQ_PAY_ID  

509
--INSERT FROM ServiceCursor  

510
SET @INDEX = 0  

511
FETCH NEXT FROM XmlDataService INTO @REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@RECEIVE_NAME_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,  

512
@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE  

513
WHILE @@fetch_status=0  

514
BEGIN  

515
SET @INDEX = @INDEX +1  

516
SET @SUM_PYCMS_LINK =ISNULL((SELECT SUM(TOTAL_AMT) FROM TR_REQUEST_DOC WHERE PL_REQ_ID =@RECEIVE_ID_SERVICE),0)  

517
SET @SUM_TT_CT =(SELECT ISNULL(TOTAL_AMT,0) FROM PL_REQUEST_DOC WHERE REQ_ID =@RECEIVE_ID_SERVICE)  

518
IF(@RECEIVE_ID_SERVICE IS NOT NULL AND @RECEIVE_ID_SERVICE <> '')  

519
BEGIN  

520
SET @SUM_PYCMS_LINK = @SUM_PYCMS_LINK +@TOTAL_AMT_SERVICE  

521
END  

522
--SET @SUM_KUY_KE_TT = @SUM_KUY_KE_TT + @TOTAL_AMT_SERVICE  

523
SET @SUM_TTCT_LINK =(SELECT SUM(TOTAL_AMT*ISNULL(RATE,1)) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT) AND REQ_PAY_ID <> @p_REQ_PAY_ID AND EMP_ID =@RECEIVE_ID_SERVICE)  

524
IF(@p_TYPE_FUNCTION ='SEND')  

525
BEGIN  

526
IF((ISNULL(@SUM_TTCT_LINK,0) +ISNULL(@SUM_PYCMS_LINK,0) > ISNULL(@SUM_TT_CT,0)) AND @RECEIVE_ID_SERVICE IS NOT NULL AND @RECEIVE_ID_SERVICE <> '')  

527
BEGIN  

528
ROLLBACK TRANSACTION  

529
SELECT '-1' as Result, @p_REQ_PAY_ID REQ_PAY_ID,'' AS REQ_PAY_CODE,N'Dong '+ CONVERT(VARCHAR(5),@INDEX)+ N': S? ti?n thanh to?n kh?ng ??t v??t qu? h?n m?c c?n l?i c?a t? tr?nh '+FORMAT(ISNULL(@SUM_TT_CT,0) -ISNULL(@SUM_TTCT_LINK,0) -ISNULL(@SUM 

530
_PYCMS_LINK,0),'#,#', 'vi-VN') ErrorDesc  

531
RETURN '-1'  

532
END  

533
END  

534
DECLARE @p_REQ_PAY_SERVICE_ID VARCHAR(15);  

535
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SERVICE', @p_REQ_PAY_SERVICE_ID OUT;  

536
IF @p_REQ_PAY_SERVICE_ID='' OR @p_REQ_PAY_SERVICE_ID IS NULL GOTO ABORT;  

537
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)  

538
VALUES (@p_REQ_PAY_SERVICE_ID,@p_REQ_PAY_ID,@REQ_PAY_SERVICE_NAME,@RECEIVE_ID_SERVICE,@REQ_PAY_REASON_SERVICE,@TOTAL_AMT_SERVICE,  

539
@REQ_PAY_TYPE_SERVICE,@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@p_MAKER_ID,GETDATE(),@DEPT_ID_SRV,@CURRENCY,@RATE)  

540
IF @@error<>0 GOTO ABORT;  

541
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,  

542
@REQ_PAY_DESC_SERVICE,@REQ_PAY_ENTRIES_SERVICE,@DEPT_ID_SRV,@CURRENCY,@RATE  

543
END  

544
CLOSE XmlDataService;  

545
DEALLOCATE XmlDataService;  

546
END  

547
IF((@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE ='I')  

548
BEGIN  

549
----------------------------  

550
DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID= @p_REQ_PAY_ID  

551
DECLARE @INDEX_PO INT, @REF_ID VARCHAR(15),@IS_CLOSED VARCHAR(1)  

552
DECLARE XmlDataPO CURSOR FOR  

553
SELECT *  

554
FROM  

555
OPENXML(@hdoc, '/Root/XmlDataPO', 2)  

556
WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))  

557
OPEN XmlDataPO;  

558
SET @INDEX_PO = 0  

559
FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE  

560
WHILE @@fetch_status=0  

561
BEGIN  

562
IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@REF_ID AND AUTH_STATUS <>'A'))  

563
BEGIN  

564
ROLLBACK TRANSACTION  

565
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Dong '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO s? '+  

566
(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' ch?a ??c ph? duy?t. Vui l?ng ph? duy?t PO tr??c khi t?o phi?u thanh to?n' ErrorDesc  

567
RETURN '-1'  

568
END  

569
SET @INDEX_PO = @INDEX_PO +1  

570
-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE  

571
IF(@p_TYPE_FUNCTION ='SEND')  

572
BEGIN  

573
-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH  

574
IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='C' AND REQ_PAY_ID  

575
IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))  

576
BEGIN  

577
ROLLBACK TRANSACTION  

578
SELECT '-1' as Result, '' REQ_PAY_ID, '' AS REQ_PAY_CODE,N'Dong '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': H?p ?ng s? '+  

579
(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  

580
RETURN '-1'  

581
END  

582
-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH  

583
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))  

584
BEGIN  

585
ROLLBACK TRANSACTION  

586
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Dong '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': H?p ?ng s? '+  

587
(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  

588
RETURN '-1'  

589
END  

590
--IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REF_ID =@REF_ID AND PAY_ID =@PAY_ID AND  

591
-- 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))  

592
--BEGIN  

593
-- ROLLBACK TRANSACTION  

594
-- SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Dong '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': H?p ?ng s? '+  

595
-- (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  

596
-- RETURN '-1'  

597
--END  

598
-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH  

599
IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REF_TYPE ='P' AND REQ_PAY_ID  

600
IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))  

601
BEGIN  

602
ROLLBACK TRANSACTION  

603
SELECT '-1' as Result, '' REQ_PAY_ID, '' AS REQ_PAY_CODE,N'Dong '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N':PO s? '+  

604
(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  

605
RETURN '-1'  

606
END  

607
-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH  

608
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')))  

609
BEGIN  

610
ROLLBACK TRANSACTION  

611
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Dong '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO s? '+  

612
(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  

613
RETURN '-1'  

614
END  

615
END  

616
DECLARE @REQ_PAYDTID VARCHAR(15);  

617
EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;  

618
IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;  

619
INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES  

620
(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)  

621
IF @@error<>0 GOTO ABORT;  

622
FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE  

623
END  

624
CLOSE XmlDataPO;  

625
DEALLOCATE XmlDataPO;  

626
--INSERT FROM ScheduleCursor  

627
DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID = @p_REQ_PAY_ID  

628
SET @INDEX_PO = 0  

629
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,  

630
@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL  

631
WHILE @@fetch_status=0  

632
BEGIN  

633
--IF(@AMT_REMAIN_SCHEDULE =0)  

634
--BEGIN  

635
-- SET @PROCESS ='3'  

636
--END  

637
--IF(@PROCESS <>'2')  

638
--BEGIN  

639
-- SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +@AMT_REMAIN_SCHEDULE  

640
--END  

641
SET @TOTAL_SCHEDULE_AMT = @TOTAL_SCHEDULE_AMT +(@AMT_PAY_SCHEDULE -@AMT_ADVANCE_SCHEDULE -@AMT_PAY_DO)  

642
----  

643
SET @INDEX_PO = @INDEX_PO +1  

644
IF(@p_TYPE_FUNCTION ='SEND')  

645
BEGIN  

646
IF(ISNULL(@AMT_PAY_REAL,0) < ISNULL(@AMT_ADVANCE_SCHEDULE,0))  

647
BEGIN  

648
ROLLBACK TRANSACTION  

649
SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Dong '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': S? ti?n thanh to?n th?c t? t?i thi?u ph?i b?ng s? ti?n ? t?m ?ng : ' +FORMAT(SUM(@AMT_ADVANCE_SCHEDULE),'#,#', 'vi-VN') ErrorDesc  

650
RETURN '-1'  

651
END  

652
END  

653
DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);  

654
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;  

655
IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;  

656
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,  

657
CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)  

658
VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,  

659
--IIF(@PROCESS<>'2',(@AMT_PAY_SCHEDULE-@AMT_ADVANCE_SCHEDULE),0),  

660
@AMT_PAY_DO,  

661
@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)  

662
IF @@error<>0 GOTO ABORT;  

663
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,  

664
@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_DO,@AMT_PAY_REAL  

665
END  

666
CLOSE XmlDataSchedule;  

667
DEALLOCATE XmlDataSchedule;  

668
---- VALIDATE SO TIEN  

669
--IF(@p_REQ_AMT > ISNULL(@TOTAL_SCHEDULE_AMT,0))  

670
--BEGIN  

671
-- ROLLBACK TRANSACTION  

672
-- 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  

673
-- RETURN '-1'  

674
--END  

675
------  

676
END  

677
-- NEU LA THANH TOAN CAC HOP DONG DINH KY  

678
ELSE IF((@p_REQ_TYPE = 'P' AND @p_IS_PERIOD = 'Y') OR @p_REQ_TYPE='I')  

679
BEGIN  

680
DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID  

681
DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID = @p_REQ_PAY_ID  

682
DECLARE XmlDataPO CURSOR FOR  

683
SELECT *  

684
FROM  

685
OPENXML(@hdoc, '/Root/XmlDataPO', 2)  

686
WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))  

687
OPEN XmlDataPO;  

688
SET @INDEX_PO = 0  

689
FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE  

690
WHILE @@fetch_status=0  

691
BEGIN  

692
SET @INDEX_PO = @INDEX_PO +1  

693
DECLARE @REQ_PAYDTID_C VARCHAR(15);  

694
EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;  

695
IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;  

696
INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES  

697
(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)  

698
IF @@error<>0 GOTO ABORT;  

699
FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE  

700
END  

701
CLOSE XmlDataPO;  

702
DEALLOCATE XmlDataPO;  

703
--- CUSOR DANH SACH LICH THANH TOAN PO - HD  

704
----------------------------  

705
--INSERT FROM PERIOD  

706
DECLARE XmlDataPeriod CURSOR FOR  

707
SELECT *  

708
FROM  

709
OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)  

710
WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),  

711
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),  

712
PROCESS VARCHAR(5),PARENT_ID VARCHAR(15),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))  

713
OPEN XmlDataPeriod;  

714
--DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),  

715
--@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)  

716
FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,  

717
@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK  

718
WHILE @@fetch_status=0  

719
BEGIN  

720
-- KHI NAO BAM GUI PHE DUYET HE THONG MOI CHECK VALIDATE  

721
IF(@p_TYPE_FUNCTION ='SEND')  

722
BEGIN  

723
--IF(EXISTS(SELECT CONTRACT_ID  

724
--FROM TR_CONTRACT  

725
--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 <>''))  

726
--BEGIN  

727
-- ROLLBACK TRANSACTION  

728
-- SELECT '-1' as Result, '' REQ_PAY_ID, '' AS REQ_PAY_CODE,N'Thanh to?n h?p ?ng ?nh k? ? ?ng' ErrorDesc  

729
-- RETURN '-1'  

730
--END  

731
IF(@PAY_PHASE IS NULL OR @PAY_PHASE ='')  

732
BEGIN  

733
ROLLBACK TRANSACTION  

734
SELECT '-1' as Result, @p_REQ_PAY_ID REQ_PAY_ID,'' AS REQ_PAY_CODE, N'K? thanh to?n kh?ng ??c ? tr?ng' ErrorDesc  

735
RETURN '-1'  

736
END  

737
IF(@NEW_INDEX <=@OLD_INDEX AND (@NEW_INDEX >0 AND @OLD_INDEX >0) )  

738
BEGIN  

739
ROLLBACK TRANSACTION  

740
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? ci' ErrorDesc  

741
RETURN '-1'  

742
END  

743
IF( @PAY_ADV_ID IS NOT NULL AND @PAY_ADV_ID <> '' AND (SELECT ISNULL(REQ_AMT,0.00) - ISNULL(PAY_AMT,0.00) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@PAY_ADV_ID) <=0)  

744
BEGIN  

745
ROLLBACK TRANSACTION  

746
SELECT '-1' as Result, @p_REQ_PAY_ID REQ_PAY_ID,'' AS REQ_PAY_CODE, N'B?n kh?ng ??c ph?p ho?n t?m ?ng cho phi?u ? ??c ho?n ?ng xong! Vui l?ng g? kh?i danh s?ch k? thanh to?n & ho?n ?ng' ErrorDesc  

747
RETURN '-1'  

748
END  

749
IF(@PROCESS ='2' AND (@AD_PAY_ID IS NULL OR @AD_PAY_ID =''))  

750
BEGIN  

751
ROLLBACK TRANSACTION  

752
SELECT '-1' Result,'' REQ_PAY_ID,N'L??i chi ti?t thanh to?n ?nh k?: T?i h?nh th?c thanh to?n Ho?n ?ng, s? phi?u t?m ?ng kh?ng ??c ph?p ? tr?ng' ErrorDesc  

753
RETURN '-1'  

754
END  

755
END  

756
--DECLARE @PERIOD_ID VARCHAR(15);  

757
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;  

758
IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;  

759
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)  

760
VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),  

761
@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)  

762
IF @@error<>0 GOTO ABORT;  

763
FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,  

764
@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY,@RATE,@FROM_DATE,@TO_DATE,@AD_PAY_ID, @_PROCESS,@PARENT_ID,@PAY_PHASE,@REASON_TTDK  

765
END  

766
CLOSE XmlDataPeriod;  

767
DEALLOCATE XmlDataPeriod;  

768
---- VALIDATE SO TIEN  

769
--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)  

770
--BEGIN  

771
-- ROLLBACK TRANSACTION  

772
-- 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  

773
-- RETURN '-1'  

774
--END  

775
--  

776
END  

777
COMMIT TRANSACTION  

778
IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP  

779
BEGIN  

780
DECLARE @BRANCH_TYPE_CR VARCHAR(15)  

781
SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)  

782
DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0, @SUM_NGAN_SACH DECIMAL(18,2) =0, @SUM_USE_REAL DECIMAL(18,2), @SUM_SERVICE DECIMAL(18,0),  

783
@SUM_SCHEDULE DECIMAL(18,0), @SUM_PERIOD DECIMAL(18,0), @SUM_PAY_BACK DECIMAL(18,0) =0, @SUM_ADD DECIMAL(18,0)  

784
SET @SUM_THANH_TOAN =(SELECT ISNULL(SUM(REQ_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)  

785
SET @SUM_PHUONG_THUC =ABS((SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID  

786
AND (TYPE_TRANSFER ='A' OR TYPE_TRANSFER IS NULL OR TYPE_TRANSFER ='')) - (SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID  

787
AND TYPE_TRANSFER ='R'))  

788
SET @SUM_NGAN_SACH =(SELECT ISNULL(SUM(AMT_EXE * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)  

789
SET @SUM_SERVICE =(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)  

790
SET @SUM_PERIOD =(SELECT ISNULL(SUM(AMT_PAY * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)  

791
SET @SUM_SCHEDULE =(SELECT ISNULL(SUM(AMT_PAY_REAL * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)  

792
IF(@p_REQ_TYPE ='I')  

793
BEGIN  

794
SET @SUM_USE_REAL =(SELECT ISNULL(SUM(AMT_USE*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)  

795
SET @SUM_PAY_BACK =(SELECT ISNULL(SUM(AMT_REVERT*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)  

796
SET @SUM_ADD =(SELECT ISNULL(SUM(AMT_ADD*ISNULL(RATE,1)),0) FROM TR_REQ_PAYMENT_DT WHERE PAY_ID =@p_REQ_PAY_ID)  

797
END  

798
IF(@p_REQ_TYPE ='P' AND @p_IS_PERIOD ='Y' AND @p_IS_PERIOD <>'' AND @p_IS_PERIOD IS NOT NULL)  

799
BEGIN  

800
SET @SUM_USE_REAL =(SELECT ISNULL(SUM(AMT_PAY*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)  

801
--SET @SUM_PAY_BACK =(SELECT ISNULL(SUM(AMT_PAY*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND PROCESS <> '0')  

802
 

803
END  

804
IF(@p_REQ_TYPE ='P' AND (@p_IS_PERIOD ='N' OR (@p_IS_PERIOD ='' OR @p_IS_PERIOD IS NULL)))  

805
BEGIN  

806
SET @SUM_USE_REAL =(SELECT ISNULL(SUM(AMT_PAY_REAL*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)  

807
SET @SUM_PAY_BACK =(SELECT ISNULL(SUM(AMT_ADVANCE*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)  

808
END  

809
IF(@p_REQ_TYPE ='D')  

810
BEGIN  

811
SET @SUM_USE_REAL =(SELECT ISNULL(SUM(TOTAL_AMT*ISNULL(RATE,1)),0) FROM TR_REQ_PAY_SERVICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)  

812
END  

813
IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))  

814
BEGIN  

815
SELECT '-1' as Result, '' REQ_PAY_ID, N'S? ti?n ph??ng th?c thanh to?n ph?i b?ng s? ti?n b?n c?n thanh to?n l?: ' + FORMAT(SUM(@SUM_THANH_TOAN),'#,#', 'vi-VN') ErrorDesc  

816
RETURN '-1'  

817
END  

818
IF(@p_REQ_TYPE = 'D' AND ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_THANH_TOAN,0))  

819
BEGIN  

820
SELECT '-1' as Result, '' REQ_PAY_ID, N'S? ti?n s? d?ng ng?n s?ch v? chi ph? ph?i b?ng s? ti?n b?n c?n thanh to?n l?: ' + FORMAT(SUM(@SUM_THANH_TOAN),'#,#', 'vi-VN') ErrorDesc  

821
RETURN '-1'  

822
END  

823
IF(@p_REQ_TYPE <> 'D' AND ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))  

824
BEGIN  

825
SELECT '-1' as Result, '' REQ_PAY_ID, N'S? ti?n s? d?ng ng?n s?ch v? chi ph? ph?i b?ng s? ti?n b?n s? d?ng th?c t? l?: ' + FORMAT(SUM(@SUM_USE_REAL),'#,#', 'vi-VN') ErrorDesc  

826
RETURN '-1'  

827
END  

828
--IF(ISNULL(@SUM_USE_REAL,0) - ISNULL(@SUM_PAY_BACK,0) <> @SUM_PHUONG_THUC)  

829
--BEGIN  

830
-- SELECT '-1' as Result, '' REQ_PAY_ID, N'S? ti?n ph??ng th?c thanh to?n t??ng ?ng v?i s? ti?n thanh to?n tr? s? ti?n ho?n t?m ?ng: ' + FORMAT((ISNULL(@SUM_USE_REAL,0) - ISNULL(@SUM_PAY_BACK,0)),'#,#', 'vi-VN') ErrorDesc  

831
-- RETURN '-1'  

832
--END  

833
--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')  

834
--BEGIN  

835
-- DECLARE @USER_TP VARCHAR(15)  

836
-- SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('GDDV','TPTC','TC','KTT'))  

837
-- UPDATE TR_REQ_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID  

838
--END  

839
--ELSE  

840
--IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')  

841
--BEGIN  

842
-- --DECLARE @USER_TPGD VARCHAR(15)  

843
-- --SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))  

844
-- DECLARE @USER_TPGD VARCHAR(15)  

845
-- --SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND  

846
-- --(RoleName IN ('TPGD') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='TPGD')))  

847
-- SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))  

848
-- IF(@USER_TPGD IS NULL OR @USER_TPGD ='')  

849
-- BEGIN  

850
-- SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID = @p_BRANCH_CREATE  

851
-- AND RoleName ='TPGD')  

852
-- END  

853
-- UPDATE TR_REQ_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID  

854
--END  

855
IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE <> '' AND TRASFER_USER_RECIVE IS NOT NULL AND REQ_PAY_ID =@p_REQ_PAY_ID) AND @BRANCH_TYPE_CR ='PGD')  

856
BEGIN  

857
SELECT '-1' as Result, '' REQ_PAY_ID, N'C?p ? ph?ng giao d?ch vui l?ng kh?ng ??c ch?n c?p ph? duy?t trung gian' ErrorDesc  

858
RETURN '-1'  

859
END  

860
IF(@p_REQ_TYPE <> 'I')  

861
BEGIN  

862
IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))  

863
BEGIN  

864
SELECT '-1' as Result, '' REQ_PAY_ID, N'Th?ng tin h?ng m?c ng?n s?ch v? chi ph? kh?ng ??c ? tr?ng. Vui l?ng ch?n ng?n s?ch v? chi ph?' ErrorDesc  

865
RETURN '-1'  

866
END  

867
--IF(ISNULL(@SUM_USE_REAL,0) - ISNULL(@SUM_PAY_BACK,0) <> @SUM_PHUONG_THUC)  

868
--BEGIN  

869
-- SELECT '-1' as Result, '' REQ_PAY_ID, N'S? ti?n ph??ng th?c thanh to?n t??ng ?ng v?i s? ti?n thanh to?n tr? s? ti?n ho?n t?m ?ng: ' + FORMAT((ISNULL(@SUM_USE_REAL,0) - ISNULL(@SUM_PAY_BACK,0)),'#,#', 'vi-VN') ErrorDesc  

870
-- RETURN '-1'  

871
--END  

872
END  

873
ELSE  

874
BEGIN  

875
IF(ISNULL(@SUM_USE_REAL,0) >0)  

876
BEGIN  

877
IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))  

878
BEGIN  

879
SELECT '-1' as Result, '' REQ_PAY_ID, N'Th?ng tin h?ng m?c ng?n s?ch v? chi ph? kh?ng ??c ? tr?ng. Vui l?ng ch?n ng?n s?ch v? chi ph?' ErrorDesc  

880
RETURN '-1'  

881
END  

882
IF(ROUND(@SUM_NGAN_SACH,0) <> ROUND(@SUM_USE_REAL,0))  

883
BEGIN  

884
SELECT '-1' as Result, '' REQ_PAY_ID, N'S? ti?n s? d?ng ng?n s?ch v? chi ph? ph?i b?ng s? ti?n s? d?ng th?c t? tr?n l??i ho?n t?m ?ng: ' + FORMAT(SUM(@SUM_USE_REAL),'#,#', 'vi-VN') ErrorDesc  

885
RETURN '-1'  

886
END  

887
IF(ISNULL(@SUM_USE_REAL,0) <> (ISNULL(@SUM_SERVICE,0) + ISNULL(@SUM_PERIOD,0) + ISNULL(@SUM_SCHEDULE,0)))  

888
BEGIN  

889
SELECT '-1' as Result, '' REQ_PAY_ID, N'T?ng s? ti?n thanh to?n d?ch v?, thanh to?n nh? cung c?p, thanh to?n ?nh k? ph?i b?ng s? ti?n s? d?ng th?c t? tr?n l??i ho?n t?m ?ng: ' + FORMAT(SUM(@SUM_USE_REAL),'#,#', 'vi-VN') ErrorDesc  

890
RETURN '-1'  

891
END  

892
END  

893
IF(ABS((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))) <> @SUM_PHUONG_THUC)  

894
BEGIN  

895
SELECT '-1' as Result, '' REQ_PAY_ID, N'S? ti?n ph??ng th?c thanh to?n t??ng ?ng v?i s? ti?n chi b? sung tr? s? ti?n ho?n t?m ?ng: ' + FORMAT(ABS((ISNULL(@SUM_ADD,0) - ISNULL(@SUM_PAY_BACK,0))),'#,#', 'vi-VN') ErrorDesc  

896
RETURN '-1'  

897
END  

898
END  

899
IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS='U'))  

900
BEGIN  

901
SELECT '-1' as Result, '' REQ_PAY_ID, N'Phi?u ? ngh? thanh to?n ? ??c g?i ph? duy?t tr??c ?! Vui l?ng ?i c?c c?p ph? duy?t' ErrorDesc  

902
RETURN '-1'  

903
END  

904
-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY  

905
UPDATE TR_REQ_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL,CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID  

906
INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)  

907
 

908
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')  

909
--- Luu log chinh sua  

910
INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID  

911
-----  

912
UPDATE TR_REQ_PAY_SCHEDULE SET AMT_REMAIN =0.00 WHERE AMT_REMAIN <0  

913
UPDATE TR_REQ_PAY_BUDGET SET AMT_APP= ROUND(AMT_APP,0), AMT_REMAIN = ROUND(AMT_REMAIN,0)  

914
 

915
IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE (TRASFER_USER_RECIVE <> '' AND TRASFER_USER_RECIVE IS NOT NULL) AND REQ_PAY_ID =@p_REQ_PAY_ID))  

916
BEGIN  

917
SELECT '4' as Result, @p_REQ_PAY_ID REQ_PAY_ID, N'?n v? g?i phi?u ph? duy?t phi?u ? ngh? thanh to?n s?: ' + ISNULL(@p_REQ_PAY_CODE,'') + N' th?nh c?ng. Vui l?ng ?i c?p ph? duy?t trung gian x?c nh?n phi?u' ErrorDesc  

918
RETURN '4'  

919
END  

920
ELSE  

921
BEGIN  

922
SELECT '4' as Result, @p_REQ_PAY_ID REQ_PAY_ID, N'?n v? g?i phi?u ph? duy?t phi?u ? ngh? thanh to?n s?: ' + ISNULL(@p_REQ_PAY_CODE,'') + N' th?nh c?ng. Vui l?ng ?i tr??ng ?n v? ph? duy?t phi?u' ErrorDesc  

923
RETURN '4'  

924
END  

925
END  

926
SELECT '0' as Result, @p_REQ_PAY_ID REQ_PAY_ID, '' ErrorDesc  

927
RETURN '0'  

928
ABORT:  

929
BEGIN  

930
CLOSE XmlData;  

931
DEALLOCATE XmlData;  

932
CLOSE XmlDataPay;  

933
DEALLOCATE XmlDataPay;  

934
Close XmlDataMethod;  

935
Close XmlDataCat;  

936
CLOSE XmlDataService;  

937
CLOSE XmlDataSchedule;  

938
Deallocate XmlDataMethod;  

939
Deallocate XmlDataCat;  

940
DEALLOCATE XmlDataService;  

941
DEALLOCATE XmlDataSchedule;  

942
ROLLBACK TRANSACTION  

943
SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc  

944
RETURN '-1'  

945
End 

946