dbo.f_mutasi_mpk

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Null on Null Input

False

Schema Bound

False

Assembly

Parameters

Name Data Type Length Description
@tgstart date 3
@tgend date 3

SQL Script

SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO

CREATE FUNCTION dbo.f_mutasi_mpk
( 
 @tgstart date, @tgend date
)
RETURNS  @mutasibb table (
     kodebarang varchar(100) null
    ,namabarang varchar(100) null
    ,qty_saldoawal float null
    ,qty_in float null
    ,qty_out float null
    ,saldo_akhir float null
    ,unit varchar(100) null
    ,stock_opname  float null
    ,adj  float null
    ,selisih float null
    )
AS
begin
declare @end_date_new_mesin date 
SELECT top(1) @end_date_new_mesin=       end_date
FROM            dt_ms_cost_final_avg
WHERE        (ms_cost_final_avg_id = 0)

set @end_date_new_mesin='2017-09-01';
if @tgstart>=@end_date_new_mesin
begin
  insert into  @mutasibb (
      kodebarang 
     ,namabarang 
     ,unit
     ,qty_saldoawal 
     ,qty_in 
     ,qty_out 
     ,saldo_akhir
     ,stock_opname 
     ,adj
     , selisih
      )  

     SELECT        
     kodebarang
     , namabarang
     , unit
     , qty_saldoawal
     , qty_in
     , qty_out
     , saldo_akhir
     , stock_opname 
     , qty_penyesuaian
     , selisih
     FROM            dbo.vw_fn_ms_mutasi_mesin(@tgstart,@tgend,0) AS vw_fn_ms_mutasi_mesin_1

end
else
begin

 declare @datesta date
 declare @stsstockopname int, @dtsto date
 
 set @datesta=(select top 1 date_stockawal from tbl_dt_mpk_stockawal group by date_stockawal order by  date_stockawal desc)
 
 set @stsstockopname = 0

 if (
  select count(*) from (
   select count(*) as cnt from [dbo].[tbl_stock_opname] a

       where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
       where b.[date_stock_opname] <= @tgstart  and  b.typebahan = 'MPK'
       )   and a.typebahan  = 'MPK'
       group by part_name_customs
   ) as x

 ) > 0 
 begin
  set @stsstockopname = 1 
  set   @dtsto =  (select max(dt) from (
   select [date_stock_opname] as dt from [dbo].[tbl_stock_opname] a

       where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
       where b.[date_stock_opname] <= @tgstart  and  b.typebahan = 'MPK'
       )  and a.typebahan  = 'MPK'
       group by part_name_customs, [date_stock_opname]
   ) as x)
  set @datesta=dateadd(day, 1, @dtsto)  
 end


declare @tgstartx date
 if (select count(*) from  [tbl_stock_opname] where typebahan  = 'MPK' and [date_stock_opname] between @tgstart and @tgend) > 0
 begin
  set @tgstartx = (
   select max(date_stock_opname) from  [tbl_stock_opname] where typebahan  = 'MPK' and [date_stock_opname] between @tgstart and @tgend
  )
  if (@tgend <> @tgstartx)
  begin
   set @tgstart = dateadd(day, 1, @tgstartx)  
  end 
 end
-- declare @tgmax date
--if (select count(*) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend) > 0
--begin
-- set @tgmax = (select max(date_stock_opname) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend)
-- if @tgend <> @tgmax
-- begin
-- set @tgstart = (
-- select max(date_stock_opname) from [tbl_stock_opname] where typebahan = 'MPK' and [date_stock_opname] between @tgstart and @tgend
-- )
-- set @stsstockopname = 1
-- set @dtsto = (select max(dt) from (
-- select [date_stock_opname] as dt from [dbo].[tbl_stock_opname] a

-- where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
-- where b.[date_stock_opname] <= @tgstart
-- ) and a.typebahan = 'MPK'
-- group by part_name_customs, [date_stock_opname]
-- ) as x)
-- set @datesta=dateadd(day, 1, @dtsto)

-- end
--end

 ;with 
  ct_kodebrg (kodebarang, namabarang,satuan) as
  (
    select [kode_brg]
     ,[nama_barang]
     ,[satuan] from [tbl_dt_mesindanalatkantor_code]
  ) ,
  ct_saldo_awal
  (kodebarang, qty) as (
   select part_no, sum(qty) from tbl_dt_mpk_stockawal where date_stockawal=@datesta
   group by part_no
   ),
   ct_brg_in(
   kodebarang, qty
   ) as (
   select part_no, sum(qty_in) from tbl_dt_mpk_in
   where date_in between @tgstart and @tgend
   group by part_no
   ),
   ct_brg_out(
   kodebarang, qty
   ) as (
      select part_no, sum(qty_out) from dbo.tbl_dt_mpk_out
   where date_out between @tgstart and @tgend
   group by part_no
   ),
    ct_brg_in_periode(
   kodebarang, qty
   ) as (
   select part_no, sum(qty_in) from tbl_dt_mpk_in
   where date_in between @datesta and dateadd(DAY, -1, @tgstart)
   group by part_no
   ), 
   ct_brg_out_periode(
   kodebarang, qty
   ) as (
      select part_no, sum(qty_out) from dbo.tbl_dt_mpk_out
   where date_out between @datesta and dateadd(DAY, -1, @tgstart)
   group by part_no
   ),
   cte_stock_opname_awal(
    part_no, qty    
    ) as (
   
    select part_no, sum(qty) from [dbo].[tbl_stock_opname] a

     where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
     where b.[date_stock_opname] < @tgstart and  b.typebahan = 'MPK'
     )  and a.typebahan = 'MPK'
      group by part_no
   
    ),
     cte_stock_opname_akhir(
    part_no, qty    
    ) as (
   
     select part_no, sum(qty) from [dbo].[tbl_stock_opname] a

     where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
     where b.[date_stock_opname] <= @tgend and  b.typebahan = 'MPK'
     )  and a.typebahan = 'MPK'
     group by part_no
   
    ),
        cte_stock_opname_count(
    part_no, cnt, [date_stock_opname]   
    ) as (
   
    select part_no, count(*) AS cnt, [date_stock_opname]  from [dbo].[tbl_stock_opname] a

     where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
     where b.[date_stock_opname] < @tgstart and  b.typebahan = 'MPK'
     )  and a.typebahan = 'MPK'
      group by part_no, [date_stock_opname]
   
    ) ,
     cte_stock_opname_tgl_akhir(
    part_no, qty    
    ) as (
   
     select part_no, sum(qty) from [dbo].[tbl_stock_opname] a

     where a.[date_stock_opname] = (select max([date_stock_opname]) from [dbo].[tbl_stock_opname] b
     where b.[date_stock_opname] = @tgend and  b.typebahan = 'MPK'
     )  and a.typebahan = 'MPK'
     group by part_no
   
    )
   
  insert into  @mutasibb (
        kodebarang 
    ,namabarang 
    ,unit
    ,qty_saldoawal 
    ,qty_in 
    ,qty_out 
    ,saldo_akhir
    ,stock_opname 
    ,adj
     )
    select ct_kodebrg.kodebarang, ct_kodebrg.namabarang, ct_kodebrg.satuan,
  -- (isnull(ct_saldo_awal.qty, 0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0))) as qty_sta
  case when isnull(cte_stock_opname_count.cnt,0) = 0 then  
     (isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0)) -  (isnull(ct_brg_out_periode.qty,0) ))
     else 
     case when cte_stock_opname_count.date_stock_opname=dateadd(day, -1, @tgstart) then 
 
     isnull(cte_stock_opname_awal.qty,0) 
     else  
     (isnull(cte_stock_opname_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) -  (isnull(ct_brg_out_periode.qty,0) ))) 
     end 
     end  as qty_sta

  
   ,isnull(ct_brg_in.qty, 0) as qty_in
   ,isnull(ct_brg_out.qty, 0) as qty_out
   ,(
    (case when  isnull(cte_stock_opname_count.cnt,0)= 0 then  
     (isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) -  isnull(ct_brg_out_periode.qty,0) ))
     else 
     case when cte_stock_opname_count.date_stock_opname=dateadd(day, -1, @tgstart) then 
     isnull(cte_stock_opname_awal.qty,0) 
     else  
     (isnull(cte_stock_opname_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0)  -  (isnull(ct_brg_out_periode.qty,0) ))) 
     end 
     end
      + 
     ((isnull(ct_brg_in.qty,0))) - (isnull(ct_brg_out.qty,0)))
    ) as saldo_akhir
     ,
    case when (select count(*) from [tbl_stock_opname] where [date_stock_opname] = @tgend and typebahan = 'MPK') = 0 then 0 else  isnull(cte_stock_opname_akhir.qty,0) end  as sto
   
    ,case when cte_stock_opname_tgl_akhir.qty is null then 0 else 
    cte_stock_opname_tgl_akhir.qty -
   (
    (case when  isnull(cte_stock_opname_count.cnt,0)= 0 then  
     (isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) -  isnull(ct_brg_out_periode.qty,0) ))
     else 
     case when cte_stock_opname_count.date_stock_opname=dateadd(day, -1, @tgstart) then 
     isnull(cte_stock_opname_awal.qty,0) 
     else  
     (isnull(cte_stock_opname_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0)  -  (isnull(ct_brg_out_periode.qty,0) ))) 
     end 
     end
      + 
     ((isnull(ct_brg_in.qty,0))) - (isnull(ct_brg_out.qty,0)))
    )

    end 

  -- ,((isnull(ct_saldo_awal.qty,0) + (isnull(ct_brg_in_periode.qty,0) - isnull(ct_brg_out_periode.qty,0)) + (isnull(ct_brg_in.qty,0)) - isnull(ct_brg_out.qty,0))) as saldo_akhir
   
    from ct_kodebrg 
   left outer join ct_saldo_awal on ct_kodebrg.kodebarang=ct_saldo_awal.kodebarang
   left outer join ct_brg_in on ct_kodebrg.kodebarang=ct_brg_in.kodebarang
   left outer join ct_brg_out on ct_kodebrg.kodebarang=ct_brg_out.kodebarang
   left outer join ct_brg_in_periode on ct_kodebrg.kodebarang=ct_brg_in_periode.kodebarang
   left outer join ct_brg_out_periode on ct_kodebrg.kodebarang=ct_brg_out_periode.kodebarang
   left outer join cte_stock_opname_awal on ct_kodebrg.kodebarang = cte_stock_opname_awal.part_no
   left outer join cte_stock_opname_akhir on ct_kodebrg.kodebarang = cte_stock_opname_akhir.part_no
   left outer join cte_stock_opname_tgl_akhir on ct_kodebrg.kodebarang = cte_stock_opname_tgl_akhir.part_no  
   left outer join cte_stock_opname_count on ct_kodebrg.kodebarang = cte_stock_opname_count.part_no  
  end
   --group by ct_kodebrg.kodebarang, ct_kodebrg.namabarang, ct_kodebrg.satuan
return
end
GO