Project

General

Profile

MW_OUT_INS.txt

Luc Tran Van, 11/17/2023 11:33 AM

 
1
ALTER PROCEDURE dbo.MW_OUT_Ins @p_TRN_Date VARCHAR(25) = NULL,
2
@p_TRN_TIME VARCHAR(50) = NULL,
3
@p_BRN_ID VARCHAR(15) = NULL, @p_DEPT_ID VARCHAR(15) = NULL,
4
@p_QTY DECIMAL(18, 2) = NULL, @p_PRICE NUMERIC(18, 0) = NULL,
5
@p_TOTAL_AMT NUMERIC(18, 2) = NULL, @p_NOTES NVARCHAR(1000),
6
@p_OUT_DESC NVARCHAR(500) = NULL,
7
@p_AUTH_STATUS VARCHAR(1) = NULL, @p_MAKER_ID VARCHAR(100) = NULL,
8
@p_CREATE_DT VARCHAR(25) = NULL, @p_CHECKER_ID VARCHAR(100) = NULL,
9
@p_APPROVE_DT VARCHAR(25) = NULL,
10
@p_KT_AUTH_STATUS VARCHAR(1) = NULL, @p_KT_MAKER_ID VARCHAR(100) = NULL,
11
@p_KT_CREATE_DT VARCHAR(25) = NULL, @p_KT_CHECKER_ID VARCHAR(100) = NULL,
12
@p_KT_APPROVE_DT VARCHAR(25) = NULL, @p_RECORD_STATUS VARCHAR(1) = NULL,
13
@p_XmlData XML = NULL, @p_CORE_NOTE NVARCHAR(500) = NULL,
14
@p_BRANCH_CREATE VARCHAR(15) = NULL, @p_WARE_HOUSE VARCHAR(15) = NULL,
15
@p_MW_REQ_ID VARCHAR(50) = NULL, @p_PROMOTION_ID VARCHAR(50) = NULL,
16
@p_WARE_ID VARCHAR(50) = NULL,
17
@p_STATUS VARCHAR(50) = NULL, @p_REQ_ACOUNT VARCHAR(5) = NULL, @p_REQ_USER VARCHAR(150) = NULL
18
AS
19
  DECLARE
20
  --DVSD
21
  --@OUT_DT_ID varchar(15),
22
  @p_OUT_CODE NVARCHAR(100) = NULL
23
 ,@OUT_ID VARCHAR(15) = NULL
24
 ,@MAST_BAL_ID VARCHAR(15) = NULL
25
 ,@CUST_NAME NVARCHAR(200) = NULL
26
 ,@QTY DECIMAL(18, 2) = NULL
27
 ,@QTY_OLD DECIMAL(18, 2) = NULL
28
 ,@QTY_REAL_OLD DECIMAL(18, 2) = NULL
29
 ,@PRICE NUMERIC(18, 0) = NULL
30
 ,@TOTAL_AMT NUMERIC(18, 2) = NULL
31
 ,@NOTES NVARCHAR(1000) = NULL
32
 ,@TO_BRN_ID VARCHAR(15) = NULL
33
 ,@TO_DEPT_ID VARCHAR(15) = NULL
34
 ,@EVENT_NAME NVARCHAR(1000) = NULL
35
 ,@IS_BCT VARCHAR(1) = 'N'
36
 ,-- LUCTV BO SUNG 05-04-2019 TEN SU KIEN TREN LUOI DS XUAT VAT LIEU
37
  @COST_ACC VARCHAR(50) = NULL
38
 ,@CUSTOMER_NAME NVARCHAR(100) = NULL
39
 ,@CUSTOMER_ID VARCHAR(100) = NULL
40
 ,@CUSTOMER_CCCD VARCHAR(100) = NULL
41
 ,@CUSTOMER_LOCATION NVARCHAR(1000) = NULL
42
 ,@UNIT_RECEIVE VARCHAR(50) = NULL
43
 ,@DEP_RECEIVE VARCHAR(50) = NULL
44
 ,@UNIT_CHARGE VARCHAR(50) = NULL
45
 ,@DEP_CHARGE VARCHAR(50) = NULL
46
 ,@UNIT_PAY VARCHAR(50) = NULL
47
  DECLARE @INDEX INT = 0
48
  DECLARE @PRICE_CODE VARCHAR(30)
49
  DECLARE @hdoc INT;
50
  DECLARE @QUANTITY_ALLOCATION DECIMAL(18, 2)
51
         ,@ALLOCATED DECIMAL(18, 2)
52
         ,@MATERIAL_ID VARCHAR(50);
53
  DECLARE @BRANCH_OUT VARCHAR(50)
54
         ,@UNIT_RECEIVE_TYPE VARCHAR(15)
55
         ,@UNIT_CHARGE_TYPE VARCHAR(15)
56
  EXEC sp_xml_preparedocument @hdoc OUTPUT
57
                             ,@p_XmlData;
58
  DECLARE XmlData CURSOR FOR SELECT
59
    *
60
  FROM OPENXML(@hdoc, '/Root/XmlData', 2)
61
  WITH (OUT_ID VARCHAR(15),
62
  MAST_BAL_ID VARCHAR(15),
63
  CUST_NAME NVARCHAR(200),
64
  QTY DECIMAL(18, 2),
65
  QTY_OLD DECIMAL(18, 2),
66
  QTY_REAL_OLD DECIMAL(18, 2),
67
  PRICE NUMERIC(18, 0),
68
  TOTAL_AMT NUMERIC(18, 2),
69
  NOTES NVARCHAR(1000),
70
  TO_BRN_ID VARCHAR(15),
71
  TO_DEPT_ID VARCHAR(15),
72
  EVENT_NAME NVARCHAR(1000),
73
  IS_BCT VARCHAR(1),
74
  COST_ACC VARCHAR(50),
75
  UNIT_RECEIVE VARCHAR(50),
76
  DEP_RECEIVE VARCHAR(50),
77
  UNIT_CHARGE VARCHAR(50),
78
  DEP_CHARGE VARCHAR(50),
79
  UNIT_PAY VARCHAR(50),
80
  CUSTOMER_NAME VARCHAR(100),
81
  CUSTOMER_ID VARCHAR(100),
82
  CUSTOMER_CCCD VARCHAR(100),
83
  CUSTOMER_LOCATION VARCHAR(1000))
84
  OPEN XmlData;
85

    
86
  BEGIN TRANSACTION;
87

    
88
  IF (@p_WARE_ID IS NULL
89
    OR @p_WARE_ID = '')
90
  BEGIN
91
    ROLLBACK TRANSACTION
92
    SELECT
93
      '-1' AS Result
94
     ,'' OUT_ID
95
     ,N'Loại kho đang để trống. Vui lòng chọn và thử lại' ErrorDesc
96
    RETURN '-1'
97
  END
98

    
99
  DECLARE @p_OUT_ID VARCHAR(15)
100
         ,@l_COST_ACC VARCHAR(50);
101
  EXEC [MW_OUT_CODE_Gen] @p_BRANCH_CREATE
102
                        ,@p_WARE_HOUSE
103
                        ,@p_OUT_CODE OUT;
104
  --IF()
105

    
106
  EXEC SYS_CodeMasters_Gen 'MW_OUT'
107
                          ,@p_OUT_ID OUT;
108
  IF @p_OUT_ID = '' OR @p_OUT_ID IS NULL GOTO ABORT;
109
  SET @p_STATUS = 'ADDNEW'
110
  INSERT INTO [dbo].[MW_OUT] ([OUT_ID],
111
                              [TRN_Date],
112
                              [TRN_TIME],
113
                              [BRN_ID],
114
                              [DEPT_ID],
115
                              [QTY],
116
                              [PRICE],
117
                              [TOTAL_AMT],
118
                              [NOTES],
119
                              [OUT_DESC],
120
                              [AUTH_STATUS],
121
                              [MAKER_ID],
122
                              [CREATE_DT],
123
                              [CHECKER_ID],
124
                              [APPROVE_DT],
125
                              [RECORD_STATUS],
126
                              [CORE_NOTE],
127
                              [BRANCH_CREATE],
128
                              [WARE_HOUSE],
129
                              [OUT_CODE],
130
                              MW_REQ_ID,
131
                              PROMOTION_ID,
132
                              WARE_ID,
133
                              STATUS,
134
                              REQ_ACOUNT
135
                              , IS_CANCEL, REQ_USER)
136
                        VALUES (
137
                              @p_OUT_ID
138
                             ,CONVERT(DATETIME, @p_TRN_Date, 103)
139
                             ,@p_TRN_TIME
140
                             ,@p_BRN_ID
141
                             ,@p_DEPT_ID
142
                             ,@p_QTY
143
                             ,@p_PRICE
144
                             ,@p_TOTAL_AMT
145
                             ,@p_NOTES
146
                             ,@p_OUT_DESC
147
                             ,'E'
148
                             ,@p_MAKER_ID
149
                             ,CONVERT(DATETIME, @p_CREATE_DT, 103)
150
                             ,NULL
151
                             ,NULL
152
                             ,'1'
153
                             ,@p_CORE_NOTE
154
                             ,@p_BRANCH_CREATE
155
                             ,@p_WARE_HOUSE
156
                             ,@p_OUT_CODE
157
                             ,@p_MW_REQ_ID
158
                             ,@p_PROMOTION_ID
159
                             ,@p_WARE_ID
160
                             ,@p_STATUS
161
                             ,@p_REQ_ACOUNT
162
                             ,'0',@p_REQ_USER)
163
  IF @@error <> 0
164
    GOTO ABORT;
165
  --Insert XmlData
166
  FETCH NEXT FROM XmlData
167
  INTO @OUT_ID, @MAST_BAL_ID, @CUST_NAME, @QTY, @QTY_OLD, @QTY_REAL_OLD, @PRICE, @TOTAL_AMT, @NOTES, @TO_BRN_ID, @TO_DEPT_ID, 
168
        @EVENT_NAME, @IS_BCT, @COST_ACC, @UNIT_RECEIVE, @DEP_RECEIVE, @UNIT_CHARGE, @DEP_CHARGE, @UNIT_PAY, @CUSTOMER_NAME, @CUSTOMER_ID, @CUSTOMER_CCCD, @CUSTOMER_LOCATION
169
  WHILE @@fetch_status = 0
170
  BEGIN
171
  SET @UNIT_RECEIVE_TYPE = (SELECT
172
                              CB.BRANCH_TYPE
173
                            FROM CM_BRANCH CB
174
                            WHERE CB.BRANCH_ID = @UNIT_RECEIVE)
175
  SET @UNIT_CHARGE_TYPE = (SELECT
176
                              CB.BRANCH_TYPE
177
                            FROM CM_BRANCH CB
178
                            WHERE CB.BRANCH_ID = @UNIT_CHARGE)
179
  IF @UNIT_RECEIVE_TYPE = 'HS' AND (@DEP_RECEIVE IS NULL OR @DEP_RECEIVE = '')
180
  BEGIN
181
    ROLLBACK TRANSACTION
182
    CLOSE XmlData;
183
    DEALLOCATE XmlData;
184
    SELECT      '-1' AS Result ,'' OUT_ID ,N'Dòng ' + CONVERT(VARCHAR(5), @INDEX) + N': Phòng ban nhận không được để trống.' ErrorDesc
185
    RETURN '-1'
186
  END
187
  IF @UNIT_CHARGE_TYPE = 'HS' AND (@DEP_CHARGE IS NULL OR @DEP_CHARGE = '')
188
  BEGIN
189
    ROLLBACK TRANSACTION
190
    CLOSE XmlData;
191
    DEALLOCATE XmlData;
192
    SELECT  '-1' AS Result ,'' OUT_ID ,N'Dòng ' + CONVERT(VARCHAR(5), @INDEX) + N': Phòng ban chịu chi phí không được để trống.' ErrorDesc
193
    RETURN '-1'
194
  END
195

    
196
  --Thuantm TẠO PHIẾU XUẤT KIỂM TRA SỐ LƯỢNG CẤP PHÁT PHIẾU YÊU CẦU NẾU số lượng xuất vượt quá số lượng cấp phát thì chặn.
197
  SELECT
198
    @MATERIAL_ID = MATERIAL_ID
199
  FROM MW_MAST_BAL mmb
200
  WHERE mmb.MAST_BAL_ID = @MAST_BAL_ID
201
  SELECT
202
    @QUANTITY_ALLOCATION = mrd.QUANTITY_ALLOCATION
203
   ,@ALLOCATED = mrd.ALLOCATED
204
  FROM MW_REQ_DT mrd
205
  WHERE mrd.REQ_CODE = @p_MW_REQ_ID
206
  AND mrd.MATERIAL_ID = @MATERIAL_ID
207

    
208
---- CHẶN SỐ LƯỢNG XUẤT LỚN HƠN PYC ----
209
DECLARE @CUR_QTY_PYC DECIMAL
210
IF(@p_MW_REQ_ID IS NOT NULL AND @p_MW_REQ_ID <> '')
211
BEGIN
212
	SELECT @CUR_QTY_PYC = MRD.QUANTITY_REQ FROM MW_REQ_DT MRD WHERE MRD.REQ_ID = @p_MW_REQ_ID AND MRD.BRANCH_USE = @UNIT_RECEIVE AND ISNULL(MRD.DEP_USE, '') = ISNULL(@DEP_RECEIVE, '') AND MRD.MATERIAL_ID = @MATERIAL_ID
213
    IF(@CUR_QTY_PYC < @QTY)
214
    BEGIN
215
        ROLLBACK TRANSACTION
216
        CLOSE XmlData;
217
        DEALLOCATE XmlData;
218
        SELECT  '-1' AS Result ,'' OUT_ID ,N'Dòng ' + CONVERT(VARCHAR(5), @INDEX) + N': Số lượng xuất lớn hơn số lượng được yêu cầu.' ErrorDesc
219
        RETURN '-1'
220
    END
221
END
222

    
223

    
224

    
225
  SET @INDEX = @INDEX + 1
226
  SET @PRICE_CODE = (SELECT
227
      PRICE_CODE
228
    FROM MW_MAST_PRICE
229
    WHERE PRICE_ID = (SELECT
230
        PRICE_ID
231
      FROM MW_MAST_BAL
232
      WHERE MAST_BAL_ID = @MAST_BAL_ID))
233

    
234
--  IF (@COST_ACC IS NULL OR @COST_ACC = '')
235
--  BEGIN
236
--    ROLLBACK TRANSACTION
237
--    CLOSE XmlData;
238
--    DEALLOCATE XmlData;
239
--    SELECT '1' AS Result, '' OUT_ID, N'Danh sách đơn vị/ khách hàng nhận, Dòng ' + CONVERT(VARCHAR(5), @INDEX) + N': Tài khoản chi phí không được để trống' ErrorDesc
240
--    RETURN '-1'
241
--  END
242

    
243
  DECLARE @p_OUT_DT_ID VARCHAR(15);
244
  EXEC SYS_CodeMasters_Gen 'MW_OUT_DT'
245
                          ,@p_OUT_DT_ID OUT;
246
  IF @p_OUT_DT_ID = '' OR @p_OUT_DT_ID IS NULL GOTO ABORT;
247
  INSERT INTO [dbo].[MW_OUT_DT] ([OUT_DT_ID], [OUT_ID], [MAST_BAL_ID], [CUST_NAME], [QTY], [QTY_OLD], [QTY_REAL_OLD], [PRICE], [TOTAL_AMT], [NOTES], 
248
            [TO_BRN_ID], [TO_DEPT_ID], [EVENT_NAME], [IS_BCT], [COST_ACC], UNIT_RECEIVE, DEP_RECEIVE, UNIT_CHARGE, DEP_CHARGE, UNIT_PAY, CUSTOMER_NAME, CUSTOMER_ID, CUSTOMER_CCCD, CUSTOMER_LOCATION)
249
    VALUES (
250
      @p_OUT_DT_ID
251
     ,@p_OUT_ID
252
     ,@MAST_BAL_ID
253
     ,@CUST_NAME
254
     ,@QTY
255
     ,(SELECT mmb.QTY_BALANCE FROM MW_MAST_BAL mmb WHERE mmb.MAST_BAL_ID = @MAST_BAL_ID)
256
     ,(SELECT mmb.QTY_REAL FROM MW_MAST_BAL mmb WHERE mmb.MAST_BAL_ID = @MAST_BAL_ID)
257
     ,@PRICE
258
     ,@TOTAL_AMT
259
     ,@NOTES
260
     ,@TO_BRN_ID
261
     ,@TO_DEPT_ID
262
     ,@EVENT_NAME
263
     ,@IS_BCT
264
     ,@COST_ACC
265
     ,@UNIT_RECEIVE
266
     ,@DEP_RECEIVE
267
     ,@UNIT_CHARGE
268
     ,@DEP_CHARGE
269
     ,@UNIT_PAY
270
     ,@CUSTOMER_NAME
271
     ,@CUSTOMER_ID
272
     ,@CUSTOMER_CCCD
273
     ,@CUSTOMER_LOCATION)
274

    
275
  IF @@error <> 0
276
    GOTO ABORT;
277
  FETCH NEXT FROM XmlData
278
  INTO @OUT_ID, @MAST_BAL_ID, @CUST_NAME, @QTY, @QTY_OLD, @QTY_REAL_OLD, @PRICE, @TOTAL_AMT, @NOTES, @TO_BRN_ID, @TO_DEPT_ID, @EVENT_NAME, @IS_BCT, @COST_ACC, 
279
        @UNIT_RECEIVE, @DEP_RECEIVE, @UNIT_CHARGE, @DEP_CHARGE, @UNIT_PAY, @CUSTOMER_NAME, @CUSTOMER_ID, @CUSTOMER_CCCD, @CUSTOMER_LOCATION
280
  END;
281
  CLOSE XmlData;
282
  DEALLOCATE XmlData;
283
  UPDATE MW_OUT
284
  SET TOTAL_AMT = (SELECT SUM(TOTAL_AMT) FROM MW_OUT_DT WHERE OUT_ID = @p_OUT_ID)
285
  WHERE OUT_ID = @p_OUT_ID
286

    
287
  INSERT INTO dbo.MW_PROCESS (REQ_ID,
288
  PROCESS_ID,
289
  CHECKER_ID,
290
  APPROVE_DT,
291
  PROCESS_DESC,
292
  NOTES)
293
    VALUES (@p_OUT_ID,        -- REQ_ID - varchar(15)
294
    'INSERT',        -- PROCESS_ID - varchar(10)
295
    @p_MAKER_ID,        -- CHECKER_ID - varchar(15)
296
    GETDATE(), -- APPROVE_DT - datetime
297
    N'Thêm mới phiếu xuất vật liệu thành công', N'Thêm mới phiếu xuất vật liệu'      -- PROCESS_DESC - nvarchar(1000)
298
    )
299

    
300
        ---- CHECK BƯỚC QUY TRÌNH
301
         INSERT INTO MW_REQUEST_PROCESS(REQ_ID,[PROCESS_ID],ROLE_USER,[STATUS],BRANCH_ID,PARENT_PROCESS_ID,DEP_ID, CHECKER_ID)
302
		 VALUES(@p_OUT_ID,'ADDNEW','NVTT','C',@p_BRN_ID,'',@p_DEPT_ID, @p_MAKER_ID)
303

    
304

    
305
  COMMIT TRANSACTION;
306
  SELECT
307
    '0' AS Result
308
   ,@p_OUT_ID OUT_ID
309
   ,'' ErrorDesc;
310
  RETURN '0';
311
ABORT:
312
  BEGIN
313
    CLOSE XmlData;
314
    DEALLOCATE XmlData;
315
    ROLLBACK TRANSACTION;
316
    SELECT
317
      '-1' AS Result
318
     ,'' OUT_ID
319
     ,'' ErrorDesc;
320
    RETURN '-1';
321
  END;
322
GO
323

    
324
ALTER PROCEDURE dbo.MW_OUT_Upd
325
    @p_OUT_ID VARCHAR(15) = NULL,
326
    @p_TRN_Date VARCHAR(25) = NULL,
327
    @p_TRN_TIME VARCHAR(50) = NULL,
328
    @p_BRN_ID VARCHAR(15) = NULL,
329
    @p_DEPT_ID VARCHAR(15) = NULL,
330
    @p_QTY DECIMAL(18,2) = NULL,
331
    @p_PRICE NUMERIC(18, 0) = NULL,
332
    @p_TOTAL_AMT NUMERIC(18, 2) = NULL,
333
    @p_NOTES NVARCHAR(1000),
334
    @p_OUT_DESC NVARCHAR(500) = NULL,
335
    @p_AUTH_STATUS VARCHAR(1) = NULL,
336
    @p_MAKER_ID VARCHAR(100) = NULL,
337
    @p_CREATE_DT VARCHAR(25) = NULL,
338
    @p_CHECKER_ID VARCHAR(100) = NULL,
339
    @p_APPROVE_DT VARCHAR(25) = NULL,
340
    @p_KT_AUTH_STATUS VARCHAR(1) = NULL,
341
    @p_KT_MAKER_ID VARCHAR(100) = NULL,
342
    @p_KT_CREATE_DT VARCHAR(25) = NULL,
343
    @p_KT_CHECKER_ID VARCHAR(100) = NULL,
344
    @p_KT_APPROVE_DT VARCHAR(25) = NULL,
345
    @p_RECORD_STATUS VARCHAR(1) = NULL,
346
    @p_XmlData XML = NULL,
347
	  @p_CORE_NOTE nvarchar(500) = NULL,
348
	  @p_WARE_HOUSE VARCHAR(15) = NULL,
349
    @p_MW_REQ_ID VARCHAR(50)=NULL, 
350
    @p_PROMOTION_ID VARCHAR(50) = NULL, 
351
    @p_WARE_ID VARCHAR(50)=NULL,@p_REQ_ACOUNT VARCHAR(5)=NULL, @p_REQ_USER VARCHAR(150) = NULL
352
AS
353
DECLARE
354
    --DVSD
355
    @OUT_ID VARCHAR(15) = NULL,
356
    @MAST_BAL_ID VARCHAR(15) = NULL,
357
    @CUST_NAME NVARCHAR(200) = NULL,
358
    @QTY DECIMAL(18,2) = NULL,
359
	  @QTY_OLD DECIMAL(18,2) = NULL,
360
    @QTY_REAL_OLD DECIMAL(18,2)=NULL, 
361
    @PRICE NUMERIC(18, 0) = NULL,
362
    @TOTAL_AMT NUMERIC(18, 2) = NULL,
363
    @NOTES NVARCHAR(1000) = NULL,
364
	  @TO_BRN_ID varchar(15) = NULL,
365
    @TO_DEPT_ID varchar(15) = NULL,
366
	  @EVENT_NAME NVARCHAR(1000) = NULL, --LUCTV BO SUNG 15-02-2019 TEN SU KIEN TREN LUOI DS XUAT VAT LIEU
367
	  @IS_BCT VARCHAR(1) = 'N',-- LUCTV BO SUNG 05-04-2019 TEN SU KIEN TREN LUOI DS XUAT VAT LIEU
368
	  @COST_ACC VARCHAR(50) = NULL,
369
    @UNIT_RECEIVE VARCHAR(50)= NULL,
370
    @DEP_RECEIVE VARCHAR(50)= NULL,
371
    @UNIT_CHARGE VARCHAR(50)= NULL,
372
    @DEP_CHARGE VARCHAR(50)= NULL,
373
    @UNIT_PAY VARCHAR(50)= NULL,
374
    @CUSTOMER_NAME NVARCHAR(100)= NULL,
375
    @CUSTOMER_ID VARCHAR(100)= NULL,
376
    @CUSTOMER_LOCATION NVARCHAR(1000)= NULL
377
DECLARE @INDEX INT =0
378
DECLARE @PRICE_CODE VARCHAR(30)
379
DECLARE @hdoc INT;
380
DECLARE @QUANTITY_ALLOCATION DECIMAL(18,2), @ALLOCATED DECIMAL(18,2), @MATERIAL_ID VARCHAR(50)
381
EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XmlData;
382
DECLARE XmlData CURSOR FOR
383
SELECT *
384
FROM
385
    OPENXML(@hdoc, '/Root/XmlData', 2)
386
    WITH
387
    (
388
        OUT_ID VARCHAR(15),
389
        MAST_BAL_ID VARCHAR(15),
390
        CUST_NAME NVARCHAR(200),
391
        QTY DECIMAL(18,2),
392
        QTY_OLD DECIMAL(18,2),
393
        QTY_REAL_OLD DECIMAL(18,2), 
394
        PRICE NUMERIC(18, 0),
395
        TOTAL_AMT NUMERIC(18, 2),
396
        NOTES NVARCHAR(1000),
397
		    TO_BRN_ID varchar(15),
398
		    TO_DEPT_ID varchar(15),
399
		    EVENT_NAME NVARCHAR(1000),
400
		    IS_BCT VARCHAR(1),-- LUCTV BO SUNG 05-04-2019 TEN SU KIEN TREN LUOI DS XUAT VAT LIEU
401
		    COST_ACC VARCHAR(50),
402
        UNIT_RECEIVE VARCHAR(50),
403
        DEP_RECEIVE VARCHAR(50),
404
        UNIT_CHARGE VARCHAR(50),
405
        DEP_CHARGE VARCHAR(50),
406
        UNIT_PAY VARCHAR(50),
407
        CUSTOMER_NAME VARCHAR(100),
408
        CUSTOMER_ID VARCHAR(100),
409
        CUSTOMER_LOCATION VARCHAR(1000)
410
    );
411
OPEN XmlData;
412
BEGIN TRANSACTION;
413

    
414
    IF(@p_WARE_ID IS NULL OR @p_WARE_ID = '')
415
		BEGIN
416
			ROLLBACK TRANSACTION
417
			SELECT '-1' as Result, '' OUT_ID, N'Loại kho đang để trống. Vui lòng chọn và thử lại' ErrorDesc
418
			RETURN '-1'
419
		END	
420

    
421
IF(EXISTS(SELECT * FROM MW_OUT mo WHERE OUT_ID = @p_OUT_ID AND mo.STATUS = 'REQ_ACOUNT'))
422
BEGIN
423
	UPDATE MW_OUT SET REQ_ACOUNT=@p_REQ_ACOUNT WHERE OUT_ID = @p_OUT_ID
424
    
425
      DECLARE @CUR_PROCESS VARCHAR(20) = (SELECT TOP 1 MRP.PROCESS_ID FROM MW_REQUEST_PROCESS MRP WHERE MRP.REQ_ID = @p_OUT_ID AND MRP.STATUS = 'C')
426
--      UPDATE MW_REQUEST_PROCESS SET STATUS = 'P' WHERE REQ_ID = @p_OUT_ID AND STATUS = 'C'
427
--      INSERT INTO MW_REQUEST_PROCESS(REQ_ID,[PROCESS_ID],PROCESS_NAME,[STATUS],ROLE_USER,BRANCH_ID,PARENT_PROCESS_ID,DEP_ID, PROCESS_TYPE,RECEPTION_DT,NOTES)
428
--      VALUES(@p_OUT_ID,'OUT_KT',N'Giao dịch viên xử lý','C','GDV',@p_BRN_ID,@CUR_PROCESS,@p_DEPT_ID, 'Approve',GETDATE(), N'Trưởng đơn vị phê duyệt')
429
      
430
END
431
ELSE
432
BEGIN
433
--    IF (SELECT mo.AUTH_STATUS FROM MW_OUT mo WHERE OUT_ID = @p_OUT_ID) = 'R'
434
--    BEGIN
435
--    	SET @p_AUTH_STATUS = 'E'
436
--    END ELSE 
437
    SET @p_AUTH_STATUS = 'E'
438

    
439
	UPDATE [dbo].[MW_OUT]
440
  SET 
441
    [QTY] = @p_QTY,
442
	  AUTH_STATUS=@p_AUTH_STATUS,
443
    [PRICE] = @p_PRICE,
444
    [TOTAL_AMT] = @p_TOTAL_AMT,
445
    [NOTES] = @p_NOTES,
446
	  MAKER_ID=@p_MAKER_ID,
447
	  [CORE_NOTE] = @p_CORE_NOTE,
448
	  WARE_HOUSE=  @p_WARE_HOUSE,DEPT_ID = @p_DEPT_ID,REQ_ACOUNT = @p_REQ_ACOUNT,
449
    MW_REQ_ID =  @p_MW_REQ_ID, PROMOTION_ID = @p_PROMOTION_ID, WARE_ID = @p_WARE_ID, REQ_USER = @p_REQ_USER
450
WHERE [OUT_ID] = @p_OUT_ID;
451
IF @@Error <> 0
452
    GOTO ABORT;
453
--Insert XmlData
454
DECLARE @l_COST_ACC VARCHAR(50);
455
DELETE FROM MW_OUT_DT WHERE OUT_ID = @p_OUT_ID;
456
FETCH NEXT FROM XmlData
457
INTO @OUT_ID, @MAST_BAL_ID, @CUST_NAME, @QTY, @QTY_OLD,@QTY_REAL_OLD,@PRICE,@TOTAL_AMT, @NOTES,@TO_BRN_ID, @TO_DEPT_ID, @EVENT_NAME,@IS_BCT, @COST_ACC,@UNIT_RECEIVE,@DEP_RECEIVE,@UNIT_CHARGE,@DEP_CHARGE,@UNIT_PAY,@CUSTOMER_NAME,@CUSTOMER_ID,@CUSTOMER_LOCATION
458
WHILE @@FETCH_STATUS = 0
459
BEGIN
460
  --Thuantm TẠO PHIẾU XUẤT KIỂM TRA SỐ LƯỢNG CẤP PHÁT PHIẾU YÊU CẦU NẾU số lượng xuất vượt quá số lượng cấp phát thì chặn.
461
    SELECT @MATERIAL_ID=MATERIAL_ID FROM MW_MAST_BAL mmb WHERE mmb.MAST_BAL_ID = @MAST_BAL_ID
462
    SELECT @QUANTITY_ALLOCATION=mrd.QUANTITY_ALLOCATION, @ALLOCATED=mrd.ALLOCATED FROM MW_REQ_DT mrd WHERE mrd.REQ_CODE = @p_MW_REQ_ID AND mrd.MATERIAL_ID = @MATERIAL_ID
463

    
464

    
465
	SET @INDEX = @INDEX +1
466
	SET @PRICE_CODE =(SELECT PRICE_CODE FROM MW_MAST_PRICE WHERE PRICE_ID =(SELECT PRICE_ID FROM MW_MAST_BAL WHERE MAST_BAL_ID=@MAST_BAL_ID))
467

    
468
	SET @l_COST_ACC = (SELECT TOP 1 COST_ACC = CASE WHEN MT.GROUP_ID = 'MWG000000016073' and LEN(@COST_ACC) > 0 then @COST_ACC
469
														WHEN @COST_ACC = null then MT.EXP_ACCTNO
470
														WHEN @COST_ACC = '' then MT.EXP_ACCTNO
471
														ELSE MT.EXP_ACCTNO
472
														END 
473
						FROM dbo.MW_MAST_BAL A
474
						LEFT JOIN MW_MATERIAL MT ON A.MATERIAL_ID = MT.MATERIAL_ID
475
						WHERE A.MAST_BAL_ID = @MAST_BAL_ID)
476

    
477
---- CHẶN SỐ LƯỢNG XUẤT LỚN HƠN PYC ----
478
DECLARE @CUR_QTY_PYC DECIMAL
479
IF(@p_MW_REQ_ID IS NOT NULL AND @p_MW_REQ_ID <> '')
480
BEGIN
481
	SELECT @CUR_QTY_PYC = MRD.QUANTITY_REQ FROM MW_REQ_DT MRD WHERE MRD.REQ_ID = @p_MW_REQ_ID AND MRD.BRANCH_USE = @UNIT_RECEIVE AND ISNULL(MRD.DEP_USE, '') = ISNULL(@DEP_RECEIVE, '') AND MRD.MATERIAL_ID = @MATERIAL_ID
482
    IF(@CUR_QTY_PYC < @QTY)
483
    BEGIN
484
        ROLLBACK TRANSACTION
485
        CLOSE XmlData;
486
        DEALLOCATE XmlData;
487
        SELECT  '-1' AS Result ,'' OUT_ID ,N'Dòng ' + CONVERT(VARCHAR(5), @INDEX) + N': Số lượng xuất lớn hơn số lượng được yêu cầu.' ErrorDesc
488
        RETURN '-1'
489
    END
490
END
491

    
492
--	IF(@COST_ACC IS NULL OR @COST_ACC = '')
493
--		BEGIN
494
--			ROLLBACK TRANSACTION
495
--			CLOSE XmlData;
496
--			DEALLOCATE XmlData;
497
--			SELECT '-1' as Result, '' OUT_ID, N'Danh sách đơn vị/ khách hàng nhận, Dòng ' + CONVERT(VARCHAR(5),@INDEX)+N': Tài khoản chi phí không được để trống' ErrorDesc
498
--			RETURN '-1'
499
--		END
500

    
501
    DECLARE @p_OUT_DT_ID VARCHAR(15);
502
    EXEC SYS_CodeMasters_Gen 'MW_OUT_DT', @p_OUT_DT_ID OUT;
503
    IF @p_OUT_DT_ID = ''
504
       OR @p_OUT_DT_ID IS NULL
505
        GOTO ABORT;
506
    INSERT INTO [dbo].[MW_OUT_DT]
507
    (
508
        [OUT_DT_ID],
509
        [OUT_ID],
510
        [MAST_BAL_ID],
511
        [CUST_NAME],
512
        [QTY],
513
		    [QTY_OLD],
514
        QTY_REAL_OLD,
515
        [PRICE],
516
        [TOTAL_AMT],
517
        [NOTES],
518
		    [TO_BRN_ID],
519
		    [TO_DEPT_ID],[EVENT_NAME],[IS_BCT],[COST_ACC],UNIT_RECEIVE,DEP_RECEIVE,UNIT_CHARGE,DEP_CHARGE,UNIT_PAY,CUSTOMER_NAME,CUSTOMER_ID,CUSTOMER_LOCATION
520
    )
521
    SELECT @p_OUT_DT_ID,
522
           @p_OUT_ID,
523
           @MAST_BAL_ID,
524
           @CUST_NAME,
525
           @QTY,
526
		       (SELECT mmb.QTY_BALANCE FROM MW_MAST_BAL mmb WHERE mmb.MAST_BAL_ID = @MAST_BAL_ID),
527
           (SELECT mmb.QTY_REAL FROM MW_MAST_BAL mmb WHERE mmb.MAST_BAL_ID = @MAST_BAL_ID),
528
           @PRICE,
529
           @TOTAL_AMT,
530
           @NOTES,
531
		       @TO_BRN_ID,
532
		       @TO_DEPT_ID,@EVENT_NAME,@IS_BCT,@COST_ACC,@UNIT_RECEIVE,@DEP_RECEIVE,@UNIT_CHARGE,@DEP_CHARGE,@UNIT_PAY,@CUSTOMER_NAME,@CUSTOMER_ID,@CUSTOMER_LOCATION
533

    
534
    IF @@Error <> 0
535
        GOTO ABORT;
536
    FETCH NEXT FROM XmlData
537
    INTO @OUT_ID,
538
         @MAST_BAL_ID,
539
         @CUST_NAME,
540
         @QTY,
541
		     @QTY_OLD,
542
         @QTY_REAL_OLD,
543
         @PRICE,
544
         @TOTAL_AMT,
545
         @NOTES,
546
		     @TO_BRN_ID,
547
		     @TO_DEPT_ID,@EVENT_NAME,@IS_BCT,@COST_ACC,@UNIT_RECEIVE,@DEP_RECEIVE,@UNIT_CHARGE,@DEP_CHARGE,@UNIT_PAY,@CUSTOMER_NAME,@CUSTOMER_ID,@CUSTOMER_LOCATION
548
END;
549
CLOSE XmlData;
550
DEALLOCATE XmlData;
551

    
552
		-- doanptt 07/06/2022: XÓA CÁC PROCESS UPDATE CŨ
553
		--DELETE dbo.MW_PROCESS WHERE REQ_ID = @OUT_ID AND PROCESS_ID = 'UPDATE_HC'
554
		INSERT INTO dbo.MW_PROCESS
555
		(
556
			REQ_ID,
557
			PROCESS_ID,
558
			CHECKER_ID,
559
			APPROVE_DT,
560
			PROCESS_DESC,NOTES
561
		)
562
		VALUES
563
		(   @OUT_ID,        -- REQ_ID - varchar(15)
564
			'UPD_HC',        -- PROCESS_ID - varchar(10)
565
			@p_MAKER_ID,        -- CHECKER_ID - varchar(15)
566
			GETDATE(), -- APPROVE_DT - datetime
567
			N'Cập nhật phiếu xuất vật liệu thành công' ,
568
			N'Cập nhật phiếu xuất vật liệu'      -- PROCESS_DESC - nvarchar(1000)
569
		)
570
        ---- CHECK BƯỚC QUY TRÌNH
571
--         INSERT INTO MW_REQUEST_PROCESS(REQ_ID,[PROCESS_ID],[STATUS],BRANCH_ID,PARENT_PROCESS_ID,DEP_ID, CHECKER_ID)
572
--		 VALUES(@p_OUT_ID,'ADDNEW','C',@p_BRN_ID,'',@p_DEPT_ID, @p_MAKER_ID)
573

    
574
---
575
UPDATE MW_OUT
576
SET TOTAL_AMT = (SELECT SUM(TOTAL_AMT) FROM MW_OUT_DT WHERE OUT_ID =@p_OUT_ID)
577
END
578

    
579
COMMIT TRANSACTION;
580
SELECT '0' AS Result,@p_OUT_ID OUT_ID,'' ErrorDesc;
581
RETURN '0';
582
ABORT:
583
BEGIN
584
    CLOSE XmlData;
585
    DEALLOCATE XmlData;
586
    ROLLBACK TRANSACTION;
587
    SELECT '-1' AS Result,'' OUT_ID,'' ErrorDesc;
588
    RETURN '-1';
589
END;