Project

General

Profile

PL_IMPORT_Upd.txt

Luc Tran Van, 10/26/2022 10:15 AM

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

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

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

    
84
	--Update ID
85
UPDATE @TableTmp  SET BRANCH_ID=(SELECT  TOP 1 BRANCH_ID FROM dbo.CM_BRANCH WHERE dbo.CM_BRANCH.BRANCH_CODE=[@TableTmp].BRANCH_CODE),
86
DEP_ID=(SELECT  TOP 1 DEP_ID FROM dbo.CM_DEPARTMENT WHERE dbo.CM_DEPARTMENT.DEP_CODE=[@TableTmp].DEP_CODE),
87
COST_ID=(SELECT  TOP 1 DVDM_ID FROM dbo.CM_DVDM WHERE dbo.CM_DVDM.DVDM_CODE=[@TableTmp].COST_CODE AND IS_DVDM=1),
88
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),
89
GOOD_ID=(SELECT  TOP 1 GD_ID FROM dbo.CM_GOODS WHERE dbo.CM_GOODS.GD_CODE=[@TableTmp].GOOD_CODE)
90

    
91
-- GIANT UPDATE NAME
92
--Update ID
93
UPDATE @TableTmp  SET BRANCH_NAME=(SELECT TOP 1 BRANCH_NAME FROM dbo.CM_BRANCH WHERE dbo.CM_BRANCH.BRANCH_CODE=[@TableTmp].BRANCH_CODE),
94
DEP_NAME=(SELECT TOP 1 DEP_NAME FROM dbo.CM_DEPARTMENT WHERE dbo.CM_DEPARTMENT.DEP_CODE=[@TableTmp].DEP_CODE),
95
COST_NAME=(SELECT TOP 1 DVDM_NAME FROM dbo.CM_DVDM WHERE dbo.CM_DVDM.DVDM_CODE=[@TableTmp].COST_CODE AND IS_DVDM=1 ),
96
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),
97
GOOD_NAME=(SELECT TOP 1 GD_NAME FROM dbo.CM_GOODS WHERE dbo.CM_GOODS.GD_CODE=[@TableTmp].GOOD_CODE)
98

    
99

    
100

    
101

    
102
DECLARE @Error NVARCHAR(MAX)
103
--- Validate dữ liệu
104
IF(EXISTS(SELECT BRANCH_ID FROM @TableTmp WHERE BRANCH_ID IS NULL OR BRANCH_ID=''))
105
BEGIN
106

    
107
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, ''))	
108
	
109

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

    
114

    
115

    
116
END
117

    
118

    
119

    
120
IF(EXISTS(SELECT DEP_ID FROM @TableTmp WHERE DEP_ID IS NULL OR DEP_ID=''))
121
BEGIN
122

    
123
		
124
		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, ''))
125

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

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

    
134
			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, ''))	
135
		
136
		ROLLBACK TRANSACTION
137
		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
138
		RETURN '-1'
139
END
140

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

    
144

    
145
		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, ''))	
146

    
147
		ROLLBACK TRANSACTION
148
		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
149
		RETURN '-1'
150
END
151

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

    
155
		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, ''))	
156

    
157
		ROLLBACK TRANSACTION
158
		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
159
		RETURN '-1'
160
END
161

    
162

    
163

    
164

    
165

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

    
172
	--		ROLLBACK TRANSACTION
173
	--		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
174
	--		RETURN '-1'
175
	--END
176
  SET @p_AUTH_STATUS = 'U'
177
	UPDATE dbo.PL_IMPORT_DT SET IS_UPDATE=0 WHERE IMPORT_ID=@p_IMPORT_ID
178

    
179
	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,
180
	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
181
	WHERE IMPORT_ID=@p_IMPORT_ID
182

    
183

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

    
211

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

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

    
237
	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,
238
	@BRANCH_NAME,@DEP_ID,@DEP_CODE,@DEP_NAME,@REF_ID,@REF_CODE,@REF_NAME,@GOOD_ID,@GODD_CODE,@GOOD_NAME,@QTY,@TOTAL_AMT,@NOTES
239
	
240
	WHILE @@FETCH_STATUS = 0	
241
	BEGIN		
242
	
243
		DECLARE @l_IMPORTDT_ID VARCHAR(20)
244

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

    
357
	SET @p_TOTAL_ATM=(SELECT SUM(ISNULL(TOTAL_AMT,0)) FROM dbo.PL_IMPORT_DT WHERE IMPORT_ID=@p_IMPORT_ID)
358
	SELECT @p_TOTAL_QTY=(SELECT SUM(ISNULL(QTY,0)) FROM dbo.PL_IMPORT_DT WHERE IMPORT_ID=@p_IMPORT_ID)
359

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