Advertisement
aadddrr

r_report_pemenuhan_stok

May 10th, 2018
83
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, memperbaiki update qty GTI dan GTIR
  4. CREATE OR REPLACE FUNCTION r_report_pemenuhan_stok(character varying, bigint, bigint, bigint, bigint, character varying, character varying, character varying, character varying, character varying,
  5.                                     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.     -- Modified by Adrian, May 9, 2018, update qty GTI diambil dari sum
  502.     WITH sum AS(
  503.         select D.inventory_id,E.product_id, SUM(E.qty_realization) AS qty
  504.         from tt_pemenuhan_stok A, in_inventory B, in_inventory_item C, in_inventory D, in_inventory_item E
  505.         WHERE A.rgto_id = B.ref_id
  506.             AND B.inventory_id = C.inventory_id
  507.             AND A.rgto_item_id = C.ref_id
  508.             AND B.doc_type_id = vDocTypeGoodsTransferOut
  509.             AND B.ref_doc_type_id = A.rgto_doc_type_id
  510.             AND A.session_id = pSessionId
  511.             AND B.status_doc = vFlgApproved
  512.             AND B.inventory_id = D.ref_id
  513.             AND D.inventory_id = E.inventory_id
  514.             AND C.inventory_item_id = E.ref_item_id
  515.             AND D.doc_type_id = vDocTypeGoodsTransferIn
  516.             AND D.ref_doc_type_id = B.doc_type_id
  517.             AND D.status_doc = vFlgApproved
  518.         GROUP BY D.inventory_id, E.product_id
  519.     )
  520.     UPDATE tt_pemenuhan_stok A
  521.     SET gti_id  = B.inventory_id,
  522.         gti_item_id = C.inventory_item_id,
  523.         gti_doc_type_id = B.doc_type_id,
  524.         gti_doc_no = B.doc_no,
  525.         gti_doc_date = B.doc_date,
  526.         gti_qty = D.qty
  527.     FROM in_inventory B
  528.     INNER JOIN in_inventory_item C ON B.inventory_id = C.inventory_id
  529.     INNER JOIN sum D ON B.inventory_id = D.inventory_id AND c.product_id = D.product_id
  530.     WHERE A.gto_id = B.ref_id
  531.         AND A.gto_item_id = C.ref_item_id
  532.         AND A.session_id = pSessionId
  533.         AND B.doc_type_id = vDocTypeGoodsTransferIn
  534.         AND B.ref_doc_type_id = A.gto_doc_Type_id
  535.         AND B.status_doc = vFlgApproved;
  536.  
  537.     --6.b insert data GTI untuk item yang dimasukan saat buat GTI
  538.     EXECUTE '
  539.         INSERT INTO tt_pemenuhan_stok(
  540.                 session_id, product_id, purch_price, rgto_id, rgto_doc_type_id,
  541.                 rgto_item_id, rgto_ou_id, rgto_whs_from, rgto_whs_to, rgto_doc_no,
  542.                 rgto_doc_date, rgto_qty, rgto_qty_correction,
  543.                 gto_id, gto_item_id, gto_doc_type_id, gto_doc_no, gto_doc_date,
  544.                 gto_rgto_date_diff, gto_qty, gti_id, gti_item_id, gti_doc_type_id,
  545.                 gti_doc_no, gti_doc_date, gti_qty)
  546.         SELECT $1, N.product_id, J.purch_price + J.tax_amount, B.inventory_id, B.doc_type_id,
  547.             $2, B.ou_to_id, F.warehouse_name, G.warehouse_name, B.doc_no,
  548.             B.doc_date, $3, $3,
  549.             L.inventory_id, $2, L.doc_type_id, L.doc_no, L.doc_date,
  550.             (L.doc_date::date - B.doc_date::date)::numeric, N.qty_out, M.inventory_id, N.inventory_item_id, M.doc_type_id,
  551.             M.doc_no, M.doc_date, N.qty_in
  552.         FROM in_balance_req_transfer_out A
  553.         JOIN in_inventory B ON A.inventory_id = B.inventory_id  AND B.doc_type_id = $4
  554.         JOIN in_inventory L ON B.inventory_id = L.ref_id AND L.doc_type_id = $5
  555.         JOIN in_inventory M ON L.inventory_id = M.ref_id AND M.doc_type_id = $6
  556.         JOIN in_balance_transfer_in_item N ON M.inventory_id = N.inventory_id
  557.         JOIN m_product D ON N.product_id = D.product_id
  558.         JOIN m_product_custom E ON D.product_id = E.product_id
  559.         JOIN m_product_custom_for_dlg K ON E.product_id = K.product_id
  560.         JOIN m_warehouse F ON B.warehouse_from_id =  F.warehouse_id
  561.         JOIN m_warehouse G ON B.warehouse_to_id =  G.warehouse_id
  562.         JOIN m_ou_structure H ON B.ou_to_id = H.ou_id
  563.         LEFT JOIN m_purch_price_product J ON D.product_id = J.product_id
  564.                             AND J.ou_id = H.ou_bu_id
  565.                             AND $7 BETWEEN J.date_from AND J.date_to
  566.                             AND J.partner_id = K.supplier_id
  567.         WHERE A.tenant_id = $8
  568.             AND B.doc_date BETWEEN $7 AND $9
  569.             AND (H.ou_bu_id = $10 OR H.ou_branch_id = $10)
  570.             AND N.ref_item_id = $2 ' ||
  571.           vFilterCtgrProduct ||
  572.           vFilterSubCtgrProduct ||
  573.           vFilterGolonganProduct ||
  574.           vFilterProductCodeName ||
  575.           vFilterRgtoNo ||
  576.           vFilterRgtoRemark ||
  577. --        vFilterPoNo ||
  578. --        vFilterPoRemark ||
  579.           vFilterGto ||
  580.           vFilterGti ||
  581.           vFilterGtir
  582.         USING pSessionId, vEmptyId, vZero, vDocTypeRgto, vDocTypeGoodsTransferOut, vDocTypeGoodsTransferIn, pPeriodFrom, pTenantId, pPeriodTo, pOuId;
  583.        
  584.     --7.a. Update data GTIR
  585.     UPDATE tt_pemenuhan_stok A
  586.     SET gtir_id = B.inventory_id,
  587.           gtir_doc_type_id = B.doc_type_id,
  588.           gtir_doc_no = B.doc_no,
  589.           gtir_doc_date = B.doc_date
  590.     FROM in_inventory B
  591.     WHERE A.gti_id = B.ref_id
  592.         AND A.session_id = pSessionId
  593.         AND B.doc_type_id = vDocTypeGoodsTransferInReceipt
  594.         AND B.ref_doc_type_id = A.gti_doc_Type_id
  595.         AND B.status_doc = vFlgApproved
  596.         AND EXISTS (
  597.             SELECT 1
  598.             FROM in_inventory_item_receipt C
  599.             WHERE B.inventory_id = C.inventory_id
  600.                 AND A.gti_item_id = C.ref_item_id
  601.         );
  602.    
  603.     --7.b. Update data GTIR qty_missing
  604.     --Modified by Adrian, May 11, 2018, update qty GTI diambil dari sum
  605.      WITH sum AS(
  606.         SELECT C.inventory_id,C.product_id, SUM(C.qty_realization) AS qty
  607.         FROM tt_pemenuhan_stok A, in_inventory_item_receipt C
  608.         WHERE A.gtir_id = C.inventory_id
  609.             AND A.product_id = C.product_id
  610.             AND A.session_id = pSessionId
  611.             AND C.reason_receipt_code = vFlgQtyMissing
  612.         GROUP BY C.inventory_id, C.product_id
  613.     )
  614.     UPDATE tt_pemenuhan_stok A
  615.     SET gtir_qty_missing = D.qty
  616.     FROM in_inventory_item_receipt C
  617.     INNER JOIN sum D ON C.inventory_id = D.inventory_id AND c.product_id = D.product_id
  618.     WHERE A.gtir_id = C.inventory_id
  619.         AND A.product_id = C.product_id
  620.         AND A.session_id = pSessionId
  621.         AND C.reason_receipt_code = vFlgQtyMissing;
  622.  
  623.     --Modified by Adrian, May 11, 2018, update qty GTI diambil dari sum
  624.     WITH sum AS(
  625.         SELECT C.inventory_id,C.product_id, SUM(C.qty_realization) AS qty
  626.         FROM tt_pemenuhan_stok A, in_inventory_item_receipt C
  627.         WHERE A.gtir_id = C.inventory_id
  628.             AND A.product_id = C.product_id
  629.             AND A.session_id = pSessionId
  630.             AND C.reason_receipt_code = vFlgQtyRejected
  631.         GROUP BY C.inventory_id, C.product_id
  632.     )
  633.     UPDATE tt_pemenuhan_stok A
  634.     SET gtir_qty_rejected = D.qty
  635.     FROM in_inventory_item_receipt C
  636.     INNER JOIN sum D ON C.inventory_id = D.inventory_id AND c.product_id = D.product_id
  637.     WHERE A.gtir_id = C.inventory_id
  638.         AND A.product_id = C.product_id
  639.         AND A.session_id = pSessionId
  640.         AND C.reason_receipt_code = vFlgQtyRejected;
  641.  
  642.     --Modified by Adrian, May 11, 2018, update qty GTI diambil dari sum
  643.     WITH sum AS(
  644.         SELECT C.inventory_id,C.product_id, SUM(C.qty_realization) AS qty
  645.         FROM tt_pemenuhan_stok A, in_inventory_item_receipt C
  646.         WHERE A.gtir_id = C.inventory_id
  647.             AND A.product_id = C.product_id
  648.             AND A.session_id = pSessionId
  649.             AND C.reason_receipt_code = vFlgQtyCorrect
  650.         GROUP BY C.inventory_id, C.product_id
  651.     )
  652.     UPDATE tt_pemenuhan_stok A
  653.     SET gtir_qty_correct = D.qty
  654.     FROM in_inventory_item_receipt C
  655.     INNER JOIN sum D ON C.inventory_id = D.inventory_id AND c.product_id = D.product_id
  656.     WHERE A.gtir_id = C.inventory_id
  657.         AND A.product_id = C.product_id
  658.         AND A.session_id = pSessionId
  659.         AND C.reason_receipt_code = vFlgQtyCorrect;
  660.  
  661.     --Modified by Adrian, May 11, 2018, update qty GTI diambil dari sum
  662.     WITH sum AS(
  663.         SELECT C.inventory_id,C.product_id, SUM(C.qty_realization) AS qty
  664.         FROM tt_pemenuhan_stok A, in_inventory_item_receipt C
  665.         WHERE A.gtir_id = C.inventory_id
  666.             AND A.product_id = C.product_id
  667.             AND A.session_id = pSessionId
  668.             AND C.reason_receipt_code = vFlgQtyLost
  669.         GROUP BY C.inventory_id, C.product_id
  670.     )
  671.     UPDATE tt_pemenuhan_stok A
  672.     SET gtir_qty_lost = D.qty
  673.     FROM in_inventory_item_receipt C
  674.     INNER JOIN sum D ON C.inventory_id = D.inventory_id AND c.product_id = D.product_id
  675.     WHERE A.gtir_id = C.inventory_id
  676.         AND A.product_id = C.product_id
  677.         AND A.session_id = pSessionId
  678.         AND C.reason_receipt_code = vFlgQtyLost;
  679.  
  680.    
  681.     Open pRefHeader FOR
  682.     SELECT f_get_ou_name(vOuBuId) AS ou_bu_name, pPeriodFrom AS period_from,  pPeriodTo AS period_to,
  683.             pPeriodTo AS period_to, f_get_ou_name(pOuId) AS ou_name,
  684.             CASE WHEN pCtgrProductId != vEmptyId THEN f_get_ctgr_product_code(pCtgrProductId)||' - '||f_get_ctgr_product_name(pCtgrProductId) ELSE 'ALL' END AS ctgr_product,
  685.             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,
  686.             CASE WHEN pStyleProduct != vEmptyString THEN pStyleProduct ELSE ' - ' END AS style_product,
  687.             CASE WHEN pProductCodeName != vEmptyString THEN pProductCodeName ELSE ' - ' END AS product_code_name,
  688.             CASE WHEN pRgtoNo != vEmptyString THEN pRgtoNo ELSE ' - ' END AS rgto_no,
  689.             CASE WHEN pRgtoRemark != vEmptyString THEN pRgtoRemark ELSE ' - ' END AS rgto_remark,
  690.             CASE WHEN pPoNo != vEmptyString THEN pPoNo ELSE ' - ' END AS po_no,
  691.             CASE WHEN pPoRemark != vEmptyString THEN pPoRemark ELSE ' - ' END AS po_remark,
  692.             CASE WHEN pGtoNo != vEmptyString THEN pGtoNo ELSE ' - ' END AS gto_no,
  693.             CASE WHEN pGtoRemark != vEmptyString THEN pGtoRemark ELSE ' - ' END AS gto_remark,
  694.             CASE WHEN pGtiNo != vEmptyString THEN pGtiNo ELSE ' - ' END AS gti_no,
  695.             CASE WHEN pGtiRemark != vEmptyString THEN pGtiRemark ELSE ' - ' END AS gti_remark,
  696.             CASE WHEN pGtirNo != vEmptyString THEN pGtirNo ELSE ' - ' END AS gtir_no,
  697.             CASE WHEN pGtirRemark != vEmptyString THEN pGtirRemark ELSE ' - ' END AS gtir_remark;
  698.     RETURN NEXT pRefHeader;
  699.    
  700.     Open pRefDetail FOR
  701.     SELECT A.product_id, B.product_code, B.product_name, C.ctgr_product_name, D.sub_ctgr_product_name,
  702.         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,
  703.         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,
  704.         A.po_doc_no, A.po_doc_date, A.po_qty, A.gr_doc_date, A.gr_rgto_date_diff,
  705.         CASE WHEN gr_doc_date != vEmptyString THEN A.gr_qty END AS gr_qty,
  706.         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,
  707.         A.gtir_doc_no, A.gtir_doc_date, A.gtir_qty_missing, A.gtir_qty_rejected, A.gtir_qty_correct, A.gtir_qty_lost,
  708.         COALESCE(G.doc_no, vEmptyString) AS rgto_no_induk, COALESCE(G.doc_date, vEmptyString) AS rgto_date_induk
  709.     FROM tt_pemenuhan_stok A
  710.     INNER JOIN m_product B ON A.product_id = B.product_id
  711.     INNER JOIN m_ctgr_product C ON B.ctgr_product_id = C.ctgr_product_id
  712.     INNER JOIN m_sub_ctgr_product D ON B.sub_ctgr_product_id = D.sub_ctgr_product_id
  713.     INNER JOIN m_product_custom E ON B.product_id = E.product_id
  714.     LEFT JOIN in_inventory F ON F.inventory_id = A.rgto_id
  715.     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
  716.     WHERE A.session_id = pSessionId
  717.     ORDER BY A.rgto_doc_no, B.product_code;
  718.    
  719.     RETURN NEXT pRefDetail ;
  720.     DELETE FROM tt_pemenuhan_stok WHERE session_id = pSessionId;
  721. END;
  722. $BODY$
  723.   LANGUAGE plpgsql VOLATILE
  724.   COST 100
  725. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement