Project

General

Profile

Feature #3301 » PFILOUPDATEMDSTOCKINFO_20250214.sql

Tri Rizqiaty, 02/14/2025 10:15 AM

 
1
??ALTER PROCEDURE [dbo].[PFILOUPDATEMDSTOCKINFO]
2

3
(
4

5
	@MaterialID VARCHAR(20)
6

7
	,@Quantity DECIMAL(22,2)
8

9
	,@TotalPrice DECIMAL(20,2)
10

11
	,@DocType VARCHAR(20)
12

13
	,@UserID VARCHAR(20)
14

15
	,@CompanyID VARCHAR(20)
16

17
	,@LogisticArea VARCHAR(20)
18

19
	,@Warehouse VARCHAR(20)
20

21
	,@Storage VARCHAR(20)
22

23
	,@Bin VARCHAR(20)
24

25
	,@ReceiverLogisticArea VARCHAR(20)
26

27
	,@ReceiverWarehouse VARCHAR(20) 
28

29
	,@ReceiverStorage VARCHAR(20)
30

31
	,@ReceiverBin VARCHAR(20)
32

33
	,@DocIDRef VARCHAR(20)
34

35
	,@DocTypeRef VARCHAR(20)
36

37
	,@TransTypeRef VARCHAR(20)
38

39
	,@ItemFlow VARCHAR(50)
40

41
	,@StockStatus VARCHAR(20)
42

43
	,@DocStatus VARCHAR(20)
44

45
)
46

47
AS
48

49

50

51
--DECLARE @MaterialID VARCHAR(20) = '00000030'
52

53
--DECLARE @Quantity DECIMAL(22,2) = 2
54

55
--DECLARE @TotalPrice DECIMAL(20,2) = '0'
56

57
--DECLARE @DocType VARCHAR(20) = 'GICU'
58

59
--DECLARE @UserID VARCHAR(20) = 'tri'
60

61
--DECLARE @CompanyID VARCHAR(20) = ''
62

63
--DECLARE @LogisticArea VARCHAR(20) = ''
64

65
--DECLARE @Warehouse VARCHAR(20) = '0002'
66

67
--DECLARE @Storage VARCHAR(20) = ''
68

69
--DECLARE @Bin VARCHAR(20) = ''
70

71
--DECLARE @ReceiverLogisticArea VARCHAR(20) = ''
72

73
--DECLARE @ReceiverWarehouse VARCHAR(20) = ''
74

75
--DECLARE @ReceiverStorage VARCHAR(20) = ''
76

77
--DECLARE @ReceiverBin VARCHAR(20) = ''
78

79
--DECLARE @DocIDRef VARCHAR(20) = '00000199'
80

81
--DECLARE @DocTypeRef VARCHAR(20) = 'SORD'
82

83
--DECLARE @TransTypeRef VARCHAR(20) = 'SLS'
84

85
--DECLARE @ItemFlow VARCHAR(50) = ''--'ISSU' --ISSU --RCPT
86

87
--DECLARE @StockStatus VARCHAR(20) = ''
88

89
--DECLARE @DocStatus VARCHAR(20) = '3' -- 1:Draft , 2:In Process, 3:Done, 4:Cancel
90

91

92

93
DECLARE @now VARCHAR(20) = dbo.fn_formatdatetime(GETDATE(), 'yyyymmdd')
94

95
DECLARE @now16 VARCHAR(20) = dbo.fn_formatdatetime(GETDATE(), 'yyyymmddhhnnss')
96

97

98

99
DECLARE @IsSuccess VARCHAR(250)
100

101

102

103
IF(@StockStatus = '')
104

105
BEGIN SET @StockStatus = '0001' END
106

107

108

109
IF(@Quantity < 0)
110

111
BEGIN SET @Quantity = @Quantity * -1 END
112

113

114

115
DECLARE @TblMAT4 TABLE
116

117
(
118

119
	[MaterialID] [VARCHAR](10) NOT NULL,
120

121
	[SeqID] [BIGINT] NOT NULL,
122

123
	[CompanyID] [VARCHAR](4) NOT NULL,
124

125
	[LogisticAreaID] [VARCHAR](10) NOT NULL,
126

127
	[Warehouse] [VARCHAR](20) NOT NULL,
128

129
	[Storage] [VARCHAR](10) NOT NULL,
130

131
	[Bin] [VARCHAR](10) NOT NULL,
132

133
	[StockStatus] [VARCHAR](10) NOT NULL,
134

135
	[GLValuationID] [VARCHAR](20) NULL,
136

137
	[Qty] DECIMAL(22,2) NULL,
138

139
	[TotalValuation] [DECIMAL](18, 2) NULL,
140

141
	[Sequence] [INT] NULL,
142

143
	[SerialNumber] [VARCHAR](50) NULL,
144

145
	[CreateBy] [VARCHAR](18) NULL,
146

147
	[CreateDate] [VARCHAR](14) NULL,
148

149
	[ChangeBy] [VARCHAR](18) NULL,
150

151
	[ChangeDate] [VARCHAR](14) NULL,
152

153
	[SORDID] [VARCHAR](18) NULL,
154

155
	[PRODID] [VARCHAR](18) NULL,
156

157
	[INTRID] [VARCHAR](18) NULL,
158

159
	[POID] [VARCHAR](18) NULL,
160

161
	[StockType] [VARCHAR](10) NULL,
162

163
	[DocIDRef] [VARCHAR](10) NULL,
164

165
	[DocTypeRef] [VARCHAR](10) NULL,
166

167
	[TransTypeRef] [VARCHAR](10) NULL
168

169
)
170

171
INSERT INTO @TblMAT4
172

173
SELECT [MaterialID]
174

175
      ,[SeqID]
176

177
      ,[CompanyID]
178

179
      ,[LogisticAreaID]
180

181
      ,[Warehouse]
182

183
      ,[Storage]
184

185
      ,[Bin]
186

187
      ,[StockStatus]
188

189
      ,[GLValuationID]
190

191
      ,[Qty]
192

193
      ,[TotalValuation]
194

195
      ,[Sequence]
196

197
      ,[SerialNumber]
198

199
      ,[CreateBy]
200

201
      ,[CreateDate]
202

203
      ,[ChangeBy]
204

205
      ,[ChangeDate]
206

207
      ,[SORDID]
208

209
      ,[PRODID]
210

211
      ,[INTRID]
212

213
      ,[POID]
214

215
      ,[StockType]
216

217
      ,[DocIDRef]
218

219
      ,[DocTypeRef]
220

221
      ,[TransTypeRef]
222

223
FROM dbo.PMDMAT0004
224

225
WHERE MaterialID = @MaterialID
226

227

228

229
DECLARE @MAP_MAT1 DECIMAL(22,2) = 0 
230

231
DECLARE @NewTotalValuation DECIMAL(22,2)
232

233
DECLARE @CekItemNotDoneAloc VARCHAR(20)
234

235
DECLARE @CekItemNotDone VARCHAR(20)
236

237
DECLARE @SisaQty DECIMAL(22,2) = @Quantity
238

239

240

241
IF(@DocType = 'GICU' AND (@DocStatus = '3' OR @DocStatus = '2') )
242

243
BEGIN
244

245
	SELECT @MAP_MAT1 = MAP FROM dbo.PMDMAT0001 WHERE MaterialID = @MaterialID
246

247

248

249
	IF(@DocIDRef <> '' AND @DocTypeRef <> '' AND @TransTypeRef <>'')		---- // jika doc ref dr sales order
250

251
	BEGIN
252

253

254

255
		DECLARE @SumMat4Aloc DECIMAL(22,2) = 0
256

257
		SELECT @SumMat4Aloc = SUM(Qty)	FROM @TblMAT4 
258

259
		WHERE MaterialID = @MaterialID AND DocIDRef = @DocIDRef AND DocTypeRef = @DocTypeRef AND TransTypeRef = @TransTypeRef AND Warehouse = @Warehouse --AND StockStatus = @StockStatus
260

261

262

263
		IF(@Quantity > @SumMat4Aloc)
264

265
		BEGIN
266

267
			SET @IsSuccess = 'OVERQTY'
268

269
		END
270

271
		ELSE
272

273
		BEGIN 
274

275

276

277
			DECLARE @QtyAlocateMAT4 DECIMAL(22,2) = 0
278

279
			DECLARE @c_materialidA VARCHAR(20)
280

281
			DECLARE @c_seqA VARCHAR(20)
282

283
			DECLARE @c_qtyA VARCHAR(20)
284

285
			DECLARE cur_mat4A CURSOR FOR (SELECT MaterialID, SeqID, Qty FROM @TblMAT4 WHERE MaterialID = @MaterialID
286

287
										AND DocIDRef = @DocIDRef AND DocTypeRef = @DocTypeRef AND TransTypeRef = @TransTypeRef AND Warehouse = @Warehouse) --AND StockStatus = @StockStatus )
288

289
			OPEN cur_mat4A
290

291
			FETCH cur_mat4A INTO @c_materialidA, @c_seqA, @c_qtyA
292

293
			WHILE @@Fetch_Status = 0
294

295
			BEGIN
296

297
			
298

299
				SET @QtyAlocateMAT4 = @c_qtyA
300

301
				
302

303
				IF(@SisaQty = 0)
304

305
				BEGIN
306

307
					BREAK
308

309
				END
310

311
				ELSE IF(@QtyAlocateMAT4 > @SisaQty)				----// case good issue sebagian(partial)
312

313
				BEGIN
314

315
					DECLARE @SisaQtyAlocateMAT4 DECIMAL(22,2) = 0
316

317
					SET @SisaQtyAlocateMAT4 = @QtyAlocateMAT4 - @SisaQty
318

319

320

321
					UPDATE dbo.PMDMAT0004					----// update quantity mat4
322

323
					SET Qty = @SisaQtyAlocateMAT4
324

325
						,TotalValuation = @SisaQtyAlocateMAT4 * @MAP_MAT1
326

327
						,ChangeBy = @UserID
328

329
						,ChangeDate = @now16
330

331
					--SELECT 'update qty mat4', @SisaQtyAlocateMAT4, * FROM dbo.PMDMAT0004
332

333
					WHERE MaterialID = @MaterialID
334

335
						AND DocIDRef = @DocIDRef 
336

337
						AND DocTypeRef = @DocTypeRef 
338

339
						AND TransTypeRef = @TransTypeRef
340

341
						AND Warehouse = @Warehouse 
342

343
						AND SeqID = @c_seqA
344

345
				
346

347
					DECLARE @MaxDocItemID DECIMAL(22,0)
348

349
					SELECT @MaxDocItemID = MAX(DocItemID)
350

351
					FROM dbo.PTRALLOCATION WITH(NOLOCK)
352

353
					WHERE DocNo = @DocIDRef
354

355

356

357
					UPDATE dbo.PTRALLOCATION					----// update quantity ptraloc
358

359
					SET StockAllocation = @SisaQtyAlocateMAT4
360

361
						,ChangeBy = @UserID
362

363
						,ChangeDate = @now16
364

365
					--SELECT  'udpate stock ptraloc', @SisaQtyAlocateMAT4, * FROM dbo.PTRALLOCATION WITH(NOLOCK)
366

367
					WHERE DocNo = @DocIDRef
368

369
						AND MaterialID = @MaterialID
370

371
						AND WareHouse = @Warehouse
372

373
						AND ItemStatus = '1'
374

375
						AND StockAllocation = @c_qtyA
376

377

378

379
					INSERT INTO PTRALLOCATION
380

381
					SELECT DISTINCT	[DocNo] 
382

383
					--SELECT DISTINCT 'add ptraloc', DocNo
384

385
						,CONVERT(VARCHAR(20),@MaxDocItemID + 1) AS [DocItemID]
386

387
						,@SisaQty AS StockAllocation
388

389
						,[WareHouse]
390

391
						,[Storage]
392

393
						,[Bin]
394

395
						,[TransferOrderRef]
396

397
						,[TransferOrderItem]
398

399
						,[PurchaseOrderRef]
400

401
						,[PurchaseOrderItem]
402

403
						,[ProductionOrderRef]
404

405
						,[ProductionOrderItem]
406

407
						,@UserID
408

409
						,@now16
410

411
						,@UserID
412

413
						,@now16
414

415
						,[MaterialID]
416

417
						,[StockType]
418

419
						,[MAP]
420

421
						,'2' AS ItemStatus				----// 2 = Done
422

423
						,[ItemType]
424

425
						,IsAllocated
426

427
					FROM dbo.PTRALLOCATION
428

429
					WHERE MaterialID = @MaterialID
430

431
						AND DocNo = @DocIDRef 
432

433
						AND Warehouse = @Warehouse 
434

435
						AND ItemStatus = '1'
436

437

438

439
					SET @IsSuccess = 'Y' 
440

441

442

443
					BREAK
444

445
				END
446

447
				ELSE IF(@SisaQty >= @QtyAlocateMAT4)
448

449
				BEGIN
450

451
					SET @SisaQtyAlocateMAT4 = 0
452

453
					SET @SisaQty = @SisaQty - @QtyAlocateMAT4
454

455

456

457
					DELETE FROM dbo.PMDMAT0004						--// delete mat4
458

459
					--SELECT 'delete mat4',* FROM dbo.PMDMAT0004 
460

461
					WHERE MaterialID = @MaterialID AND SeqID = @c_seqA
462

463

464

465
					UPDATE dbo.PTRALLOCATION						--// update ptraloc
466

467
					SET ItemStatus = '2'
468

469
						,ChangeBy = @UserID
470

471
						,ChangeDate = @now16
472

473
					--SELECT'update items status ptraloc jd 2', * FROM dbo.PTRALLOCATION
474

475
					WHERE MaterialID = @c_materialidA
476

477
						AND DocNo = @DocIDRef 
478

479
						AND Warehouse = @Warehouse
480

481
						AND ItemStatus = '1'
482

483
						AND StockAllocation = @c_qtyA	
484

485

486

487
					SET @IsSuccess = 'Y'
488

489
				END
490

491
				FETCH cur_mat4A INTO @c_materialidA, @c_seqA, @c_qtyA 
492

493
			END
494

495
			CLOSE cur_mat4A
496

497
			DEALLOCATE cur_mat4A
498

499

500

501
			SELECT @CekItemNotDoneALoc = COUNT(ItemStatus)
502

503
			FROM dbo.PTRALLOCATION 
504

505
			WHERE DocNo = @DocIDRef AND (ItemStatus = '0' OR ItemStatus = '1') AND MaterialID = @MaterialID
506

507
			
508

509
			IF(@CekItemNotDoneALoc = 0)
510

511
			BEGIN
512

513
				UPDATE dbo.PTRSALESITEMS
514

515
				SET ItemStatus = '2'
516

517
				WHERE DocNo = @DocIDRef AND Material = @MaterialID
518

519
			END
520

521
			ELSE
522

523
			BEGIN
524

525
				UPDATE dbo.PTRSALESITEMS
526

527
				SET ItemStatus = '1'
528

529
				WHERE DocNo = @DocIDRef AND Material = @MaterialID
530

531
			END
532

533

534

535
			SELECT @CekItemNotDone = COUNT(ItemStatus)
536

537
			FROM dbo.PTRALLOCATION 
538

539
			WHERE DocNo = @DocIDRef AND (ItemStatus = '0' OR ItemStatus = '1')
540

541

542

543
			IF(@CekItemNotDone = 0)
544

545
			BEGIN
546

547
				UPDATE dbo.PTRSALESHEADER
548

549
				SET ProcessStatus = 'C'
550

551
				WHERE DocNo = @DocIDRef 
552

553
			END
554

555

556

557

558

559
		END
560

561
	END
562

563
	ELSE
564

565
	BEGIN
566

567
		DECLARE @SumQtyMAT4 DECIMAL(22,2)
568

569
		SELECT @SumQtyMAT4 =  SUM(CONVERT(DECIMAL(22,2),Qty)) FROM @TblMAT4 
570

571
		WHERE (CompanyID = @CompanyID OR @CompanyID = '')
572

573
			AND (LogisticAreaID = @LogisticArea OR @LogisticArea = '')
574

575
			AND (Warehouse = @Warehouse OR @Warehouse = '')
576

577
			AND (Storage = @Storage OR @Storage = '')
578

579
			AND StockStatus = @StockStatus
580

581

582

583
		IF(@Quantity <= @SumQtyMAT4)
584

585
		BEGIN
586

587
			DECLARE @SisaQuantity DECIMAL(22,2) = @Quantity
588

589
			DECLARE @c_materialid VARCHAR(20)
590

591
			DECLARE @c_seq VARCHAR(20)
592

593
			DECLARE @c_qty VARCHAR(20)
594

595
			DECLARE cur_mat4 CURSOR FOR (SELECT MaterialID, SeqID, Qty FROM @TblMAT4 WHERE (CompanyID = @CompanyID OR @CompanyID = '') 
596

597
										AND (LogisticAreaID = @LogisticArea OR @LogisticArea = '') AND (Warehouse = @Warehouse OR @Warehouse = '')	
598

599
										AND (Storage = @Storage OR @Storage = '') AND (Storage = @Bin OR @Bin = '') AND StockStatus = @StockStatus)
600

601
			OPEN cur_mat4
602

603
			FETCH cur_mat4 INTO @c_materialid, @c_seq, @c_qty
604

605
			WHILE @@Fetch_Status = 0
606

607
			BEGIN
608

609
				IF(@SisaQuantity <= 0)
610

611
				BREAK
612

613

614

615
				DECLARE @SisaQtyMat4 DECIMAL(22,2)
616

617
				IF(@SisaQuantity > @c_qty)
618

619
				BEGIN 
620

621
					SET @SisaQtyMat4 = 0
622

623
					SET @SisaQuantity = @SisaQuantity - @c_qty
624

625
				END
626

627
				ELSE IF(@SisaQuantity < @c_qty)
628

629
				BEGIN  
630

631
					SET @SisaQtyMat4 = @c_qty - @SisaQuantity
632

633
					SET @SisaQuantity = @SisaQuantity - @c_qty	 
634

635
				END
636

637
				ELSE IF(@SisaQuantity = @c_qty)
638

639
				BEGIN 
640

641
					SET @SisaQtyMat4 = 0
642

643
					SET @SisaQuantity = @SisaQuantity - @c_qty
644

645
				END
646

647

648

649
				SET @NewTotalValuation = @MAP_MAT1 * @SisaQtyMat4
650

651
				UPDATE dbo.PMDMAT0004
652

653
				SET Qty = @SisaQtyMat4
654

655
					,TotalValuation = @NewTotalValuation
656

657
					,ChangeBy = @UserID
658

659
					,ChangeDate = @now16
660

661
				--SELECT * FROM dbo.PMDMAT0004
662

663
				WHERE MaterialID = @c_materialid
664

665
					AND SeqID = @c_seq
666

667

668

669
			FETCH cur_mat4 INTO @c_materialid, @c_seq, @c_qty 
670

671
			END
672

673
			CLOSE cur_mat4
674

675
			DEALLOCATE cur_mat4
676

677

678

679
			SET @IsSuccess = 'Y'
680

681
		END
682

683
		ELSE 
684

685
		BEGIN
686

687
			SET @IsSuccess = 'OVERQTY'
688

689
		END
690

691
	END
692

693
END
694

695

696

697

698

699
IF(@DocType = 'RCSP' AND (@DocStatus = '3' OR @DocStatus = '2') )
700

701
BEGIN
702

703
	DECLARE @IsMat4Exist VARCHAR(20) = ISNULL((SELECT COUNT(*) FROM @TblMAT4),0)
704

705
	SELECT @MAP_MAT1 = MAP FROM dbo.PMDMAT0001 WHERE MaterialID = @MaterialID
706

707

708

709
	DECLARE @TotalValuationAllMAT4 DECIMAL(22,2)
710

711
	DECLARE @TotalQtyAllMAT4 DECIMAL(22,2)
712

713
	DECLARE @TotalValuationAll DECIMAL(22,2)
714

715
	DECLARE @TotalQtyAll DECIMAL(22,2)
716

717
	DECLARE @NewMAP DECIMAL(22,2)
718

719

720

721
	IF(@IsMat4Exist <= 0)
722

723
	BEGIN
724

725
		INSERT INTO PMDMAT0004
726

727
		SELECT @MaterialID
728

729
			  ,'1'
730

731
			  ,@CompanyID
732

733
			  ,@LogisticArea
734

735
			  ,@Warehouse
736

737
			  ,@Storage
738

739
			  ,@Bin
740

741
			  ,@StockStatus --0001
742

743
			  ,''
744

745
			  ,@Quantity
746

747
			  ,@Quantity * @MAP_MAT1 AS TotalValuation
748

749
			  ,'1' AS [Sequence]
750

751
			  ,'' AS [SerialNumber]
752

753
			  ,@UserID
754

755
			  ,@now16
756

757
			  ,@UserID
758

759
			  ,@now16
760

761
			  ,'' AS [SORDID]
762

763
			  ,'' AS [PRODID]
764

765
			  ,'' AS [INTRID]
766

767
			  ,'' AS [POID]
768

769
			  ,'1' AS [StockType]
770

771
			  ,'' AS [DocIDRef]
772

773
			  ,'' AS [DocTypeRef]
774

775
			  ,'' AS [TransTypeRef]
776

777
		SET @IsSuccess = 'Y'
778

779
	END
780

781
	ELSE
782

783
	BEGIN
784

785
		DECLARE @MaxSeqMat4Detail VARCHAR(20) = (SELECT MAX(SeqID) FROM @TblMAT4)
786

787

788

789
		DECLARE @IsMat4ExistDetail VARCHAR(20) 
790

791
		SELECT @IsMat4ExistDetail = COUNT(MaterialID)
792

793
		FROM @TblMAT4
794

795
		WHERE (CompanyID = @CompanyID OR @CompanyID = '')
796

797
			AND (LogisticAreaID = @LogisticArea OR @LogisticArea = '')
798

799
			AND (Warehouse = @Warehouse OR @Warehouse = '')
800

801
			AND (Storage = @Storage OR @Storage = '')
802

803
			AND (Storage = @Bin OR @Bin = '')
804

805
			AND (StockStatus = @StockStatus)
806

807

808

809
		DECLARE @PricePurSatuan DECIMAL(22,2) = 0
810

811
		SELECT @PricePurSatuan = (CONVERT(DECIMAL(22,2),TotAmount) / CONVERT(DECIMAL(22,0),MaterialQuantity))
812

813
		FROM dbo.PTRPURCHITEM
814

815
		WHERE DocNo = @DocIDRef
816

817
			AND Material = @MaterialID
818

819

820

821
		SET @TotalValuationAllMAT4 = (SELECT SUM(CONVERT(DECIMAL(22,2),TotalValuation)) FROM @TblMAT4)
822

823
		SET @TotalQtyAllMAT4 = (SELECT SUM(CONVERT(DECIMAL(22,2),Qty)) FROM @TblMAT4)
824

825
		SET @TotalValuationAll = @TotalValuationAllMAT4 + (@PricePurSatuan * @Quantity) --@TotalPrice
826

827
		SET @TotalQtyAll = @TotalQtyAllMAT4 + @Quantity
828

829
		SET @NewMAP = @TotalValuationAll / @TotalQtyAll
830

831
		SET @NewTotalValuation = @NewMAP * @Quantity
832

833

834

835
		IF(@IsMat4ExistDetail <= 0)
836

837
		BEGIN
838

839
			INSERT INTO PMDMAT0004
840

841
			SELECT @MaterialID
842

843
				  ,@MaxSeqMat4Detail + 1
844

845
				  ,@CompanyID
846

847
				  ,@LogisticArea
848

849
				  ,@Warehouse
850

851
				  ,@Storage
852

853
				  ,@Bin
854

855
				  ,@StockStatus--'0001'
856

857
				  ,''
858

859
				  ,@Quantity
860

861
				  ,@NewTotalValuation AS TotalValuation
862

863
				  ,'1' AS [Sequence]
864

865
				  ,'' AS [SerialNumber]
866

867
				  ,@UserID
868

869
				  ,@now16
870

871
				  ,@UserID
872

873
				  ,@now16
874

875
				  ,'' AS [SORDID]
876

877
				  ,'' AS [PRODID]
878

879
				  ,'' AS [INTRID]
880

881
				  ,'' AS [POID]
882

883
				  ,'1' AS [StockType]
884

885
				  ,'' AS [DocIDRef]
886

887
				  ,'' AS [DocTypeRef]
888

889
				  ,'' AS [TransTypeRef]
890

891
			
892

893
			UPDATE dbo.PMDMAT0001
894

895
			SET MAP = @NewMAP
896

897
				,ChangeBy = @UserID
898

899
				,ChangeDate = @now16
900

901
			FROM dbo.PMDMAT0001
902

903
			WHERE MaterialID = @MaterialID
904

905

906

907
			SET @IsSuccess = 'Y'
908

909
		END
910

911
		ELSE
912

913
		BEGIN
914

915
			SET @TotalValuationAllMAT4 = (SELECT SUM(CONVERT(DECIMAL(22,2),TotalValuation)) FROM @TblMAT4)
916

917
			SET @TotalQtyAllMAT4 = (SELECT SUM(CONVERT(DECIMAL(22,2),Qty)) FROM @TblMAT4)
918

919
			SET @TotalValuationAll = @TotalValuationAllMAT4 + @TotalPrice
920

921
			SET @TotalQtyAll = @TotalQtyAllMAT4 + @Quantity
922

923
			SET @NewMAP = @TotalValuationAll / @TotalQtyAll
924

925
			
926

927
			DECLARE @MinSeqMat4 VARCHAR(20)
928

929
			SELECT @MinSeqMat4 = MIN(SeqID)
930

931
			FROM @TblMAT4
932

933
			WHERE (CompanyID = @CompanyID OR @CompanyID = '')
934

935
				AND (LogisticAreaID = @LogisticArea OR @LogisticArea = '')
936

937
				AND (Warehouse = @Warehouse OR @Warehouse = '')
938

939
				AND (Storage = @Storage OR @Storage = '')
940

941
				AND (Storage = @Bin OR @Bin = '')
942

943
				AND (StockStatus = @StockStatus)
944

945
			
946

947
			DECLARE @NewQty DECIMAL(22,2)
948

949
			SELECT @NewQty = CONVERT(DECIMAL(22,2),Qty) + @Quantity
950

951
				,@NewTotalValuation = (CONVERT(DECIMAL(22,2),Qty) + @Quantity) * @NewMAP
952

953
			FROM @TblMAT4
954

955
			WHERE (CompanyID = @CompanyID OR @CompanyID = '')
956

957
				AND (LogisticAreaID = @LogisticArea OR @LogisticArea = '')
958

959
				AND (Warehouse = @Warehouse OR @Warehouse = '')
960

961
				AND (Storage = @Storage OR @Storage = '')
962

963
				AND (Storage = @Bin OR @Bin = '')
964

965
				AND (SeqID = @MinSeqMat4)
966

967

968

969
			IF(@DocIDRef <> '' AND @DocTypeRef = 'PO' AND @TransTypeRef <> '')
970

971
			BEGIN
972

973
				DECLARE @QtyPurchaseReal DECIMAL(22,1) = 0
974

975
				SELECT @QtyPurchaseReal = PurchaseRealization
976

977
				FROM dbo.PTRPURCHREALIZATION
978

979
				WHERE DocNo = @DocIDRef
980

981
					AND MaterialID = @MaterialID 
982

983
					AND ItemStatus = '1'
984

985
				--SELECT @Quantity, @QtyPurchaseReal
986

987
				IF(@Quantity < @QtyPurchaseReal)
988

989
				BEGIN
990

991
					UPDATE dbo.PMDMAT0004
992

993
					SET Qty = @NewQty
994

995
						,TotalValuation = @NewTotalValuation
996

997
						,ChangeBy = @UserID
998

999
						,ChangeDate = @now16
1000

1001
					WHERE (CompanyID = @CompanyID OR @CompanyID = '')
1002

1003
						AND (MaterialID = @MaterialID)
1004

1005
						AND (LogisticAreaID = @LogisticArea OR @LogisticArea = '')
1006

1007
						AND (Warehouse = @Warehouse OR @Warehouse = '')
1008

1009
						AND (Storage = @Storage OR @Storage = '')
1010

1011
						AND (Storage = @Bin OR @Bin = '')
1012

1013
						AND (SeqID = @MinSeqMat4)
1014

1015

1016

1017
					UPDATE dbo.PMDMAT0001
1018

1019
					SET MAP = @NewMAP
1020

1021
						,ChangeBy = @UserID
1022

1023
						,ChangeDate = @now16
1024

1025
					FROM dbo.PMDMAT0001
1026

1027
					WHERE MaterialID = @MaterialID
1028

1029

1030

1031
					UPDATE dbo.PMDMAT0004
1032

1033
					SET TotalValuation = (CONVERT(DECIMAL(22,2),Qty) * @NewMAP)
1034

1035
						,ChangeBy = @UserID
1036

1037
						,ChangeDate = @now16
1038

1039
					WHERE (MaterialID = @MaterialID)
1040

1041
						AND (SeqID <> @MinSeqMat4)	
1042

1043

1044

1045
					DECLARE @MaxSeqPurReal DECIMAL(22,2) = 0
1046

1047
					SELECT @MaxSeqPurReal = MAX(DocItemID)
1048

1049
					FROM dbo.PTRPURCHREALIZATION
1050

1051
					WHERE DocNo = @DocIDRef
1052

1053
					
1054

1055
					INSERT INTO PTRPURCHREALIZATION
1056

1057
					SELECT @DocIDRef AS [DocNo]
1058

1059
						  ,@MaxSeqPurReal + 1 AS [DocItemID]
1060

1061
						  ,[ItemType]
1062

1063
						  ,[MaterialID]
1064

1065
						  ,@Quantity
1066

1067
						  ,[MaterialUnit]
1068

1069
						  ,@CompanyID
1070

1071
						  ,@LogisticArea
1072

1073
						  ,@Warehouse
1074

1075
						  ,@Storage
1076

1077
						  ,@Bin
1078

1079
						  ,'2' AS ItemStatus
1080

1081
						  ,@Quantity * @PricePurSatuan AS TotAmount
1082

1083
						  ,[StockType]
1084

1085
						  ,@UserID
1086

1087
						  ,@now16
1088

1089
						  ,@UserID
1090

1091
						  ,@now16
1092

1093
					FROM dbo.PTRPURCHREALIZATION 
1094

1095
					WHERE DocNo = @DocIDRef 
1096

1097
						AND MaterialID = @MaterialID
1098

1099
						AND ItemStatus = '1'
1100

1101

1102

1103
					UPDATE dbo.PTRPURCHREALIZATION
1104

1105
					SET PurchaseRealization = (PurchaseRealization - @Quantity)
1106

1107
						,TotAmount = (PurchaseRealization - @Quantity) * @PricePurSatuan
1108

1109
						,ChangeBy = @UserID
1110

1111
						,ChangeDate = @now16
1112

1113
					WHERE DocNo = @DocIDRef 
1114

1115
						AND MaterialID = @MaterialID
1116

1117
						AND ItemStatus = '1'
1118

1119

1120

1121
					UPDATE dbo.PTRPURCHITEM 
1122

1123
					SET ItemStatus = '1'
1124

1125
						,ChangeBy = @UserID
1126

1127
						,ChangeDate = @now16
1128

1129
					WHERE DocNo = @DocIDRef
1130

1131
						AND Material = @MaterialID
1132

1133

1134

1135
					SET @IsSuccess = 'Y'
1136

1137
				END
1138

1139
				ELSE IF(@Quantity = @QtyPurchaseReal)
1140

1141
				BEGIN
1142

1143
					UPDATE dbo.PMDMAT0004
1144

1145
					SET Qty = @NewQty
1146

1147
						,TotalValuation = @NewTotalValuation
1148

1149
						,ChangeBy = @UserID
1150

1151
						,ChangeDate = @now16
1152

1153
					WHERE (CompanyID = @CompanyID OR @CompanyID = '')
1154

1155
						AND (MaterialID = @MaterialID)
1156

1157
						AND (LogisticAreaID = @LogisticArea OR @LogisticArea = '')
1158

1159
						AND (Warehouse = @Warehouse OR @Warehouse = '')
1160

1161
						AND (Storage = @Storage OR @Storage = '')
1162

1163
						AND (Storage = @Bin OR @Bin = '')
1164

1165
						AND (SeqID = @MinSeqMat4)
1166

1167

1168

1169
					UPDATE dbo.PMDMAT0001
1170

1171
					SET MAP = @NewMAP
1172

1173
						,ChangeBy = @UserID
1174

1175
						,ChangeDate = @now16
1176

1177
					FROM dbo.PMDMAT0001
1178

1179
					WHERE MaterialID = @MaterialID
1180

1181

1182

1183
					UPDATE dbo.PMDMAT0004
1184

1185
					SET TotalValuation = (CONVERT(DECIMAL(22,2),Qty) * @NewMAP)
1186

1187
						,ChangeBy = @UserID
1188

1189
						,ChangeDate = @now16
1190

1191
					WHERE (MaterialID = @MaterialID)
1192

1193
						AND (SeqID <> @MinSeqMat4)	
1194

1195

1196

1197
					UPDATE dbo.PTRPURCHREALIZATION
1198

1199
					SET ItemStatus = '2'
1200

1201
						,Warehouse = @Warehouse
1202

1203
						,LogisticAreaID = @LogisticArea
1204

1205
						,Storage = @Storage
1206

1207
						,Bin = @Bin
1208

1209
						,ChangeBy = @UserID
1210

1211
						,ChangeDate = @now16
1212

1213
					WHERE DocNo = @DocIDRef 
1214

1215
						AND MaterialID = @MaterialID
1216

1217
						AND ItemStatus = '1'
1218

1219

1220

1221
					UPDATE dbo.PTRPURCHITEM 
1222

1223
					SET ItemStatus = '2'
1224

1225
						,ChangeBy = @UserID
1226

1227
						,ChangeDate = @now16
1228

1229
					WHERE DocNo = @DocIDRef
1230

1231
						AND Material = @MaterialID
1232

1233

1234

1235
					SET @IsSuccess = 'Y'
1236

1237
				END
1238

1239
				ELSE 
1240

1241
				BEGIN
1242

1243
					SET @IsSuccess = 'OVERQTY'
1244

1245
				END
1246

1247

1248

1249
				SELECT @CekItemNotDone = COUNT(ItemStatus)
1250

1251
				FROM dbo.PTRPURCHITEM 
1252

1253
				WHERE DocNo = @DocIDRef AND (ItemStatus = '0' OR ItemStatus = '1')
1254

1255

1256

1257
				IF(@CekItemNotDone = 0)
1258

1259
				BEGIN
1260

1261
					UPDATE dbo.PTRPURCHHEAD
1262

1263
					SET ProcessStatus = 'C'
1264

1265
					WHERE DocNo = @DocIDRef 
1266

1267
				END
1268

1269
			END
1270

1271
			IF(@DocIDRef <> ''AND @TransTypeRef = 'PRD')
1272

1273
			BEGIN
1274

1275
				UPDATE dbo.PMDMAT0004
1276

1277
				SET Qty = @NewQty
1278

1279
					,TotalValuation = @NewTotalValuation
1280

1281
					,ChangeBy = @UserID
1282

1283
					,ChangeDate = @now16
1284

1285
				WHERE (CompanyID = @CompanyID OR @CompanyID = '')
1286

1287
					AND (MaterialID = @MaterialID)
1288

1289
					AND (LogisticAreaID = @LogisticArea OR @LogisticArea = '')
1290

1291
					AND (Warehouse = @Warehouse OR @Warehouse = '')
1292

1293
					AND (Storage = @Storage OR @Storage = '')
1294

1295
					AND (Bin = @Bin OR @Bin = '')
1296

1297
					AND (SeqID = @MinSeqMat4)
1298

1299

1300

1301
				UPDATE dbo.PMDMAT0001
1302

1303
				SET MAP = @NewMAP
1304

1305
					,ChangeBy = @UserID
1306

1307
					,ChangeDate = @now16
1308

1309
				FROM dbo.PMDMAT0001
1310

1311
				WHERE MaterialID = @MaterialID
1312

1313

1314

1315
				UPDATE dbo.PMDMAT0004
1316

1317
				SET TotalValuation = (CONVERT(DECIMAL(22,2),Qty) * @NewMAP)
1318

1319
					,ChangeBy = @UserID
1320

1321
					,ChangeDate = @now16
1322

1323
				WHERE (MaterialID = @MaterialID)
1324

1325
					AND (SeqID <> @MinSeqMat4)
1326

1327

1328

1329
				UPDATE PMDMATWIP
1330

1331
				SET StockStatus = '0005'
1332

1333
					,ChangeBy = @UserID
1334

1335
					,ChangeDate = @now16
1336

1337
				--SELECT * FROM PMDMATWIP
1338

1339
				WHERE ProdID = @DocIDRef
1340

1341
					AND MaterialID = @MaterialID
1342

1343
				
1344

1345
				DECLARE @SPK VARCHAR(20)
1346

1347
				SELECT @SPK = SpkID
1348

1349
				FROM PMDMATWIP
1350

1351
				WHERE ProdID = @DocIDRef
1352

1353
					AND MaterialID = @MaterialID
1354

1355

1356

1357
				UPDATE PMDMATWIP
1358

1359
				SET DocStatus = '4'
1360

1361
					,StockStatus = '0005'
1362

1363
					,ChangeBy = @UserID
1364

1365
					,ChangeDate = @now16
1366

1367
				--SELECT * FROM PMDMATWIP
1368

1369
				WHERE ProdID = @SPK
1370

1371
					AND MaterialID = @MaterialID 
1372

1373

1374

1375
				UPDATE PTRPRODUCTIONITEM
1376

1377
				SET Status = '2'
1378

1379
					,ChangeBy = @UserID
1380

1381
					,ChangeDate = @now16
1382

1383
				--SELECT * FROM PTRPRODUCTIONITEM
1384

1385
				WHERE DocNo = @DocIDRef
1386

1387
					AND FlowType = 'RCPT'
1388

1389
				
1390

1391
				UPDATE PTRPRODUCTIONHEAD
1392

1393
				SET DocStatus = '4'
1394

1395
					,ProcessStatus = 'C'
1396

1397
					,ChangeBy = @UserID
1398

1399
					,ChangeDate = @now16
1400

1401
				--SELECT * FROM PTRPRODUCTIONHEAD
1402

1403
				WHERE DocNo = @SPK
1404

1405

1406

1407
				UPDATE PTRPRODUCTIONITEM
1408

1409
				SET Status = '2'
1410

1411
					,ChangeBy = @UserID
1412

1413
					,ChangeDate = @now16
1414

1415
				--SELECT * FROM PTRPRODUCTIONITEM
1416

1417
				WHERE DocNo = @SPK
1418

1419
					AND FlowType = 'RCPT'
1420

1421

1422

1423
				SET @IsSuccess = 'Y'
1424

1425
			END
1426

1427
			ELSE
1428

1429
			BEGIN
1430

1431
				UPDATE dbo.PMDMAT0004
1432

1433
				SET Qty = @NewQty
1434

1435
					,TotalValuation = @NewTotalValuation
1436

1437
					,ChangeBy = @UserID
1438

1439
					,ChangeDate = @now16
1440

1441
				WHERE (CompanyID = @CompanyID OR @CompanyID = '')
1442

1443
					AND (MaterialID = @MaterialID)
1444

1445
					AND (LogisticAreaID = @LogisticArea OR @LogisticArea = '')
1446

1447
					AND (Warehouse = @Warehouse OR @Warehouse = '')
1448

1449
					AND (Storage = @Storage OR @Storage = '')
1450

1451
					AND (Storage = @Bin OR @Bin = '')
1452

1453
					AND (SeqID = @MinSeqMat4)
1454

1455

1456

1457
				UPDATE dbo.PMDMAT0001
1458

1459
				SET MAP = @NewMAP
1460

1461
					,ChangeBy = @UserID
1462

1463
					,ChangeDate = @now16
1464

1465
				FROM dbo.PMDMAT0001
1466

1467
				WHERE MaterialID = @MaterialID
1468

1469

1470

1471
				UPDATE dbo.PMDMAT0004
1472

1473
				SET TotalValuation = (CONVERT(DECIMAL(22,2),Qty) * @NewMAP)
1474

1475
					,ChangeBy = @UserID
1476

1477
					,ChangeDate = @now16
1478

1479
				WHERE (MaterialID = @MaterialID)
1480

1481
					AND (SeqID <> @MinSeqMat4)
1482

1483

1484

1485
				SET @IsSuccess = 'Y'
1486

1487
			END
1488

1489
		END
1490

1491
	END
1492

1493
END
1494

1495

1496

1497
--IF(@DocType = 'MTPR')
1498

1499
--BEGIN
1500

1501
--	IF(@ItemFlow = 'ISSU')
1502

1503
--	BEGIN
1504

1505
--		IF(ISNULL(@ExistStock,0) < @Quantity)
1506

1507
--		BEGIN 
1508

1509
--			SET @IsSuccess = 'OVERQTY' 
1510

1511
--		END
1512

1513
--		ELSE
1514

1515
--		BEGIN
1516

1517
--			SET @NewStock = @ExistStock - @Quantity
1518

1519
--			SET @NewEachMAP = @ExistTotalMAP / @ExistStock  ---- menggunakan MAP sebelumnya
1520

1521
--			SET @NewTotalMAP = @NewEachMAP * @NewStock
1522

1523
--			--SELECT @NewStock, @NewEachMAP, @NewTotalMAP
1524

1525
--			IF (@IsExist > 0)
1526

1527
--			BEGIN
1528

1529
--				SET @IsSuccess = 'Y'
1530

1531
--				IF(@DocIDRef <> '' AND @DocTypeRef <> '' AND @TransTypeRef <> '')
1532

1533
--				BEGIN
1534

1535
--					DELETE FROM PMDMAT0004
1536

1537
--					--SELECT * FROM PMDMAT0004
1538

1539
--					WHERE MaterialID = @MaterialID
1540

1541
--						AND DocIDRef = @DocIDRef 
1542

1543
--						AND DocTypeRef = @DocTypeRef 
1544

1545
--						AND TransTypeRef = @TransTypeRef
1546

1547
--				END
1548

1549
--				ELSE
1550

1551
--				BEGIN
1552

1553
--					UPDATE dbo.PMDMAT0004
1554

1555
--					SET Qty = CONVERT(VARCHAR(4), ISNULL(@NewStock,0))
1556

1557
--						,TotalValuation = ISNULL(@NewTotalMAP,0)
1558

1559
--						,ChangeBy = @UserID
1560

1561
--						,ChangeDate = @now16
1562

1563
--					WHERE MaterialID = @MaterialID AND StockStatus = '0001' AND (CompanyID = @CompanyID OR @CompanyID = '')
1564

1565
--						AND (Warehouse = @Warehouse OR @Warehouse = '') AND (Storage = @Storage OR @Storage = '') AND (Bin = @Bin OR @Bin = '')
1566

1567
--						AND SeqID = @MinSeqMatExist
1568

1569
--				END
1570

1571
--			END
1572

1573
--		END
1574

1575
--	END
1576

1577
--	ELSE IF(@ItemFlow = 'RCPT')
1578

1579
--	BEGIN
1580

1581
--		SET @NewStock = @ExistStock + @Quantity
1582

1583
--		SET @NewEachMAP = @TotalPrice / @Quantity
1584

1585
--		SET @NewTotalMAP = @NewEachMAP * @NewStock
1586

1587

1588

1589
--		IF (@IsExist > 0)
1590

1591
--		BEGIN
1592

1593

1594

1595
--			SET @IsSuccess = 'Y'
1596

1597
--			UPDATE dbo.PMDMAT0004
1598

1599
--			SET Qty = @NewStock
1600

1601
--				,TotalValuation = @NewTotalMAP
1602

1603
--				,ChangeBy = @UserID
1604

1605
--				,ChangeDate = @now16
1606

1607
--			WHERE MaterialID = @MaterialID AND StockStatus = '0001' AND (CompanyID = @CompanyID OR @CompanyID = '')
1608

1609
--				AND (Warehouse = @Warehouse OR @Warehouse = '') AND (Storage = @Storage OR @Storage = '') AND (Bin = @Bin OR @Bin = '')
1610

1611
--				AND SeqID = @MinSeqMatExist
1612

1613
--		END
1614

1615
--		ELSE IF (@IsExist = 0)
1616

1617
--		BEGIN
1618

1619
--			SET @IsSuccess = 'Y'	
1620

1621
--			INSERT INTO dbo.PMDMAT0004
1622

1623
--			SELECT DISTINCT @MaterialID	
1624

1625
--							,@MaxSeqMatExist + 1
1626

1627
--							,@CompanyID
1628

1629
--							,@LogisticArea
1630

1631
--							,@Warehouse
1632

1633
--							,@Storage
1634

1635
--							,@Bin
1636

1637
--							,'0001'
1638

1639
--							,'1' AS StockType
1640

1641
--							,'122324'
1642

1643
--							,CONVERT(VARCHAR(4),@Quantity)
1644

1645
--							,CONVERT(DECIMAL(18,2),@TotalPrice)
1646

1647
--							,1
1648

1649
--							,'113124'
1650

1651
--							,@UserID AS CreateBy
1652

1653
--							,@now16 AS CreateDate
1654

1655
--							,@UserID AS ChangeBy
1656

1657
--							,@now16 AS ChangeDate
1658

1659
--							,'' AS SORDID 
1660

1661
--							,'' AS PRODID
1662

1663
--							,'' AS INTRID
1664

1665
--							,'' AS POID 
1666

1667
--							,'' AS DocIDREf
1668

1669
--							,'' AS DocTypeRef
1670

1671
--							,'' AS TransTypeRef
1672

1673
--		END
1674

1675
--	END
1676

1677
--END
1678

1679

1680

1681
SELECT @IsSuccess AS IsSuccess
1682

1683

1684

1685
DELETE FROM @TblMAT4
1686

1687

1688

1689

1690

1691

1692

1693

1694

1695

1696

1697

1698

1699

(2-2/3)