NJC__Documentation::DB

dbo.MG_CALCULATE_AVG_MOVE_BY_BUSINESS_DATE

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

Name Data Type Length Description
@ms_item xml -1
@business_date date 3
@last_final_avg bigint 8

SQL Script

SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO

CREATE PROCEDURE dbo.MG_CALCULATE_AVG_MOVE_BY_BUSINESS_DATE 
@ms_item xml
,@business_date date
,@last_final_avg bigint
---XencX---with encryption
as

SET TRANSACTION ISOLATION LEVEL  READ UNCOMMITTED 
declare @list_item tp_ms_avg_item

declare @tmp_ms_cost_final_avg table (
ms_cost_final_avg_id bigint primary key
)


declare @end_date_sta date 
declare @ms_date_business_id_sta bigint
SELECT  top 1 @end_date_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)



insert into @tmp_ms_cost_final_avg 
SELECT        dt_ms_cost_final_avg.ms_cost_final_avg_id
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
WHERE        (dt_ms_cost_final_avg_h_status.ms_cost_final_avg_status_id = 1)


declare @item table(
ms_item_id  bigint primary key)

insert into @item
SELECT isnull(tempTable.item.value('@id[1]', 'bigint'),-1)  as ms_item_id 
 FROM @ms_item.nodes('item/row')  tempTable(item)

insert into @list_item (ms_item_id,business_date_start_recalculate)  
select xdata.ms_item_id 
,isnull( (SELECT       top 1(dt_ms_date_business.ms_date_business)
       FROM            dt_ms_item_daily_in_move_avg INNER JOIN
          dt_ms_date_business ON dt_ms_item_daily_in_move_avg.ms_date_business_id = dt_ms_date_business.ms_date_business_id INNER JOIN
           @tmp_ms_cost_final_avg AS header_final_avg ON dt_ms_date_business.ms_cost_final_avg_id = header_final_avg.ms_cost_final_avg_id
       WHERE        (dt_ms_item_daily_in_move_avg.ms_item_id = xdata.ms_item_id) 
        AND (dt_ms_date_business.ms_date_business < @business_date and dt_ms_date_business.ms_date_business>@end_date_sta)
        AND (header_final_avg.ms_cost_final_avg_id = - 1)
       order by dt_ms_date_business.ms_date_business desc 
   ),@business_date) 
from @item xdata
group by xdata.ms_item_id  


UPDATE       @list_item
 SET  qty_avg_final=COALESCE(vw_ms_item_final_cost_last.end_qty, vw_ms_item_beginning_balance.end_qty,0)
  ,price_avg_idr_final=COALESCE(vw_ms_item_final_cost_last.end_price, vw_ms_item_beginning_balance.end_price,0) 
  ,price_avg_usd_final=COALESCE(vw_ms_item_final_cost_last.end_price_usd, vw_ms_item_beginning_balance.end_price_usd,0) 
  ,business_date_start_recalculate=COALESCE(vw_ms_item_final_cost_last.end_date,@end_date_sta  )      
 FROM            @list_item LEFT OUTER JOIN
        vw_ms_item_beginning_balance ON [@list_item].ms_item_id = vw_ms_item_beginning_balance.ms_item_id  
      LEFT OUTER JOIN
       vw_ms_item_final_cost_last ON [@list_item].ms_item_id = vw_ms_item_final_cost_last.ms_item_id  
  

UPDATE       dt_ms_item_daily_in_move_avg
SET 
 total_qty_avg_move=  (isnull(vw_business_date_item_in_sum_bc_in.total_qty_pakai,0) + isnull(avg_final.qty_avg_final,0))
,price_avg_move_idr=  case when   (isnull(vw_business_date_item_in_sum_bc_in.total_qty_pakai,0) + isnull(avg_final.qty_avg_final,0)) =0 then 0
    else   (isnull(vw_business_date_item_in_sum_bc_in.total_amont_idr,0) + isnull(avg_final.price_avg_idr_final,0)) 
    / (isnull(vw_business_date_item_in_sum_bc_in.total_qty_pakai,0) + isnull(avg_final.qty_avg_final,0)) 
     end  
,price_avg_move_usd=  case when   (isnull(vw_business_date_item_in_sum_bc_in.total_qty_pakai,0) + isnull(avg_final.qty_avg_final,0)) =0 then 0
    else   (isnull(vw_business_date_item_in_sum_bc_in.total_amont_usd,0) + isnull(avg_final.price_avg_usd_final,0)) 
    / (isnull(vw_business_date_item_in_sum_bc_in.total_qty_pakai,0) + isnull(avg_final.qty_avg_final,0)) 
     end  
FROM            dt_ms_item_daily_in_move_avg INNER JOIN
                         vw_business_date_item_in_sum_bc_in ON dt_ms_item_daily_in_move_avg.ms_date_business_id = vw_business_date_item_in_sum_bc_in.ms_date_business_id AND 
                         dt_ms_item_daily_in_move_avg.ms_item_id = vw_business_date_item_in_sum_bc_in.ms_item_id INNER JOIN
                         dt_ms_date_business ON dt_ms_item_daily_in_move_avg.ms_date_business_id = dt_ms_date_business.ms_date_business_id INNER JOIN
                            -- (SELECT dt_ms_item_daily_in_move_avg.ms_item_id, business_date_start_recalculate, qty_avg_final, price_avg_final, price_avg_usd_final)
       @list_item AS avg_final ON 
                           vw_business_date_item_in_sum_bc_in.ms_item_id = avg_final.ms_item_id INNER JOIN
                           -- (SELECT dt_ms_item_daily_in_move_avg.ms_item_id, business_date_start_recalculate, qty_avg_final, price_avg_final, price_avg_usd_final)
       @list_item AS filter_date ON 
                         dt_ms_item_daily_in_move_avg.ms_item_id = filter_date.ms_item_id AND dt_ms_date_business.ms_date_business >= filter_date.business_date_start_recalculate and dt_ms_date_business.ms_date_business >@end_date_sta
WHERE        (dt_ms_item_daily_in_move_avg.ms_item_h_price_id IS NULL) OR (dt_ms_item_daily_in_move_avg.ms_item_h_price_id = - 1) 

---UPDATE AVG MOVE DI PENGELUARAN DATE OUT>= @business_date YANG BELUM TERKAIT POSTING
       
UPDATE       dt_ms_item_daily_out_move_avg
SET                ms_item_in_move_avg_id=( 
  SELECT    top (1)    dt_ms_item_daily_in_move_avg.ms_item_in_move_avg_id
  FROM            dt_ms_item_daily_in_move_avg INNER JOIN
         dt_ms_date_business AS date_business_in ON dt_ms_item_daily_in_move_avg.ms_date_business_id = date_business_in.ms_date_business_id
  WHERE        (date_business_in.ms_date_business <=date_business_out.ms_date_business) AND (dt_ms_item_daily_in_move_avg.ms_item_id = dt_ms_item_daily_out_move_avg.ms_item_id)  
  and dt_ms_item_daily_in_move_avg.total_qty_avg_move>0
  order by date_business_in.ms_date_business desc
)
FROM            dt_ms_item_daily_out_move_avg INNER JOIN
                         dt_ms_date_business AS date_business_out ON dt_ms_item_daily_out_move_avg.ms_date_business_id = date_business_out.ms_date_business_id INNER JOIN
                             --(SELECT dt_ms_item_daily_out_move_avg.ms_item_id, business_date_start_recalculate, qty_avg_final, price_avg_final, price_avg_usd_final)
        @list_item AS data_filter_out ON 
                         dt_ms_item_daily_out_move_avg.ms_item_id = data_filter_out.ms_item_id AND date_business_out.ms_date_business >= data_filter_out.business_date_start_recalculate and date_business_out.ms_date_business >@end_date_sta
WHERE        (dt_ms_item_daily_out_move_avg.ms_item_h_price_id IS NULL) OR
                         (dt_ms_item_daily_out_move_avg.ms_item_h_price_id = - 1)



GO