Advertisement
aadddrr

Untitled

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