Advertisement
aadddrr

Untitled

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