aadddrr

[BACKUP] r_accounts_payable

Jul 4th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Modified by Adrian, Jul 5, 2017, memperbaiki ouId dan tenantId yang dipanteks 10
  2.  
  3. CREATE OR REPLACE FUNCTION r_accounts_payable(character varying, bigint, bigint, character varying,
  4. character varying, character varying, bigint, bigint, character varying)
  5.   RETURNS SETOF refcursor AS
  6. $BODY$
  7. DECLARE
  8.     pRefHeader          REFCURSOR := 'refHeader';
  9.     pRefDetail          REFCURSOR := 'refDetail';
  10.     pSessionId          ALIAS FOR $1;
  11.     pTenantId           ALIAS FOR $2;
  12.     pOuId               ALIAS FOR $3;
  13.     pCurrCode           ALIAS FOR $4;
  14.  
  15.     pPeriodFrom         ALIAS FOR $5;
  16.     pPeriodTo           ALIAS FOR $6;
  17.     pUserId             ALIAS FOR $7;
  18.     pRoleId             ALIAS FOR $8;
  19.     pDatetime           ALIAS FOR $9;
  20.  
  21.     vCurrCode           character varying := '';
  22.     vPrevPeriod         character varying := '';
  23.     vEmptyId            bigint := -99;
  24.  
  25. BEGIN
  26.  
  27. --kurangin 1 bulan
  28. SELECT TO_CHAR(TO_DATE(pPeriodFrom,'YYYYMM') - interval '1 Month','YYYYMM') INTO vPrevPeriod;
  29.  
  30. --1. ambil valuta pembukuan (dari system config) simpan ke variable
  31.     SELECT B.parameter_value INTO vCurrCode
  32.     from t_parameter A
  33.     JOIN t_system_config B ON A.parameter_id = B.parameter_id AND B.tenant_id = 10
  34.     WHERE A.parameter_code = 'ValutaBuku';
  35.  
  36.  
  37. --2. ambil semua dokumen AP dari hasil tutup bulan (periode awal - 1 bulan) sebagai saldo awal
  38. --a. ambil dari in_summary_monthly_ap yang balance_amount - payment_amount > 0
  39. --b. simpan ke table temp tr_trx_ap dengan field: session_id, tenant_id, ou_id, flg_data, partner_id,
  40. --curr_code, doc_type_id, doc_id, doc_date, doc_no, year_month_date, balance_amount, accumulated_amount, type_data)
  41. --c. type data diisi 1 jika balance_amount > 0, diisi -1 jika balance amount < 0
  42. --d. balance amount selalu diisi + walaupun data aslinya bernilai negatif
  43. --e. flg_data diisi 'AAAA' sebagai tanda untuk saldo awal
  44.  
  45.     INSERT INTO tr_trx_ap (
  46.     session_id, tenant_id, ou_id, flg_data, partner_id,
  47.     curr_code, doc_type_id, doc_id, doc_date, doc_no, balance_amount, accumulated_amount, type_data)
  48.    
  49.     SELECT pSessionId, A.tenant_id, A.ou_id, 'AAAA', B.partner_id,
  50.     A.curr_code, A.doc_type_id, B.id, B.doc_date, B.doc_no,
  51.     (CASE WHEN (A.balance_amount - A.payment_amount) < 0 THEN (A.balance_amount - A.payment_amount)*-1 ELSE
  52.     (A.balance_amount - A.payment_amount) END) AS balance_amount,
  53.     0 AS accumulated_amount,
  54.     (CASE WHEN A.balance_amount < 0 THEN -1 ELSE 1 END) AS type_data
  55.     FROM fi_summary_monthly_ap A
  56.     INNER JOIN vw_fi_all_invoice_ap B ON A.doc_type_id = B.doc_type_id AND A.invoice_id = B.id
  57.     WHERE A.tenant_id = pTenantId
  58.     AND A.ou_id = pOuId
  59.     AND (A.balance_amount - A.payment_amount) > 0
  60.     AND A.date_year_month = vPrevPeriod;
  61.  
  62. --3. ambil semua dokumen AP dari bulan berjalan (periode awal - periode akhir)
  63. --   a. ambil dari fi_invoice_ap_balance simpan ke table temp tr_trx_ap
  64. --   b. type data diisi 1 jika amount > 0, diisi -1 jika amount < 0
  65. --   c. balance amount selalu diisi + walaupun data aslinya bernilai negatif
  66. --   d. flg_data diisi 'BBBB' untuk amount +
  67. --   e. flg_data diisi 'CCCC' untuk amount -
  68.  
  69.     INSERT INTO tr_trx_ap (
  70.     session_id, tenant_id, ou_id, flg_data, partner_id,
  71.     curr_code, doc_type_id, doc_id, doc_date, doc_no, balance_amount, accumulated_amount, type_data)
  72.     SELECT pSessionId, A.tenant_id, A.ou_id,
  73.     (CASE WHEN (A.amount) < 0 THEN 'CCCC' ELSE 'BBBB' END) AS flg_data,
  74.     A.partner_id, A.curr_code, A.doc_type_id, A.invoice_ap_balance_id, A.doc_date, A.doc_no,
  75.     (CASE WHEN (A.amount) < 0 THEN (A.amount)*-1 ELSE (A.amount) END) AS balance_amount,
  76.     0 AS accumulated_amount,
  77.     (CASE WHEN (A.amount) < 0 THEN -1 ELSE 1 END) AS type_data
  78.     FROM fi_invoice_ap_balance A
  79.     WHERE A.tenant_id = pTenantId
  80.     AND A.ou_id = pOuId
  81.     AND SUBSTR(A.doc_date, 1, 6) BETWEEN pPeriodFrom AND pPeriodTo;
  82.  
  83.     INSERT INTO tr_trx_ap (
  84.     session_id, tenant_id, ou_id, flg_data, partner_id,
  85.     curr_code, doc_type_id, doc_id, doc_date, doc_no, balance_amount, accumulated_amount, type_data)
  86.     SELECT pSessionId, A.tenant_id, A.ou_id,
  87.         (CASE WHEN (A.gov_tax_amount) < 0 THEN 'CCCC' ELSE 'BBBB' END) AS flg_data,
  88.         A.partner_id, A.tax_curr_code, A.doc_type_id, A.invoice_tax_ap_balance_id, A.tax_date, A.tax_no,
  89.         (CASE WHEN (A.gov_tax_amount) < 0 THEN (A.gov_tax_amount)*-1 ELSE
  90.             (A.gov_tax_amount) END) AS balance_amount, 0 AS accumulated_amount,
  91.         (CASE WHEN (A.gov_tax_amount) < 0 THEN -1 ELSE 1 END) AS type_data
  92.     FROM fi_invoice_tax_ap_balance A
  93.     INNER JOIN fi_invoice_ap_balance B ON A.invoice_ap_balance_id = B.invoice_ap_balance_id
  94.     WHERE A.tenant_id = pTenantId
  95.     AND A.ou_id = pOuId
  96.     AND SUBSTR(B.doc_date, 1, 6) BETWEEN pPeriodFrom AND pPeriodTo;
  97.  
  98.  
  99. --4. ambil dokumen pelunasan
  100. --a. cek report ap card line 216-297
  101. --b. copy sama persis hanya waktu lakukan update alokasi pelunasan pakai table temp yang dari step nomor 2 dan 3 (tr_trx_ap)
  102.     INSERT INTO tr_doc_allocation_ap
  103.     (session_id, tenant_id, ou_id,
  104.     doc_type_id, doc_id, doc_date, doc_no,
  105.     curr_code, amount)
  106.     SELECT pSessionId, A.tenant_id, A.ou_id,
  107.     B.debit_doc_type_id, B.debit_id, fi_get_date_invoice_ap(B.debit_doc_type_id, B.debit_id), fi_get_no_invoice_ap(B.debit_doc_type_id, B.debit_id),
  108.     B.debit_curr_code, SUM(B.debit_amount)
  109.     FROM fi_payment_order A, fi_payment_order_alloc_balance B
  110.     WHERE A.tenant_id = pTenantId
  111.     AND A.payment_order_id = B.payment_order_id
  112.     AND A.ou_id = 10
  113.     AND SUBSTR(A.doc_date, 1, 6) BETWEEN
  114.     pPeriodFrom AND pPeriodTo
  115.     AND flg_alloc = 'A'
  116.     GROUP BY A.tenant_id, A.ou_id, B.debit_doc_type_id, B.debit_id, B.debit_curr_code;
  117.    
  118.     INSERT INTO tr_doc_allocation_ap
  119.     (session_id, tenant_id, ou_id,
  120.     doc_type_id, doc_id, doc_date, doc_no,
  121.     curr_code, amount)
  122.     SELECT pSessionId, A.tenant_id, A.ou_id,
  123.     B.credit_doc_type_id, B.credit_id, fi_get_date_invoice_ap(B.credit_doc_type_id, B.credit_id), fi_get_no_invoice_ap(B.credit_doc_type_id, B.credit_id),
  124.     B.credit_curr_code, SUM(B.credit_amount)
  125.     FROM fi_payment_order A, fi_payment_order_alloc_balance B
  126.     WHERE A.tenant_id = pTenantId
  127.     AND A.payment_order_id = B.payment_order_id
  128.     AND A.ou_id = 10
  129.     AND SUBSTR(A.doc_date, 1, 6) BETWEEN
  130.     pPeriodFrom AND pPeriodTo
  131.     AND flg_alloc = 'A'
  132.     GROUP BY A.tenant_id, A.ou_id, B.credit_doc_type_id, B.credit_id, B.credit_curr_code;
  133.    
  134.     INSERT INTO tr_doc_allocation_ap
  135.     (session_id, tenant_id, ou_id,
  136.     doc_type_id, doc_id, doc_date, doc_no,
  137.     curr_code, amount)
  138.     SELECT pSessionId, B.tenant_id, B.ou_id,
  139.     B.credit_doc_type_id, B.credit_id, fi_get_date_invoice_ap(B.credit_doc_type_id, B.credit_id), fi_get_no_invoice_ap(B.credit_doc_type_id, B.credit_id),
  140.     B.credit_curr_code, SUM(B.credit_amount)
  141.     FROM fi_payment_order_alloc_balance B
  142.     WHERE B.tenant_id = pTenantId
  143.     AND B.ou_id = 10
  144.     AND SUBSTR(B.ref_doc_date, 1, 6) BETWEEN
  145.     pPeriodFrom AND pPeriodTo
  146.     AND B.flg_alloc = 'C'
  147.     AND B.ref_alloc_id <> -99
  148.     GROUP BY B.tenant_id, B.ou_id, B.credit_doc_type_id, B.credit_id, B.credit_curr_code;
  149.  
  150.     /*
  151.      * update akumulasi nilai untuk yg sudah dialokasikan di atas
  152.      * untuk hitung sisa saldo nya
  153.      */
  154.  
  155.      
  156.     UPDATE tr_trx_ap
  157.     SET accumulated_amount = accumulated_amount + (
  158.                                 SELECT SUM(A.amount)
  159.                                 FROM tr_doc_allocation_ap A
  160.                                 WHERE tr_trx_ap.tenant_id = A.tenant_id
  161.                                 AND tr_trx_ap.session_id = A.session_id
  162.                                 AND tr_trx_ap.ou_id = A.ou_id
  163.                                 AND tr_trx_ap.doc_type_id = A.doc_type_id
  164.                                 AND tr_trx_ap.doc_no = A.doc_no
  165.                                 AND tr_trx_ap.doc_date = A.doc_date
  166.                                 AND tr_trx_ap.curr_code = A.curr_code
  167.                                 AND tr_trx_ap.doc_id = A.doc_id
  168.                                 AND tr_trx_ap.session_id = pSessionId
  169.                                 AND A.session_id = pSessionId
  170.                                 GROUP BY A.session_id, A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date
  171.                             )
  172.     WHERE EXISTS ( SELECT 1 FROM tr_doc_allocation_ap A
  173.             WHERE tr_trx_ap.tenant_id = A.tenant_id AND
  174.                 tr_trx_ap.session_id = A.session_id AND
  175.                 tr_trx_ap.ou_id = A.ou_id AND
  176.                 tr_trx_ap.doc_type_id = A.doc_type_id AND
  177.                 tr_trx_ap.doc_date = A.doc_date AND
  178.                 tr_trx_ap.doc_no = A.doc_no AND
  179.                 tr_trx_ap.curr_code = A.curr_code AND
  180.                 tr_trx_ap.doc_id = A.doc_id AND
  181.                 tr_trx_ap.session_id = pSessionId
  182.                 AND
  183.                 A.session_id = pSessionId
  184.                 ) AND
  185.         tr_trx_ap.session_id = pSessionId;
  186.  
  187. --5. hitung saldo akhirnya
  188. --   a. insert ke tr_trx_ap
  189. --   b. ambil dari table tr_trx_ap yang flag nya 'AAAA', 'BBBB', 'CCCC',
  190. --   c. flg data diisi dengan 'ZZZZ'
  191. --   d. type_data mengikuti data aslinya
  192.  
  193.  
  194.     INSERT INTO tr_trx_ap (
  195.     session_id, tenant_id, ou_id, flg_data, partner_id,
  196.     curr_code, doc_type_id, doc_id, doc_date, doc_no, balance_amount, accumulated_amount, type_data)
  197.     SELECT A.session_id, A.tenant_id, A.ou_id, 'ZZZZ', A.partner_id,
  198.     A.curr_code, A.doc_type_id, A.doc_id, A.doc_date, A.doc_no, A.balance_amount - A.accumulated_amount, 0, A.type_data
  199.     FROM tr_trx_ap A
  200.     WHERE (A.balance_amount - A.accumulated_amount) > 0
  201.     AND (A.flg_data = 'AAAA' OR A.flg_data = 'BBBB' OR A.flg_data = 'CCCC');
  202.  
  203.  
  204.  
  205.  
  206. --6. ambil dokumen pelunasan (untuk ditampilkan di hasil akhir report)
  207. --   a. cek report kartu ap line 302-364
  208. --   b. logic sama persis cuman insert ke table temp tr_trx_ap
  209. --   c. flg_data diisi 'CCCC', type_data diisi -1
  210.  
  211.     INSERT INTO tr_trx_ap (
  212.     session_id, tenant_id, ou_id, flg_data, partner_id,
  213.     curr_code, doc_type_id, doc_id, doc_date, doc_no, balance_amount, accumulated_amount, type_data)
  214.     SELECT pSessionId, A.tenant_id, A.ou_id, 'CCCC',
  215.     B.partner_id, A.debit_curr_code,
  216.     A.debit_doc_type_id, A.debit_id, fi_get_date_invoice_ap(A.debit_doc_type_id, A.debit_id), fi_get_no_invoice_ap(A.debit_doc_type_id, A.debit_id),
  217.     SUM(A.debit_amount), SUM(A.debit_amount), -1
  218.     FROM fi_payment_order B, fi_payment_order_alloc_balance A
  219.     WHERE A.tenant_id = pTenantId
  220.     AND A.ou_id = pOuId
  221.     AND A.payment_order_id = B.payment_order_id
  222.     AND SUBSTR(B.doc_date, 1, 6) BETWEEN
  223.     pPeriodFrom AND pPeriodTo
  224.     AND A.flg_alloc = 'A'
  225.     GROUP BY A.tenant_id, B.partner_id, A.debit_curr_code, A.ou_id, A.debit_doc_type_id, A.debit_id;
  226.          
  227.     INSERT INTO tr_trx_ap (
  228.     session_id, tenant_id, ou_id, flg_data, partner_id,
  229.     curr_code, doc_type_id, doc_id, doc_date, doc_no, balance_amount, accumulated_amount, type_data)
  230.     SELECT pSessionId, A.tenant_id, A.ou_id, 'CCCC', B.partner_id, A.credit_curr_code,
  231.     A.credit_doc_type_id, A.credit_id, fi_get_date_invoice_ap(A.credit_doc_type_id, A.credit_id), fi_get_no_invoice_ap(A.credit_doc_type_id, A.credit_id),
  232.     SUM(A.credit_amount), SUM(A.credit_amount), -1
  233.     FROM fi_payment_order B, fi_payment_order_alloc_balance A
  234.     WHERE A.tenant_id = pTenantId
  235.     AND A.ou_id = pOuId
  236.     AND A.payment_order_id = B.payment_order_id
  237.     AND SUBSTR(B.doc_date, 1, 6)
  238.     BETWEEN pPeriodFrom AND pPeriodTo
  239.     AND A.flg_alloc = 'A'
  240.     GROUP BY A.tenant_id, B.partner_id, A.credit_curr_code, A.ou_id, A.credit_doc_type_id, A.credit_id;
  241.  
  242.     INSERT INTO tr_trx_ap (
  243.     session_id, tenant_id, ou_id, flg_data, partner_id,
  244.     curr_code, doc_type_id, doc_id, doc_date, doc_no, balance_amount, accumulated_amount, type_data)
  245.     SELECT pSessionId, B.tenant_id, B.ou_id, 'CCCC', C.partner_id,
  246.     B.credit_curr_code, B.credit_doc_type_id,
  247.     B.credit_id, fi_get_date_invoice_ap(B.credit_doc_type_id, B.credit_id), fi_get_no_invoice_ap(B.credit_doc_type_id, B.credit_id),
  248.     SUM(B.credit_amount), SUM(B.credit_amount), -1
  249.     FROM fi_payment_order_alloc_balance B
  250.     INNER JOIN vw_fi_all_invoice_ap C ON C.doc_type_id = B.credit_doc_type_id AND C.id = B.credit_id
  251.     WHERE B.tenant_id = pTenantId
  252.     AND B.ou_id = 10
  253.     AND SUBSTR(B.ref_doc_date, 1, 6) BETWEEN
  254.     pPeriodFrom AND pPeriodTo
  255.     AND B.flg_alloc = 'C'
  256.     AND B.ref_alloc_id <> -99
  257.     GROUP BY B.tenant_id, B.ou_id, C.partner_id,
  258.     B.credit_curr_code,  B.credit_doc_type_id,
  259.     B.credit_id;
  260.  
  261.  
  262. -- 7. siapkan hasil rekapnya
  263. --   a. buat table temp tr_summary_ap (session_id, tenant_id, ou_id, curr_code, partner_id, beginning_balance, book_beginning_balance, plus_balance, book_plus_balance, minus_balance, book_minus_balance, book_ending_balance, ending_balance, eom_balance)
  264. --   b. insert ke table temp tr_summary_ap untuk field beginning balance dan book_beginning_balance yg valuta <> valuta buku (di kurs kan dengan kurs komersial) dari tr_trx_ap yg flg = 'AAAA'
  265.  
  266.     INSERT INTO tr_summary_ap (session_id, tenant_id, ou_id, curr_code, partner_id, beginning_balance, book_beginning_balance,
  267.     plus_balance, book_plus_balance, minus_balance, book_minus_balance, book_ending_balance, ending_balance, eom_balance)
  268.     SELECT A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id, SUM(A.balance_amount * A.type_data),
  269.     SUM(A.balance_amount * f_commercial_rate(A.tenant_id, A.doc_date, A.curr_code, vCurrCode)* A.type_data),
  270.     0, 0, 0, 0, 0, 0, 0
  271.     FROM tr_trx_ap A
  272.     WHERE A.curr_code <> vCurrCode
  273.     AND flg_data = 'AAAA'
  274.     AND A.session_id = pSessionId
  275.     GROUP BY A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id;
  276.  
  277. --   c. insert ke table temp tr_summary_ap untuk field beginning balance dan book_beginning_balance yg valuta = valuta buku dari tr_trx_ap yg flg = 'AAAA'
  278.  
  279.     INSERT INTO tr_summary_ap (session_id, tenant_id, ou_id, curr_code, partner_id, beginning_balance, book_beginning_balance,
  280.     plus_balance, book_plus_balance, minus_balance, book_minus_balance, book_ending_balance, ending_balance, eom_balance)
  281.     SELECT A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id, SUM(A.balance_amount * A.type_data), SUM(A.balance_amount * A.type_data),
  282.     0, 0, 0, 0, 0, 0, 0
  283.     FROM tr_trx_ap A
  284.     WHERE A.curr_code = vCurrCode
  285.     AND flg_data = 'AAAA'
  286.     AND A.session_id = pSessionId
  287.     GROUP BY A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id;
  288.  
  289. --   d. insert ke table temp tr_summary_ap untuk field plus balance dan book_plus_balance yg valuta <> valuta buku (di kurs kan dengan kurs komersial) dari tr_trx_ap yg flg = 'BBBB'
  290.  
  291.     INSERT INTO tr_summary_ap (session_id, tenant_id, ou_id, curr_code, partner_id, beginning_balance, book_beginning_balance,
  292.     plus_balance, book_plus_balance, minus_balance, book_minus_balance, book_ending_balance, ending_balance, eom_balance)
  293.     SELECT A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id, 0, 0,
  294.     SUM(A.balance_amount),
  295.     SUM(A.balance_amount * f_commercial_rate(A.tenant_id, A.doc_date, A.curr_code , vCurrCode)),
  296.     0, 0, 0, 0, 0
  297.     FROM tr_trx_ap A
  298.     WHERE A.curr_code <> vCurrCode
  299.     AND flg_data = 'BBBB'
  300.     AND A.session_id = pSessionId
  301.     GROUP BY A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id;
  302.  
  303. --   e. insert ke table temp tr_summary_ap untuk field plus balance dan book_plus_balance yg valuta = valuta buku dari tr_trx_ap yg flg = 'BBBB'
  304.  
  305.     INSERT INTO tr_summary_ap (session_id, tenant_id, ou_id, curr_code, partner_id, beginning_balance, book_beginning_balance,
  306.     plus_balance, book_plus_balance, minus_balance, book_minus_balance, book_ending_balance, ending_balance, eom_balance)
  307.     SELECT A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id, 0, 0,
  308.     SUM(A.balance_amount),
  309.     SUM(A.balance_amount),
  310.     0, 0, 0, 0, 0
  311.     FROM tr_trx_ap A
  312.     WHERE A.curr_code = vCurrCode
  313.     AND flg_data = 'BBBB'
  314.     AND A.session_id = pSessionId
  315.     GROUP BY A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id;
  316.  
  317. --   f. insert ke table temp tr_summary_ap untuk field minus balance dan book_minus_balance yg valuta <> valuta buku (di kurs kan dengan kurs komersial) dari tr_trx_ap yg flg = 'CCCC'
  318.     INSERT INTO tr_summary_ap (session_id, tenant_id, ou_id, curr_code, partner_id, beginning_balance, book_beginning_balance,
  319.     plus_balance, book_plus_balance, minus_balance, book_minus_balance, book_ending_balance, ending_balance, eom_balance)
  320.     SELECT A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id, 0, 0,
  321.     0, 0,  
  322.     SUM(A.balance_amount),
  323.     SUM(A.balance_amount * f_commercial_rate(A.tenant_id, A.doc_date, A.curr_code, vCurrCode)),
  324.     0, 0, 0
  325.     FROM tr_trx_ap A
  326.     WHERE A.curr_code <> vCurrCode
  327.     AND flg_data = 'CCCC'
  328.     AND A.session_id = pSessionId
  329.     GROUP BY A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id;
  330.    
  331. --   g. insert ke table temp tr_summary_ap untuk field minus balance dan book_minus_balance yg valuta = valuta buku dari tr_trx_ap yg flg = 'CCCC'
  332.     INSERT INTO tr_summary_ap (session_id, tenant_id, ou_id, curr_code, partner_id, beginning_balance, book_beginning_balance,
  333.     plus_balance, book_plus_balance, minus_balance, book_minus_balance, book_ending_balance, ending_balance, eom_balance)
  334.     SELECT A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id, 0, 0,
  335.     0, 0,  
  336.     SUM(A.balance_amount),
  337.     SUM(A.balance_amount),
  338.     0, 0, 0
  339.     FROM tr_trx_ap A
  340.     WHERE A.curr_code = vCurrCode
  341.     AND flg_data = 'CCCC'
  342.     AND A.session_id = pSessionId
  343.     GROUP BY A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id;
  344.    
  345. --   h. insert ke table temp tr_summary_ap untuk field ending balance dan book_ending_balance, dan eom_balance yg valuta <> valuta buku (di kurs kan dengan kurs komersial, untuk eom kurskan dengan kurs end of month) dari tr_trx_ap yg flg = 'ZZZZ' (perhatikan type nya waktu SUM)
  346.     INSERT INTO tr_summary_ap (session_id, tenant_id, ou_id, curr_code, partner_id, beginning_balance, book_beginning_balance,
  347.     plus_balance, book_plus_balance, minus_balance, book_minus_balance, ending_balance, book_ending_balance, eom_balance)
  348.     SELECT A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id, 0, 0,
  349.     0, 0, 0, 0,
  350.     SUM(A.balance_amount * A.type_data),
  351.     SUM(A.balance_amount * f_commercial_rate(A.tenant_id, A.doc_date, A.curr_code, vCurrCode) * A.type_data),
  352.     SUM(A.balance_amount * f_eom_rate(A.tenant_id, SUBSTR(A.doc_date, 1, 6), A.curr_code, vCurrCode) * A.type_data)
  353.     FROM tr_trx_ap A
  354.     WHERE A.curr_code <> vCurrCode
  355.     AND flg_data = 'ZZZZ'
  356.     AND A.session_id = pSessionId
  357.     GROUP BY A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id;
  358.    
  359. --   i. insert ke table temp tr_summary_ap untuk field ending balance dan book_ending_balance, dan eom_balance yg valuta = valuta buku dari tr_trx_ap yg flg = 'ZZZZ' (perhatikan type nya waktu SUM)
  360.  
  361.     INSERT INTO tr_summary_ap (session_id, tenant_id, ou_id, curr_code, partner_id, beginning_balance, book_beginning_balance,
  362.     plus_balance, book_plus_balance, minus_balance, book_minus_balance, ending_balance, book_ending_balance, eom_balance)
  363.     SELECT A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id, 0, 0,
  364.     0, 0, 0, 0,
  365.     SUM(A.balance_amount* A.type_data),
  366.     SUM(A.balance_amount * A.type_data),
  367.     SUM(A.balance_amount * A.type_data)
  368.     FROM tr_trx_ap A
  369.     WHERE A.curr_code = vCurrCode
  370.     AND flg_data = 'ZZZZ'
  371.     AND A.session_id = pSessionId
  372.     GROUP BY A.session_id, A.tenant_id, A.ou_id, A.curr_code, A.partner_id;
  373.    
  374. --   j. kembalikan data sesuai yang diharapkan
  375. IF pCurrCode <> '-99' THEN
  376.         DELETE FROM tr_summary_ap WHERE session_id = pSessionId AND curr_code <> pCurrCode;
  377.     END IF;
  378.  
  379. Open pRefHeader FOR
  380.     SELECT f_get_ou_name(pOuId) AS ou_name,
  381.     f_get_username(pUserId) AS username,
  382.     pPeriodFrom AS start_month_year,
  383.     pPeriodTo AS end_month_year,
  384.     (CASE WHEN pCurrCode <> '-99' THEN pCurrCode ELSE 'ALL' END) AS curr_filter,
  385.     pDatetime AS datetime;
  386. RETURN NEXT pRefHeader;
  387.  
  388. Open pRefDetail FOR
  389.     SELECT A.curr_code, f_get_partner_name(A.partner_id) AS partner_name,
  390.     SUM(A.beginning_balance) AS beginning_balance_original, SUM(A.book_beginning_balance) AS beginning_balance_gl,
  391.     SUM(A.plus_balance) AS credit_ap_original, SUM(A.book_plus_balance) AS credit_ap_gl,
  392.     SUM(A.minus_balance) AS debit_ap_original, SUM(A.book_minus_balance) AS debit_ap_gl,
  393.     SUM(A.ending_balance) AS end_balance_original, SUM(A.book_ending_balance) AS end_balance_gl,
  394.     SUM(A.eom_balance) AS gl_amount_month_end, (SUM(A.eom_balance)-SUM(A.book_ending_balance)) AS gl_amount_curr_difference
  395.     from tr_summary_ap A
  396.     WHERE A.session_id = pSessionId
  397.     GROUP BY A.curr_code, partner_name
  398.     ORDER BY A.curr_code, partner_name;
  399.    
  400. RETURN NEXT pRefDetail;
  401.  
  402. DELETE FROM tr_summary_ap WHERE session_id = pSessionId;
  403. DELETE FROM tr_trx_ap WHERE session_id = pSessionId;
  404. DELETE FROM tr_doc_allocation_ap WHERE session_id = pSessionId;
  405.  
  406. END;   
  407. $BODY$
  408.   LANGUAGE plpgsql VOLATILE
  409.   COST 100
  410.   ROWS 1000;
  411.   /
Add Comment
Please, Sign In to add comment