Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION f_init_adj_stock_qty_preparation_for_promo_bundling(bigint, character varying, bigint)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.     pTenantId       alias for $1;
  6.     pSessionId      alias for $2;
  7.     pSoMlmId        alias for $3;
  8.  
  9.     vItemTypeChild      character varying := 'C';
  10.     vWhsCodeDisplay     character varying := 'DISPLAY';
  11.     vWhsLocCodeDef      character varying := 'DEF';
  12.     vSpaceValue     character varying := ' ';
  13.  
  14.     vNewSessionId       character varying;
  15.     vWhsIdDisplay       bigint;
  16.    
  17. BEGIN
  18.     vNewSessionId := pSessionId||'BUNDLING';
  19.     DELETE FROM tt_prepare_adj_stock_item WHERE session_id = vNewSessionId;
  20.    
  21.     -- Warehouse ID
  22.     SELECT warehouse_id INTO vWhsIdDisplay
  23.     FROM m_warehouse WHERE warehouse_code = vWhsCodeDisplay AND tenant_id = pTenantId;
  24.  
  25.     -- INSERT item-item yang ada di dalam SO ke dalam Table temp.
  26.     -- pada kondisi ini, masih ada kemungkinan barang yang dibeli, belum pernah dilakukan penerimaan barang sehingga tidak memiliki product_balance_id
  27.     INSERT INTO tt_prepare_adj_stock_item (
  28.       session_id, tenant_id, doc_id, doc_type_id, doc_no, doc_date, doc_item_id,
  29.       from_product_id, from_warehouse_id, from_whs_location_code, from_product_balance_id, from_product_status,
  30.       to_product_id, to_warehouse_id, to_whs_location_code, to_product_balance_id, to_product_status, qty,
  31.       create_datetime, create_user_id, update_datetime, update_user_id, version
  32.     )
  33.     SELECT vNewSessionId, pTenantId, C.so_mlm_id, C.doc_type_id, C.doc_no, C.doc_date, B.so_mlm_item_id,
  34.       D.sub_original_product_id, vWhsIdDisplay, vSpaceValue, COALESCE(E.product_balance_id, -99), 'GOOD',
  35.       D.sub_product_id, vWhsIdDisplay, vSpaceValue, COALESCE(F.product_balance_id, -99), 'GOOD', SUM(B.qty_int),
  36.       C.create_datetime, C.create_user_id, C.update_datetime, C.update_user_id, 0
  37.     FROM tt_process_so_with_product_bundling_01 A
  38.     INNER JOIN sl_so_mlm_item B ON A.so_mlm_item_id = B.so_mlm_item_id
  39.     INNER JOIN sl_so_mlm C ON B.so_mlm_id = C.so_mlm_id
  40.     INNER JOIN m_product_bundling_mapping D
  41.         ON A.product_catalog_id = D.sub_product_catalog_id
  42.         AND A.parent_product_catalog_id = D.product_catalog_bundling_id
  43.     LEFT JOIN in_product_balance E ON D.sub_original_product_id = E.product_id AND E.serial_number = vSpaceValue
  44.     LEFT JOIN in_product_balance F ON D.sub_product_id = F.product_id AND F.serial_number = vSpaceValue
  45.     WHERE A.session_id = pSessionId
  46.     AND A.item_type = vItemTypeChild
  47.     AND C.so_mlm_id = pSoMlmId
  48.     GROUP BY C.so_mlm_id, C.doc_type_id, C.doc_no, C.doc_date, B.so_mlm_item_id,
  49.       D.sub_original_product_id, E.product_balance_id,
  50.       D.sub_product_id, F.product_balance_id, B.qty_int,
  51.       C.create_datetime, C.create_user_id, C.update_datetime, C.update_user_id;
  52.  
  53.     -- INSERT ke table in_product_balance untuk product-product yang belum penah dilakukan penerimaan
  54.     -- INSERT untuk product FROM (ORIGINAL)
  55.     INSERT INTO in_product_balance(
  56.         tenant_id, product_id, serial_number, lot_number,
  57.         product_expired_date, product_year_made,
  58.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  59.         SELECT pTenantId, A.from_product_id, vSpaceValue, vSpaceValue,
  60.         vSpaceValue, vSpaceValue,
  61.         0, A.create_datetime, A.create_user_id, A.update_datetime, A.update_user_id
  62.           FROM tt_prepare_adj_stock_item A
  63.         WHERE from_product_balance_id = -99
  64.         AND session_id = vNewSessionId
  65.         AND NOT EXISTS (
  66.         SELECT 1 FROM in_product_balance B
  67.         WHERE A.from_product_id = B.product_id
  68.         AND B.serial_number = ' '
  69.     )
  70.         GROUP BY A.from_product_id, A.create_datetime, A.create_user_id, A.update_datetime, A.update_user_id;
  71.  
  72.     -- INSERT untuk product TO (DUMMY)
  73.         INSERT INTO in_product_balance(
  74.         tenant_id, product_id, serial_number, lot_number,
  75.         product_expired_date, product_year_made,
  76.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  77.         SELECT pTenantId, A.to_product_id, vSpaceValue, vSpaceValue,
  78.         vSpaceValue, vSpaceValue,
  79.         0, A.create_datetime, A.create_user_id, A.update_datetime, A.update_user_id
  80.           FROM tt_prepare_adj_stock_item A
  81.         WHERE from_product_balance_id = -99
  82.         AND session_id = vNewSessionId
  83.         AND NOT EXISTS (
  84.         SELECT 1 FROM in_product_balance B
  85.         WHERE A.to_product_id = B.product_id
  86.         AND B.serial_number = ' '
  87.     )
  88.         GROUP BY A.to_product_id, A.create_datetime, A.create_user_id, A.update_datetime, A.update_user_id;
  89.  
  90.     -- DELETE data di Table tt_prepare_adj_stock_item, dengan asumsi masih ada product_balance_id yang -99
  91.         DELETE FROM tt_prepare_adj_stock_item WHERE session_id = vNewSessionId;
  92.  
  93.     -- INSERT kembali ke table tt_prepare_adj_stock_item dengan data product_balance_id yang sudah lengkap
  94.     INSERT INTO tt_prepare_adj_stock_item (
  95.       session_id, tenant_id, doc_id, doc_type_id, doc_no, doc_date, doc_item_id,
  96.       from_product_id, from_warehouse_id, from_whs_location_code, from_product_balance_id, from_product_status,
  97.       to_product_id, to_warehouse_id, to_whs_location_code, to_product_balance_id, to_product_status, qty,
  98.       create_datetime, create_user_id, update_datetime, update_user_id, version
  99.     )
  100.     SELECT vNewSessionId, pTenantId, C.so_mlm_id, C.doc_type_id, C.doc_no, C.doc_date, B.so_mlm_item_id,
  101.       D.sub_original_product_id, vWhsIdDisplay, vSpaceValue, COALESCE(E.product_balance_id, -99), 'GOOD',
  102.       D.sub_product_id, vWhsIdDisplay, vSpaceValue, COALESCE(F.product_balance_id, -99), 'GOOD', SUM(B.qty_int),
  103.       C.create_datetime, C.create_user_id, C.update_datetime, C.update_user_id, 0
  104.     FROM tt_process_so_with_product_bundling_01 A
  105.     INNER JOIN sl_so_mlm_item B ON A.so_mlm_item_id = B.so_mlm_item_id
  106.     INNER JOIN sl_so_mlm C ON B.so_mlm_id = C.so_mlm_id
  107.     INNER JOIN m_product_bundling_mapping D
  108.         ON A.product_catalog_id = D.sub_product_catalog_id
  109.         AND A.parent_product_catalog_id = D.product_catalog_bundling_id
  110.     LEFT JOIN in_product_balance E ON D.sub_original_product_id = E.product_id AND E.serial_number = vSpaceValue
  111.     LEFT JOIN in_product_balance F ON D.sub_product_id = F.product_id AND F.serial_number = vSpaceValue
  112.     WHERE A.session_id = pSessionId
  113.     AND A.item_type = vItemTypeChild
  114.     AND C.so_mlm_id = pSoMlmId
  115.     GROUP BY C.so_mlm_id, C.doc_type_id, C.doc_no, C.doc_date, B.so_mlm_item_id,
  116.       D.sub_original_product_id, E.product_balance_id,
  117.       D.sub_product_id, F.product_balance_id, B.qty_int,
  118.       C.create_datetime, C.create_user_id, C.update_datetime, C.update_user_id;
  119.        
  120.     -------------------------------------------------------------------------------------------------------
  121.     -- UPDATE field whs_location_code Pada Tabel stock_opname_planning_adjustment
  122.     -- A. Update Kode Produk yang memiliki kode lokasi produk
  123.     -------------------------------------------------------------------------------------------------------
  124.    
  125.     -- Update whs_location_code untuk FROM dan TO
  126.     WITH whs_location_code_list AS (
  127.           SELECT A.product_id AS product_id, MAX(C.whs_location_code) AS whs_location_code
  128.           FROM m_product A
  129.           INNER JOIN m_whs_location_product B ON A.product_id = B.product_id
  130.           INNER JOIN m_whs_location C ON B.whs_location_id = C.whs_location_id AND warehouse_id = vWhsIdDisplay
  131.           GROUP BY A.product_id
  132.     )
  133.     UPDATE tt_prepare_adj_stock_item A
  134.       SET
  135.       from_whs_location_code = B.whs_location_code,
  136.       to_whs_location_code = B.whs_location_code
  137.     FROM whs_location_code_list B
  138.     WHERE A.from_product_id = B.product_id
  139.     AND A.session_id = vNewSessionId
  140.     AND A.doc_id = pSoMlmId;
  141.  
  142.    
  143.     -------------------------------------------------------------------------------------------------------
  144.     -- B. Update Kode Produk yang tidak memiliki kode lokasi produk dengan DEF
  145.     -------------------------------------------------------------------------------------------------------
  146.     -- from_whs_location_code
  147.     UPDATE tt_prepare_adj_stock_item
  148.     SET from_whs_location_code = vWhsLocCodeDef
  149.     WHERE from_whs_location_code = vSpaceValue AND session_id = vNewSessionId AND doc_id = pSoMlmId;
  150.  
  151.     -- to_whs_location_code
  152.     UPDATE tt_prepare_adj_stock_item
  153.     SET to_whs_location_code = vWhsLocCodeDef
  154.     WHERE to_whs_location_code = vSpaceValue AND session_id = vNewSessionId AND doc_id = pSoMlmId;
  155.  
  156. END
  157. $BODY$
  158. LANGUAGE plpgsql VOLATILE
  159. COST 100;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement