Advertisement
aadddrr

f_check_log_product_balance_stock

Aug 14th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Adrian, Aug 7, 2017
  3.  */
  4.  
  5. CREATE OR REPLACE FUNCTION f_check_log_product_balance_stock(character varying, bigint, bigint, character varying, character varying)
  6.   RETURNS void AS
  7. $BODY$
  8. DECLARE
  9.     pSessionId                  ALIAS FOR $1;
  10.     pTenantId                   ALIAS FOR $2;
  11.     pWarehouseId                ALIAS FOR $3;
  12.     pDateFrom                   ALIAS FOR $4;
  13.     pDateTo                     ALIAS FOR $5;  
  14.  
  15.     vDocTypeIdReceiveGoods      bigint;
  16.     vDocTypeIdDeliveryOrder     bigint;
  17.     vDocTypeIdPOSShop           bigint;    
  18.     vDocTypeIdPOSReturnShop     bigint;    
  19.     vDocTypeIdPOSShopInShop     bigint;    
  20.     vDocTypeIdPOSReturnShopInShop bigint;    
  21.     vDocTypeIdAdjStockPOS       bigint;    
  22.     vDocTypeIdVoidPOSShop       bigint;    
  23.     vDocTypeIdVoidPOSShopInShop bigint;    
  24.     vDocTypeIdReturnNote        bigint;
  25.     vDocTypeIdClaimNote         bigint;
  26.     vDocTypeIdAdjStockQty       bigint;
  27.     vDocTypeIdAdjStockAmount    bigint;
  28.     vDocTypeIdDoReceipt         bigint;
  29.     vDocTypeIdGoodsTrfOutOutlet bigint;
  30.     vDocTypeIdGoodsTrfOut       bigint;
  31.     vDocTypeIdGoodsTrfInOutlet  bigint;
  32.     vDocTypeIdGoodsTrfIn        bigint;
  33.     vDocTypeIdGoodsTrfInReceipt bigint;
  34.     vGoodsTransferInReceiptLostDocTypeId bigint;
  35.     vDocTypeIdGoodsBorrowing bigint;
  36.     vDocTypeIdReturnGoodsBorrowing bigint;
  37.     vDocTypeIdGoodsOutOther bigint;
  38.    
  39.     vStatusRelease              character varying(1);
  40.     vSpaceValue                 character varying(1);
  41.     vFlagYes                    character varying(1);
  42.     vFlagNo                     character varying(1);
  43.     vFlagLost                   character varying(1);
  44.     vFlagMissing                character varying(1);
  45.     vFlagRejected               character varying(1);
  46.     vFlagCorrection             character varying(1);
  47.     vStatusS                    character varying(1);
  48.     vEmptyId                    bigint;
  49.     vStatusVoid                 character varying(1);
  50.     vOutletUserId               bigint;
  51.    
  52.     vProductStatus              character varying(50);
  53.     vProductStatusGood          character varying(4);
  54.    
  55. BEGIN
  56.    
  57.     vDocTypeIdReceiveGoods := 111;
  58.     vDocTypeIdDeliveryOrder := 311;
  59.     vDocTypeIdPOSShop := 401;
  60.     vDocTypeIdPOSReturnShop := 402;
  61.     vDocTypeIdPOSShopInShop := 403;
  62.     vDocTypeIdPOSReturnShopInShop := 404;
  63.     vDocTypeIdAdjStockPOS := 413;
  64.     vDocTypeIdVoidPOSShop := 405;
  65.     vDocTypeIdVoidPOSShopInShop := 406;
  66.     vDocTypeIdReturnNote := 502;
  67.     vDocTypeIdClaimNote := 511;
  68.     vDocTypeIdAdjStockQty := 521;
  69.     vDocTypeIdAdjStockAmount := 522;
  70.     vDocTypeIdDoReceipt := 526;
  71.     vDocTypeIdGoodsTrfOutOutlet := 532;
  72.     vDocTypeIdGoodsTrfOut := 533;
  73.     vDocTypeIdGoodsTrfInOutlet := 534;
  74.     vDocTypeIdGoodsTrfIn := 535;
  75.     vDocTypeIdGoodsTrfInReceipt := 536;
  76.     vGoodsTransferInReceiptLostDocTypeId := 537;
  77.     vDocTypeIdGoodsBorrowing := 551;
  78.     vDocTypeIdReturnGoodsBorrowing := 552;
  79.     vDocTypeIdGoodsOutOther := 568;
  80.    
  81.     vStatusRelease := 'R';
  82.     vSpaceValue := ' ';
  83.     vFlagYes := 'Y';
  84.     vFlagNo := 'N';
  85.     vFlagLost := 'L';
  86.     vFlagMissing := 'M';
  87.     vFlagRejected := 'R';
  88.     vFlagCorrection := 'C';
  89.     vStatusS := 'S';
  90.     vEmptyId := -99;
  91.     vStatusVoid := 'V';
  92.     vOutletUserId := 2;
  93.    
  94.     vProductStatusGood := 'GOOD';
  95.    
  96.     SELECT product_status_code INTO vProductStatus
  97.     FROM m_product_status
  98.     WHERE flg_buy = vFlagYes;
  99.    
  100.     /* Kosongkan semua tabel temporary */
  101.     DELETE FROM tt_check_log_product_balance_stock_for_trx WHERE session_id = pSessionId;
  102.     DELETE FROM tt_check_log_product_balance_stock_for_log WHERE session_id = pSessionId;
  103.     DELETE FROM tt_check_log_product_balance_stock_for_result WHERE session_id = pSessionId;
  104.    
  105.     /* 1. Simpan semua data transaksi yang seharusnya masuk ke in_log_product_balance_stock */
  106.    
  107.     /* 1.a. RECEIVE GOODS */
  108.     /* 1.a.1) Item receive goods yang tidak memiliki serial number */
  109.     WITH temp_pu_product_balance AS (
  110.         SELECT A.tenant_id, A.doc_type_id, A.receive_goods_id AS ref_id, A.doc_no, A.doc_date, A.partner_id,
  111.             B.product_id, vSpaceValue AS serial_number, vSpaceValue AS lot_number, A.warehouse_id, vProductStatus AS product_status, D.base_uom_id, SUM(B.qty_rcv_int) AS qty_int_rcv,
  112.             D.flg_stock
  113.         FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item D, pu_po E
  114.         WHERE A.receive_goods_id = B.receive_goods_id AND
  115.             NOT EXISTS (SELECT 1 FROM pu_receive_goods_product C
  116.                     WHERE B.receive_goods_item_id = C.receive_goods_item_id) AND
  117.             NOT EXISTS (SELECT 1 FROM pu_receive_goods_product_auto_sn C
  118.                     WHERE B.receive_goods_item_id = C.receive_goods_item_id) AND
  119.             B.ref_id = D.po_item_id AND
  120.             D.po_id = E.po_id AND
  121.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  122.             A.status_doc = vStatusRelease AND
  123.             A.doc_type_id = vDocTypeIdReceiveGoods AND
  124.             A.tenant_id = pTenantId AND
  125.             A.warehouse_id = pWarehouseId
  126.         GROUP BY A.warehouse_id, A.tenant_id, A.ou_id, B.product_id,
  127.             A.doc_date, A.partner_id, A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, A.doc_no,
  128.             E.po_id, E.doc_no, E.doc_date, D.po_item_id,
  129.             D.curr_code, D.nett_price_po, D.po_uom_id, D.base_uom_id, D.flg_stock
  130.     )
  131.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  132.     (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  133.      product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  134.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  135.         A.product_id, vSpaceValue, vSpaceValue, C.product_balance_id, A.warehouse_id, vProductStatus, A.base_uom_id, SUM(A.qty_int_rcv)    
  136.     FROM temp_pu_product_balance A, m_warehouse_ou B, in_product_balance C
  137.     WHERE A.flg_stock = 'Y' AND
  138.         A.warehouse_id = B.warehouse_id AND
  139.         A.tenant_id = C.tenant_id AND
  140.         A.product_id = C.product_id AND
  141.         A.serial_number = C.serial_number AND
  142.         A.lot_number = C.lot_number
  143.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  144.         A.product_id, C.product_balance_id, A.warehouse_id, A.base_uom_id;
  145.    
  146.     /* 1.a.2) Item receive goods yang memiliki serial number dan tidak di-generate */
  147.     WITH temp_pu_product_balance AS (
  148.         SELECT A.tenant_id, A.doc_type_id, A.receive_goods_id AS ref_id, A.doc_no, A.doc_date, A.partner_id,
  149.             B.product_id, C.serial_number AS serial_number, C.lot_number AS lot_number, A.warehouse_id, vProductStatus AS product_status, D.base_uom_id, SUM(C.qty_rcv_int) AS qty_int_rcv,
  150.             D.flg_stock
  151.         FROM pu_receive_goods A, pu_receive_goods_item B, pu_receive_goods_product C, pu_po_item D, pu_po E
  152.         WHERE A.receive_goods_id = B.receive_goods_id AND
  153.             B.receive_goods_item_id = C.receive_goods_item_id AND
  154.             B.ref_id = D.po_item_id AND
  155.             D.po_id = E.po_id AND
  156.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  157.             A.status_doc = vStatusRelease AND
  158.             A.doc_type_id = vDocTypeIdReceiveGoods AND
  159.             A.tenant_id = pTenantId AND
  160.             A.warehouse_id = pWarehouseId
  161.         GROUP BY A.warehouse_id, A.tenant_id, A.ou_id, B.product_id,
  162.             C.serial_number, C.lot_number, C.product_expired_date, C.product_year_made,
  163.             A.doc_date, A.partner_id, A.doc_type_id, a.receive_goods_id, B.receive_goods_item_id, A.doc_no,
  164.             E.po_id, E.doc_no, E.doc_date, D.po_item_id,
  165.             D.curr_code, D.nett_price_po, D.po_uom_id, D.base_uom_id, D.flg_stock
  166.     )
  167.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  168.     (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  169.      product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  170.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  171.         A.product_id, vSpaceValue, vSpaceValue, C.product_balance_id, A.warehouse_id, vProductStatus, A.base_uom_id, SUM(A.qty_int_rcv)    
  172.     FROM temp_pu_product_balance A, m_warehouse_ou B, in_product_balance C
  173.     WHERE A.flg_stock = vFlagYes AND
  174.         A.warehouse_id = B.warehouse_id AND
  175.         A.tenant_id = C.tenant_id AND
  176.         A.product_id = C.product_id AND
  177.         A.serial_number = C.serial_number AND
  178.         A.lot_number = C.lot_number
  179.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  180.         A.product_id, C.product_balance_id, A.warehouse_id, A.base_uom_id;
  181.    
  182.            
  183.     /* 1.b. DELIVERY ORDER */
  184.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  185.     (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  186.      product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  187.     SELECT pSessionId, A.tenant_id, D.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  188.         C.product_id, vSpaceValue, vSpaceValue, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id, SUM(C.qty_dlv_int) * -1     
  189.     FROM sl_do A, sl_do_item B, sl_do_product C, m_warehouse_ou D
  190.     WHERE A.do_id = B.do_id AND
  191.         B.do_item_id = C.do_item_id AND
  192.         A.warehouse_id = D.warehouse_id AND
  193.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  194.         A.status_doc = vStatusRelease AND
  195.         A.doc_type_id = vDocTypeIdDeliveryOrder AND
  196.         A.tenant_id = pTenantId AND
  197.         A.warehouse_id = pWarehouseId
  198.     GROUP BY A.tenant_id, D.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  199.             C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id;
  200.        
  201.    
  202.     /* 1.c. POS Shop */
  203.     /* 1.c.1) Item POS Shop yang bukan product assembly */
  204.     WITH temp_pos_product_balance_stock AS (
  205.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  206.             A.doc_no, A.doc_date, B.product_id, C.warehouse_id,
  207.             B.product_balance_id, vProductStatusGood AS product_status, B.base_uom_id, SUM(B.qty) AS qty
  208.         FROM i_trx_pos A, i_trx_pos_item B, m_warehouse_ou C
  209.         WHERE A.tenant_id = pTenantId AND
  210.             A.status IN (vStatusS, vStatusVoid) AND
  211.             A.process_no = B.process_no AND
  212.             A.trx_pos_id = B.trx_pos_id AND
  213.             A.tenant_id = B.tenant_id AND
  214.             B.product_balance_id <> vEmptyId AND
  215.             C.ou_id = A.ou_id AND
  216.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  217.             A.doc_type_id = vDocTypeIdPOSShop AND
  218.             C.warehouse_id = pWarehouseId
  219.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  220.             A.doc_no, A.doc_date, B.product_id, B.product_balance_id, B.base_uom_id, C.warehouse_id
  221.     )
  222.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  223.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  224.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  225.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  226.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  227.     FROM temp_pos_product_balance_stock A
  228.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  229.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  230.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  231.        
  232.     /* 1.c.2) Item POS Shop yang merupakan product assembly */
  233.     WITH temp_pos_product_balance_stock AS (
  234.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  235.             A.doc_no, A.doc_date, C.product_id, D.warehouse_id,
  236.             C.product_balance_id, C.product_status, C.base_uom_id, SUM(C.qty) AS qty
  237.         FROM i_trx_pos A, i_trx_pos_item B, i_trx_pos_assembly_product C, m_warehouse_ou D
  238.         WHERE A.tenant_id = pTenantId AND
  239.             A.status IN (vStatusS, vStatusVoid) AND
  240.             A.process_no = B.process_no AND
  241.             A.trx_pos_id = B.trx_pos_id AND
  242.             A.tenant_id = B.tenant_id AND
  243.             B.product_balance_id = vEmptyId AND    
  244.             B.trx_pos_id = C.trx_pos_id AND
  245.             B.process_no = C.process_no AND
  246.             B.tenant_id = C.tenant_id AND
  247.             B.line_no = C.ref_line_no AND
  248.             D.ou_id = A.ou_id AND
  249.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  250.             A.doc_type_id = vDocTypeIdPOSShop AND
  251.             D.warehouse_id = pWarehouseId
  252.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  253.             A.doc_no, A.doc_date, C.product_id, C.product_balance_id, C.product_status, C.base_uom_id, D.warehouse_id
  254.     )
  255.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  256.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  257.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  258.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  259.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  260.     FROM temp_pos_product_balance_stock A
  261.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  262.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  263.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  264.        
  265.     /* 1.c.3) Item POS Shop yang akan dimasukkan sebagai adjustment stock */
  266.     /*WITH temp_pos_product_balance_stock AS (
  267.         SELECT A.tenant_id, A.ou_id, B.doc_type_id, B.trx_inventory_id AS ref_id, vEmptyId AS partner_id,
  268.             B.doc_no, B.doc_date, C.product_id, B.warehouse_from_id AS warehouse_id,
  269.             C.product_balance_id, C.product_status, C.base_uom_id, SUM(C.qty_realization) AS qty
  270.         FROM i_outlet A, i_trx_inventory B, i_trx_inventory_item C
  271.         WHERE A.tenant_id = pTenantId AND
  272.             A.tenant_id = B.tenant_id AND
  273.             A.ou_id = B.ou_id AND
  274.             B.process_no = C.process_no AND
  275.             B.trx_inventory_id = C.trx_inventory_id AND
  276.             B.tenant_id = C.tenant_id AND
  277.             B.doc_date BETWEEN pDateFrom AND pDateTo AND
  278.             B.doc_type_id = vDocTypeIdAdjStockPOS AND
  279.             C.product_balance_id <> vEmptyId
  280.         GROUP BY A.tenant_id, A.ou_id, B.doc_type_id, B.trx_inventory_id, B.warehouse_from_id,
  281.             B.doc_no, B.doc_date, C.product_id, C.product_balance_id, C.product_status, C.base_uom_id
  282.     )
  283.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  284.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  285.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  286.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  287.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty)
  288.     FROM temp_pos_product_balance_stock A
  289.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  290.     WHERE A.doc_type_id = vDocTypeIdAdjStockPOS AND
  291.         A.product_balance_id <> vEmptyId
  292.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  293.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id;*/
  294.        
  295.     /* 1.d. POS Return Shop */
  296.     /* 1.d.1) Item POS Return Shop yang bukan product assembly */
  297.     WITH temp_pos_product_balance_stock AS (
  298.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  299.             A.doc_no, A.doc_date, B.product_id, C.warehouse_id,
  300.             B.product_balance_id, vProductStatusGood AS product_status, B.base_uom_id, SUM(B.qty) AS qty
  301.         FROM i_trx_pos A, i_trx_pos_item B, m_warehouse_ou C
  302.         WHERE A.tenant_id = pTenantId AND
  303.             A.status IN (vStatusS, vStatusVoid) AND
  304.             A.process_no = B.process_no AND
  305.             A.trx_pos_id = B.trx_pos_id AND
  306.             A.tenant_id = B.tenant_id AND
  307.             B.product_balance_id <> vEmptyId AND
  308.             C.ou_id = A.ou_id AND
  309.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  310.             A.doc_type_id = vDocTypeIdPOSReturnShop AND
  311.             C.warehouse_id = pWarehouseId
  312.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  313.             A.doc_no, A.doc_date, B.product_id, B.product_balance_id, B.base_uom_id, C.warehouse_id
  314.     )
  315.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  316.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  317.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  318.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  319.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  320.     FROM temp_pos_product_balance_stock A
  321.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  322.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  323.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  324.        
  325.     /* 1.d.2) Item POS Return Shop yang merupakan product assembly */
  326.     WITH temp_pos_product_balance_stock AS (
  327.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  328.             A.doc_no, A.doc_date, C.product_id, D.warehouse_id,
  329.             C.product_balance_id, C.product_status, C.base_uom_id, SUM(C.qty) AS qty
  330.         FROM i_trx_pos A, i_trx_pos_item B, i_trx_pos_assembly_product C, m_warehouse_ou D
  331.         WHERE A.tenant_id = pTenantId AND
  332.             A.status IN (vStatusS, vStatusVoid) AND
  333.             A.process_no = B.process_no AND
  334.             A.trx_pos_id = B.trx_pos_id AND
  335.             A.tenant_id = B.tenant_id AND
  336.             B.product_balance_id = vEmptyId AND    
  337.             B.trx_pos_id = C.trx_pos_id AND
  338.             B.process_no = C.process_no AND
  339.             B.tenant_id = C.tenant_id AND
  340.             B.line_no = C.ref_line_no AND
  341.             D.ou_id = A.ou_id AND
  342.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  343.             A.doc_type_id = vDocTypeIdPOSReturnShop AND
  344.             D.warehouse_id = pWarehouseId
  345.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  346.             A.doc_no, A.doc_date, C.product_id, C.product_balance_id, C.product_status, C.base_uom_id, D.warehouse_id
  347.     )
  348.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  349.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  350.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  351.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  352.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  353.     FROM temp_pos_product_balance_stock A
  354.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  355.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  356.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  357.        
  358.        
  359.     /* 1.e. POS Shop In Shop */
  360.     /* 1.e.1)a) Item POS Shop In Shop yang bukan product assembly dan memiliki status S*/
  361.     WITH temp_pos_product_balance_stock AS (
  362.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  363.             A.doc_no, A.doc_date, B.product_id, C.warehouse_id,
  364.             B.product_balance_id, vProductStatusGood AS product_status, B.base_uom_id, SUM(B.qty) AS qty
  365.         FROM i_trx_pos A, i_trx_pos_item B, m_warehouse_ou C
  366.         WHERE A.tenant_id = pTenantId AND
  367.             A.status IN (vStatusS) AND
  368.             A.process_no = B.process_no AND
  369.             A.trx_pos_id = B.trx_pos_id AND
  370.             A.tenant_id = B.tenant_id AND
  371.             B.product_balance_id <> vEmptyId AND
  372.             C.ou_id = A.ou_id AND
  373.             --A.update_user_id <> vOutletUserId AND
  374.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  375.             A.doc_type_id = vDocTypeIdPOSShopInShop AND
  376.             C.warehouse_id = pWarehouseId
  377.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  378.             A.doc_no, A.doc_date, B.product_id, B.product_balance_id, B.base_uom_id, C.warehouse_id
  379.     )
  380.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  381.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  382.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  383.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  384.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  385.     FROM temp_pos_product_balance_stock A
  386.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  387.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  388.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  389.    
  390.     /* 1.e.1)b) Item POS Shop In Shop yang bukan product assembly dan memiliki status V*/
  391.     WITH temp_pos_product_balance_stock AS (
  392.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  393.             A.doc_no, A.doc_date, B.product_id, C.warehouse_id,
  394.             B.product_balance_id, vProductStatusGood AS product_status, B.base_uom_id, SUM(B.qty) AS qty
  395.         FROM i_trx_pos A, i_trx_pos_item B, m_warehouse_ou C
  396.         WHERE A.tenant_id = pTenantId AND
  397.             A.status IN (vStatusVoid) AND
  398.             A.process_no = B.process_no AND
  399.             A.trx_pos_id = B.trx_pos_id AND
  400.             A.tenant_id = B.tenant_id AND
  401.             B.product_balance_id <> vEmptyId AND
  402.             C.ou_id = A.ou_id AND
  403.             A.update_user_id <> vOutletUserId AND
  404.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  405.             A.doc_type_id = vDocTypeIdPOSShopInShop AND
  406.             C.warehouse_id = pWarehouseId
  407.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  408.             A.doc_no, A.doc_date, B.product_id, B.product_balance_id, B.base_uom_id, C.warehouse_id
  409.     )
  410.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  411.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  412.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  413.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  414.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  415.     FROM temp_pos_product_balance_stock A
  416.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  417.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  418.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  419.        
  420.        
  421.     /* 1.e.2)a) Item POS Shop In Shop yang merupakan product assembly dan memiliki status S*/
  422.     WITH temp_pos_product_balance_stock AS (
  423.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  424.             A.doc_no, A.doc_date, C.product_id, D.warehouse_id,
  425.             C.product_balance_id, C.product_status, C.base_uom_id, SUM(C.qty) AS qty
  426.         FROM i_trx_pos A, i_trx_pos_item B, i_trx_pos_assembly_product C, m_warehouse_ou D
  427.         WHERE A.tenant_id = pTenantId AND
  428.             A.status IN (vStatusS) AND
  429.             A.process_no = B.process_no AND
  430.             A.trx_pos_id = B.trx_pos_id AND
  431.             A.tenant_id = B.tenant_id AND
  432.             B.product_balance_id = vEmptyId AND    
  433.             B.trx_pos_id = C.trx_pos_id AND
  434.             B.process_no = C.process_no AND
  435.             B.tenant_id = C.tenant_id AND
  436.             B.line_no = C.ref_line_no AND
  437.             D.ou_id = A.ou_id AND
  438.             --A.update_user_id <> vOutletUserId AND
  439.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  440.             A.doc_type_id = vDocTypeIdPOSShopInShop AND
  441.             D.warehouse_id = pWarehouseId
  442.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  443.             A.doc_no, A.doc_date, C.product_id, C.product_balance_id, C.product_status, C.base_uom_id, D.warehouse_id
  444.     )
  445.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  446.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  447.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  448.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  449.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  450.     FROM temp_pos_product_balance_stock A
  451.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  452.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  453.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  454.    
  455.     /* 1.e.2)b) Item POS Shop In Shop yang merupakan product assembly dan memiliki status V*/
  456.     WITH temp_pos_product_balance_stock AS (
  457.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  458.             A.doc_no, A.doc_date, C.product_id, D.warehouse_id,
  459.             C.product_balance_id, C.product_status, C.base_uom_id, SUM(C.qty) AS qty
  460.         FROM i_trx_pos A, i_trx_pos_item B, i_trx_pos_assembly_product C, m_warehouse_ou D
  461.         WHERE A.tenant_id = pTenantId AND
  462.             A.status IN (vStatusVoid) AND
  463.             A.process_no = B.process_no AND
  464.             A.trx_pos_id = B.trx_pos_id AND
  465.             A.tenant_id = B.tenant_id AND
  466.             B.product_balance_id = vEmptyId AND    
  467.             B.trx_pos_id = C.trx_pos_id AND
  468.             B.process_no = C.process_no AND
  469.             B.tenant_id = C.tenant_id AND
  470.             B.line_no = C.ref_line_no AND
  471.             D.ou_id = A.ou_id AND
  472.             A.update_user_id <> vOutletUserId AND
  473.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  474.             A.doc_type_id = vDocTypeIdPOSShopInShop AND
  475.             D.warehouse_id = pWarehouseId
  476.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  477.             A.doc_no, A.doc_date, C.product_id, C.product_balance_id, C.product_status, C.base_uom_id, D.warehouse_id
  478.     )
  479.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  480.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  481.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  482.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  483.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  484.     FROM temp_pos_product_balance_stock A
  485.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  486.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  487.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  488.    
  489.        
  490.     /* 1.e.3) Item POS Shop In Shop yang akan dimasukkan sebagai adjustment stock */
  491.     /*WITH temp_pos_product_balance_stock AS (
  492.         SELECT A.tenant_id, A.ou_id, B.doc_type_id, B.trx_inventory_id AS ref_id, vEmptyId AS partner_id,
  493.             B.doc_no, B.doc_date, C.product_id, B.warehouse_from_id AS warehouse_id,
  494.             C.product_balance_id, C.product_status, C.base_uom_id, SUM(C.qty_realization) AS qty
  495.         FROM i_outlet A, i_trx_inventory B, i_trx_inventory_item C
  496.         WHERE A.tenant_id = pTenantId AND
  497.             A.tenant_id = B.tenant_id AND
  498.             A.ou_id = B.ou_id AND
  499.             B.process_no = C.process_no AND
  500.             B.trx_inventory_id = C.trx_inventory_id AND
  501.             B.tenant_id = C.tenant_id AND
  502.             B.doc_date BETWEEN pDateFrom AND pDateTo AND
  503.             B.doc_type_id = vDocTypeIdAdjStockPOS AND
  504.             C.product_balance_id <> vEmptyId
  505.         GROUP BY A.tenant_id, A.ou_id, B.doc_type_id, B.trx_inventory_id, B.warehouse_from_id,
  506.             B.doc_no, B.doc_date, C.product_id, C.product_balance_id, C.product_status, C.base_uom_id
  507.     )
  508.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  509.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  510.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  511.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  512.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty)
  513.     FROM temp_pos_product_balance_stock A
  514.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  515.     WHERE A.doc_type_id = vDocTypeIdAdjStockPOS AND
  516.         A.product_balance_id <> vEmptyId
  517.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  518.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id;*/
  519.    
  520.     /* 1.f. POS Return Shop In Shop */
  521.     /* 1.f.1) Item POS Return Shop In Shop yang bukan product assembly */
  522.     WITH temp_pos_product_balance_stock AS (
  523.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  524.             A.doc_no, A.doc_date, B.product_id, C.warehouse_id,
  525.             B.product_balance_id, vProductStatusGood AS product_status, B.base_uom_id, SUM(B.qty) AS qty
  526.         FROM i_trx_pos A, i_trx_pos_item B, m_warehouse_ou C
  527.         WHERE A.tenant_id = pTenantId AND
  528.             A.status IN (vStatusS, vStatusVoid) AND
  529.             A.process_no = B.process_no AND
  530.             A.trx_pos_id = B.trx_pos_id AND
  531.             A.tenant_id = B.tenant_id AND
  532.             B.product_balance_id <> vEmptyId AND
  533.             C.ou_id = A.ou_id AND
  534.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  535.             A.doc_type_id = vDocTypeIdPOSReturnShopInShop AND
  536.             C.warehouse_id = pWarehouseId
  537.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  538.             A.doc_no, A.doc_date, B.product_id, B.product_balance_id, B.base_uom_id, C.warehouse_id
  539.     )
  540.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  541.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  542.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  543.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  544.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  545.     FROM temp_pos_product_balance_stock A
  546.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  547.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  548.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  549.        
  550.     /* 1.f.2) Item POS Return Shop In Shop yang merupakan product assembly */
  551.     WITH temp_pos_product_balance_stock AS (
  552.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  553.             A.doc_no, A.doc_date, C.product_id, D.warehouse_id,
  554.             C.product_balance_id, C.product_status, C.base_uom_id, SUM(C.qty) AS qty
  555.         FROM i_trx_pos A, i_trx_pos_item B, i_trx_pos_assembly_product C, m_warehouse_ou D
  556.         WHERE A.tenant_id = pTenantId AND
  557.             A.status IN (vStatusS, vStatusVoid) AND
  558.             A.process_no = B.process_no AND
  559.             A.trx_pos_id = B.trx_pos_id AND
  560.             A.tenant_id = B.tenant_id AND
  561.             B.product_balance_id = vEmptyId AND    
  562.             B.trx_pos_id = C.trx_pos_id AND
  563.             B.process_no = C.process_no AND
  564.             B.tenant_id = C.tenant_id AND
  565.             B.line_no = C.ref_line_no AND
  566.             D.ou_id = A.ou_id AND
  567.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  568.             A.doc_type_id = vDocTypeIdPOSReturnShopInShop AND
  569.             D.warehouse_id = pWarehouseId
  570.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  571.             A.doc_no, A.doc_date, C.product_id, C.product_balance_id, C.product_status, C.base_uom_id, D.warehouse_id
  572.     )
  573.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  574.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  575.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  576.     SELECT pSessionId, A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  577.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  578.     FROM temp_pos_product_balance_stock A
  579.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  580.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  581.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id;
  582.        
  583.    
  584.     /* 1.g. Void POS Shop */
  585.     /* 1.g.1) Item Void POS Shop yang bukan product assembly */
  586.     WITH temp_pos_product_balance_stock AS (
  587.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  588.             A.doc_no, A.doc_date, B.product_id, C.warehouse_id,
  589.             B.product_balance_id, vProductStatusGood AS product_status, B.base_uom_id, SUM(B.qty) * -1 AS qty
  590.         FROM i_trx_pos A, i_trx_pos_item B, m_warehouse_ou C
  591.         WHERE A.tenant_id = pTenantId AND
  592.             A.status IN (vStatusVoid) AND
  593.             A.process_no = B.process_no AND
  594.             A.trx_pos_id = B.trx_pos_id AND
  595.             A.tenant_id = B.tenant_id AND
  596.             B.product_balance_id <> vEmptyId AND
  597.             C.ou_id = A.ou_id AND
  598.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  599.             A.doc_type_id = vDocTypeIdPOSShop AND
  600.             C.warehouse_id = pWarehouseId
  601.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  602.             A.doc_no, A.doc_date, B.product_id, B.product_balance_id, B.base_uom_id, C.warehouse_id
  603.     )
  604.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  605.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  606.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  607.     SELECT pSessionId, A.tenant_id, B.ou_id, vDocTypeIdVoidPOSShop, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  608.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  609.     FROM temp_pos_product_balance_stock A
  610.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  611.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  612.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  613.    
  614.     /* 1.g.2) Item Void POS Shop yang merupakan product assembly */
  615.     WITH temp_pos_product_balance_stock AS (
  616.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  617.             A.doc_no, A.doc_date, C.product_id, D.warehouse_id,
  618.             C.product_balance_id, C.product_status, C.base_uom_id, SUM(C.qty) * -1 AS qty
  619.         FROM i_trx_pos A, i_trx_pos_item B, i_trx_pos_assembly_product C, m_warehouse_ou D
  620.         WHERE A.tenant_id = pTenantId AND
  621.             A.status IN (vStatusVoid) AND
  622.             A.process_no = B.process_no AND
  623.             A.trx_pos_id = B.trx_pos_id AND
  624.             A.tenant_id = B.tenant_id AND
  625.             B.product_balance_id = vEmptyId AND    
  626.             B.trx_pos_id = C.trx_pos_id AND
  627.             B.process_no = C.process_no AND
  628.             B.tenant_id = C.tenant_id AND
  629.             B.line_no = C.ref_line_no AND
  630.             D.ou_id = A.ou_id AND
  631.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  632.             A.doc_type_id = vDocTypeIdPOSShop AND
  633.             D.warehouse_id = pWarehouseId
  634.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  635.             A.doc_no, A.doc_date, C.product_id, C.product_balance_id, C.product_status, C.base_uom_id, D.warehouse_id
  636.     )
  637.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  638.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  639.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  640.     SELECT pSessionId, A.tenant_id, B.ou_id, vDocTypeIdVoidPOSShop, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  641.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  642.     FROM temp_pos_product_balance_stock A
  643.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  644.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  645.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  646.        
  647.    
  648.     /* 1.h. Void POS Shop In Shop */
  649.     /* 1.h.1) Item Void POS Shop In Shop yang bukan product assembly */
  650.     WITH temp_pos_product_balance_stock AS (
  651.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  652.             A.doc_no, A.doc_date, B.product_id, C.warehouse_id,
  653.             B.product_balance_id, vProductStatusGood AS product_status, B.base_uom_id, SUM(B.qty) * -1 AS qty
  654.         FROM i_trx_pos A, i_trx_pos_item B, m_warehouse_ou C
  655.         WHERE A.tenant_id = pTenantId AND
  656.             A.status IN (vStatusVoid) AND
  657.             A.process_no = B.process_no AND
  658.             A.trx_pos_id = B.trx_pos_id AND
  659.             A.tenant_id = B.tenant_id AND
  660.             B.product_balance_id <> vEmptyId AND
  661.             C.ou_id = A.ou_id AND
  662.             A.update_user_id <> vOutletUserId AND
  663.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  664.             A.doc_type_id = vDocTypeIdPOSShopInShop AND
  665.             C.warehouse_id = pWarehouseId
  666.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  667.             A.doc_no, A.doc_date, B.product_id, B.product_balance_id, B.base_uom_id, C.warehouse_id
  668.     )
  669.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  670.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  671.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  672.     SELECT pSessionId, A.tenant_id, B.ou_id, vDocTypeIdVoidPOSShopInShop, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  673.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  674.     FROM temp_pos_product_balance_stock A
  675.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  676.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  677.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  678.    
  679.     /* 1.h.2) Item Void POS Shop In Shop yang merupakan product assembly */
  680.     WITH temp_pos_product_balance_stock AS (
  681.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id AS ref_id, vEmptyId AS partner_id,
  682.             A.doc_no, A.doc_date, C.product_id, D.warehouse_id,
  683.             C.product_balance_id, C.product_status, C.base_uom_id, SUM(C.qty) * -1 AS qty
  684.         FROM i_trx_pos A, i_trx_pos_item B, i_trx_pos_assembly_product C, m_warehouse_ou D
  685.         WHERE A.tenant_id = pTenantId AND
  686.             A.status IN (vStatusVoid) AND
  687.             A.process_no = B.process_no AND
  688.             A.trx_pos_id = B.trx_pos_id AND
  689.             A.tenant_id = B.tenant_id AND
  690.             B.product_balance_id = vEmptyId AND    
  691.             B.trx_pos_id = C.trx_pos_id AND
  692.             B.process_no = C.process_no AND
  693.             B.tenant_id = C.tenant_id AND
  694.             B.line_no = C.ref_line_no AND
  695.             D.ou_id = A.ou_id AND
  696.             A.update_user_id <> vOutletUserId AND
  697.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  698.             A.doc_type_id = vDocTypeIdPOSShopInShop AND
  699.             D.warehouse_id = pWarehouseId
  700.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  701.             A.doc_no, A.doc_date, C.product_id, C.product_balance_id, C.product_status, C.base_uom_id, D.warehouse_id
  702.     )
  703.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  704.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  705.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  706.     SELECT pSessionId, A.tenant_id, B.ou_id, vDocTypeIdVoidPOSShopInShop, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  707.         A.product_id, vSpaceValue, vSpaceValue, A.product_balance_id, A.warehouse_id, A.product_status, A.base_uom_id, SUM(A.qty) * -1
  708.     FROM temp_pos_product_balance_stock A
  709.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  710.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  711.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  712.            
  713.        
  714.     /* 1.i. RETURN NOTE */
  715.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  716.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  717.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  718.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  719.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id, SUM(B.qty_realization)
  720.     FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  721.     WHERE A.inventory_id = B.inventory_id   AND
  722.         A.warehouse_to_id = C.warehouse_id AND
  723.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  724.         A.status_doc = vStatusRelease AND
  725.         A.doc_type_id = vDocTypeIdReturnNote AND
  726.         A.tenant_id = pTenantId AND
  727.         A.warehouse_to_id = pWarehouseId
  728.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  729.         B.product_id, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id;
  730.    
  731.        
  732.     /* 1.j. CLAIM NOTE*/
  733.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  734.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  735.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  736.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  737.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, SUM(B.qty_realization) * -1
  738.     FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  739.     WHERE A.inventory_id = B.inventory_id AND
  740.         C.warehouse_id = A.warehouse_from_id AND
  741.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  742.         A.status_doc = vStatusRelease AND
  743.         A.doc_type_id = vDocTypeIdClaimNote AND
  744.         A.warehouse_from_id = pWarehouseId
  745.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  746.         B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  747.    
  748.    
  749.     /* 1.k. ADJUSTMENT STOCK QTY*/
  750.     /* 1.k.1) Item Adjustment Stock Qty dengan Qty > 0 */
  751.     WITH temp_in_product_balance AS (
  752.         SELECT A.tenant_id, A.inventory_id, B.inventory_item_id, B.product_id, B.product_status,
  753.             B.serial_number, B.lot_number, B.qty_realization, B.base_uom_id,
  754.             COALESCE(C.flg_buy_konsinyasi, vFlagNo) AS flg_buy_konsinyasi
  755.         FROM in_inventory A
  756.         INNER JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  757.         LEFT JOIN m_product_custom C ON B.product_id = C.product_id AND C.flg_buy_konsinyasi = vFlagYes
  758.         WHERE A.doc_date BETWEEN pDateFrom AND pDateTo AND
  759.             A.status_doc = vStatusRelease AND
  760.             A.doc_type_id = vDocTypeIdAdjStockQty AND
  761.             A.tenant_id = pTenantId
  762.     )
  763.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  764.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  765.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  766.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  767.         B.product_id, B.serial_number, B.lot_number, D.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, SUM(B.qty_realization)
  768.     FROM in_inventory A, temp_in_product_balance B, m_warehouse_ou C, in_product_balance D
  769.     WHERE A.inventory_id = B.inventory_id AND
  770.         B.qty_realization > 0 AND
  771.         B.flg_buy_konsinyasi = vFlagNo AND
  772.         A.warehouse_from_id = C.warehouse_id AND
  773.         B.tenant_id = D.tenant_id AND
  774.         B.product_id = D.product_id AND
  775.         B.serial_number = D.serial_number AND
  776.         B.lot_number = D.lot_number AND
  777.         A.warehouse_from_id = pWarehouseId
  778.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  779.         B.product_id, B.serial_number, B.lot_number, D.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  780.    
  781.     /* 1.k.2) Item Adjustment Stock Qty dengan Qty < 0 */
  782.     WITH temp_in_product_balance AS (
  783.         SELECT A.tenant_id, A.inventory_id, B.inventory_item_id, B.product_id, B.product_status,
  784.             B.serial_number, B.lot_number, B.qty_realization, B.base_uom_id,
  785.             COALESCE(C.flg_buy_konsinyasi, vFlagNo) AS flg_buy_konsinyasi
  786.         FROM in_inventory A
  787.         INNER JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  788.         LEFT JOIN m_product_custom C ON B.product_id = C.product_id AND C.flg_buy_konsinyasi = vFlagYes
  789.         WHERE A.doc_date BETWEEN pDateFrom AND pDateTo AND
  790.             A.status_doc = vStatusRelease AND
  791.             A.doc_type_id = vDocTypeIdAdjStockQty AND
  792.             A.tenant_id = pTenantId
  793.     )
  794.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  795.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  796.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  797.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  798.         B.product_id, B.serial_number, B.lot_number, D.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, SUM(B.qty_realization)
  799.     FROM in_inventory A, temp_in_product_balance B, m_warehouse_ou C, in_product_balance D
  800.     WHERE A.inventory_id = B.inventory_id AND
  801.         B.qty_realization < 0 AND
  802.         B.flg_buy_konsinyasi = vFlagNo AND
  803.         A.warehouse_from_id = C.warehouse_id AND
  804.         B.tenant_id = D.tenant_id AND
  805.         B.product_id = D.product_id AND
  806.         B.serial_number = D.serial_number AND
  807.         B.lot_number = D.lot_number AND
  808.         A.warehouse_from_id = pWarehouseId
  809.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  810.         B.product_id, B.serial_number, B.lot_number, D.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  811.    
  812.    
  813.     /* 1.l. ADJUSTMENT STOCK AMOUNT */
  814.     WITH temp_in_product_price_balance AS (
  815.         SELECT A.tenant_id, A.ou_from_id AS ou_id, A.doc_type_id, A.doc_no, A.doc_date, A.partner_id, A.warehouse_from_id AS warehouse_id,
  816.             A.inventory_id, B.inventory_item_id, B.product_id, B.product_status,
  817.             B.serial_number, B.lot_number, B.qty_realization, B.base_uom_id
  818.         FROM in_inventory A, in_inventory_item B
  819.         WHERE A.inventory_id = B.inventory_id AND
  820.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  821.             A.status_doc = vStatusRelease AND
  822.             A.doc_type_id = vDocTypeIdAdjStockAmount AND
  823.             A.tenant_id = pTenantId
  824.     )
  825.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  826.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  827.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  828.     SELECT pSessionId, B.tenant_id, C.ou_id, B.doc_type_id, B.inventory_id, B.doc_no, B.doc_date, B.partner_id,
  829.         B.product_id, B.serial_number, B.lot_number, D.product_balance_id, B.warehouse_id, B.product_status, B.base_uom_id, SUM(B.qty_realization)
  830.     FROM temp_in_product_price_balance B, m_warehouse_ou C, in_product_balance D
  831.     WHERE B.warehouse_id = C.warehouse_id AND
  832.         B.tenant_id = D.tenant_id AND
  833.         B.product_id = D.product_id AND
  834.         B.serial_number = D.serial_number AND
  835.         B.lot_number = D.lot_number AND
  836.         B.warehouse_id = pWarehouseId
  837.     GROUP BY B.tenant_id, C.ou_id, B.doc_type_id, B.inventory_id, B.doc_no, B.doc_date, B.partner_id,
  838.         B.product_id, B.serial_number, B.lot_number, D.product_balance_id, B.warehouse_id, B.product_status, B.base_uom_id;
  839.        
  840.  
  841.     /* 1.m. DEIVERY ORDER RECEIPT */
  842.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  843.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  844.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  845.     SELECT pSessionId, A.tenant_id, E.ou_id, A.doc_type_id, A.do_receipt_id, A.doc_no, A.doc_date, D.partner_ship_to_id,
  846.         C.product_id, vSpaceValue, vSpaceValue, C.product_balance_id, A.warehouse_id, C.product_status, C.uom_id, SUM(C.qty_return)
  847.     FROM in_do_receipt A, in_do_receipt_item B, in_do_receipt_product C, sl_do D, m_warehouse_ou E
  848.     WHERE A.do_receipt_id = B.do_receipt_id AND
  849.         B.do_receipt_item_id = C.do_receipt_item_id AND
  850.         A.ref_id = D.do_id AND
  851.         A.warehouse_id = E.warehouse_id AND
  852.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  853.         A.status_doc = vStatusRelease AND
  854.         A.doc_type_id = vDocTypeIdDoReceipt AND
  855.         A.tenant_id = pTenantId AND
  856.         A.warehouse_id = pWarehouseId
  857.     GROUP BY A.tenant_id, E.ou_id, A.doc_type_id, A.do_receipt_id, A.doc_no, A.doc_date, D.partner_ship_to_id,
  858.             C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.uom_id;
  859.    
  860.    
  861.     /* 1.n. GOODS TRANSFER OUT FROM OUTLET*/
  862.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  863.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  864.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  865.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  866.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, SUM(B.qty_realization) * -1
  867.     FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  868.     WHERE A.inventory_id = B.inventory_id AND
  869.         A.warehouse_from_id = C.warehouse_id AND
  870.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  871.         A.status_doc = vStatusRelease AND
  872.         A.doc_type_id = vDocTypeIdGoodsTrfOutOutlet AND
  873.         A.tenant_id = pTenantId AND
  874.         A.warehouse_from_id = pWarehouseId
  875.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  876.         B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  877.            
  878.            
  879.     /* 1.o. GOODS TRANSFER OUT */
  880.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  881.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  882.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  883.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  884.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, SUM(B.qty_realization) * -1
  885.     FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  886.     WHERE A.inventory_id = B.inventory_id AND
  887.         A.warehouse_from_id = C.warehouse_id AND
  888.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  889.         A.status_doc = vStatusRelease AND
  890.         A.doc_type_id = vDocTypeIdGoodsTrfOut AND
  891.         A.tenant_id = pTenantId AND
  892.         A.warehouse_from_id = pWarehouseId
  893.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  894.         B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  895.    
  896.        
  897.     /* 1.p. GOODS TRANSFER IN FROM OUTLET */
  898.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  899.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  900.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  901.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  902.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id, SUM(B.qty_realization)
  903.     FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  904.     WHERE A.inventory_id = B.inventory_id AND
  905.         A.warehouse_to_id = C.warehouse_id AND
  906.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  907.         A.status_doc = vStatusRelease AND
  908.         A.doc_type_id = vDocTypeIdGoodsTrfInOutlet AND
  909.         A.tenant_id = pTenantId AND
  910.         A.warehouse_to_id = pWarehouseId
  911.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  912.         B.product_id, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id;
  913.        
  914.        
  915.     /* 1.q. GOODS TRANSFER IN */
  916.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  917.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  918.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  919.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  920.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id, SUM(B.qty_realization)
  921.     FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  922.     WHERE A.inventory_id = B.inventory_id AND
  923.         A.warehouse_to_id = C.warehouse_id AND
  924.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  925.         A.status_doc = vStatusRelease AND
  926.         A.doc_type_id = vDocTypeIdGoodsTrfIn AND
  927.         A.tenant_id = pTenantId AND
  928.         A.warehouse_to_id = pWarehouseId
  929.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  930.         B.product_id, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id;
  931.        
  932.    
  933.     /* 1.r. GOODS TRANSFER IN RECEIPT */
  934.     /* 1.r.1) Item GTI Receipt yang missing dan rejected */
  935.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  936.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  937.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  938.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  939.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, SUM(B.qty_realization)
  940.     FROM in_inventory A, in_inventory_item_receipt B, m_warehouse_ou C
  941.     WHERE A.inventory_id = B.inventory_id AND
  942.         B.reason_receipt_code IN (vFlagMissing,vFlagRejected) AND
  943.         A.warehouse_from_id = C.warehouse_id AND
  944.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  945.         A.status_doc = vStatusRelease AND
  946.         A.doc_type_id = vDocTypeIdGoodsTrfInReceipt AND
  947.         A.tenant_id = pTenantId AND
  948.         A.warehouse_from_id = pWarehouseId
  949.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  950.         B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  951.        
  952.     /* 1.r.2) Item GTI Receipt yang correction */
  953.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  954.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  955.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  956.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  957.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id, SUM(B.qty_realization)
  958.     FROM in_inventory A, in_inventory_item_receipt B, m_warehouse_ou C
  959.     WHERE A.inventory_id = B.inventory_id AND
  960.         B.reason_receipt_code = vFlagCorrection AND
  961.         A.warehouse_to_id = C.warehouse_id AND
  962.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  963.         A.status_doc = vStatusRelease AND
  964.         A.doc_type_id = vDocTypeIdGoodsTrfInReceipt AND
  965.         A.tenant_id = pTenantId AND
  966.         A.warehouse_to_id = pWarehouseId
  967.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  968.         B.product_id, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id;
  969.        
  970.     /* 1.r.3) Item GTI Receipt yang lost */
  971.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  972.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  973.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  974.     SELECT pSessionId, A.tenant_id, C.ou_id, vGoodsTransferInReceiptLostDocTypeId, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  975.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, SUM(-1 * B.qty_realization)
  976.     FROM in_inventory A, in_inventory_item_receipt B, m_warehouse_ou C
  977.     WHERE A.inventory_id = B.inventory_id AND
  978.         B.reason_receipt_code = vFlagLost AND
  979.         A.warehouse_from_id = C.warehouse_id AND
  980.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  981.         A.status_doc = vStatusRelease AND
  982.         A.doc_type_id = vDocTypeIdGoodsTrfInReceipt AND
  983.         A.tenant_id = pTenantId AND
  984.         A.warehouse_from_id = pWarehouseId
  985.     GROUP BY A.tenant_id, C.ou_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  986.              B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  987.    
  988.              
  989.     /* 1.s. DELIVERY GOODS BORROWING */
  990.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  991.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  992.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  993.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  994.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, SUM(B.qty_realization) * -1
  995.     FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  996.     WHERE A.inventory_id = B.inventory_id AND
  997.         A.warehouse_from_id = C.warehouse_id AND
  998.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  999.         A.status_doc = vStatusRelease AND
  1000.         A.doc_type_id = vDocTypeIdGoodsBorrowing AND
  1001.         A.tenant_id = pTenantId AND
  1002.         A.warehouse_from_id = pWarehouseId
  1003.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  1004.         B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  1005.              
  1006.        
  1007.     /* 1.t. RETURN GOODS BORROWING */
  1008.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  1009.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  1010.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  1011.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  1012.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id, SUM(B.qty_realization)
  1013.     FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  1014.     WHERE A.inventory_id = B.inventory_id AND
  1015.         A.warehouse_to_id = C.warehouse_id AND
  1016.         A.doc_date BETWEEN pDateFrom AND pDateTo AND
  1017.         A.status_doc = vStatusRelease AND
  1018.         A.doc_type_id = vDocTypeIdReturnGoodsBorrowing AND
  1019.         A.tenant_id = pTenantId AND
  1020.         A.warehouse_from_id = pWarehouseId
  1021.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  1022.         B.product_id, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id;
  1023.        
  1024.        
  1025.     /* 1.u. DELIVERY GOODS OUT OTHER */
  1026.     WITH temp_in_product_balance AS (
  1027.         SELECT A.tenant_id, A.inventory_id, B.inventory_item_id, B.product_balance_id, B.product_id, B.product_status,
  1028.             B.serial_number, B.product_expired_date, B.product_year_made, B.lot_number, B.qty_realization, B.base_uom_id
  1029.         FROM in_inventory A, in_inventory_item B
  1030.         WHERE A.inventory_id = B.inventory_id AND
  1031.             A.doc_date BETWEEN pDateFrom AND pDateTo AND
  1032.             A.status_doc = vStatusRelease AND
  1033.             A.doc_type_id = vDocTypeIdGoodsOutOther AND
  1034.             A.tenant_id = pTenantId AND
  1035.             A.warehouse_from_id = pWarehouseId
  1036.     )
  1037.     INSERT INTO tt_check_log_product_balance_stock_for_trx
  1038.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  1039.         product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id, qty)
  1040.     SELECT pSessionId, A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  1041.         B.product_id, vSpaceValue, vSpaceValue, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, -1 * SUM(B.qty_realization)
  1042.     FROM in_inventory A, temp_in_product_balance B, m_warehouse_ou C
  1043.     WHERE A.inventory_id = B.inventory_id AND
  1044.         A.warehouse_from_id = C.warehouse_id
  1045.     GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  1046.         B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  1047.        
  1048.        
  1049.     /* 2. Merge log untuk POS */
  1050.     WITH grouped_tt_check_log_product_balance_stock_for_trx AS(
  1051.         SELECT session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  1052.             product_id, serial_number, lot_number, product_balance_id,
  1053.             warehouse_id, product_status, base_uom_id, SUM(qty) AS summed_qty
  1054.         FROM tt_check_log_product_balance_stock_for_trx
  1055.         WHERE doc_type_id IN (vDocTypeIdPOSShop) AND
  1056.             session_id = pSessionId AND
  1057.             tenant_id = pTenantId AND
  1058.             warehouse_id = pWarehouseId
  1059.         GROUP BY session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  1060.             product_id, serial_number, lot_number, product_balance_id, warehouse_id, product_status, base_uom_id
  1061.     )        
  1062.     UPDATE tt_check_log_product_balance_stock_for_trx Z SET qty = A.summed_qty
  1063.     FROM grouped_tt_check_log_product_balance_stock_for_trx A
  1064.     WHERE A.session_id = Z.session_id AND
  1065.         A.tenant_id = Z.tenant_id AND
  1066.         A.ou_id = Z.ou_id AND
  1067.         A.doc_type_id = Z.doc_type_id AND
  1068.         A.ref_id = Z.ref_id AND
  1069.         A.doc_no = Z.doc_no AND
  1070.         A.doc_date = Z.doc_date AND
  1071.         A.partner_id = Z.partner_id AND
  1072.         A.product_id = Z.product_id AND
  1073.         A.serial_number = Z.serial_number AND
  1074.         A.lot_number = Z.lot_number AND
  1075.         A.product_balance_id = Z.product_balance_id AND
  1076.         A.warehouse_id = Z.warehouse_id AND
  1077.         A.product_status = Z.product_status AND
  1078.         A.base_uom_id = Z.base_uom_id AND
  1079.         Z.session_id = pSessionId AND
  1080.         Z.tenant_id = pTenantId AND
  1081.         Z.warehouse_id = pWarehouseId AND
  1082.         Z.doc_type_id IN (vDocTypeIdPOSShop, vDocTypeIdPOSReturnShop, vDocTypeIdPOSShopInShop, vDocTypeIdPOSReturnShopInShop);
  1083.        
  1084.        
  1085.     /* 3. Simpan log_product_balance_stock yang termasuk dalam periode */
  1086.     INSERT INTO tt_check_log_product_balance_stock_for_log
  1087.         (session_id, log_product_balance_stock_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  1088.         product_id, warehouse_id, product_balance_id, product_status, base_uom_id, qty,
  1089.         version, create_datetime, create_user_id, update_datetime, update_user_id)
  1090.     SELECT pSessionId, log_product_balance_stock_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  1091.         product_id, warehouse_id, product_balance_id, product_status, base_uom_id, qty,
  1092.         version, create_datetime, create_user_id, update_datetime, update_user_id
  1093.     FROM in_log_product_balance_stock
  1094.     WHERE doc_date BETWEEN pDateFrom AND pDateTo AND
  1095.         tenant_id = pTenantId AND
  1096.         warehouse_id = pWarehouseId;       
  1097.        
  1098.        
  1099.     /* 4. Update id untuk log_product_balance_stock yang ditemukan */
  1100.     UPDATE tt_check_log_product_balance_stock_for_trx Z
  1101.     SET log_product_balance_stock_id = A.log_product_balance_stock_id
  1102.     FROM tt_check_log_product_balance_stock_for_log A
  1103.     WHERE A.tenant_id = Z.tenant_id AND
  1104.         A.ou_id = Z.ou_id AND
  1105.         A.doc_type_id = Z.doc_type_id AND
  1106.         A.ref_id = Z.ref_id AND
  1107.         A.doc_no = Z.doc_no AND
  1108.         A.doc_date = Z.doc_date AND
  1109.         A.warehouse_id = Z.warehouse_id AND
  1110.         A.product_id = Z.product_id AND
  1111.         A.product_balance_id = Z.product_balance_id AND
  1112.         A.product_status = Z.product_status AND
  1113.         A.qty = Z.qty AND
  1114.         Z.session_id = pSessionId AND
  1115.         Z.tenant_id = pTenantId AND
  1116.         Z.warehouse_id = pWarehouseId;
  1117.        
  1118.    
  1119.     /* 5. Simpan log yang kurang sesuai ke dalam tabel result */
  1120.     INSERT INTO tt_check_log_product_balance_stock_for_result
  1121.         (session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  1122.         product_id, expected_warehouse_id, expected_product_balance_id, product_status, base_uom_id, expected_qty)
  1123.     SELECT session_id, tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  1124.         product_id, warehouse_id, product_balance_id, product_status, base_uom_id, qty
  1125.     FROM tt_check_log_product_balance_stock_for_trx
  1126.     WHERE log_product_balance_stock_id = vEmptyId AND
  1127.         session_id = pSessionId AND
  1128.         tenant_id = pTenantId AND
  1129.         warehouse_id = pWarehouseId;
  1130.    
  1131.    
  1132.     /* 6. Cari log_product_balance_stock yang kurang sesuai */
  1133.     UPDATE tt_check_log_product_balance_stock_for_result Z
  1134.     SET actual_qty = A.qty, actual_product_balance_id = A.product_balance_id, actual_warehouse_id = A.warehouse_id
  1135.     FROM in_log_product_balance_stock A
  1136.     WHERE A.tenant_id = Z.tenant_id AND
  1137.         A.ou_id = Z.ou_id AND
  1138.         A.doc_type_id = Z.doc_type_id AND
  1139.         A.ref_id = Z.ref_id AND
  1140.         A.doc_no = Z.doc_no AND
  1141.         A.doc_date = Z.doc_date AND
  1142.         A.product_id = Z.product_id AND
  1143.         A.product_status = Z.product_status AND
  1144.         Z.session_id = pSessionId AND
  1145.         Z.tenant_id = pTenantId AND
  1146.         Z.expected_warehouse_id = pWarehouseId;
  1147.    
  1148.        
  1149. END;   
  1150. $BODY$
  1151.   LANGUAGE plpgsql VOLATILE
  1152.   COST 100;
  1153.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement