aadddrr

r_report_pemenuhan_stok_20180525

May 23rd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Modified Fitra 2017 Des 06, Menampilkan informasi Induk RGTO dan GTO tanpa referensi
  2. -- Fitra 2017 Des 15, saat update qty GTO juga mengupdate qty RGTO = qty GTO
  3. /* Modified by Adrian, May 9, 2018, memisahkan RGTO berdasarkan:
  4.  * 1. RGTO dengan PO dan blm GTO
  5.  * 2. RGTO dengan PO dan sdh GTO
  6.  * 3. RGTO tanpa PO dan blm GTO
  7.  * 4. RGTO tanpa PO dan sdh GTO
  8.  */
  9. CREATE OR REPLACE FUNCTION r_report_pemenuhan_stok(character varying, bigint, bigint, bigint, bigint, character varying, character varying, character varying, character varying, character varying,
  10.                                     character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)
  11.   RETURNS SETOF refcursor AS
  12. $BODY$
  13. DECLARE
  14.     pRefHeader              REFCURSOR := 'refHeader';
  15.     pRefDetail              REFCURSOR := 'refDetail';
  16.  
  17.     pSessionId              ALIAS FOR $1;
  18.     pTenantId               ALIAS FOR $2;  
  19.     pOuId                   ALIAS FOR $3;
  20.     pCtgrProductId          ALIAS FOR $4;
  21.     pSubCtgrProductId       ALIAS FOR $5;
  22.     pStyleProduct           ALIAS FOR $6;
  23.     pProductCodeName        ALIAS FOR $7;
  24.     pPeriodFrom             ALIAS FOR $8;
  25.     pPeriodTo               ALIAS FOR $9;
  26.     pRgtoNo                 ALIAS FOR $10;
  27.     pRgtoRemark             ALIAS FOR $11;
  28.     pPoNo                   ALIAS FOR $12; -- diisi string kosong karena di UI filter dihilangkan
  29.     pPoRemark               ALIAS FOR $13; -- diisi string kosong karena di UI filter dihilangkan
  30.     pGtoNo                  ALIAS FOR $14;
  31.     pGtoRemark              ALIAS FOR $15;
  32.     pGtiNo                  ALIAS FOR $16;
  33.     pGtiRemark              ALIAS FOR $17;
  34.     pGtirNo                 ALIAS FOR $18;
  35.     pGtirRemark             ALIAS FOR $19;
  36.  
  37.     vFilterCtgrProduct      character varying= '';
  38.     vFilterSubCtgrProduct   character varying= '';
  39.     vFilterGolonganProduct  character varying= '';
  40.     vFilterProductCodeName  character varying= '';
  41.     vFilterRgtoNo   character varying= '';
  42.     vFilterRgtoRemark   character varying= '';
  43.     vFilterPoNo     character varying= '';
  44.     vFilterPoRemark     character varying= '';
  45.     vFilterPoNotExists      boolean;
  46.     vFilterGto      character varying= '';
  47.     vFilterGti      character varying= '';
  48.     vFilterGtir     character varying= '';
  49.     vFilterGtoForDataGto        character varying= '';
  50.     vFilterGtiForDataGto        character varying= '';
  51.     vFilterGtirForDataGto       character varying= '';
  52.    
  53.     vPeriodFrom         text;
  54.     vPeriodYearMonth        text;
  55.     vOuBuId             bigint;
  56.     vStockOpnameActivityId      bigint;
  57.  
  58.     vEmptyId            bigint := -99;
  59.     vEmptyString            text := '';
  60.     vZero               bigint := 0;
  61.     vFlgApproved            text := 'R';
  62.     vFlgRejected            text := 'V';
  63.     vFlgQtyMissing          text := 'M';
  64.     vFlgQtyRejected         text := 'R';
  65.     vFlgQtyCorrect          text := 'C';
  66.     vFlgQtyLost         text := 'L';
  67.    
  68.     vDocTypeRgto        bigint := 538;
  69.     vDocTypeCorrQtyRgto     bigint := 590;
  70.     vDocTypePurchaseOrder       bigint := 101;
  71.     vDocTypeReceiveGoods        bigint := 111;
  72.     vDocTypeGoodsTransferOut    bigint := 533;
  73.     vDocTypeGoodsTransferIn     bigint := 535;
  74.     vDocTypeGoodsTransferInReceipt      bigint := 536;
  75.     vYes                        character varying := 'Y';
  76.     vEmptyAmount                numeric := 0;
  77.  
  78. BEGIN
  79.     DELETE FROM tt_pemenuhan_stok WHERE session_id = pSessionId;
  80.     DELETE FROM tt_pemenuhan_stok_rgto WHERE session_id = pSessionId;
  81.  
  82.     SELECT (f_get_ou_bu_structure(pOuId)).ou_bu_id INTO vOuBuId;
  83.    
  84.     --A. filter terhadap ctgr product
  85.     IF pCtgrProductId != vEmptyId THEN
  86.         vFilterCtgrProduct = ' AND D.ctgr_product_id = '||pCtgrProductId ;
  87.     END IF;
  88.    
  89.     --B. filter terhadap sub ctgr product
  90.     IF pSubCtgrProductId != vEmptyId THEN
  91.         vFilterSubCtgrProduct = ' AND D.sub_ctgr_product_id = '||pSubCtgrProductId;
  92.     END IF;
  93.    
  94.     --C. filter terhadap golongan
  95.     IF pStyleProduct != vEmptyString THEN
  96.         vFilterGolonganProduct = ' AND E.style_product = '''||pStyleProduct||'''';
  97.     END IF;
  98.    
  99.     --D. filter terhadap product code name
  100.     IF pProductCodeName != vEmptyString THEN
  101.         vFilterProductCodeName = ' AND (UPPER(D.product_code) LIKE UPPER('''||'%'||pProductCodeName||'%'||''') OR UPPER(D.product_name) LIKE UPPER('''||'%'||pProductCodeName||'%'||''')) ';
  102.     END IF;
  103.  
  104.     --E. filter terhadap RGTO no dan remark
  105.     IF pRgtoNo != vEmptyString THEN
  106.         vFilterRgtoNo = ' AND (UPPER(B.doc_no) LIKE UPPER('''||'%'||pRgtoNo||'%'||''')) ';
  107.     END IF;
  108.  
  109.     IF pRgtoRemark != vEmptyString THEN
  110.         vFilterRgtoRemark = ' AND (UPPER(B.remark) LIKE UPPER('''||'%'||pRgtoRemark||'%'||''')) ';
  111.     END IF;
  112.  
  113. --  --F. filter terhadap PO no dan remark
  114. --  -- sementara dicomment karena filter PO di UI dihilangkan
  115. --
  116. --  IF pPoNo != vEmptyString THEN
  117. --      vFilterPoNo = ' AND (UPPER(I.doc_no) LIKE UPPER('''||'%'||pPoNo||'%'||''')) ';
  118. --      vFilterPoNotExists = false;
  119. --  END IF;
  120. --
  121. --  IF pPoRemark != vEmptyString THEN
  122. --      vFilterPoRemark = ' AND (UPPER(I.remark) LIKE UPPER('''||'%'||pPoRemark||'%'||''')) ';
  123. --      vFilterPoNotExists = false;
  124. --  END IF;
  125.  
  126.     --G. filter terhadap GTO no dan remark
  127.     IF(pGtoNo != vEmptyString OR pGtoRemark != vEmptyString) THEN
  128.         vFilterGto = ' AND EXISTS (
  129.                     SELECT 1
  130.                     FROM in_inventory BB
  131.                     WHERE B.inventory_id = BB.ref_id
  132.                     AND BB.doc_type_id = '|| vDocTypeGoodsTransferOut;
  133.         IF(pGtoNo != vEmptyString) THEN
  134.             vFilterGto = vFilterGto || ' AND (UPPER(BB.doc_no) LIKE UPPER('''||'%'||pGtoNo||'%'||''')) ';
  135.         END IF;
  136.        
  137.         IF(pGtoRemark != vEmptyString) THEN
  138.             vFilterGto = vFilterGto || ' AND (UPPER(BB.remark) LIKE UPPER('''||'%'||pGtoRemark||'%'||''')) ';
  139.         END IF;
  140.  
  141.         vFilterGto = vFilterGto || ' ) ';
  142.        
  143.     END IF;
  144.  
  145.     --H. filter terhadap GTI no dan remark
  146.     IF(pGtiNo != vEmptyString OR pGtiRemark != vEmptyString) THEN
  147.         vFilterGti = ' AND EXISTS (
  148.                     SELECT 1
  149.                     FROM in_inventory BB
  150.                     JOIN in_inventory GTI ON BB.inventory_id = GTI.ref_id
  151.                     WHERE B.inventory_id = BB.ref_id
  152.                         AND BB.doc_type_id = '|| vDocTypeGoodsTransferOut ||'
  153.                         AND GTI.doc_type_id = '|| vDocTypeGoodsTransferIn;
  154.         IF(pGtiNo != vEmptyString) THEN
  155.             vFilterGti = vFilterGti || ' AND (UPPER(GTI.doc_no) LIKE UPPER('''||'%'||pGtiNo||'%'||''')) ';
  156.         END IF;
  157.        
  158.         IF(pGtiRemark != vEmptyString) THEN
  159.             vFilterGti = vFilterGti || ' AND (UPPER(GTI.remark) LIKE UPPER('''||'%'||pGtiRemark||'%'||''')) ';
  160.         END IF;
  161.  
  162.         vFilterGti = vFilterGti || ' ) ';
  163.        
  164.     END IF;
  165.  
  166.     --I. filter terhadap GTIR no dan remark
  167.     IF(pGtirNo != vEmptyString OR pGtirRemark != vEmptyString) THEN
  168.         vFilterGtir = ' AND EXISTS (
  169.                     SELECT 1
  170.                     FROM in_inventory BB
  171.                     JOIN in_inventory GTI ON BB.inventory_id = GTI.ref_id
  172.                     JOIN in_inventory GTIR ON GTI.inventory_id = GTIR.ref_id
  173.                     WHERE B.inventory_id = BB.ref_id
  174.                         AND BB.doc_type_id = '|| vDocTypeGoodsTransferOut ||'
  175.                         AND GTI.doc_type_id = '|| vDocTypeGoodsTransferIn ||'
  176.                         AND GTIR.doc_type_id = '|| vDocTypeGoodsTransferInReceipt;
  177.         IF(pGtirNo != vEmptyString) THEN
  178.             vFilterGtir = vFilterGtir || ' AND (UPPER(GTIR.doc_no) LIKE UPPER('''||'%'||pGtirNo||'%'||''')) ';
  179.         END IF;
  180.        
  181.         IF(pGtirRemark != vEmptyString) THEN
  182.             vFilterGtir = vFilterGtir || ' AND (UPPER(GTIR.remark) LIKE UPPER('''||'%'||pGtirRemark||'%'||''')) ';
  183.         END IF;
  184.  
  185.         vFilterGtir = vFilterGtir || ' ) ';
  186.        
  187.     END IF;
  188.    
  189.     RAISE NOTICE '%', vFilterGolonganProduct;
  190.     RAISE NOTICE '%', vFilterProductCodeName;
  191.     RAISE NOTICE '%', vFilterGto;
  192.     RAISE NOTICE '%', pGtoNo;
  193.     RAISE NOTICE '%', vFilterGti;
  194.     RAISE NOTICE '%', pGtiNo;
  195.     RAISE NOTICE '%', vFilterGtir;
  196.     RAISE NOTICE '%', pGtirNo;
  197.     RAISE NOTICE '%', vFilterPoNo;
  198.     RAISE NOTICE '%', vFilterPoRemark;
  199.    
  200.     /* A. RGTO tanpa GTO */
  201.    
  202.     --1. Insert data RGTO ke tt untuk yang belum dibuat PO
  203.          /* Modify by Henik (04-01-2018), untuk RGTO yg belum dibuat PO gr_qty nya langsung diset 0 */
  204.     --Modified by Adrian, May 11, 2018, hanya ambil yang belum dibuat GTO
  205.     IF( pPoNo = vEmptyString AND pPoRemark = vEmptyString ) THEN
  206.         EXECUTE '
  207.         INSERT INTO tt_pemenuhan_stok(
  208.             session_id, product_id, rgto_id,rgto_item_id, rgto_ou_id, rgto_doc_type_id,
  209.             rgto_whs_from, rgto_whs_to, rgto_doc_no, rgto_doc_date, rgto_qty, gr_qty, purch_price)
  210.         SELECT $1, C.product_id, A.inventory_id, C.inventory_item_id, B.ou_to_id, B.doc_type_id,
  211.             F.warehouse_name, G.warehouse_name, B.doc_no, B.doc_date, COALESCE(N.qty_request,C.qty_request, 0), $9 AS gr_qty, J.purch_price + J.tax_amount
  212.         FROM in_balance_req_transfer_out A
  213.         JOIN in_inventory B ON A.inventory_id = B.inventory_id
  214.         JOIN in_inventory_item C ON B.inventory_id = C.inventory_id
  215.         LEFT JOIN in_req_trf_out_po_balance_item I ON B.inventory_id = I.inventory_id AND C.inventory_item_id =  I.inventory_item_id
  216.         JOIN m_product D ON C.product_id = D.product_id
  217.         JOIN m_product_custom E ON D.product_id = E.product_id
  218.         JOIN m_product_custom_for_dlg K ON E.product_id = K.product_id
  219.         JOIN m_warehouse F ON B.warehouse_from_id =  F.warehouse_id
  220.         JOIN m_warehouse G ON B.warehouse_to_id =  G.warehouse_id
  221.         JOIN m_ou_structure H ON B.ou_to_id = H.ou_id
  222.         LEFT JOIN m_purch_price_product J ON C.product_id = J.product_id
  223.                              AND J.ou_id = H.ou_bu_id  
  224.                              AND $4 BETWEEN J.date_from AND J.date_to
  225.                              AND J.partner_id = K.supplier_id
  226.         LEFT JOIN in_req_trf_out_correction_item N ON I.inventory_item_id = N.ref_item_id  AND I.flg_correction = $8
  227.         WHERE A.tenant_id = $2
  228.             AND B.doc_type_id = $3
  229.             AND B.doc_date BETWEEN $4 AND $5
  230.             AND (H.ou_bu_id = $6 OR H.ou_branch_id = $6)
  231.             AND NOT EXISTS (
  232.                     SELECT 1
  233.                     FROM pu_po z
  234.                     JOIN pu_po_item Y ON Z.po_id = Y.po_id AND Y.product_id = C.product_id AND Y.ref_id = C.inventory_item_id
  235.                     JOIN pu_po_balance_item X ON Y.po_item_id = X.po_item_id
  236.                     WHERE Z.ref_id = A.inventory_id
  237.                         AND Z.ref_doc_type_id = $7
  238.                     )
  239.             AND NOT EXISTS(
  240.                 SELECT 1
  241.                 FROM in_inventory Z
  242.                 INNER JOIN in_inventory_item Y ON Z.inventory_id = Y.inventory_id
  243.                 WHERE A.inventory_id = Z.ref_id
  244.                     AND C.inventory_item_id = Y.ref_id
  245.                     AND Z.doc_type_id = $10
  246.                     AND Z.ref_doc_type_id = B.doc_type_id
  247.                     AND Z.status_doc = $11
  248.             )' ||
  249.               vFilterCtgrProduct ||
  250.               vFilterSubCtgrProduct ||
  251.               vFilterGolonganProduct ||
  252.               vFilterProductCodeName ||
  253.               vFilterRgtoNo ||
  254.               vFilterRgtoRemark ||
  255. --            vFilterPoNo ||
  256. --            vFilterPoRemark ||
  257.               vFilterGto ||
  258.               vFilterGti ||
  259.               vFilterGtir
  260.         USING pSessionId, pTenantId, vDocTypeRgto, pPeriodFrom, pPeriodTo,
  261.               pOuId, vDocTypeRgto, vYes, vEmptyAmount, vDocTypeGoodsTransferOut,
  262.               vFlgApproved;
  263.     END IF;
  264.    
  265.     --2. Insert data RGTO dan PO yang belum dibuat GTO
  266.          /* Modify by Henik (04-01-2018), gr_qty diubah berdasarkan pu_po_balance_item.qty_int_rcv bukan dari in_req_trf_out_po_balance_item.qty_rcv_int
  267.           * Alasannya, karna yg di in_req_trf_out_po_balance_item.qty_rcv_int nilainya sudah terakumulasi dari GR beberapa PO */
  268.     --Modified by Adrian, May 11, 2018, hanya ambil yang belum dibuat GTO
  269.     EXECUTE '
  270.     INSERT INTO tt_pemenuhan_stok(
  271.            session_id, product_id, rgto_id,rgto_item_id, rgto_ou_id, rgto_doc_type_id,
  272.            rgto_whs_from, rgto_whs_to, rgto_doc_no, rgto_doc_date, rgto_qty,
  273.            po_id, po_item_id, po_doc_type_id, po_doc_no, po_doc_date,po_qty, gr_qty, purch_price)
  274.     SELECT $1, C.product_id, A.inventory_id, C.inventory_item_id, B.ou_to_id, B.doc_type_id,
  275.         F.warehouse_name, G.warehouse_name, B.doc_no, B.doc_date,  COALESCE(O.qty_request,C.qty_request, 0) AS qty_request,
  276.         I.po_id, J.po_item_id, I.doc_type_id, I.doc_no, I.doc_date, J.qty_int, K.qty_int_rcv, M.purch_price + M.tax_amount
  277.     FROM in_balance_req_transfer_out A
  278.     JOIN in_inventory B ON A.inventory_id = B.inventory_id
  279.     JOIN in_inventory_item C ON B.inventory_id = C.inventory_id
  280.     JOIN pu_po I ON A.inventory_id = I.ref_id AND I.ref_doc_type_id = $3
  281.     JOIN pu_po_item J ON I.po_id = J.po_id AND C.inventory_item_id = J.ref_id
  282.     JOIN pu_po_balance_item K ON J.po_item_id = K.po_item_id
  283.     JOIN in_req_trf_out_po_balance_item L ON B.inventory_id = L.inventory_id AND C.inventory_item_id =  L.inventory_item_id
  284.     JOIN m_product D ON C.product_id = D.product_id
  285.     JOIN m_product_custom E ON D.product_id = E.product_id
  286.     JOIN m_product_custom_for_dlg N ON  E.product_id = N.product_id
  287.     JOIN m_warehouse F ON B.warehouse_from_id =  F.warehouse_id
  288.     JOIN m_warehouse G ON B.warehouse_to_id =  G.warehouse_id
  289.     JOIN m_ou_structure H ON B.ou_to_id = H.ou_id
  290.     LEFT JOIN m_purch_price_product M ON C.product_id = M.product_id
  291.                         AND M.ou_id = H.ou_bu_id
  292.                         AND $4 BETWEEN M.date_from AND M.date_to
  293.                         AND M.partner_id = N.supplier_id
  294.     LEFT JOIN in_req_trf_out_correction_item O ON L.inventory_item_id = O.ref_item_id AND L.flg_correction = $9
  295.     WHERE A.tenant_id = $2
  296.         AND B.doc_type_id = $3
  297.         AND B.doc_date BETWEEN $4 AND $5
  298.         AND (H.ou_bu_id = $6 OR H.ou_branch_id = $6)
  299.         AND I.doc_type_id = $7
  300.         AND I.status_doc != $8
  301.         AND NOT EXISTS(
  302.             SELECT 1
  303.             FROM in_inventory Z
  304.             INNER JOIN in_inventory_item Y ON Z.inventory_id = Y.inventory_id
  305.             WHERE A.inventory_id = Z.ref_id
  306.                 AND C.inventory_item_id = Y.ref_id
  307.                 AND Z.doc_type_id = $10
  308.                 AND Z.ref_doc_type_id = B.doc_type_id
  309.                 AND Z.status_doc = $11
  310.         )'||
  311.           vFilterCtgrProduct ||
  312.           vFilterSubCtgrProduct ||
  313.           vFilterGolonganProduct ||
  314.           vFilterProductCodeName ||
  315.           vFilterRgtoNo ||
  316.           vFilterRgtoRemark ||
  317. --        vFilterPoNo ||
  318. --        vFilterPoRemark ||
  319.           vFilterGto ||
  320.           vFilterGti ||
  321.           vFilterGtir
  322.     USING pSessionId, pTenantId, vDocTypeRgto, pPeriodFrom, pPeriodTo,
  323.           pOuId, vDocTypePurchaseOrder, vFlgRejected, vYes, vDocTypeGoodsTransferOut,
  324.           vFlgApproved;
  325.    
  326.     /* END OF A */
  327.    
  328.    
  329.     /* B. GTO tanpa RGTO */
  330.          
  331.     --Insert Data GTO tanpa referensi jika tidak ada filter terhadap RGTO no dan remark
  332.     IF (pRgtoNo = vEmptyString AND pRgtoRemark = vEmptyString) THEN
  333.         -- Membuat Filter GTO
  334.         IF(pGtoNo != vEmptyString) THEN
  335.             vFilterGtoForDataGto = ' AND (UPPER(B.doc_no) LIKE UPPER('''||'%'||pGtoNo||'%'||''')) ';
  336.         END IF;
  337.        
  338.         IF(pGtoRemark != vEmptyString) THEN
  339.             vFilterGtoForDataGto = vFilterGtoForDataGto || ' AND (UPPER(B.remark) LIKE UPPER('''||'%'||pGtoRemark||'%'||''')) ';
  340.         END IF;
  341.  
  342.         -- Membuat Filter GTI
  343.         IF(pGtiNo != vEmptyString OR pGtiRemark != vEmptyString) THEN
  344.             vFilterGtiForDataGto = ' AND EXISTS (
  345.                         SELECT 1
  346.                         FROM in_inventory GTI
  347.                         WHERE B.inventory_id = GTI.ref_id
  348.                             AND GTI.doc_type_id = '|| vDocTypeGoodsTransferIn;
  349.             IF(pGtiNo != vEmptyString) THEN
  350.                 vFilterGtiForDataGto = vFilterGtiForDataGto || ' AND (UPPER(GTI.doc_no) LIKE UPPER('''||'%'||pGtiNo||'%'||''')) ';
  351.             END IF;
  352.            
  353.             IF(pGtiRemark != vEmptyString) THEN
  354.                 vFilterGtiForDataGto = vFilterGtiForDataGto || ' AND (UPPER(GTI.remark) LIKE UPPER('''||'%'||pGtiRemark||'%'||''')) ';
  355.             END IF;
  356.             vFilterGtiForDataGto = vFilterGtiForDataGto || ' ) ';
  357.         END IF;
  358.        
  359.         -- Membuat Filter GTIR
  360.         IF(pGtirNo != vEmptyString OR pGtirRemark != vEmptyString) THEN
  361.             vFilterGtirForDataGto = ' AND EXISTS (
  362.                         SELECT 1
  363.                         FROM in_inventory GTI
  364.                         JOIN in_inventory GTIR ON GTI.inventory_id = GTIR.ref_id
  365.                         WHERE B.inventory_id = GTI.ref_id
  366.                             AND GTI.doc_type_id = '|| vDocTypeGoodsTransferIn ||'
  367.                             AND GTIR.doc_type_id = '|| vDocTypeGoodsTransferInReceipt;
  368.             IF(pGtirNo != vEmptyString) THEN
  369.                 vFilterGtirForDataGto = vFilterGtirForDataGto || ' AND (UPPER(GTIR.doc_no) LIKE UPPER('''||'%'||pGtirNo||'%'||''')) ';
  370.             END IF;
  371.            
  372.             IF(pGtirRemark != vEmptyString) THEN
  373.                 vFilterGtirForDataGto = vFilterGtirForDataGto || ' AND (UPPER(GTIR.remark) LIKE UPPER('''||'%'||pGtirRemark||'%'||''')) ';
  374.             END IF;
  375.             vFilterGtirForDataGto = vFilterGtirForDataGto || ' ) ';
  376.            
  377.         END IF;
  378.    
  379.         EXECUTE '
  380.             INSERT INTO tt_pemenuhan_stok(
  381.                     session_id, product_id, rgto_id,rgto_item_id, rgto_ou_id, rgto_doc_type_id,
  382.                     rgto_whs_from, rgto_whs_to, rgto_doc_no, rgto_doc_date, rgto_qty,
  383.                     po_id, po_item_id, po_doc_type_id, po_doc_no, po_doc_date, gr_qty, purch_price,
  384.                     gto_id, gto_item_id, gto_doc_type_id, gto_doc_no, gto_doc_date, gto_rgto_date_diff,
  385.                     gto_qty)
  386.  
  387.             SELECT $1, C.product_id, $8, $8, B.ou_to_id, $8,
  388.                 F.warehouse_name, G.warehouse_name, $9, $9, 0 AS qty_request,
  389.                 $8, $8, $8, $9, $9, 0, M.purch_price + M.tax_amount,
  390.                 B.inventory_id, C.inventory_item_id, B.doc_type_id, B.doc_no, B.doc_date, 0,
  391.                 C.qty_realization
  392.             FROM in_balance_transfer_out A
  393.             JOIN in_inventory B ON A.inventory_id = B.inventory_id
  394.             JOIN in_inventory_item C ON B.inventory_id = C.inventory_id
  395.             JOIN m_product D ON C.product_id = D.product_id
  396.             JOIN m_product_custom E ON D.product_id = E.product_id
  397.             JOIN m_product_custom_for_dlg N ON  E.product_id = N.product_id
  398.             JOIN m_warehouse F ON B.warehouse_from_id =  F.warehouse_id
  399.             JOIN m_warehouse G ON B.warehouse_to_id =  G.warehouse_id
  400.             JOIN m_ou_structure H ON B.ou_to_id = H.ou_id
  401.             LEFT JOIN m_purch_price_product M ON C.product_id = M.product_id
  402.                                 AND M.ou_id = H.ou_bu_id
  403.                                 AND $4 BETWEEN M.date_from AND M.date_to
  404.                                 AND M.partner_id = N.supplier_id
  405.             WHERE A.tenant_id = $2
  406.                 AND B.doc_type_id = $3
  407.                 AND B.doc_date BETWEEN $4 AND $5
  408.                 AND (H.ou_bu_id = $6 OR H.ou_branch_id = $6)
  409.                 AND B.ref_id = $8 '||
  410.                 vFilterCtgrProduct ||
  411.                 vFilterSubCtgrProduct ||
  412.                 vFilterGolonganProduct ||
  413.                 vFilterProductCodeName ||
  414.                 vFilterGtoForDataGto ||
  415.                 vFilterGtiForDataGto ||
  416.                 vFilterGtirForDataGto
  417.         USING pSessionId, pTenantId, vDocTypeGoodsTransferOut, pPeriodFrom, pPeriodTo,
  418.               pOuId, vYes,vEmptyId,vEmptyString;
  419.        
  420.              
  421.         -- insert untuk GTI item baru dari GTO non reference     
  422.         EXECUTE '
  423.             INSERT INTO tt_pemenuhan_stok(
  424.                     session_id, product_id, rgto_id,rgto_item_id, rgto_ou_id, rgto_doc_type_id,
  425.                     rgto_whs_from, rgto_whs_to, rgto_doc_no, rgto_doc_date, rgto_qty,
  426.                     po_id, po_item_id, po_doc_type_id, po_doc_no, po_doc_date, gr_qty, purch_price,
  427.                     gto_id, gto_item_id, gto_doc_type_id, gto_doc_no, gto_doc_date, gto_rgto_date_diff,
  428.                     gto_qty, gti_id, gti_item_id, gti_doc_type_id, gti_doc_no, gti_doc_date, gti_qty)
  429.             SELECT $1, C.product_id, $8, $8, B.ou_to_id, $8,
  430.                 F.warehouse_name, G.warehouse_name, $9, $9, 0 AS qty_request,
  431.                 $8, $8, $8, $9, $9, 0, M.purch_price + M.tax_amount,
  432.                 B.inventory_id, $8, B.doc_type_id, B.doc_no, B.doc_date, 0,
  433.                 C.qty_out, Z.inventory_id, C.inventory_item_id, Z.doc_type_id, Z.doc_no, Z.doc_date,
  434.                 C.qty_in
  435.             FROM in_balance_transfer_out A
  436.             JOIN in_inventory B ON A.inventory_id = B.inventory_id
  437.             JOIN in_inventory Z ON Z.ref_id = B.inventory_id AND Z.ref_doc_type_id = B.doc_type_id AND Z.doc_type_id = $10
  438.             JOIN in_balance_transfer_in_item C ON Z.inventory_id = C.inventory_id
  439.             JOIN m_product D ON C.product_id = D.product_id
  440.             JOIN m_product_custom E ON D.product_id = E.product_id
  441.             JOIN m_product_custom_for_dlg N ON  E.product_id = N.product_id
  442.             JOIN m_warehouse F ON B.warehouse_from_id =  F.warehouse_id
  443.             JOIN m_warehouse G ON B.warehouse_to_id =  G.warehouse_id
  444.             JOIN m_ou_structure H ON B.ou_to_id = H.ou_id
  445.             LEFT JOIN m_purch_price_product M ON C.product_id = M.product_id
  446.                                 AND M.ou_id = H.ou_bu_id
  447.                                 AND $4 BETWEEN M.date_from AND M.date_to
  448.                                 AND M.partner_id = N.supplier_id
  449.             WHERE A.tenant_id = $2
  450.                 AND B.doc_type_id = $3
  451.                 AND B.doc_date BETWEEN $4 AND $5
  452.                 AND (H.ou_bu_id = $6 OR H.ou_branch_id = $6)
  453.                 AND B.ref_id = $8
  454.                 AND C.ref_item_id = $8 '||
  455.                 vFilterCtgrProduct ||
  456.                 vFilterSubCtgrProduct ||
  457.                 vFilterGolonganProduct ||
  458.                 vFilterProductCodeName ||
  459.                 vFilterGtoForDataGto ||
  460.                 vFilterGtiForDataGto ||
  461.                 vFilterGtirForDataGto
  462.         USING pSessionId, pTenantId, vDocTypeGoodsTransferOut, pPeriodFrom, pPeriodTo,
  463.               pOuId, vYes,vEmptyId,vEmptyString, vDocTypeGoodsTransferIn;
  464.     END IF;    
  465.    
  466.     /* END OF B */
  467.    
  468.    
  469.     /* C. RGTO dengan GTO */
  470.    
  471.     --Added by Adrian, May 11, 2018
  472.     --1. Insert data RGTO ke tt_rgto untuk yang belum dibuat PO dan sudah dibuat GTO
  473.     IF( pPoNo = vEmptyString AND pPoRemark = vEmptyString ) THEN
  474.         EXECUTE '
  475.         INSERT INTO tt_pemenuhan_stok_rgto(
  476.             session_id, product_id, rgto_id,rgto_item_id, rgto_ou_id, rgto_doc_type_id,
  477.             rgto_whs_from, rgto_whs_to, rgto_doc_no, rgto_doc_date, rgto_qty, gr_qty, purch_price,
  478.             gto_id, gto_item_id, gto_doc_type_id, gto_doc_no, gto_doc_date,
  479.             gto_rgto_date_diff, gto_qty)
  480.         SELECT $1, C.product_id, A.inventory_id, C.inventory_item_id, B.ou_to_id, B.doc_type_id,
  481.             F.warehouse_name, G.warehouse_name, B.doc_no, B.doc_date, P.qty_realization, $9 AS gr_qty, J.purch_price + J.tax_amount,
  482.             O.inventory_id, P.inventory_item_id, O.doc_type_id, O.doc_no, O.doc_date,
  483.             (O.doc_date::date - B.doc_date::date)::numeric, P.qty_realization
  484.         FROM in_balance_req_transfer_out A
  485.         JOIN in_inventory B ON A.inventory_id = B.inventory_id
  486.         JOIN in_inventory_item C ON B.inventory_id = C.inventory_id
  487.         LEFT JOIN in_req_trf_out_po_balance_item I ON B.inventory_id = I.inventory_id AND C.inventory_item_id =  I.inventory_item_id
  488.         JOIN m_product D ON C.product_id = D.product_id
  489.         JOIN m_product_custom E ON D.product_id = E.product_id
  490.         JOIN m_product_custom_for_dlg K ON E.product_id = K.product_id
  491.         JOIN m_warehouse F ON B.warehouse_from_id =  F.warehouse_id
  492.         JOIN m_warehouse G ON B.warehouse_to_id =  G.warehouse_id
  493.         JOIN m_ou_structure H ON B.ou_to_id = H.ou_id
  494.         LEFT JOIN m_purch_price_product J ON C.product_id = J.product_id
  495.                              AND J.ou_id = H.ou_bu_id  
  496.                              AND $4 BETWEEN J.date_from AND J.date_to
  497.                              AND J.partner_id = K.supplier_id
  498.         LEFT JOIN in_req_trf_out_correction_item N ON I.inventory_item_id = N.ref_item_id  AND I.flg_correction = $8
  499.         INNER JOIN in_inventory O ON A.inventory_id = O.ref_id AND O.doc_type_id = $10 AND O.ref_doc_type_id = B.doc_type_id AND O.status_doc = $11
  500.         INNER JOIN in_inventory_item P ON O.inventory_id = P.inventory_id AND C.inventory_item_id = P.ref_id
  501.         WHERE A.tenant_id = $2
  502.             AND B.doc_type_id = $3
  503.             AND B.doc_date BETWEEN $4 AND $5
  504.             AND (H.ou_bu_id = $6 OR H.ou_branch_id = $6)
  505.             AND NOT EXISTS (
  506.                     SELECT 1
  507.                     FROM pu_po z
  508.                     JOIN pu_po_item Y ON Z.po_id = Y.po_id AND Y.product_id = C.product_id AND Y.ref_id = C.inventory_item_id
  509.                     JOIN pu_po_balance_item X ON Y.po_item_id = X.po_item_id
  510.                     WHERE Z.ref_id = A.inventory_id
  511.                         AND Z.ref_doc_type_id = $7
  512.                     )' ||
  513.               vFilterCtgrProduct ||
  514.               vFilterSubCtgrProduct ||
  515.               vFilterGolonganProduct ||
  516.               vFilterProductCodeName ||
  517.               vFilterRgtoNo ||
  518.               vFilterRgtoRemark ||
  519. --            vFilterPoNo ||
  520. --            vFilterPoRemark ||
  521.               vFilterGto ||
  522.               vFilterGti ||
  523.               vFilterGtir
  524.         USING pSessionId, pTenantId, vDocTypeRgto, pPeriodFrom, pPeriodTo,
  525.               pOuId, vDocTypeRgto, vYes, vEmptyAmount, vDocTypeGoodsTransferOut,
  526.               vFlgApproved;
  527.     END IF;
  528.    
  529.     --Added by Adrian, May 11, 2018
  530.     --2. Insert data RGTO dan PO yang sudah dibuat GTO
  531.     EXECUTE '
  532.     INSERT INTO tt_pemenuhan_stok_rgto(
  533.            session_id, product_id, rgto_id,rgto_item_id, rgto_ou_id, rgto_doc_type_id,
  534.            rgto_whs_from, rgto_whs_to, rgto_doc_no, rgto_doc_date, rgto_qty,
  535.            po_id, po_item_id, po_doc_type_id, po_doc_no, po_doc_date,po_qty, gr_qty, purch_price,
  536.             gto_id, gto_item_id, gto_doc_type_id, gto_doc_no, gto_doc_date,
  537.             gto_rgto_date_diff, gto_qty)
  538.     SELECT $1, C.product_id, A.inventory_id, C.inventory_item_id, B.ou_to_id, B.doc_type_id,
  539.         F.warehouse_name, G.warehouse_name, B.doc_no, B.doc_date, Q.qty_realization AS qty_request,
  540.         I.po_id, J.po_item_id, I.doc_type_id, I.doc_no, I.doc_date, J.qty_int, K.qty_int_rcv, M.purch_price + M.tax_amount,
  541.         P.inventory_id, Q.inventory_item_id, P.doc_type_id, P.doc_no, P.doc_date,
  542.         (P.doc_date::date - B.doc_date::date)::numeric, Q.qty_realization
  543.     FROM in_balance_req_transfer_out A
  544.     JOIN in_inventory B ON A.inventory_id = B.inventory_id
  545.     JOIN in_inventory_item C ON B.inventory_id = C.inventory_id
  546.     JOIN pu_po I ON A.inventory_id = I.ref_id AND I.ref_doc_type_id = $3
  547.     JOIN pu_po_item J ON I.po_id = J.po_id AND C.inventory_item_id = J.ref_id
  548.     JOIN pu_po_balance_item K ON J.po_item_id = K.po_item_id
  549.     JOIN in_req_trf_out_po_balance_item L ON B.inventory_id = L.inventory_id AND C.inventory_item_id =  L.inventory_item_id
  550.     JOIN m_product D ON C.product_id = D.product_id
  551.     JOIN m_product_custom E ON D.product_id = E.product_id
  552.     JOIN m_product_custom_for_dlg N ON  E.product_id = N.product_id
  553.     JOIN m_warehouse F ON B.warehouse_from_id =  F.warehouse_id
  554.     JOIN m_warehouse G ON B.warehouse_to_id =  G.warehouse_id
  555.     JOIN m_ou_structure H ON B.ou_to_id = H.ou_id
  556.     LEFT JOIN m_purch_price_product M ON C.product_id = M.product_id
  557.                         AND M.ou_id = H.ou_bu_id
  558.                         AND $4 BETWEEN M.date_from AND M.date_to
  559.                         AND M.partner_id = N.supplier_id
  560.     LEFT JOIN in_req_trf_out_correction_item O ON L.inventory_item_id = O.ref_item_id AND L.flg_correction = $9
  561.     INNER JOIN in_inventory P ON A.inventory_id = P.ref_id AND P.doc_type_id = $10 AND P.ref_doc_type_id = B.doc_type_id AND P.status_doc = $11
  562.     INNER JOIN in_inventory_item Q ON P.inventory_id = Q.inventory_id AND C.inventory_item_id = Q.ref_id
  563.     WHERE A.tenant_id = $2
  564.         AND B.doc_type_id = $3
  565.         AND B.doc_date BETWEEN $4 AND $5
  566.         AND (H.ou_bu_id = $6 OR H.ou_branch_id = $6)
  567.         AND I.doc_type_id = $7
  568.         AND I.status_doc != $8'||
  569.           vFilterCtgrProduct ||
  570.           vFilterSubCtgrProduct ||
  571.           vFilterGolonganProduct ||
  572.           vFilterProductCodeName ||
  573.           vFilterRgtoNo ||
  574.           vFilterRgtoRemark ||
  575. --        vFilterPoNo ||
  576. --        vFilterPoRemark ||
  577.           vFilterGto ||
  578.           vFilterGti ||
  579.           vFilterGtir
  580.     USING pSessionId, pTenantId, vDocTypeRgto, pPeriodFrom, pPeriodTo,
  581.           pOuId, vDocTypePurchaseOrder, vFlgRejected, vYes, vDocTypeGoodsTransferOut,
  582.           vFlgApproved;
  583.    
  584.     --Added by Adrian, May 11, 2018
  585.     -- 3. Insert dari tt_pemenuhan_stok_rgto ke tt_pemenuhan_stok
  586.     INSERT INTO tt_pemenuhan_stok(
  587.             session_id, product_id, purch_price, rgto_id, rgto_doc_type_id,
  588.             rgto_item_id, rgto_ou_id, rgto_whs_from, rgto_whs_to, rgto_doc_no,
  589.             rgto_doc_date, rgto_qty, rgto_qty_correction, po_id, po_doc_type_id,
  590.             po_item_id, po_doc_no, po_doc_date, po_qty, gr_doc_date, gr_rgto_date_diff,
  591.             gr_qty, gto_id, gto_item_id, gto_doc_type_id, gto_doc_no, gto_doc_date,
  592.             gto_rgto_date_diff, gto_qty, gti_id, gti_item_id, gti_doc_type_id,
  593.             gti_doc_no, gti_doc_date, gti_qty, gtir_id, gtir_doc_type_id,
  594.             gtir_doc_no, gtir_doc_date, gtir_qty_missing, gtir_qty_rejected,
  595.             gtir_qty_correct, gtir_qty_lost)
  596.     SELECT session_id, product_id, purch_price, rgto_id, rgto_doc_type_id,
  597.            rgto_item_id, rgto_ou_id, rgto_whs_from, rgto_whs_to, rgto_doc_no,
  598.            rgto_doc_date, rgto_qty, rgto_qty_correction, po_id, po_doc_type_id,
  599.            po_item_id, po_doc_no, po_doc_date, po_qty, gr_doc_date, gr_rgto_date_diff,
  600.            gr_qty, gto_id, gto_item_id, gto_doc_type_id, gto_doc_no, gto_doc_date,
  601.            gto_rgto_date_diff, gto_qty, gti_id, gti_item_id, gti_doc_type_id,
  602.            gti_doc_no, gti_doc_date, gti_qty, gtir_id, gtir_doc_type_id,
  603.            gtir_doc_no, gtir_doc_date, gtir_qty_missing, gtir_qty_rejected,
  604.            gtir_qty_correct, gtir_qty_lost
  605.     FROM tt_pemenuhan_stok_rgto
  606.     WHERE session_id = pSessionId;
  607.          
  608.     /* END OF C */
  609.          
  610.          
  611.     /* D. SEMUA */
  612.    
  613.     --1. update qty_correction
  614.     UPDATE tt_pemenuhan_stok A
  615.     SET rgto_qty_correction = C.qty_request_correction
  616.     FROM in_inventory B, in_req_trf_out_correction_item C
  617.     WHERE  A.rgto_id = B.ref_id
  618.         AND A.rgto_item_id = C.ref_item_id
  619.         AND A.session_id = pSessionId
  620.         AND B.doc_type_id =  vDocTypeCorrQtyRgto
  621.         AND B.ref_doc_type_id = A.rgto_doc_Type_id
  622.         AND B.status_doc = vFlgApproved;
  623.            
  624.     --2. Update data GR
  625.     WITH get_last_rg AS(
  626.         SELECT A.po_id, MAX(C.doc_date) AS doc_date, C.ref_doc_type_id
  627.         FROM tt_pemenuhan_stok A
  628.         INNER JOIN pu_receive_goods C ON C.ref_id = A.po_id
  629.         WHERE  C.ref_doc_type_id = A.po_doc_Type_id
  630.             AND A.session_id = pSessionId
  631.             AND C.doc_type_id = vDocTypeReceiveGoods
  632.             AND C.status_doC = vFlgApproved
  633.         GROUP BY A.po_id,C.ref_doc_type_id
  634.     )
  635.     UPDATE tt_pemenuhan_stok A
  636.     SET gr_doc_date = B.doc_date,
  637.         gr_rgto_date_diff = ((B.doc_date)::date - A.rgto_doc_date::date)::numeric
  638.     FROM get_last_rg B
  639.     WHERE B.po_id = A.po_id
  640.         AND B.ref_doc_type_id = A.po_doc_Type_id;
  641.        
  642.     --update RGTO yg kena GTO untuk item yg tidak ikut GTO (qty rgto = 0),
  643.     UPDATE tt_pemenuhan_stok A
  644.     SET rgto_qty = 0
  645.     FROM in_inventory B
  646.     WHERE A.rgto_id = B.ref_id
  647.         AND B.ref_doc_type_id = vDocTypeRgto
  648.         AND B.doc_type_id = vDocTypeGoodsTransferOut
  649.         AND NOT EXISTS (select 1 FROM in_inventory_item C
  650.                         WHERE B.inventory_id = C.inventory_id AND
  651.                               A.rgto_item_id = C.ref_id)
  652.         AND B.status_doc = vFlgApproved;
  653.        
  654.     --3.a Update data GTI
  655.     UPDATE tt_pemenuhan_stok A
  656.     SET gti_id  = B.inventory_id,
  657.         gti_item_id = C.inventory_item_id,
  658.         gti_doc_type_id = B.doc_type_id,
  659.         gti_doc_no = B.doc_no,
  660.         gti_doc_date = B.doc_date,
  661.         gti_qty = C.qty_realization
  662.     FROM in_inventory B
  663.     INNER JOIN in_inventory_item C ON B.inventory_id = C.inventory_id
  664.     WHERE A.gto_id = B.ref_id
  665.         AND A.gto_item_id = C.ref_item_id
  666.         AND A.session_id = pSessionId
  667.         AND B.doc_type_id = vDocTypeGoodsTransferIn
  668.         AND B.ref_doc_type_id = A.gto_doc_Type_id
  669.         AND B.status_doc = vFlgApproved;
  670.  
  671.     --3.b insert data GTI untuk item yang dimasukan saat buat GTI
  672.     EXECUTE '
  673.         INSERT INTO tt_pemenuhan_stok(
  674.                 session_id, product_id, purch_price, rgto_id, rgto_doc_type_id,
  675.                 rgto_item_id, rgto_ou_id, rgto_whs_from, rgto_whs_to, rgto_doc_no,
  676.                 rgto_doc_date, rgto_qty, rgto_qty_correction,
  677.                 gto_id, gto_item_id, gto_doc_type_id, gto_doc_no, gto_doc_date,
  678.                 gto_rgto_date_diff, gto_qty, gti_id, gti_item_id, gti_doc_type_id,
  679.                 gti_doc_no, gti_doc_date, gti_qty)
  680.         SELECT $1, N.product_id, J.purch_price + J.tax_amount, B.inventory_id, B.doc_type_id,
  681.             $2, B.ou_to_id, F.warehouse_name, G.warehouse_name, B.doc_no,
  682.             B.doc_date, $3, $3,
  683.             L.inventory_id, $2, L.doc_type_id, L.doc_no, L.doc_date,
  684.             (L.doc_date::date - B.doc_date::date)::numeric, N.qty_out, M.inventory_id, N.inventory_item_id, M.doc_type_id,
  685.             M.doc_no, M.doc_date, N.qty_in
  686.         FROM in_balance_req_transfer_out A
  687.         JOIN in_inventory B ON A.inventory_id = B.inventory_id  AND B.doc_type_id = $4
  688.         JOIN in_inventory L ON B.inventory_id = L.ref_id AND L.doc_type_id = $5
  689.         JOIN in_inventory M ON L.inventory_id = M.ref_id AND M.doc_type_id = $6
  690.         JOIN in_balance_transfer_in_item N ON M.inventory_id = N.inventory_id
  691.         JOIN m_product D ON N.product_id = D.product_id
  692.         JOIN m_product_custom E ON D.product_id = E.product_id
  693.         JOIN m_product_custom_for_dlg K ON E.product_id = K.product_id
  694.         JOIN m_warehouse F ON B.warehouse_from_id =  F.warehouse_id
  695.         JOIN m_warehouse G ON B.warehouse_to_id =  G.warehouse_id
  696.         JOIN m_ou_structure H ON B.ou_to_id = H.ou_id
  697.         LEFT JOIN m_purch_price_product J ON D.product_id = J.product_id
  698.                             AND J.ou_id = H.ou_bu_id
  699.                             AND $7 BETWEEN J.date_from AND J.date_to
  700.                             AND J.partner_id = K.supplier_id
  701.         WHERE A.tenant_id = $8
  702.             AND B.doc_date BETWEEN $7 AND $9
  703.             AND (H.ou_bu_id = $10 OR H.ou_branch_id = $10)
  704.             AND N.ref_item_id = $2 ' ||
  705.           vFilterCtgrProduct ||
  706.           vFilterSubCtgrProduct ||
  707.           vFilterGolonganProduct ||
  708.           vFilterProductCodeName ||
  709.           vFilterRgtoNo ||
  710.           vFilterRgtoRemark ||
  711. --        vFilterPoNo ||
  712. --        vFilterPoRemark ||
  713.           vFilterGto ||
  714.           vFilterGti ||
  715.           vFilterGtir
  716.         USING pSessionId, vEmptyId, vZero, vDocTypeRgto, vDocTypeGoodsTransferOut, vDocTypeGoodsTransferIn, pPeriodFrom, pTenantId, pPeriodTo, pOuId;
  717.        
  718.     --7.a. Update data GTIR
  719.     UPDATE tt_pemenuhan_stok A
  720.     SET gtir_id = B.inventory_id,
  721.           gtir_doc_type_id = B.doc_type_id,
  722.           gtir_doc_no = B.doc_no,
  723.           gtir_doc_date = B.doc_date
  724.     FROM in_inventory B
  725.     WHERE A.gti_id = B.ref_id
  726.         AND A.session_id = pSessionId
  727.         AND B.doc_type_id = vDocTypeGoodsTransferInReceipt
  728.         AND B.ref_doc_type_id = A.gti_doc_Type_id
  729.         AND B.status_doc = vFlgApproved
  730.         AND EXISTS (
  731.             SELECT 1
  732.             FROM in_inventory_item_receipt C
  733.             WHERE B.inventory_id = C.inventory_id
  734.                 AND A.gti_item_id = C.ref_item_id
  735.         );
  736.    
  737.     --4.b. Update data GTIR qty_missing
  738.     --Modified by Adrian, May 11, 2018, tambah filter ref_item_id
  739.     UPDATE tt_pemenuhan_stok A
  740.     SET gtir_qty_missing = qty_realization
  741.     FROM in_inventory_item_receipt C
  742.     WHERE A.gtir_id = C.inventory_id
  743.         AND A.product_id = C.product_id
  744.         AND A.session_id = pSessionId
  745.         AND A.gti_item_id = C.ref_item_id
  746.         AND C.reason_receipt_code = vFlgQtyMissing;
  747.    
  748.     --Modified by Adrian, May 11, 2018, tambah filter ref_item_id
  749.     UPDATE tt_pemenuhan_stok A
  750.     SET gtir_qty_rejected = qty_realization
  751.     FROM in_inventory_item_receipt C
  752.     WHERE A.gtir_id = C.inventory_id
  753.         AND A.product_id = C.product_id
  754.         AND A.session_id = pSessionId
  755.         AND A.gti_item_id = C.ref_item_id
  756.         AND C.reason_receipt_code = vFlgQtyRejected;
  757.    
  758.     --Modified by Adrian, May 11, 2018, tambah filter ref_item_id
  759.     UPDATE tt_pemenuhan_stok A
  760.     SET gtir_qty_correct = qty_realization
  761.     FROM in_inventory_item_receipt C
  762.     WHERE A.gtir_id = C.inventory_id
  763.         AND A.product_id = C.product_id
  764.         AND A.session_id = pSessionId
  765.         AND A.gti_item_id = C.ref_item_id
  766.         AND C.reason_receipt_code = vFlgQtyCorrect;
  767.    
  768.     --Modified by Adrian, May 11, 2018, tambah filter ref_item_id
  769.     UPDATE tt_pemenuhan_stok A
  770.     SET gtir_qty_lost = qty_realization
  771.     FROM in_inventory_item_receipt C
  772.     WHERE A.gtir_id = C.inventory_id
  773.         AND A.product_id = C.product_id
  774.         AND A.session_id = pSessionId
  775.         AND A.gti_item_id = C.ref_item_id
  776.         AND C.reason_receipt_code = vFlgQtyLost;
  777.  
  778.    
  779.     Open pRefHeader FOR
  780.     SELECT f_get_ou_name(vOuBuId) AS ou_bu_name, pPeriodFrom AS period_from,  pPeriodTo AS period_to,
  781.             pPeriodTo AS period_to, f_get_ou_name(pOuId) AS ou_name,
  782.             CASE WHEN pCtgrProductId != vEmptyId THEN f_get_ctgr_product_code(pCtgrProductId)||' - '||f_get_ctgr_product_name(pCtgrProductId) ELSE 'ALL' END AS ctgr_product,
  783.             CASE WHEN pSubCtgrProductId != vEmptyId THEN f_get_sub_ctgr_product_code(pSubCtgrProductId)||' - '||f_get_sub_ctgr_product_name(pSubCtgrProductId) ELSE 'ALL' END AS sub_ctgr_product,
  784.             CASE WHEN pStyleProduct != vEmptyString THEN pStyleProduct ELSE ' - ' END AS style_product,
  785.             CASE WHEN pProductCodeName != vEmptyString THEN pProductCodeName ELSE ' - ' END AS product_code_name,
  786.             CASE WHEN pRgtoNo != vEmptyString THEN pRgtoNo ELSE ' - ' END AS rgto_no,
  787.             CASE WHEN pRgtoRemark != vEmptyString THEN pRgtoRemark ELSE ' - ' END AS rgto_remark,
  788.             CASE WHEN pPoNo != vEmptyString THEN pPoNo ELSE ' - ' END AS po_no,
  789.             CASE WHEN pPoRemark != vEmptyString THEN pPoRemark ELSE ' - ' END AS po_remark,
  790.             CASE WHEN pGtoNo != vEmptyString THEN pGtoNo ELSE ' - ' END AS gto_no,
  791.             CASE WHEN pGtoRemark != vEmptyString THEN pGtoRemark ELSE ' - ' END AS gto_remark,
  792.             CASE WHEN pGtiNo != vEmptyString THEN pGtiNo ELSE ' - ' END AS gti_no,
  793.             CASE WHEN pGtiRemark != vEmptyString THEN pGtiRemark ELSE ' - ' END AS gti_remark,
  794.             CASE WHEN pGtirNo != vEmptyString THEN pGtirNo ELSE ' - ' END AS gtir_no,
  795.             CASE WHEN pGtirRemark != vEmptyString THEN pGtirRemark ELSE ' - ' END AS gtir_remark;
  796.     RETURN NEXT pRefHeader;
  797.    
  798.     Open pRefDetail FOR
  799.     SELECT A.product_id, B.product_code, B.product_name, C.ctgr_product_name, D.sub_ctgr_product_name,
  800.         E.style_product, A.purch_price, f_get_ou_name(A.rgto_ou_id) AS rgto_ou_name, A.rgto_whs_from, A.rgto_whs_to,
  801.         A.rgto_doc_no, A.rgto_doc_date, SUM(A.rgto_qty) AS rgto_qty, SUM(CASE WHEN A.rgto_qty_correction IS NOT NULL THEN A.rgto_qty_correction ELSE 0 END) AS rgto_qty_correction,
  802.         A.po_doc_no, A.po_doc_date, SUM(A.po_qty) AS po_qty, A.gr_doc_date, A.gr_rgto_date_diff,
  803.         SUM(CASE WHEN gr_doc_date != vEmptyString THEN A.gr_qty END) AS gr_qty,
  804.         A.gto_doc_no, A.gto_doc_date, A.gto_rgto_date_diff, SUM(A.gto_qty) AS gto_qty, A.gti_doc_no, A.gti_doc_date, SUM(A.gti_qty) AS gti_qty, SUM(A.gto_qty - A.gti_qty) AS gto_gti_qty_diff,
  805.         A.gtir_doc_no, A.gtir_doc_date, SUM(A.gtir_qty_missing) AS gtir_qty_missing, SUM(A.gtir_qty_rejected) AS gtir_qty_rejected, SUM(A.gtir_qty_correct) AS gtir_qty_correct, SUM(A.gtir_qty_lost) AS gtir_qty_lost,
  806.         COALESCE(G.doc_no, vEmptyString) AS rgto_no_induk, COALESCE(G.doc_date, vEmptyString) AS rgto_date_induk
  807.     FROM tt_pemenuhan_stok A
  808.     INNER JOIN m_product B ON A.product_id = B.product_id
  809.     INNER JOIN m_ctgr_product C ON B.ctgr_product_id = C.ctgr_product_id
  810.     INNER JOIN m_sub_ctgr_product D ON B.sub_ctgr_product_id = D.sub_ctgr_product_id
  811.     INNER JOIN m_product_custom E ON B.product_id = E.product_id
  812.     LEFT JOIN in_inventory F ON F.inventory_id = A.rgto_id
  813.     LEFT JOIN in_inventory G ON G.inventory_id = F.ref_id AND G.doc_type_id = F.ref_doc_type_id AND G.doc_type_id = vDocTypeRgto
  814.     WHERE A.session_id = pSessionId
  815.     GROUP BY A.product_id, B.product_code, B.product_name, C.ctgr_product_name, D.sub_ctgr_product_name,
  816.         E.style_product, A.purch_price, f_get_ou_name(A.rgto_ou_id), A.rgto_whs_from, A.rgto_whs_to,
  817.         A.rgto_doc_no, A.rgto_doc_date,
  818.         A.po_doc_no, A.po_doc_date, A.gr_doc_date, A.gr_rgto_date_diff,  
  819.         A.gto_doc_no, A.gto_doc_date, A.gto_rgto_date_diff, A.gti_doc_no, A.gti_doc_date,
  820.         A.gtir_doc_no, A.gtir_doc_date,
  821.         rgto_no_induk, rgto_date_induk
  822.     ORDER BY A.rgto_doc_no, B.product_code;
  823.    
  824.     RETURN NEXT pRefDetail ;
  825.     DELETE FROM tt_pemenuhan_stok WHERE session_id = pSessionId;
  826.     DELETE FROM tt_pemenuhan_stok_rgto WHERE session_id = pSessionId;
  827. END;
  828. $BODY$
  829.   LANGUAGE plpgsql VOLATILE
  830.   COST 100
  831. /
Add Comment
Please, Sign In to add comment