Advertisement
aadddrr

SUMMARY MONTHLY AP

Mar 15th, 2017
116
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.        
  30. BEGIN
  31.    
  32.     DELETE FROM tt_summary_monthly WHERE session_id = pSessionId;
  33.    
  34.     -- ini untuk mengambil akhir bulan dari period yang mau di print, digunakan untuuk mengambil kurs akhir bulan di exchange rate
  35.     SELECT (date_trunc('MONTH', to_date(pYearMonth,'YYYYMM')) + INTERVAL '1 MONTH - 1 day')::date INTO vExchangeKurs;
  36.  
  37.     vChangeExchangeKurs = (to_char(to_date(vExchangeKurs, 'YYYY-MM-DD'), 'YYYYMMDD'));
  38.  
  39.     IF pOutstandingInvoice <> vYEs THEN -- kalau bukan Y, maka
  40.         vOutstanding = '  '; -- flg nya N
  41.         ELSE
  42.         vOutstanding = ' AND (a.balance_amount - a.payment_amount) > 0 '; -- flg nya Y
  43.     END IF;
  44.  
  45.     -- Adrian, Mar 15, 2017, insert ke table temporary untuk type exchange rate Eom
  46.     EXECUTE '
  47.     INSERT INTO tt_summary_monthly
  48.         (session_id, tenant_id, ou_id, year_month,
  49.         doc_desc, doc_no, doc_date,
  50.         curr_code, amount_to,
  51.         balance_amount, payment_amount,
  52.         outstanding_balance,
  53.         status,
  54.         gl_amount)
  55.     SELECT $7, $8, $3, $4,
  56.         f_get_doc_desc(a.doc_type_id) AS doc_desc, b.doc_no, b.doc_date,
  57.         a.curr_code, COALESCE(c.amount_to, 1) AS amount_to,
  58.         COALESCE(a.balance_amount, 0) AS balance_amount, COALESCE(a.payment_amount, 0) AS payment_amount,
  59.         (a.balance_amount - a.payment_amount) AS outstanding_balance,
  60.         CASE WHEN (a.balance_amount - a.payment_amount) > 0  THEN $1 ELSE $2 END AS status,
  61.         (COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1)) AS gl_amount
  62.     FROM fi_summary_monthly_ap a
  63.     INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  64.     LEFT JOIN m_exchange_rate c ON ( '''|| vChangeExchangeKurs ||''' BETWEEN c.date_from AND c.date_to)
  65.         AND a.curr_code = c.curr_code_from
  66.         AND c.type_exchange_rate = ''' || vTypeEom || '''
  67.     WHERE a.ou_id = $3 AND a.date_year_month = $4 ' || vOutstanding || '
  68.         AND (a.doc_type_id <> $5 AND a.doc_type_id <> $6 ) '
  69.     USING vStatusOutstanding, vStatusPaid, pOuId, pYearMonth, vDocTypePrepaymentBalance, vDocTypePrepaymentInvoiceBalance, pSessionId, pTenantId;
  70.  
  71.     -- Adrian, Mar 15, 2017, insert ke table temporary untuk type exchange rate Com
  72.     EXECUTE '
  73.     INSERT INTO tt_summary_monthly
  74.         (session_id, tenant_id, ou_id, year_month,
  75.         doc_desc, doc_no, doc_date,
  76.         curr_code, amount_to,
  77.         balance_amount, payment_amount,
  78.         outstanding_balance,
  79.         status,
  80.         gl_amount)
  81.     SELECT $7, $8, $3, $4,
  82.         f_get_doc_desc(a.doc_type_id) AS doc_desc, b.doc_no, b.doc_date,
  83.         a.curr_code, COALESCE(c.amount_to, 1) AS amount_to,
  84.         COALESCE(a.balance_amount, 0) AS balance_amount, COALESCE(a.payment_amount, 0) AS payment_amount,
  85.         (a.balance_amount - a.payment_amount) AS outstanding_balance,
  86.         CASE WHEN (a.balance_amount - a.payment_amount) > 0  THEN $1 ELSE $2 END AS status,
  87.         (COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1)) AS gl_amount
  88.     FROM fi_summary_monthly_ap a
  89.     INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  90.     LEFT JOIN m_exchange_rate c ON ( b.doc_date BETWEEN c.date_from AND c.date_to)
  91.         AND a.curr_code = c.curr_code_from
  92.         AND c.type_exchange_rate = ''' || vTypeCom || '''
  93.     WHERE a.ou_id = $3 AND a.date_year_month = $4 ' || vOutstanding || '
  94.         AND (a.doc_type_id = $5 OR a.doc_type_id = $6 ) '
  95.     USING vStatusOutstanding, vStatusPaid, pOuId, pYearMonth, vDocTypePrepaymentBalance, vDocTypePrepaymentInvoiceBalance, pSessionId, pTenantId;
  96.    
  97.     -- ini untuk mendapatkan total dari semua GL nya
  98.     /*SELECT ROUND(SUM((COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1))), 2) INTO vGrandTotal
  99.     FROM fi_summary_monthly_ap a
  100.     INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  101.     LEFT JOIN m_exchange_rate c ON (vChangeExchangeKurs BETWEEN c.date_from AND c.date_to)
  102.         AND a.curr_code = c.curr_code_from
  103.         AND c.type_exchange_rate = vTypeEom
  104.     WHERE a.ou_id = pOuId AND a.date_year_month = pYearMonth;*/
  105.  
  106.     SELECT ROUND(SUM(gl_amount), 2) INTO vGrandTotal
  107.     FROM tt_summary_monthly
  108.     WHERE session_id = pSessionId;
  109.    
  110.      
  111.     Open pRefHeader FOR
  112.         SELECT pOuId AS ou_id, f_get_ou_name(pOuId) as ou_name, pYearMonth AS year_month, pDatetime as datetime,
  113.             f_get_username(pUserId) AS username, vGrandTotal AS grand_total,
  114.             CASE WHEN pOutstandingInvoice = vYEs THEN 'Outstanding Invoice Only' ELSE 'All Invoice' END AS invoice;
  115.     RETURN NEXT pRefHeader;
  116.      
  117.     Open pRefDetail FOR
  118.     /*EXECUTE '
  119.         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,
  120.             COALESCE(a.balance_amount, 0) AS balance_amount, COALESCE(a.payment_amount, 0) AS payment_amount,
  121.             (a.balance_amount - a.payment_amount) AS outstanding_balance,
  122.             CASE WHEN (a.balance_amount - a.payment_amount) > 0  THEN $1 ELSE $2 END AS status,
  123.             (COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1)) AS gl_amount
  124.         FROM fi_summary_monthly_ap a
  125.         INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  126.         LEFT JOIN m_exchange_rate c ON ( '''|| vChangeExchangeKurs ||''' BETWEEN c.date_from AND c.date_to)
  127.             AND a.curr_code = c.curr_code_from
  128.             AND c.type_exchange_rate = ''' || vTypeEom || '''
  129.         WHERE a.ou_id = $3 AND a.date_year_month = $4 ' || vOutstanding
  130.         USING vStatusOutstanding, vStatusPaid, pOuId, pYearMonth;*/
  131.         SELECT doc_desc, doc_no, doc_date,
  132.             curr_code, amount_to,
  133.             balance_amount, payment_amount,
  134.             outstanding_balance,
  135.             status,
  136.             gl_amount
  137.         FROM tt_summary_monthly
  138.         WHERE session_id = pSessionId;
  139.     RETURN NEXT pRefDetail;
  140. END;  
  141. $BODY$
  142.   LANGUAGE plpgsql VOLATILE
  143.   COST 100
  144.   ROWS 1000;
  145.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement