Advertisement
aadddrr

Untitled

Jan 31st, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_stock_amount_card(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, character varying, character varying)
  2.   RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     pRefHeader          REFCURSOR := 'refHeader';
  6.     pRefDetail          REFCURSOR := 'refDetail';
  7.     pSessionId          ALIAS FOR $1;
  8.     pTenantId           ALIAS FOR $2;
  9.     pUserId             ALIAS FOR $3;
  10.     pRoleId             ALIAS FOR $4;
  11.     pDatetime           ALIAS FOR $5;
  12.     pOuId               ALIAS FOR $6;
  13.     pProductCode            ALIAS FOR $7;
  14.     pProductName            ALIAS FOR $8;
  15.     pPeriodStart            ALIAS FOR $9;
  16.     pPeriodEnd          ALIAS FOR $10;
  17.    
  18.     vEmptyId            bigint := -99;
  19.     vRgDocTypeId            bigint := 111;
  20.     vDoDocTypeId            bigint := 311;
  21.     vCnDocTypeId            bigint := 511;
  22.     vRnDocTypeId            bigint := 502;
  23.     vDoReceiptDocTypeId     bigint := 526;
  24.     vAdjStockQtyDocTypeId       bigint := 521;
  25.     vAdjStockAmountDocTypeId    bigint := 522;
  26.     vCostingAllocationDocTypeId bigint := 528;
  27.     vGoodsTransferOutDocTypeId  bigint := 533;
  28.     vGoodsTransferInDocTypeId   bigint := 535;
  29.     vDeliveryGoodsBorrowingDocTypeId    bigint := 551;
  30.     vReturnGoodsBorrowingDocTypeId      bigint := 552;
  31.     vZero               numeric := 0;
  32.     vEmptyString            character varying := '';
  33.     vEmptyData          character varying := '-';
  34.     vReleased           character varying := 'R';
  35.     vFinal              character varying := 'F';
  36.     vNo                 character varying := 'N';
  37.     vBgnBalance         character varying := 'Beginning Balance';
  38.     vBpbDoc             character varying := 'BPB';
  39.     vDoDoc              character varying := 'DO';
  40.     vCnDoc              character varying := 'Claim Note';
  41.     vRnDoc              character varying := 'Return Note';
  42.     vDoReceiptDoc           character varying := 'DO Receipt';
  43.     vAdjStockQtyDoc         character varying := 'Adjustment Stock Qty';
  44.     vAdjStockAmountDoc      character varying := 'Adjustment Stock Amount';
  45.     vCostingAllocationDoc   character varying := 'Costing Allocation to Product';
  46.     vGoodsTransferOutDoc    character varying := 'Goods Transfer Out';
  47.     vDeliveryGoodsBorrowingDoc  character varying := 'Delivery Goods Borrowing';
  48.     vFilterProductCode      character varying := '';
  49.     vFilterProductName      character varying := '';
  50.     vSignJournalCredit      character varying := 'C';
  51. BEGIN
  52.  
  53.     IF(pProductCode <> '') THEN
  54.         vFilterProductCode := ' AND UPPER(f_get_product_code(X.product_id)) LIKE UPPER(''%'||pProductCode||'%'')';
  55.     END IF;
  56.  
  57.     IF(pProductName <> '') THEN
  58.         vFilterProductName := ' AND UPPER(f_get_product_name(X.product_id)) LIKE UPPER(''%'||pProductName||'%'')';
  59.     END IF;
  60.  
  61.    
  62.     --saldo awal
  63.     -- untuk yang ada beginning balance nya pada bulan tahun tersebut
  64.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  65.        session_id, product_code, product_name, transaction_date, transaction_no,
  66.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  67.        qty_original, amount_original
  68.     )
  69.     SELECT $1, X.product_code, X.product_name, $2, $2,
  70.         A.doc_type_id, $3, $4, $4, $4, $4, sum(A.qty), sum(A.gl_amount),
  71.         sum(A.qty), sum(A.gl_amount)
  72.     from in_summary_monthly_amount A
  73.     JOIN m_product X ON X.product_id = A.product_id
  74.     where date_year_month = $5
  75.     AND doc_type_id = $6
  76.     AND A.ou_bu_id = $7
  77.     AND A.tenant_id = $8'
  78.     || vFilterProductCode || vFilterProductName ||
  79.     ' group by A.product_id, X.product_code, X.product_name, A.doc_type_id
  80.      order by A.product_id'
  81.     USING pSessionId, vEmptyString, vBgnBalance, vZero, pPeriodStart, vEmptyId, pOuId, pTenantId;
  82.  
  83.     --untuk yang tidak ada beginning balance nya pada bulan tahun tersebut
  84.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  85.        session_id, product_code, product_name, transaction_date, transaction_no,
  86.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  87.        qty_original, amount_original
  88.     )
  89.     SELECT $1, X.product_code, X.product_name, $2, $2,
  90.         $3, $4, $5, $5, $5, $5, $5, $5,
  91.         $5, $5
  92.     from m_product X
  93.     where X.product_id NOT IN(select A.product_id from in_summary_monthly_amount A
  94.         JOIN m_product X ON X.product_id = A.product_id
  95.         where A.date_year_month = $6
  96.         AND A.doc_type_id = $3
  97.         AND A.tenant_id = $7
  98.         group by A.product_id, X.product_code, X.product_name, A.doc_type_id, X.product_id) '
  99.         || vFilterProductCode || vFilterProductName ||
  100.     ' order by X.product_id'
  101.     USING pSessionId, vEmptyString, vEmptyId, vBgnBalance, vZero, pPeriodStart, pTenantId;
  102.  
  103.  
  104.  
  105.  
  106.     --RG
  107.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  108.        session_id, product_code, product_name, transaction_date, transaction_no,
  109.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  110.        qty_original, amount_original
  111.     )
  112.     SELECT $1, X.product_code, X.product_name, A.doc_date, A.doc_no,
  113.         A.doc_type_id, $2, SUM(D.qty), SUM(D.gl_amount), $3, $3, $3, $3,
  114.         SUM(D.qty), SUM(D.gl_amount)
  115.     from pu_receive_goods A
  116.     JOIN pu_receive_goods_item B ON A.receive_goods_id = B.receive_goods_id
  117.     JOIN m_product X ON X.product_id = B.product_id
  118.     INNER JOIN m_ou_structure E ON A.ou_id = E.ou_id
  119.     JOIN gl_journal_trx C ON A.doc_type_id = C.doc_type_id AND A.receive_goods_id = C.doc_id
  120.         AND A.tenant_id = C.tenant_id AND A.doc_no = C.doc_no AND A.doc_date = C.doc_date AND E.ou_bu_id = C.ou_bu_id
  121.     JOIN gl_journal_trx_item D ON C.journal_trx_id = D.journal_trx_id AND B.product_id = D.product_id AND D.ref_id = B.receive_goods_item_id
  122.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  123.     AND (E.ou_bu_id = $6 OR E.ou_id = $6)
  124.     AND A.tenant_id = $7
  125.     AND C.status_doc = $8 '
  126.     || vFilterProductCode || vFilterProductName ||
  127.     ' AND A.doc_type_id = $9
  128.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id'
  129.     USING pSessionId, vBpbDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vRgDocTypeId;
  130.  
  131.     --DO
  132.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  133.        session_id, product_code, product_name, transaction_date, transaction_no,
  134.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  135.        qty_original, amount_original
  136.     )
  137.     SELECT $1, X.product_code, X.product_name, A.doc_date, A.doc_no,
  138.         A.doc_type_id, $2, $3, $3, SUM(D.qty), SUM(D.gl_amount), $3, $3,
  139.         SUM(D.qty*(-1)), SUM(D.gl_amount*(-1))
  140.     from sl_do A
  141.     JOIN sl_do_item B ON A.do_id = B.do_id
  142.     JOIN m_product X ON X.product_id = B.product_id
  143.     INNER JOIN m_ou_structure E ON A.ou_id = E.ou_id
  144.     JOIN gl_journal_trx C ON A.doc_type_id = C.doc_type_id AND A.do_id = C.doc_id
  145.         AND A.tenant_id = C.tenant_id AND A.doc_no = C.doc_no AND A.doc_date = C.doc_date AND E.ou_bu_id = C.ou_bu_id
  146.     JOIN gl_journal_trx_item D ON C.journal_trx_id = D.journal_trx_id AND B.product_id = D.product_id AND D.ref_id = B.do_item_id
  147.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  148.     AND (E.ou_bu_id = $6 OR E.ou_id = $6)
  149.     AND A.tenant_id = $7
  150.     AND C.status_doc = $8 '
  151.     || vFilterProductCode || vFilterProductName ||
  152.     ' AND A.doc_type_id = $9
  153.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id'
  154.     USING pSessionId, vDoDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vDoDocTypeId;
  155.  
  156.     --CLAIM NOTE
  157.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  158.        session_id, product_code, product_name, transaction_date, transaction_no,
  159.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  160.        qty_original, amount_original
  161.     )
  162.     SELECT $1, X.product_code, X.product_name, A.doc_date AS note_date, A.doc_no AS note_no,
  163.         A.doc_type_id, $2, $3, $3, SUM(D.qty), SUM(D.gl_amount), $3, $3,
  164.         SUM(D.qty*(-1)), SUM(D.gl_amount*(-1))
  165.     FROM in_inventory A
  166.     JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  167.     JOIN m_product X ON X.product_id = B.product_id
  168.     join m_ou_structure Z ON A.ou_from_id = Z.ou_id
  169.     join gl_journal_trx C ON A.doc_type_id = C.doc_type_id AND A.inventory_id = C.doc_id
  170.         AND A.tenant_id = C.tenant_id AND A.doc_no = C.doc_no AND A.doc_date = C.doc_date AND Z.ou_bu_id = C.ou_bu_id
  171.     join gl_journal_trx_item D ON C.journal_trx_id = D.journal_trx_id AND B.product_id = D.product_id AND D.ref_id = B.inventory_item_id
  172.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  173.     AND (Z.ou_bu_id = $6 OR Z.ou_id = $6)
  174.     AND A.tenant_id = $7 '
  175.     || vFilterProductCode || vFilterProductName ||
  176.     ' AND C.status_doc = $8
  177.     AND A.doc_type_id = $9
  178.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id'
  179.     USING pSessionId, vCnDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vCnDocTypeId;
  180.  
  181.     --RETURN NOTE
  182.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  183.        session_id, product_code, product_name, transaction_date, transaction_no,
  184.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  185.        qty_original, amount_original
  186.     )
  187.     SELECT $1, X.product_code, X.product_name, A.doc_date AS note_date, A.doc_no AS note_no,
  188.         A.doc_type_id, $2, SUM(D.qty), SUM(D.gl_amount), $3, $3, $3, $3,
  189.         SUM(D.qty), SUM(D.gl_amount)
  190.     FROM in_inventory A
  191.     JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  192.     JOIN m_product X ON X.product_id = B.product_id
  193.     join m_ou_structure Z ON A.ou_from_id = Z.ou_id
  194.     join gl_journal_trx C ON A.doc_type_id = C.doc_type_id AND A.inventory_id = C.doc_id
  195.         AND A.tenant_id = C.tenant_id AND A.doc_no = C.doc_no AND A.doc_date = C.doc_date AND Z.ou_bu_id = C.ou_bu_id
  196.     join gl_journal_trx_item D ON C.journal_trx_id = D.journal_trx_id AND B.product_id = D.product_id AND D.ref_id = B.inventory_item_id
  197.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  198.     AND (Z.ou_bu_id = $6 OR Z.ou_id = $6)
  199.     AND A.tenant_id = $7 '
  200.     || vFilterProductCode || vFilterProductName ||
  201.     ' AND C.status_doc = $8
  202.     AND A.doc_type_id = $9
  203.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id'
  204.     USING pSessionId, vRnDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vRnDocTypeId;
  205.  
  206.     --DO RECEIPT
  207.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  208.        session_id, product_code, product_name, transaction_date, transaction_no,
  209.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  210.        qty_original, amount_original
  211.     )
  212.     SELECT $1, X.product_code, X.product_name, A.doc_date, A.doc_no,
  213.         A.doc_type_id, $2, SUM(D.qty), SUM(D.gl_amount), $3, $3, $3, $3,
  214.         SUM(D.qty), SUM(D.gl_amount)
  215.     from in_do_receipt A
  216.     JOIN in_do_receipt_item B ON A.do_receipt_id = B.do_receipt_id
  217.     JOIN m_product X ON X.product_id = B.product_id
  218.     INNER JOIN m_ou_structure E ON A.ou_id = E.ou_id
  219.     JOIN gl_journal_trx C ON A.doc_type_id = C.doc_type_id AND A.do_receipt_id = C.doc_id
  220.         AND A.tenant_id = C.tenant_id AND A.doc_no = C.doc_no AND A.doc_date = C.doc_date AND E.ou_bu_id = C.ou_bu_id
  221.     join gl_journal_trx_item D ON C.journal_trx_id = D.journal_trx_id AND B.product_id = D.product_id AND D.ref_id = B.do_receipt_item_id
  222.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  223.     AND (E.ou_bu_id = $6 OR E.ou_id = $6)
  224.     AND A.tenant_id = $7 '
  225.     || vFilterProductCode || vFilterProductName ||
  226.     ' AND C.status_doc = $8
  227.     AND A.doc_type_id = $9
  228.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id'
  229.     USING pSessionId, vDoReceiptDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vDoReceiptDocTypeId;
  230.  
  231.  
  232.     --ADJ STOCK QTY
  233.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  234.        session_id, product_code, product_name, transaction_date, transaction_no,
  235.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  236.        qty_original, amount_original
  237.     )
  238.     SELECT $1, X.product_code, X.product_name, A.doc_date AS note_date, A.doc_no AS note_no,
  239.         A.doc_type_id, $2, SUM(CASE WHEN D.sign_journal <> $10 THEN D.qty ELSE 0 END) AS qty_in,
  240.         SUM(CASE WHEN D.sign_journal <> $10 THEN D.gl_amount ELSE 0 END) AS amount_in,
  241.         SUM(CASE WHEN D.sign_journal = $10 THEN D.qty ELSE 0 END) AS qty_out,
  242.         SUM(CASE WHEN D.sign_journal = $10 THEN D.gl_amount ELSE 0 END) AS amount_out,
  243.         $3, $3,
  244.         SUM(CASE WHEN D.sign_journal = $10 THEN D.qty * (-1) ELSE D.qty END), SUM(CASE WHEN D.sign_journal = $10 THEN D.gl_amount * (-1) ELSE D.gl_amount END)
  245.     FROM in_inventory A
  246.     JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  247.     JOIN m_product X ON X.product_id = B.product_id
  248.     join m_ou_structure Z ON A.ou_from_id = Z.ou_id
  249.     join gl_journal_trx C ON A.doc_type_id = C.doc_type_id AND A.inventory_id = C.doc_id
  250.         AND A.tenant_id = C.tenant_id AND A.doc_no = C.doc_no AND A.doc_date = C.doc_date AND Z.ou_bu_id = C.ou_bu_id
  251.     join gl_journal_trx_item D ON C.journal_trx_id = D.journal_trx_id AND B.product_id = D.product_id AND D.ref_id = B.inventory_item_id
  252.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  253.     AND (Z.ou_bu_id = $6 OR Z.ou_id = $6)
  254.     AND A.tenant_id = $7 '
  255.     || vFilterProductCode || vFilterProductName ||
  256.     ' AND C.status_doc = $8
  257.     AND A.doc_type_id = $9
  258.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id'
  259.     USING pSessionId, vAdjStockQtyDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vAdjStockQtyDocTypeId, vSignJournalCredit;
  260.  
  261.     --ADJ STOCK AMOUNT
  262.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  263.        session_id, product_code, product_name, transaction_date, transaction_no,
  264.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  265.        qty_original, amount_original
  266.     )
  267.     SELECT $1, X.product_code, X.product_name, A.doc_date AS note_date, A.doc_no AS note_no,
  268.         A.doc_type_id, $2, SUM(CASE WHEN D.sign_journal <> $10 THEN D.qty ELSE 0 END) AS qty_in,
  269.         SUM(CASE WHEN D.sign_journal <> $10 THEN D.gl_amount ELSE 0 END) AS amount_in,
  270.         SUM(CASE WHEN D.sign_journal = $10 THEN D.qty ELSE 0 END) AS qty_out,
  271.         SUM(CASE WHEN D.sign_journal = $10 THEN D.gl_amount ELSE 0 END) AS amount_out,
  272.         $3, $3,
  273.         SUM(CASE WHEN D.sign_journal = $10 THEN D.qty * (-1) ELSE D.qty END), SUM(CASE WHEN D.sign_journal = $10 THEN D.gl_amount * (-1) ELSE D.gl_amount END)
  274.     FROM in_inventory A
  275.     JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  276.     JOIN m_product X ON X.product_id = B.product_id
  277.     join m_ou_structure Z ON A.ou_from_id = Z.ou_id
  278.     join gl_journal_trx C ON A.doc_type_id = C.doc_type_id AND A.inventory_id = C.doc_id
  279.         AND A.tenant_id = C.tenant_id AND A.doc_no = C.doc_no AND A.doc_date = C.doc_date AND Z.ou_bu_id = C.ou_bu_id
  280.     join gl_journal_trx_item D ON C.journal_trx_id = D.journal_trx_id AND B.product_id = D.product_id AND D.ref_id = B.inventory_item_id
  281.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  282.     AND (Z.ou_bu_id = $6 OR Z.ou_id = $6)
  283.     AND A.tenant_id = $7 '
  284.     || vFilterProductCode || vFilterProductName ||
  285.     ' AND C.status_doc = $8
  286.     AND A.doc_type_id = $9
  287.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id'
  288.     USING pSessionId, vAdjStockAmountDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vAdjStockAmountDocTypeId, vSignJournalCredit;
  289.  
  290.     -- COSTING ALLOCATION TO PRODUCT
  291.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  292.        session_id, product_code, product_name, transaction_date, transaction_no,
  293.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  294.        qty_original, amount_original
  295.     )
  296.     SELECT $1, X.product_code, X.product_name, A.doc_date AS note_date, A.doc_no AS note_no,
  297.         A.doc_type_id, $2, $3 AS qty_in,
  298.         $3 AS amount_in,
  299.         $3 AS qty_out,
  300.         SUM(D.gl_amount) AS amount_out,
  301.         $3, $3,
  302.         $3, SUM(D.gl_amount)
  303.     FROM in_inventory A
  304.     JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  305.     JOIN m_product X ON X.product_id = B.product_id
  306.     join m_ou_structure Z ON A.ou_from_id = Z.ou_id
  307.     join gl_journal_trx C ON A.doc_type_id = C.doc_type_id AND A.inventory_id = C.doc_id
  308.         AND A.tenant_id = C.tenant_id AND A.doc_no = C.doc_no AND A.doc_date = C.doc_date AND Z.ou_bu_id = C.ou_bu_id
  309.     join gl_journal_trx_item D ON C.journal_trx_id = D.journal_trx_id AND B.product_id = D.product_id AND D.ref_id = B.inventory_item_id
  310.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  311.     AND (Z.ou_bu_id = $6 OR Z.ou_id = $6)
  312.     AND A.tenant_id = $7 '
  313.     || vFilterProductCode || vFilterProductName ||
  314.     ' AND C.status_doc = $8
  315.     AND A.doc_type_id = $9
  316.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id'
  317.     USING pSessionId, vCostingAllocationDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vCostingAllocationDocTypeId;
  318.  
  319.     -- GOODS TRANSFER OUT
  320.     -- Yang belum dibuatkan Goods Transfer In
  321.     -- Added by Adrian, Jan 31, 2017
  322.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  323.        session_id, product_code, product_name, transaction_date, transaction_no,
  324.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  325.        qty_original, amount_original
  326.     )
  327.     SELECT $1, X.product_code, X.product_name, A.doc_date AS note_date, A.doc_no AS note_no,
  328.         A.doc_type_id, $2, $3 AS qty_in,
  329.         $3 AS amount_in,
  330.         SUM(B.qty_realization) AS qty_out,
  331.         $3,
  332.         $3, $3,
  333.         $3, $3
  334.     FROM in_inventory A
  335.     JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  336.     JOIN m_product X ON X.product_id = B.product_id
  337.     join m_ou_structure Z ON A.ou_from_id = Z.ou_id
  338.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  339.     AND (Z.ou_bu_id = $6 OR Z.ou_id = $6)
  340.     AND A.tenant_id = $7 '
  341.     || vFilterProductCode || vFilterProductName ||
  342.     ' AND A.doc_type_id = $9
  343.     AND A.inventory_id NOT IN(
  344.         SELECT ref_id
  345.         FROM in_inventory
  346.         WHERE doc_type_id = $10 AND status_doc = $8
  347.     )
  348.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id, B.qty_realization'
  349.     USING pSessionId, vGoodsTransferOutDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vGoodsTransferOutDocTypeId, vGoodsTransferInDocTypeId;
  350.    
  351.     -- GOODS TRANSFER OUT
  352.     -- Yang sudah dibuatkan Goods Transfer In
  353.     -- Added by Adrian, Jan 31, 2017
  354.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  355.        session_id, product_code, product_name, transaction_date, transaction_no,
  356.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  357.        qty_original, amount_original
  358.     )
  359.     SELECT $1, X.product_code, X.product_name, A.doc_date AS note_date, A.doc_no AS note_no,
  360.         A.doc_type_id, $2, $3 AS qty_in,
  361.         $3 AS amount_in,
  362.         SUM(D.qty_out - D.qty_in) AS qty_out,
  363.         $3,
  364.         $3, $3,
  365.         $3, $3
  366.     FROM in_inventory A
  367.     JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  368.     JOIN m_product X ON X.product_id = B.product_id
  369.     join m_ou_structure Z ON A.ou_from_id = Z.ou_id
  370.     INNER JOIN in_inventory_item C ON C.ref_item_id = B.inventory_item_id
  371.     INNER JOIN in_balance_transfer_in_item D ON D.inventory_item_id = C.inventory_item_id
  372.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  373.     AND (Z.ou_bu_id = $6 OR Z.ou_id = $6)
  374.     AND A.tenant_id = $7 '
  375.     || vFilterProductCode || vFilterProductName ||
  376.     ' AND A.status_doc = $8
  377.     AND A.doc_type_id = $9
  378.     AND D.flg_receipt = $10
  379.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id, B.qty_realization, B.qty_request, D.qty_out, D.qty_in'
  380.     USING pSessionId, vGoodsTransferOutDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vGoodsTransferOutDocTypeId, vNo;
  381.    
  382.     -- DELIVERY GOODS BORROWING
  383.     -- Added by Adrian, Jan 31, 2017
  384.     EXECUTE 'INSERT INTO tt_r_stock_amount_card(
  385.        session_id, product_code, product_name, transaction_date, transaction_no,
  386.        doc_type_id, transaction_type, qty_in, amount_in, qty_out, amount_out, qty_balance, amount_balance,
  387.        qty_original, amount_original
  388.     )
  389.     SELECT $1, X.product_code, X.product_name, A.doc_date AS note_date, A.doc_no AS note_no,
  390.         A.doc_type_id, $2, $3 AS qty_in,
  391.         $3 AS amount_in,
  392.         B.qty_realization AS qty_out,
  393.         $3,
  394.         $3, $3,
  395.         $3, $3
  396.     FROM in_inventory A
  397.     JOIN in_inventory_item B ON A.inventory_id = B.inventory_id
  398.     JOIN m_product X ON X.product_id = B.product_id
  399.     join m_ou_structure Z ON A.ou_from_id = Z.ou_id
  400.     INNER JOIN in_inventory_borrow_balance_item C ON C.inventory_item_id = B.inventory_item_id
  401.     WHERE SUBSTRING(A.doc_date, 1, 6) BETWEEN $4 AND $5
  402.     AND (Z.ou_bu_id = $6 OR Z.ou_id = $6)
  403.     AND A.tenant_id = $7 '
  404.     || vFilterProductCode || vFilterProductName ||
  405.     ' AND A.doc_type_id = $9
  406.     AND C.status_item <> $10
  407.     AND C.qty_do > C.qty_return
  408.     GROUP BY X.product_code, X.product_name, A.doc_date, A.doc_no, A.doc_type_id, B.qty_realization'
  409.     USING pSessionId, vDeliveryGoodsBorrowingDoc, vZero, pPeriodStart, pPeriodEnd, pOuId, pTenantId, vReleased, vDeliveryGoodsBorrowingDocTypeId, vFinal;
  410.  
  411.    
  412.    
  413.     --hapus data produk yang tidak ada transaksi pada periode tersebut
  414.     WITH product_delete AS (
  415.         SELECT session_id, product_code, COUNT(product_code) AS count_delete
  416.         FROM tt_r_stock_amount_card
  417.         WHERE session_id = pSessionId
  418.         GROUP BY session_id, product_code
  419.     )
  420.     DELETE FROM tt_r_stock_amount_card A
  421.     WHERE EXISTS (
  422.         SELECT 1 FROM product_delete B
  423.         WHERE A.product_code = B.product_code
  424.         AND A.session_id = B.session_id
  425.         AND B.count_delete = 1
  426.     );
  427.  
  428.    
  429.     Open pRefHeader FOR
  430.     SELECT f_get_ou_name(pOuId) AS ou, pPeriodStart AS start_month_year, pPeriodEnd AS end_month_year,
  431.     pProductCode AS product_code_filter,
  432.     pProductName AS product_name_filter, pDatetime AS datetime, f_get_username(pUserId) AS username;
  433.    
  434.     RETURN NEXT pRefHeader;
  435.    
  436.     Open pRefDetail FOR
  437.     SELECT session_id, product_code, product_name, transaction_date, transaction_no,
  438.        doc_type_id, transaction_type, qty_in AS in_qty, amount_in AS in_amount, qty_out AS out_qty, amount_out AS out_amount,
  439.        SUM(qty_original) OVER (PARTITION BY product_code ORDER BY transaction_date, doc_type_id, transaction_no) AS balance_qty,
  440.        SUM(amount_original) OVER (PARTITION BY product_code ORDER BY transaction_date, doc_type_id, transaction_no) AS balance_amount,
  441.        qty_original, amount_original
  442.     FROM tt_r_stock_amount_card
  443.     WHERE session_id = pSessionId
  444.     ORDER BY product_code, transaction_date, doc_type_id, transaction_no;
  445.  
  446.     RETURN NEXT pRefDetail ;
  447.     DELETE FROM tt_r_stock_amount_card WHERE session_id = pSessionId;
  448.  
  449. END;
  450. $BODY$
  451.   LANGUAGE plpgsql VOLATILE
  452.   COST 100
  453.   ROWS 1000;
  454.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement