dbo.MG_MS_ITEM_EDIT

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

Name Data Type Length Description
@PARAMETER xml -1

SQL Script

SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
CREATE procedure dbo.MG_MS_ITEM_EDIT
@PARAMETER xml='' 
---XencX---with encryption
as

SET TRANSACTION ISOLATION LEVEL  READ UNCOMMITTED

declare @pemisah varchar(255)
declare @pemisah_replace varchar(255)
set @pemisah_replace='<br />'
--set @pemisah=CHAR(13) + CHAR(10) + '
'

set @pemisah = '
'


declare @resultX varchar(max)
declare @resultX2 varchar(max)

declare @XmlSts xml
declare @raw xml
declare @xStsnoheader varchar(2),
  @xStsno varchar(2),
  @xStsdes varchar(max)
   
set @xStsnoheader='07'
set @xStsno='00';
set @xStsdes='sukses'
 
BEGIN TRY
SET NOCOUNT ON
DECLARE @NOW datetime
set @NOW =GETDATE()
  
DECLARE 
@data_by varchar(50)
,@ms_item_id bigint
,@ms_type_id int
,@ms_item_custom_no varchar(50)
,@base_no varchar(50)
,@part_no varchar(50)
,@part_name varchar(255)
,@rack_no varchar(255)
,@uom varchar(3)
,@consumable bit 
,@qty_minimum decimal(38,4)
,@end_qty nchar(10)
,@end_price_usd decimal(38,5)
,@service_level decimal(18,4)
 

SELECT 
 @data_by=left(ltrim(rtrim(isnull(tempTable.item.value('data_by[1]', 'varchar(100)'),''))),50)
,@ms_item_id=isnull(tempTable.item.value('ms_item_id[1]', 'bigint'),-1)
,@ms_type_id=isnull(tempTable.item.value('ms_type_id[1]', 'int'),-1)
,@ms_item_custom_no=left(ltrim(rtrim(isnull(tempTable.item.value('ms_item_custom_no[1]', 'varchar(100)'),''))),50)
,@base_no=left(ltrim(rtrim(isnull(tempTable.item.value('base_no[1]', 'varchar(100)'),''))),50)
,@part_no=left(ltrim(rtrim(isnull(tempTable.item.value('part_no[1]', 'varchar(100)'),''))),50)
,@part_name=left(ltrim(rtrim(isnull(tempTable.item.value('part_name[1]', 'varchar(305)'),''))),255)
,@rack_no=left(ltrim(rtrim(isnull(tempTable.item.value('rack_no[1]', 'varchar(305)'),''))),255)
,@uom=left(ltrim(rtrim(isnull(tempTable.item.value('uom[1]', 'varchar(53)'),''))),3)
,@consumable=isnull(tempTable.item.value('consumable[1]', 'bit'),0)
,@qty_minimum=dbo.StrToDec4(isnull( tempTable.item.value('qty_minimum[1]', 'varchar(255)'),'0'))
,@end_qty=dbo.StrToDec4(isnull( tempTable.item.value('end_qty[1]', 'varchar(255)'),'0'))
,@end_price_usd=dbo.StrToDec10(isnull( tempTable.item.value('end_price[1]', 'varchar(255)'),'0'))
,@service_level=dbo.StrToDec4(isnull( tempTable.item.value('service_level[1]', 'decimal(38,4)'),'80'))
FROM @PARAMETER.nodes('param/field')  tempTable(item)

 
declare @old_ms_item_id bigint
       ,@old_ms_item_h_price_id bigint
       ,@old_sta_qty decimal(38,5)
       ,@old_sta_price_usd  decimal(38,5)

SELECT        TOP (1)@old_ms_item_id= ms_item_id
FROM            dt_ms_item
WHERE        (ms_item_id = @ms_item_id) 

SELECT        TOP (1)  
  @old_sta_qty=end_qty
, @old_sta_price_usd=end_price_usd
, @old_ms_item_h_price_id=ms_item_h_price_id
FROM            dt_ms_item_list_price
WHERE        (ms_item_id = @ms_item_id) and ms_cost_final_avg_id=0
--select * FROM dt_ms_item_list_price
--WHERE (ms_item_id = @ms_item_id) and ms_cost_final_avg_id=0
if @old_ms_item_id is null
begin
 set @xStsno='02';
 set @xStsdes='Gagal, Item tidak di temukan' ;
goto f
end

if @part_no=''
begin
 set @xStsno='02';
 set @xStsdes='Gagal, Part No tidak boleh kosong' ;
goto f
end

if @part_name=''
begin
 set @xStsno='02';
 set @xStsdes='Gagal, Part Name tidak boleh kosong' ;
goto f
end


if @ms_item_custom_no=''
begin
 set @xStsno='02';
 set @xStsdes='Gagal, Part Custom tidak boleh kosong' ;
goto f
end 

if (SELECT        COUNT(*) AS Expr1
FROM            dt_ms_item_custom
WHERE        (ms_item_custom_no = @ms_item_custom_no))=0
begin
 set @xStsno='02';
 set @xStsdes='Gagal, Part Custom ' + @ms_item_custom_no +' tidak terdaftar, gunakan part custom yang terdaftar dalam data part custom' ;
goto f
end
  

if not(@base_no='') and ( SELECT        COUNT(*) AS Expr1
FROM            dt_ms_item_base
WHERE        (ms_item_base_no = @base_no))=0 
begin 
 set @xStsno='02';
 set @xStsdes='Gagal, Base Part No ' + @base_no +' tidak terdaftar ' ;
goto f
end 
 

if @uom=''
begin
 set @xStsno='02';
 set @xStsdes='Gagal, Satuan tidak boleh kosong' ;
goto f
end 
if (SELECT        COUNT(*) AS Expr1
FROM            tblSatuan 
WHERE        (KdEdi  = @uom))=0
begin
 set @xStsno='02';
 set @xStsdes='Gagal, Kode Satuan' + @ms_item_custom_no +' tidak terdaftar, gunakan Kode satuan yang terdaftar';
goto f
end

--- CHECK APAKAH SUDAH ADA POSTING FINAL AVG
declare @count_posting_avg int= (SELECT        COUNT(*) AS Expr1
FROM            vw_ms_item_final_avg
WHERE        (NOT (ms_cost_final_avg_status_id = - 1)) AND (NOT (ms_cost_final_avg_id = 0))
) 
--select @end_price_usd,@old_sta_price_usd
if @count_posting_avg>0
begin 
 if not(@end_qty=@old_sta_qty)
 begin
  set @xStsno='02';
  set @xStsdes='Gagal, Apabila Ada POSTING FINAL AVG maka nilai Quantity Awal tidak bisa di rubah';
 goto f
 end 
 if not(@end_price_usd=@old_sta_price_usd)
 begin
  set @xStsno='02';
  set @xStsdes='Gagal, Apabila Ada POSTING FINAL AVG maka nilai Price Awal tidak bisa di rubah';
 goto f
 end 
end

declare @check_ms_item_id bigint
,@check_ms_type_id int
,@check_ms_type_name varchar(255)
,@check_part_no varchar(255)
,@check_part_name varchar(255)

SELECT TOP (1)       
  @check_ms_item_id=dt_ms_item.ms_item_id
, @check_ms_type_id=dt_ms_item.ms_type_id
, @check_ms_type_name=enum_ms_type.ms_type_name
, @check_part_no=dt_ms_item.part_no
, @check_part_name=dt_ms_item.part_name
FROM            dt_ms_item INNER JOIN
                         enum_ms_type ON dt_ms_item.ms_type_id = enum_ms_type.ms_type_id
WHERE (dt_ms_item.ms_item_id <>@ms_item_id )  and       (dt_ms_item.part_no = @part_no)
 
if @check_ms_item_id is not null
begin
 set @xStsno='02';
 set @xStsdes='Gagal, Part no ' + @part_no +' sudah ada dalam data barang '+ @check_ms_type_name +' dengan part name '+ @check_part_name +', gunakan part no lainnya' ;
goto f
end

 
--- CHECK APAKAH MS_ITEM_ID SUDAH TERAKAIT DENGAN POSTING FINAL AVG
/* declare @check_count int SELECT @check_count=count(*) FROM dt_ms_cost_final_avg INNER JOIN dt_ms_cost_final_avg_h_status ON dt_ms_cost_final_avg.ms_cost_final_avg_h_status_id = dt_ms_cost_final_avg_h_status.ms_cost_final_avg_h_status_id INNER JOIN dt_ms_item_list_price ON dt_ms_cost_final_avg.ms_cost_final_avg_id = dt_ms_item_list_price.ms_cost_final_avg_id WHERE (dt_ms_cost_final_avg_h_status.ms_cost_final_avg_status_id = 1) AND dt_ms_item_list_price.ms_item_id=@ms_item_id AND not(dt_ms_cost_final_avg.ms_cost_final_avg_id =0) if @check_count >0 and (not(@check_sta_end_qty=@end_qty) or not (@check_sta_end_price_usd=@end_price_usd)) begin set @xStsno='02'; set @xStsdes='Gagal, Item Sudah terkait POSTING FINAL AVG , Stock awal Harga dan Jumlah tidak boleh di rubah' ; goto f end */

declare @date_end_sta date, @ms_date_business_id_sta bigint
SELECT   top 1  @date_end_sta=   end_date
,@ms_date_business_id_sta=        dt_ms_date_business.ms_date_business_id
FROM            dt_ms_cost_final_avg INNER JOIN
                         dt_ms_date_business ON dt_ms_cost_final_avg.end_date = dt_ms_date_business.ms_date_business
WHERE        (dt_ms_cost_final_avg.ms_cost_final_avg_id = 0)
 

declare @ms_item_list_price_id bigint
BEGIN TRANSACTION;     
UPDATE       dt_ms_item
SET rack_no =@rack_no , service_level=@service_level  ,   qty_minimum=@qty_minimum,        ms_item_custom_no = @ms_item_custom_no, ms_item_base_no = @base_no, part_no = @part_no, part_name = @part_name, uom = @uom, consumable = @consumable, modify_date = @now, modify_by = @data_by
WHERE        (ms_item_id = @ms_item_id) 
if @old_ms_item_h_price_id is not null
begin
 if not(@old_sta_price_usd=@end_price_usd) or  not (@old_sta_qty=@end_qty)
 begin
 
  --- UPDATE STA AWAL----
  
  UPDATE       dt_ms_item_list_price
  SET               modify_date = @now
      , modify_by = @data_by
      , end_qty = @end_qty
      , end_price_usd  = @end_price_usd
      , end_price  = case when @end_price_usd =0  then 0 else @end_price_usd*dbo.get_rate_valuta(@date_end_sta,'USD') end
  WHERE        (ms_item_h_price_id = @old_ms_item_h_price_id)   
  
  UPDATE dt_ms_item_daily_in_move_avg
  set  
    total_qty_avg_move=@end_qty
  , price_avg_move_idr=case when @end_price_usd =0  then 0 else @end_price_usd*dbo.get_rate_valuta(@date_end_sta,'USD') end
  , price_avg_move_usd=@end_price_usd
  where ms_item_id =@ms_item_id and   ms_cost_final_avg_id=0
  
  declare @ms_item xml 
  ,@last_final_avg bigint
  set @ms_item=(select @ms_item_id as 'row/@id'  
   for xml path('item')
  ) 
  EXEC MG_CALCULATE_AVG_MOVE_BY_BUSINESS_DATE @ms_item,@date_end_sta, -1

  end  
end
else
begin 

  --- MASUKAN STA AWAL----
 INSERT INTO dt_ms_item_list_price
        (ms_cost_final_avg_id, ms_item_id, end_qty, end_price_usd , end_price, create_date, create_by, modify_date, modify_by)
 VALUES        (0,@ms_item_id,@end_qty,@end_price_usd,case when @end_price_usd =0  then 0 else @end_price_usd*dbo.get_rate_valuta(@date_end_sta,'USD') end,@now,@data_by,@now,@data_by) 

 set @ms_item_list_price_id= SCOPE_IDENTITY();
 --UPDATE dt_ms_item
 --SET ms_item_h_price_id=@ms_item_list_price_id
 --WHERE (ms_item_id = @ms_item_id)

 INSERT INTO dt_ms_item_daily_in_move_avg
        (ms_date_business_id, ms_item_id, total_qty_avg_move, price_avg_move_idr, price_avg_move_usd, ms_item_h_price_id, ms_cost_final_avg_id)
 VALUES        (@ms_date_business_id_sta,@ms_item_id,@end_qty , case when @end_price_usd =0  then 0 else @end_price_usd*dbo.get_rate_valuta(@date_end_sta,'USD') end,@end_price_usd,@ms_item_list_price_id,0)

  
end

if exists( select * from dt_ms_mutasi_item where ms_item_id =@ms_item_id and ms_cost_final_avg_id=0)
begin
update  dt_ms_mutasi_item set qty_end=@end_qty
 where ms_item_id =@ms_item_id and ms_cost_final_avg_id=0
end
else
begin

 INSERT INTO dt_ms_mutasi_item
        (ms_cost_final_avg_id, ms_item_id, qty_end, qty_adjutment)
 values(0, @ms_item_id, @end_qty, 0)

end


COMMIT TRANSACTION;
  
f:

set nocount off

END TRY  
BEGIN CATCH
 IF (@@TRANCOUNT > 0)  ROLLBACK TRAN;
 
 set @xStsno='88'
 set @xStsdes= ERROR_MESSAGE() 
END CATCH

g:
set @XmlSts=(select @xStsnoheader + @xStsno as 'no', @xStsdes as 'des' for xml path('sts'))
 select  CAST( (select @XmlSts,isnull(@raw ,'')   for xml path ('result')
)  as XML)  as dt

GO

Used By

No items found