Advertisement
congky

r_print_sales_invoice_escp_for_tsi

Jun 19th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- modified for dialogue
  2. CREATE OR REPLACE FUNCTION r_print_sales_invoice_escp_for_tsi(character varying, bigint, bigint, bigint, character varying, bigint, 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.     pRoleId                 ALIAS FOR $4;
  12.     pDatetime               ALIAS FOR $5;
  13.     pInvoiceTempId          ALIAS FOR $6;
  14.     pFlgPkp                 ALIAS FOR $7;
  15.    
  16.     vReportName             character varying;
  17.     vDoNo                   character varying;
  18.     vFlgShowPpn             character varying;
  19.     vDocTypeDO              bigint;
  20.    
  21.     vOuBuInfoReport         OU_INFO_REPORT%ROWTYPE;
  22.     result                  record;
  23.  
  24. BEGIN
  25.     vReportName := 'FormSalesInvoiceForDlg';
  26.     vDocTypeDO := 311;
  27.    
  28.     SELECT f_get_ou_bu_info_report(pTenantId, A.ou_id) AS info
  29.     FROM sl_invoice_temp A
  30.     WHERE A.invoice_temp_id = pInvoiceTempId INTO result ;
  31.     vOuBuInfoReport := result.info;
  32.  
  33.     --vDoNo
  34.     SELECT STRING_AGG(z.doc_no,', ') INTO vDoNo
  35.         FROM (
  36.         SELECT ac.doc_no
  37.         FROM sl_invoice_temp_item ab
  38.         LEFT JOIN sl_do ac ON ac.do_id = ab.ref_id
  39.         WHERE ab.invoice_temp_id = pInvoiceTempId
  40.         GROUP BY ac.doc_no
  41.     ) z;
  42.    
  43.     --vFlgShowPpn
  44.     --SELECT (CASE WHEN (pFlgPkp = 'Y' AND B.flg_show_inv_tax = 'Y') THEN 'Y' ELSE 'N' END) INTO vFlgShowPpn
  45.     SELECT (CASE WHEN (B.flg_show_inv_tax = 'Y') THEN 'Y' ELSE 'N' END) INTO vFlgShowPpn
  46.         FROM sl_invoice_temp A
  47.         INNER JOIN sl_so B ON A.tenant_id = B.tenant_id AND A.ref_id = B.so_id
  48.         WHERE A.invoice_temp_id = pInvoiceTempId;
  49.  
  50.     IF(vFlgShowPpn = 'Y') THEN
  51.         Open pRefHeader FOR
  52.             SELECT vOuBuInfoReport.printed_ou_name AS ou_name, c.address1 AS ou_addr, a.inv_doc_date AS inv_date,
  53.             a.inv_doc_no AS inv_no, vDoNo AS do_no, e.partner_code AS sls_code, f.partner_code AS cus_code,
  54.             f.partner_name, g.address_desc AS partner_addr, g.city AS partner_city,
  55.             a.due_date, a.total_amount AS dpp_amount, a.discount_amount, sum(h.base_amount) AS total_amount,
  56.             a.tax_amount AS ppn_amount, a.gross_amount AS grand_total_amount,
  57.             terbilang(a.gross_amount), pDatetime AS datetime,
  58.             (CASE WHEN a.curr_code = 'IDR' THEN 'RUPIAH' ELSE a.curr_code END) AS curr_name,
  59.             f_get_report_parameter_config_value(pTenantId, vReportName, a.ou_id, 'bank_name') AS bank_name,
  60.             f_get_report_parameter_config_value(pTenantId, vReportName, a.ou_id, 'bank_acc_name') AS bank_acc_name,
  61.             f_get_report_parameter_config_value(pTenantId, vReportName, a.ou_id, 'bank_acc_no') AS bank_acc_no
  62.             FROM sl_invoice_temp a
  63.             LEFT JOIN t_ou b ON b.ou_id = a.ou_id
  64.             LEFT JOIN t_ou_legal c ON c.ou_legal_id = a.ou_legal_id
  65.             LEFT JOIN sl_so d ON d.so_id = a.ref_id
  66.             LEFT JOIN m_partner e ON e.partner_id = a.salesman_id
  67.             LEFT JOIN m_partner f ON f.partner_id = a.partner_id
  68.             LEFT JOIN m_partner_address g ON g.partner_address_id = d.partner_ship_address_id
  69.             LEFT JOIN sl_invoice_temp_tax h ON a.invoice_temp_id = h.invoice_temp_id
  70.             WHERE a.invoice_temp_id = pInvoiceTempId
  71.             GROUP BY a.inv_doc_date, a.inv_doc_no, a.due_date, a.total_amount, a.discount_amount, a.tax_amount,
  72.             a.gross_amount, a.curr_code, c.address1, d.doc_no, e.partner_code, f.partner_code,
  73.             f.partner_name, g.address_desc, g.city, d.flg_show_inv_tax, a.ou_id;
  74.         RETURN NEXT pRefHeader;
  75.        
  76.         Open pRefDetail FOR
  77.             SELECT
  78.             e.product_code, e.product_name, sum(d.qty_dlv_so) AS qty, d.price_so AS price,
  79.             sum(d.item_amount) AS amount
  80.             FROM sl_invoice_temp a
  81.             INNER JOIN sl_invoice_temp_item b ON b.invoice_temp_id=a.invoice_temp_id
  82.             INNER JOIN sl_do_item c ON c.do_item_id=b.ref_item_id
  83.             INNER JOIN sl_so_balance_invoice d ON d.tenant_id=b.tenant_id
  84.                 AND d.ou_id=a.ou_id AND d.ref_item_id=b.ref_item_id AND d.ref_doc_type_id=vDocTypeDO
  85.                 AND d.do_receipt_item_id=b.do_receipt_item_id
  86.             INNER JOIN m_product e ON e.product_id = c.product_id
  87.             WHERE a.invoice_temp_id = pInvoiceTempId
  88.             GROUP BY e.product_code, e.product_name, d.price_so;
  89.         RETURN NEXT pRefDetail;
  90.        
  91.     ELSE
  92.         Open pRefHeader FOR
  93.             SELECT vOuBuInfoReport.printed_ou_name AS ou_name, c.address1 AS ou_addr, a.inv_doc_date AS inv_date,
  94.             a.inv_doc_no AS inv_no, vDoNo AS do_no, e.partner_code AS sls_code, f.partner_code AS cus_code,
  95.             f.partner_name, g.address_desc AS partner_addr, g.city AS partner_city,
  96.             a.due_date, a.total_amount+a.tax_amount+a.discount_amount as total_amount, a.discount_amount,  
  97.             a.gross_amount AS grand_total_amount,
  98.             terbilang(a.gross_amount), pDatetime AS datetime,
  99.             (CASE WHEN a.curr_code = 'IDR' THEN 'RUPIAH' ELSE a.curr_code END) AS curr_name,
  100.             f_get_report_parameter_config_value(pTenantId, vReportName, a.ou_id, 'bank_name') AS bank_name,
  101.             f_get_report_parameter_config_value(pTenantId, vReportName, a.ou_id, 'bank_acc_name') AS bank_acc_name,
  102.             f_get_report_parameter_config_value(pTenantId, vReportName, a.ou_id, 'bank_acc_no') AS bank_acc_no
  103.             FROM sl_invoice_temp a
  104.             LEFT JOIN t_ou b ON b.ou_id = a.ou_id
  105.             LEFT JOIN t_ou_legal c ON c.ou_legal_id = a.ou_legal_id
  106.             LEFT JOIN sl_so d ON d.so_id = a.ref_id
  107.             LEFT JOIN m_partner e ON e.partner_id = a.salesman_id
  108.             LEFT JOIN m_partner f ON f.partner_id = a.partner_id
  109.             LEFT JOIN m_partner_address g ON g.partner_address_id = d.partner_ship_address_id
  110.             LEFT JOIN sl_invoice_temp_tax h ON a.invoice_temp_id = h.invoice_temp_id
  111.             WHERE a.invoice_temp_id = pInvoiceTempId
  112.             GROUP BY a.inv_doc_date, a.inv_doc_no, a.due_date, a.total_amount, a.discount_amount, a.tax_amount,
  113.             a.gross_amount, a.curr_code, c.address1, d.doc_no, e.partner_code, f.partner_code,
  114.             f.partner_name, g.address_desc, g.city, d.flg_show_inv_tax, a.ou_id;
  115.         RETURN NEXT pRefHeader;
  116.        
  117.         Open pRefDetail FOR
  118.             SELECT
  119.             e.product_code, e.product_name, sum(d.qty_dlv_so) AS qty, d.price_so+dd.tax_amount AS price,
  120.             sum(d.qty_dlv_so)*d.price_so+dd.tax_amount AS amount
  121.             FROM sl_invoice_temp a
  122.             INNER JOIN sl_invoice_temp_item b ON b.invoice_temp_id=a.invoice_temp_id
  123.             INNER JOIN sl_do_item c ON c.do_item_id=b.ref_item_id
  124.             INNER JOIN sl_so_balance_invoice d ON d.tenant_id=b.tenant_id
  125.                 AND d.ou_id=a.ou_id AND d.ref_item_id=b.ref_item_id AND d.ref_doc_type_id=vDocTypeDO
  126.                 AND d.do_receipt_item_id=b.do_receipt_item_id
  127.             INNER JOIN sl_so_balance_invoice_tax dd ON dd.tenant_id = d.tenant_id AND dd.partner_id = d.partner_id
  128.                 AND dd.ref_doc_type_id = d.ref_doc_type_id
  129.                 AND dd.ref_id = d.ref_id
  130.                 AND dd.ref_item_id = d.ref_item_id
  131.                 AND dd.do_receipt_item_id = d.do_receipt_item_id
  132.             INNER JOIN m_product e ON e.product_id = c.product_id
  133.             WHERE a.invoice_temp_id = pInvoiceTempId
  134.             GROUP BY e.product_code, e.product_name, d.price_so, dd.tax_amount;
  135.         RETURN NEXT pRefDetail;
  136.    
  137.     END IF;
  138.    
  139. END;
  140. $BODY$
  141.   LANGUAGE plpgsql VOLATILE
  142.   COST 100
  143.   ROWS 1000;
  144.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement