Advertisement
aadddrr

SUMMARY MONTHLY AP

Mar 15th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. CREATE OR REPLACE FUNCTION r_summary_monthly_finance_ap(character varying, bigint, bigint, character varying, bigint, character varying, character varying)
  3.   RETURNS SETOF refcursor AS
  4. $BODY$
  5. DECLARE
  6.         pRefHeader                      REFCURSOR := 'refHeader';
  7.         pRefDetail                      REFCURSOR := 'refDetail';
  8.         pSessionId                      ALIAS FOR $1;
  9.         pTenantId                       ALIAS FOR $2;
  10.         pUserId                         ALIAS FOR $3;
  11.         pDatetime                       ALIAS FOR $4;
  12.        
  13.         pOuId                           ALIAS FOR $5;
  14.         pYearMonth                      ALIAS FOR $6;
  15.         pOutstandingInvoice             ALIAS FOR $7;
  16.        
  17.         vYEs                            character varying := 'Y';
  18.         vOutstanding                    text := ' ';
  19.         vStatusOutstanding              character varying := 'Outstanding';
  20.         vStatusPaid                     character varying := 'Paid';
  21.         vTypeEom                        character varying := 'EOM';
  22.         vTypeCom                        character varying := 'COM';
  23.         vGrandTotal                     numeric;
  24.         vExchangeKurs                   character varying;
  25.         vChangeExchangeKurs             character varying;
  26.        
  27.         vDocTypePrepaymentBalance           bigint := 212;
  28.         vDocTypePrepaymentInvoiceBalance    bigint := 214;
  29.         vDocTypeIncomingTaxInvoice          bigint := 221;
  30.        
  31. BEGIN
  32.    
  33.     DELETE FROM tt_summary_monthly WHERE session_id = pSessionId;
  34.    
  35.     -- ini untuk mengambil akhir bulan dari period yang mau di print, digunakan untuuk mengambil kurs akhir bulan di exchange rate
  36.     SELECT (date_trunc('MONTH', to_date(pYearMonth,'YYYYMM')) + INTERVAL '1 MONTH - 1 day')::date INTO vExchangeKurs;
  37.  
  38.     vChangeExchangeKurs = (to_char(to_date(vExchangeKurs, 'YYYY-MM-DD'), 'YYYYMMDD'));
  39.  
  40.     IF pOutstandingInvoice <> vYEs THEN -- kalau bukan Y, maka
  41.         vOutstanding = '  '; -- flg nya N
  42.         ELSE
  43.         vOutstanding = ' AND (a.balance_amount - a.payment_amount) > 0 '; -- flg nya Y
  44.     END IF;
  45.  
  46.     -- Adrian, Mar 15, 2017, insert ke table temporary untuk Prepayment Balance dan Prepayment Invoice Balance
  47.     EXECUTE '
  48.     INSERT INTO tt_summary_monthly
  49.         (session_id, id, tenant_id, ou_id, year_month,
  50.         doc_desc, doc_no, doc_date,
  51.         curr_code, amount_to,
  52.         balance_amount, payment_amount,
  53.         outstanding_balance,
  54.         status,
  55.         gl_amount,
  56.         partner_code, partner_name)
  57.     SELECT $7, b.id, $8, $3, $4,
  58.         f_get_doc_desc(a.doc_type_id) AS doc_desc, b.doc_no, b.doc_date,
  59.         a.curr_code, COALESCE(c.amount_to, 1) AS amount_to,
  60.         COALESCE(a.balance_amount, 0) AS balance_amount, COALESCE(a.payment_amount, 0) AS payment_amount,
  61.         (a.balance_amount - a.payment_amount) AS outstanding_balance,
  62.         CASE WHEN (a.balance_amount - a.payment_amount) > 0  THEN $1 ELSE $2 END AS status,
  63.         (COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1)) AS gl_amount,
  64.         f_get_partner_code(b.partner_id), f_get_partner_name(b.partner_id)
  65.     FROM fi_summary_monthly_ap a
  66.     INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  67.     LEFT JOIN m_exchange_rate c ON ( b.doc_date BETWEEN c.date_from AND c.date_to)
  68.         AND a.curr_code = c.curr_code_from
  69.         AND c.type_exchange_rate = ''' || vTypeCom || '''
  70.     WHERE a.ou_id = $3 AND a.date_year_month = $4 ' || vOutstanding || '
  71.         AND (a.doc_type_id = $5 OR a.doc_type_id = $6 ) '
  72.     USING vStatusOutstanding, vStatusPaid, pOuId, pYearMonth, vDocTypePrepaymentBalance, vDocTypePrepaymentInvoiceBalance, pSessionId, pTenantId;
  73.  
  74.    
  75.     -- Adrian, Mar 15, 2017, insert ke table temporary untuk Incoming Tax Invoice
  76.     EXECUTE '
  77.     INSERT INTO tt_summary_monthly
  78.         (session_id, id, tenant_id, ou_id, year_month,
  79.         doc_desc, doc_no, doc_date,
  80.         curr_code, amount_to,
  81.         balance_amount, payment_amount,
  82.         outstanding_balance,
  83.         status,
  84.         gl_amount,
  85.         partner_code, partner_name)
  86.     SELECT $6, b.id, $7, $3, $4,
  87.         f_get_doc_desc(a.doc_type_id) AS doc_desc, b.doc_no, b.doc_date,
  88.         a.curr_code, COALESCE(c.amount_to, 1) AS amount_to,
  89.         COALESCE(a.balance_amount, 0) AS balance_amount, COALESCE(a.payment_amount, 0) AS payment_amount,
  90.         (a.balance_amount - a.payment_amount) AS outstanding_balance,
  91.         CASE WHEN (a.balance_amount - a.payment_amount) > 0  THEN $1 ELSE $2 END AS status,
  92.         (COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1)) AS gl_amount,
  93.         f_get_partner_code(b.partner_id), f_get_partner_name(b.partner_id)
  94.     FROM fi_summary_monthly_ap a
  95.     INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  96.     LEFT JOIN m_exchange_rate c ON ( b.doc_date BETWEEN c.date_from AND c.date_to)
  97.         AND a.curr_code = c.curr_code_from
  98.         AND c.type_exchange_rate = ''' || vTypeCom || '''
  99.     WHERE a.ou_id = $3 AND a.date_year_month = $4 ' || vOutstanding || '
  100.         AND a.doc_type_id = $5
  101.         AND b.invoice_ap_balance_id IN (
  102.             SELECT id
  103.             FROM tt_summary_monthly
  104.             WHERE session_id = $6
  105.         )'
  106.     USING vStatusOutstanding, vStatusPaid, pOuId, pYearMonth, vDocTypeIncomingTaxInvoice, pSessionId, pTenantId;
  107.    
  108.    
  109.     -- Adrian, Mar 15, 2017, insert ke table temporary untuk type exchange rate Eom
  110.     EXECUTE '
  111.     INSERT INTO tt_summary_monthly
  112.         (session_id, id, tenant_id, ou_id, year_month,
  113.         doc_desc, doc_no, doc_date,
  114.         curr_code, amount_to,
  115.         balance_amount, payment_amount,
  116.         outstanding_balance,
  117.         status,
  118.         gl_amount,
  119.         partner_code, partner_name)
  120.     SELECT $5, b.id, $6, $3, $4,
  121.         f_get_doc_desc(a.doc_type_id) AS doc_desc, b.doc_no, b.doc_date,
  122.         a.curr_code, COALESCE(c.amount_to, 1) AS amount_to,
  123.         COALESCE(a.balance_amount, 0) AS balance_amount, COALESCE(a.payment_amount, 0) AS payment_amount,
  124.         (a.balance_amount - a.payment_amount) AS outstanding_balance,
  125.         CASE WHEN (a.balance_amount - a.payment_amount) > 0  THEN $1 ELSE $2 END AS status,
  126.         (COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1)) AS gl_amount,
  127.         f_get_partner_code(b.partner_id), f_get_partner_name(b.partner_id)
  128.     FROM fi_summary_monthly_ap a
  129.     INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  130.     LEFT JOIN m_exchange_rate c ON ( '''|| vChangeExchangeKurs ||''' BETWEEN c.date_from AND c.date_to)
  131.         AND a.curr_code = c.curr_code_from
  132.         AND c.type_exchange_rate = ''' || vTypeEom || '''
  133.     WHERE a.ou_id = $3 AND a.date_year_month = $4 ' || vOutstanding || '
  134.         AND b.id NOT IN (
  135.             SELECT id
  136.             FROM tt_summary_monthly
  137.             WHERE session_id = $5
  138.         )'
  139.     USING vStatusOutstanding, vStatusPaid, pOuId, pYearMonth, pSessionId, pTenantId;
  140.  
  141.    
  142.     -- ini untuk mendapatkan total dari semua GL nya
  143.     /*SELECT ROUND(SUM((COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1))), 2) INTO vGrandTotal
  144.     FROM fi_summary_monthly_ap a
  145.     INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  146.     LEFT JOIN m_exchange_rate c ON (vChangeExchangeKurs BETWEEN c.date_from AND c.date_to)
  147.         AND a.curr_code = c.curr_code_from
  148.         AND c.type_exchange_rate = vTypeEom
  149.     WHERE a.ou_id = pOuId AND a.date_year_month = pYearMonth;*/
  150.  
  151.     SELECT ROUND(SUM(gl_amount), 2) INTO vGrandTotal
  152.     FROM tt_summary_monthly
  153.     WHERE session_id = pSessionId;
  154.    
  155.      
  156.     Open pRefHeader FOR
  157.         SELECT pOuId AS ou_id, f_get_ou_name(pOuId) as ou_name, pYearMonth AS year_month, pDatetime as datetime,
  158.             f_get_username(pUserId) AS username, vGrandTotal AS grand_total,
  159.             CASE WHEN pOutstandingInvoice = vYEs THEN 'Outstanding Invoice Only' ELSE 'All Invoice' END AS invoice;
  160.     RETURN NEXT pRefHeader;
  161.      
  162.     Open pRefDetail FOR
  163.     /*EXECUTE '
  164.         SELECT f_get_doc_desc(a.doc_type_id) AS doc_desc, b.doc_no, b.doc_date, a.curr_code, COALESCE(c.amount_to, 1) AS amount_to,
  165.             COALESCE(a.balance_amount, 0) AS balance_amount, COALESCE(a.payment_amount, 0) AS payment_amount,
  166.             (a.balance_amount - a.payment_amount) AS outstanding_balance,
  167.             CASE WHEN (a.balance_amount - a.payment_amount) > 0  THEN $1 ELSE $2 END AS status,
  168.             (COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1)) AS gl_amount
  169.         FROM fi_summary_monthly_ap a
  170.         INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  171.         LEFT JOIN m_exchange_rate c ON ( '''|| vChangeExchangeKurs ||''' BETWEEN c.date_from AND c.date_to)
  172.             AND a.curr_code = c.curr_code_from
  173.             AND c.type_exchange_rate = ''' || vTypeEom || '''
  174.         WHERE a.ou_id = $3 AND a.date_year_month = $4 ' || vOutstanding
  175.         USING vStatusOutstanding, vStatusPaid, pOuId, pYearMonth;*/
  176.         SELECT doc_desc, doc_no, doc_date,
  177.             curr_code, amount_to,
  178.             balance_amount, payment_amount,
  179.             outstanding_balance,
  180.             status,
  181.             gl_amount,
  182.             partner_code, partner_name
  183.         FROM tt_summary_monthly
  184.         WHERE session_id = pSessionId;
  185.     RETURN NEXT pRefDetail;
  186. END;  
  187. $BODY$
  188.   LANGUAGE plpgsql VOLATILE
  189.   COST 100
  190.   ROWS 1000;
  191.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement