Advertisement
aadddrr

f_check_log_product_balance_stock

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