aadddrr

r_report_pemenuhan_stok_LIVE_20180509

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