Project

General

Profile

4.0.04.04.2025 BVBANK KIEM TRA HANG MUC NGAN SACH.txt

Luc Tran Van, 04/04/2025 01:55 PM

 
1
SET QUOTED_IDENTIFIER ON
2
SET ANSI_NULLS ON
3
GO
4

    
5
ALTER PROCEDURE [dbo].[PL_IMPORT_Upd]
6
@p_IMPORT_ID VARCHAR(20),
7
@p_PLAN_CODE VARCHAR(20),
8
@p_IMP_YEAR	INT  = NULL,
9
@p_IMP_NAME NVARCHAR(200),
10
@p_FILE_NAME	NVARCHAR(200)  = NULL,
11
@p_TOTAL_QTY	NUMERIC(18,0)  = NULL,
12
@p_TOTAL_ATM	NUMERIC(18,0)  = NULL,
13
@p_NOTES	nvarchar(1000)  = NULL,
14
@p_RECORD_STATUS	varchar(1)  = NULL,
15
@p_MAKER_ID	varchar(20)  = NULL,
16
@p_CREATE_DT	varchar(20) = NULL,
17
@p_AUTH_STATUS	varchar(50)  = NULL,
18
@p_CHECKER_ID	varchar(20)  = NULL,
19
@p_APPROVE_DT	varchar(20) = NULL,
20
@p_XMLData XML=NULL
21
AS
22
BEGIN TRANSACTION
23
DECLARE @TableTmp TABLE(
24
		IMP_YEAR VARCHAR(4),
25
		PLAN_TYPE_ID VARCHAR(15),
26
		PLAN_TYPE_CODE VARCHAR(15),
27
		PLAN_TYPE_NAME NVARCHAR(200), 
28
		COST_ID VARCHAR(15),
29
		COST_CODE VARCHAR(100),
30
		COST_NAME NVARCHAR(200),
31
		BRANCH_ID VARCHAR(15),
32
		BRANCH_CODE VARCHAR(15),
33
		BRANCH_NAME NVARCHAR(200),
34
		DEP_ID	varchar(15),
35
		DEP_CODE VARCHAR(15),
36
		DEP_NAME NVARCHAR(200),
37
		REF_ID INT,
38
		REF_CODE VARCHAR(20),
39
		REF_NAME NVARCHAR(200),
40
		GOOD_ID varchar(15),
41
		GOOD_CODE VARCHAR(20),
42
		GOOD_NAME NVARCHAR(200),
43
		QTY INT,
44
		TOTAL_AMT NUMERIC(18,2),
45
		NOTES NVARCHAR(1000)
46
);
47
Declare @hdoc INT
48
	Exec sp_xml_preparedocument @hdoc Output, @p_XMLData	
49

    
50
INSERT INTO @TableTmp
51
 SELECT *
52
	FROM OPENXML(@hDoc,'/Root/XmlData',2)
53
	WITH 
54
	(
55
	    IMP_YEAR VARCHAR(4),
56
		PLAN_TYPE_ID VARCHAR(15),
57
		PLAN_TYPE_CODE VARCHAR(15),
58
		PLAN_TYPE_NAME NVARCHAR(200), 
59
		COST_ID VARCHAR(15),
60
		COST_CODE VARCHAR(100),
61
		COST_NAME NVARCHAR(200),
62
		BRANCH_ID VARCHAR(15),
63
		BRANCH_CODE VARCHAR(15),
64
		BRANCH_NAME NVARCHAR(200),
65
		DEP_ID	varchar(15),
66
		DEP_CODE VARCHAR(15),
67
		DEP_NAME NVARCHAR(200),
68
		REF_ID INT,
69
		REF_CODE VARCHAR(20),
70
		REF_NAME NVARCHAR(200),
71
		GOOD_ID varchar(15),
72
		GOOD_CODE VARCHAR(20),
73
		GOOD_NAME NVARCHAR(200),
74
		QTY INT,
75
		TOTAL_AMT NUMERIC(18,2),
76
		NOTES NVARCHAR(1000)
77
	)
78

    
79
	DECLARE @YEAR_CURR VARCHAR(4)
80
	SET @YEAR_CURR = (SELECT IMP_YEAR FROM dbo.PL_IMPORT WHERE IMPORT_ID=@p_IMPORT_ID)
81
	IF(EXISTS(SELECT * FROM @TableTmp WHERE  IMP_YEAR <> @YEAR_CURR))
82
	BEGIN
83
		ROLLBACK TRANSACTION
84
		SELECT '-1' as Result, '' IMPORT_ID, N'Cập nhật thất bại, sai năm kế hoạch' ErrorDesc
85
		RETURN '-1'
86
	END
87

    
88
	--Update ID
89
UPDATE @TableTmp  SET BRANCH_ID=(SELECT  TOP 1 BRANCH_ID FROM dbo.CM_BRANCH WHERE dbo.CM_BRANCH.BRANCH_CODE=[@TableTmp].BRANCH_CODE),
90
DEP_ID=(SELECT  TOP 1 DEP_ID FROM dbo.CM_DEPARTMENT A WHERE A.DEP_CODE=[@TableTmp].DEP_CODE AND EXISTS(SELECT 1 FROM dbo.CM_BRANCH WHERE BRANCH_ID = A.BRANCH_ID)), -- NGUYENTD 04042025_SECRETKEY FIX LẤY SAI DEP_ID
91
COST_ID=(SELECT  TOP 1 DVDM_ID FROM dbo.CM_DVDM WHERE dbo.CM_DVDM.DVDM_CODE=[@TableTmp].COST_CODE AND IS_DVDM=1),
92
PLAN_TYPE_ID=(SELECT  TOP 1 PLAN_TYPE_ID FROM dbo.CM_PLAN_TYPE WHERE dbo.CM_PLAN_TYPE.PLAN_TYPE_CODE=[@TableTmp].PLAN_TYPE_CODE),
93
GOOD_ID=(SELECT  TOP 1 GD_ID FROM dbo.CM_GOODS WHERE dbo.CM_GOODS.GD_CODE=[@TableTmp].GOOD_CODE)
94

    
95
-- GIANT UPDATE NAME
96
--Update ID
97
UPDATE @TableTmp  SET BRANCH_NAME=(SELECT TOP 1 BRANCH_NAME FROM dbo.CM_BRANCH WHERE dbo.CM_BRANCH.BRANCH_CODE=[@TableTmp].BRANCH_CODE),
98
DEP_NAME=(SELECT TOP 1 DEP_NAME FROM dbo.CM_DEPARTMENT WHERE dbo.CM_DEPARTMENT.DEP_CODE=[@TableTmp].DEP_CODE),
99
COST_NAME=(SELECT TOP 1 DVDM_NAME FROM dbo.CM_DVDM WHERE dbo.CM_DVDM.DVDM_CODE=[@TableTmp].COST_CODE AND IS_DVDM=1 ),
100
PLAN_TYPE_NAME=(SELECT TOP 1 PLAN_TYPE_NAME FROM dbo.CM_PLAN_TYPE WHERE dbo.CM_PLAN_TYPE.PLAN_TYPE_CODE=[@TableTmp].PLAN_TYPE_CODE),
101
GOOD_NAME=(SELECT TOP 1 GD_NAME FROM dbo.CM_GOODS WHERE dbo.CM_GOODS.GD_CODE=[@TableTmp].GOOD_CODE)
102

    
103

    
104

    
105

    
106
DECLARE @Error NVARCHAR(MAX)
107
--- Validate dữ liệu
108
IF(EXISTS(SELECT BRANCH_ID FROM @TableTmp WHERE BRANCH_ID IS NULL OR BRANCH_ID=''))
109
BEGIN
110

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

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

    
118

    
119

    
120
END
121
IF(EXISTS(SELECT DEP_ID FROM @TableTmp WHERE BRANCH_CODE IN ('069','799','899') AND ( DEP_ID IS NULL OR DEP_ID='')))
122
BEGIN
123

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

    
127
		ROLLBACK TRANSACTION
128
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã phòng ban chưa tồn tại trên hệ thống: '+@Error ErrorDesc
129
		RETURN '-1'
130
END
131

    
132
IF(EXISTS(SELECT COST_ID FROM @TableTmp WHERE (COST_ID IS NULL OR COST_ID='') AND COST_CODE IS NOT NULL AND COST_CODE <>''))
133
BEGIN
134

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

    
142
IF(EXISTS(SELECT PLAN_TYPE_ID FROM @TableTmp WHERE PLAN_TYPE_ID IS NULL OR PLAN_TYPE_ID=''))
143
BEGIN
144

    
145

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

    
148
		ROLLBACK TRANSACTION
149
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã loại ngân sách chưa tồn tại trên hệ thống: '+@Error ErrorDesc
150
		RETURN '-1'
151
END
152

    
153
IF(EXISTS(SELECT GOOD_ID FROM @TableTmp WHERE GOOD_ID IS NULL OR GOOD_ID=''))
154
BEGIN
155

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

    
158
		ROLLBACK TRANSACTION
159
		SELECT '-1' as Result, '' IMPORT_ID, N'Mã hạn mục chưa tồn tại trên hệ thống: '+@Error ErrorDesc
160
		RETURN '-1'
161
END
162

    
163

    
164

    
165

    
166

    
167
	--IF(EXISTS(
168
	--SELECT DT.TRADE_ID FROM dbo.PL_MASTER PM 
169
	--LEFT JOIN dbo.PL_TRADEDETAIL DT ON PM.PLAN_ID=DT.PLAN_ID
170
	--WHERE EXISTS()
171
	--BEGIN
172

    
173
	--		ROLLBACK TRANSACTION
174
	--		SELECT '-1' as Result, '' IMPORT_ID, N'Hạn mục chỉnh sửa đã sử dụng vượt hạn mức chỉnh sửa' ErrorDesc
175
	--		RETURN '-1'
176
	--END
177
  SET @p_AUTH_STATUS = 'U'
178
	UPDATE dbo.PL_IMPORT_DT SET IS_UPDATE=0 WHERE IMPORT_ID=@p_IMPORT_ID
179

    
180
	UPDATE dbo.PL_IMPORT SET PLAN_CODE=@p_PLAN_CODE,IMP_NAME=@p_IMP_NAME,FILE_NAME=@p_FILE_NAME,IMP_QTY=@p_TOTAL_QTY,
181
	IMP_ATM=@p_TOTAL_ATM,NOTES=@p_NOTES,EDITER_ID=@p_MAKER_ID,EDIT_DT=convert(datetime,@p_CREATE_DT,103),CHECKER_ID=@p_CHECKER_ID,APPROVE_DT=convert(datetime,@p_APPROVE_DT,103),AUTH_STATUS=@p_AUTH_STATUS,IS_UPDATE=1
182
	WHERE IMPORT_ID=@p_IMPORT_ID
183

    
184

    
185
	
186
	DECLARE ImportDT CURSOR FOR
187
	SELECT IMP_YEAR,
188
           PLAN_TYPE_ID,
189
           PLAN_TYPE_CODE,
190
           PLAN_TYPE_NAME,
191
           COST_ID,
192
           COST_CODE,
193
           COST_NAME,
194
           BRANCH_ID,
195
           BRANCH_CODE,
196
           BRANCH_NAME,
197
           DEP_ID,
198
           DEP_CODE,
199
           DEP_NAME,
200
		  REF_ID,
201
		  REF_CODE,
202
		  REF_NAME,
203
           GOOD_ID,
204
           GOOD_CODE,
205
           GOOD_NAME,
206
           QTY,
207
           TOTAL_AMT,
208
           NOTES FROM @TableTmp
209
	
210
	OPEN ImportDT
211

    
212

    
213
	DECLARE 
214
	    @PLAN_TYPE_ID VARCHAR(15),
215
		@PLAN_TYPE_CODE VARCHAR(15),
216
		@PLAN_TYPE_NAME NVARCHAR(200), 
217
		@COST_ID VARCHAR(15),
218
		@COST_CODE VARCHAR(15),
219
		@COST_NAME NVARCHAR(200),
220
		@BRANCH_ID VARCHAR(15),
221
		@BRANCH_CODE VARCHAR(15),
222
		@BRANCH_NAME NVARCHAR(200),
223
		@DEP_ID	varchar(15),
224
		@DEP_CODE VARCHAR(15),
225
		@DEP_NAME NVARCHAR(200),
226
		@REF_ID INT,
227
		@REF_CODE VARCHAR(20),
228
		@REF_NAME NVARCHAR(200),
229
		@GOOD_ID varchar(15),
230
		@GODD_CODE VARCHAR(20),
231
		@GOOD_NAME NVARCHAR(200),@QTY INT,@TOTAL_AMT NUMERIC(18,2),@NOTES NVARCHAR(1000),
232
		@IMP_YEAR VARCHAR(4)
233

    
234
		,@IMP_LOG_CODE VARCHAR(15)
235
		EXEC SYS_CodeMasters_Gen 'IMP_LOG_CODE', @IMP_LOG_CODE out
236
		IF @IMP_LOG_CODE='' OR @IMP_LOG_CODE IS NULL GOTO ABORT		
237

    
238
	FETCH NEXT FROM ImportDT INTO @IMP_YEAR, @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
239
	@BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_ID,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,@QTY,@TOTAL_AMT,@NOTES
240
	
241
	WHILE @@FETCH_STATUS = 0	
242
	BEGIN		
243
	
244
		DECLARE @l_IMPORTDT_ID VARCHAR(20)
245

    
246
		SET @l_IMPORTDT_ID= (SELECT TOP 1 IMP_DT_ID FROM  PL_IMPORT_DT WHERE IMPORT_ID=@p_IMPORT_ID AND ISNULL(PLAN_TYPE_ID,'')=ISNULL(@PLAN_TYPE_ID,'') 
247
		---AND ISNULL(COST_ID,'')=ISNULL(@COST_ID,'') --- LUCTV 14072023_SECRETKEY BỎ ĐIỀU KIỆN NÀY RA KHỎI ĐỂ KHI ĐỔI DVCM THÌ KHÔNG PHÁT SINH NGÂN SÁCH MỚI
248
													------ LUCTV 26092023_SECRETKEY BỎ ĐIỀU KIỆN NÀY RA KHỎI ĐỂ KHI ĐỔI DVCM THÌ KHÔNG PHÁT SINH NGÂN SÁCH MỚI
249
		AND BRANCH_ID=@BRANCH_ID AND ISNULL(REF_CODE,'')= ISNULL(@REF_CODE,'')
250
		AND ISNULL(DEP_ID,'')=ISNULL(@DEP_ID,'') AND ISNULL(GOOD_ID,'')=ISNULL(@GOOD_ID,''))
251
		IF(@l_IMPORTDT_ID IS NULL OR @l_IMPORTDT_ID='')
252
		BEGIN
253
			EXEC SYS_CodeMasters_Gen 'IMPORT_DT', @l_IMPORTDT_ID out
254
			IF @l_IMPORTDT_ID='' OR @l_IMPORTDT_ID IS NULL GOTO ABORT	
255
				INSERT INTO dbo.PL_IMPORT_DT
256
			(
257
		    IMP_DT_ID,
258
		    IMPORT_ID,
259
		    PLAN_TYPE_ID,
260
			PLAN_TYPE_CODE,
261
			PLAN_TYPE_NAME,
262
		    COST_ID,
263
			COST_CODE,
264
			COST_NAME,
265
		    BRANCH_ID,
266
			BRANCH_CODE,
267
			BRANCH_NAME,
268
		    DEP_ID,
269
			DEP_CODE,
270
			DEP_NAME,
271
			REF_CODE,
272
			REF_NAME,
273
		    GOOD_ID,
274
			GOOD_CODE,
275
			GOOD_NAME,
276
		    QTY,
277
		    TOTAL_AMT,
278
		    NOTES,
279
			IMP_YEAR,
280
			IS_UPDATE
281
		)
282
		VALUES
283
		(   @l_IMPORTDT_ID,   -- IMP_DT_ID - varchar(20)
284
		    @p_IMPORT_ID,   -- IMPORT_ID - varchar(20)
285
		   @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
286
	        @BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,@QTY,@TOTAL_AMT,@NOTES,@IMP_YEAR,1
287
		  )
288
		END
289
	
290
		ELSE
291
		BEGIN
292
			UPDATE dbo.PL_IMPORT_DT SET QTY=@QTY,TOTAL_AMT=@TOTAL_AMT,REF_NAME=@REF_NAME,IS_UPDATE=1,COST_ID =@COST_ID
293
			WHERE IMP_DT_ID=@l_IMPORTDT_ID
294
		END
295
		  INSERT INTO dbo.PL_IMPORT_LOG
296
		  (
297
		     IMP_LOG_CODE,
298
		      IMP_ID,
299
		      FILE_NAME,
300
		      IMP_YEAR,
301
		      NOTES,
302
		    RECORD_STATUS,
303
		    AUTH_STATUS,
304
		    MAKER_ID,
305
		    CREATE_DT,
306
		    EDITER_ID,
307
		    EDIT_DT,
308
		    CHECKER_ID,
309
		    APPROVE_DT,
310
			PLAN_TYPE_ID,
311
			PLAN_TYPE_CODE,
312
			PLAN_TYPE_NAME,
313
		    COST_ID,
314
			COST_CODE,
315
			COST_NAME,
316
		    BRANCH_ID,
317
			BRANCH_CODE,
318
			BRANCH_NAME,
319
		    DEP_ID,
320
			DEP_CODE,
321
			DEP_NAME,
322
			REF_CODE,
323
			REF_NAME,
324
		    GOOD_ID,
325
			GOOD_CODE,
326
			GOOD_NAME,
327
		      QTY,
328
		      TOTAL_AMT
329
		  )
330
		  VALUES
331
		  (   
332
				@IMP_LOG_CODE,
333
		      @p_IMPORT_ID,        -- IMP_ID_OLD - varchar(20)
334
		      @p_FILE_NAME,       -- FILE_NAME - nvarchar(200)
335
		      @p_IMP_YEAR,         -- IMP_YEAR - int
336
		      @p_NOTES,       -- NOTES - nvarchar(1000)
337
		      @p_RECORD_STATUS,        -- RECORD_STATUS - varchar(1)
338
		      @p_AUTH_STATUS,        -- AUTH_STATUS - varchar(1)
339
		      @p_MAKER_ID,        -- MAKER_ID - varchar(15)
340
		      convert(datetime,@p_CREATE_DT,103), -- CREATE_DT - datetime
341
			  @p_MAKER_ID,        -- EDITER_ID - varchar(15)
342
		      convert(datetime,@p_CREATE_DT,103), -- EDIT_DT - datetime
343
		      @p_CHECKER_ID,        -- CHECKER_ID - varchar(15)
344
		      convert(datetime,@p_APPROVE_DT,103),  -- APPROVE_DT - datetime
345
		      @PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
346
				@BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,
347
		      @QTY,    -- QTY - int
348
		      @TOTAL_AMT -- TOTAL_AMT - numeric(18, 2)
349
		      )
350
		  	
351
		
352
		IF @@Error <> 0 GOTO ABORT	
353
	
354
		FETCH NEXT FROM ImportDT INTO  @IMP_YEAR,@PLAN_TYPE_ID, @PLAN_TYPE_CODE,@PLAN_TYPE_NAME,@COST_ID,@COST_CODE,@COST_NAME,@BRANCH_ID,@BRANCH_CODE,
355
	@BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_ID,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME	,@QTY,@TOTAL_AMT,@NOTES
356
	
357
	END
358
	CLOSE ImportDT
359
	DEALLOCATE ImportDT
360

    
361
	SET @p_TOTAL_ATM=(SELECT SUM(ISNULL(TOTAL_AMT,0)) FROM dbo.PL_IMPORT_DT WHERE IMPORT_ID=@p_IMPORT_ID)
362
	SELECT @p_TOTAL_QTY=(SELECT SUM(ISNULL(QTY,0)) FROM dbo.PL_IMPORT_DT WHERE IMPORT_ID=@p_IMPORT_ID)
363

    
364
	UPDATE dbo.PL_IMPORT SET IMP_QTY=@p_TOTAL_QTY,IMP_ATM=@p_TOTAL_ATM WHERE IMPORT_ID=@p_IMPORT_ID
365
		IF @@Error <> 0 GOTO ABORT
366
COMMIT TRANSACTION
367
SELECT '0' as Result, @p_IMPORT_ID  IMPORT_ID, '' ErrorDesc
368
RETURN '0'
369
ABORT:
370
BEGIN
371
		ROLLBACK TRANSACTION
372
		SELECT '-1' as Result, '' IMPORT_ID, '' ErrorDesc
373
		RETURN '-1'
374
End
375

    
376
--04042025_sECRETKEY
377