Advertisement
aadddrr

Untitled

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