Advertisement
aadddrr

r_print_sales_invoice_temporary_INDOCOM_20170912

Sep 13th, 2017
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: r_print_sales_invoice_temporary(character varying, bigint, bigint, bigint, character varying, bigint, character varying)
  2.  
  3. -- DROP FUNCTION r_print_sales_invoice_temporary(character varying, bigint, bigint, bigint, character varying, bigint, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION r_print_sales_invoice_temporary(character varying, bigint, bigint, bigint, character varying, bigint, character varying)
  6.   RETURNS SETOF refcursor AS
  7. $BODY$
  8. DECLARE
  9.     pRefHeader              REFCURSOR := 'refHeader';
  10.     pRefDetail              REFCURSOR := 'refDetail';
  11.     pSessionId              ALIAS FOR $1;
  12.     pTenantId               ALIAS FOR $2;
  13.     pUserId                 ALIAS FOR $3;
  14.     pRoleId                 ALIAS FOR $4;
  15.     pDatetime               ALIAS FOR $5;
  16.     pInvoiceTempId          ALIAS FOR $6;
  17.     pFlgPkp                 ALIAS FOR $7;
  18.    
  19.     vDoDocTypeId                bigint;
  20.     vReportName                 character varying;
  21.     vDoNo                       character varying;
  22.     vAdditionalCost             numeric;
  23.     vDownPaymentAmount          numeric;
  24.     vDownPaymentAmountWithTax   numeric;
  25.     vTaxDownPaymentAmount       numeric;
  26.     vFlgShowPpn                 character varying := 'Y';
  27.     vOuBuInfoReport             OU_INFO_REPORT%ROWTYPE;
  28.     result                      record;
  29.     vAll                        character varying(5);
  30. BEGIN
  31.     vDoDocTypeId := 311;
  32.     vReportName := 'FormTemporarySalesInvoice';
  33.     vAll := 'ALL';
  34.    
  35.     SELECT f_get_ou_bu_info_report(pTenantId, A.ou_id) AS info
  36.     FROM sl_invoice_temp A
  37.     WHERE A.invoice_temp_id = pInvoiceTempId INTO result ;
  38.     vOuBuInfoReport := result.info;
  39.    
  40.     DELETE FROM tr_sl_invoice_item WHERE session_id = pSessionId;
  41.        
  42.     /* get delivery order number */
  43.     SELECT STRING_AGG(Z.doc_no, ' , ' ) INTO vDoNo
  44.     FROM (
  45.         SELECT B.doc_no
  46.         FROM sl_invoice_temp_item A
  47.           INNER JOIN sl_do B ON A.tenant_id = B.tenant_id AND A.ref_id = B.do_id
  48.         WHERE A.tenant_id = pTenantId
  49.           AND A.invoice_temp_id = pInvoiceTempId
  50.         GROUP BY B.do_id
  51.         ORDER BY B.doc_no) Z;
  52.  
  53.     /* insert into table tr_sl_invoice_item*/
  54.     INSERT INTO tr_sl_invoice_item(
  55.         session_id, tenant_id, product_code, product_name, qty_so, uom_name,
  56.         nett_sell_price, gross_sell_price, nett_item_amount, gross_item_amount,
  57.         tax_price, tax_amount, warranty)
  58.     SELECT pSessionId, pTenantId, D.product_code, D.product_name, G.qty_dlv_so, E.uom_name,
  59.         G.price_so + f_get_warranty_sell_price_for_sales_invoice_temp(A.invoice_temp_id,A.ref_id,A.ref_item_id) AS nett_sell_price,
  60.         (G.price_so + f_get_warranty_sell_price_for_sales_invoice_temp(A.invoice_temp_id,A.ref_id,A.ref_item_id) + f_tax_rounding(G.tenant_id, G.price_so + f_get_warranty_sell_price_for_sales_invoice_temp(A.invoice_temp_id,A.ref_id,A.ref_item_id), sl_get_tax_pct_from_so_balance_inv_tax(pTenantId, G.ou_id, G.partner_id, G.ref_doc_type_id, G.ref_id, G.ref_item_id, G.do_receipt_item_id))) AS gross_sell_price,
  61.         (G.qty_dlv_so * (G.price_so + f_get_warranty_sell_price_for_sales_invoice_temp(A.invoice_temp_id,A.ref_id,A.ref_item_id))) AS nett_item_amount,
  62.         (f_get_warranty_sell_price_for_sales_invoice_temp(A.invoice_temp_id,A.ref_id,A.ref_item_id) + G.price_so + f_tax_rounding(G.tenant_id, G.price_so + f_get_warranty_sell_price_for_sales_invoice_temp(A.invoice_temp_id,A.ref_id,A.ref_item_id), sl_get_tax_pct_from_so_balance_inv_tax(pTenantId, G.ou_id, G.partner_id, G.ref_doc_type_id, G.ref_id, G.ref_item_id, G.do_receipt_item_id))) * G.qty_dlv_so AS gross_item_amount,
  63.         f_tax_rounding(G.tenant_id, G.price_so + f_get_warranty_sell_price_for_sales_invoice_temp(A.invoice_temp_id,A.ref_id,A.ref_item_id), sl_get_tax_pct_from_so_balance_inv_tax(pTenantId, G.ou_id, G.partner_id, G.ref_doc_type_id, G.ref_id, G.ref_item_id, G.do_receipt_item_id)) AS tax_price,
  64.         f_tax_rounding(G.tenant_id, G.price_so + f_get_warranty_sell_price_for_sales_invoice_temp(A.invoice_temp_id,A.ref_id,A.ref_item_id), sl_get_tax_pct_from_so_balance_inv_tax(pTenantId, G.ou_id, G.partner_id, G.ref_doc_type_id, G.ref_id, G.ref_item_id, G.do_receipt_item_id)) * G.qty_dlv_so AS tax_amount,
  65.         (f_get_product_warranty_service(C.product_id) :: integer) AS warranty
  66.     FROM sl_invoice_temp_item A
  67.         INNER JOIN sl_invoice_temp H ON A.tenant_id = H.tenant_id AND A.invoice_temp_id = H.invoice_temp_id  
  68.         INNER JOIN sl_do B ON A.tenant_id = B.tenant_id AND A.ref_id = B.do_id
  69.         INNER JOIN sl_do_item C ON A.tenant_id = C.tenant_id AND A.ref_item_id = C.do_item_id
  70.         INNER JOIN m_product d ON A.tenant_id = D.tenant_id AND C.product_id = D.product_id
  71.         INNER JOIN sl_so_balance_invoice G ON A.tenant_id = G.tenant_id AND G.ou_id = H.ou_id AND G.ref_doc_type_id = vDoDocTypeId AND G.ref_id = B.do_id AND G.so_id = B.ref_id AND G.ref_item_id = A.ref_item_id AND G.do_receipt_item_id = A.do_receipt_item_id
  72.         INNER JOIN m_uom E ON A.tenant_id = E.tenant_id AND G.so_uom_id = E.uom_id
  73.     WHERE A.tenant_id = pTenantId
  74.         AND A.invoice_temp_id = pInvoiceTempId;
  75.        
  76.     /* get vFlgShowPpn */
  77.     SELECT (CASE WHEN (pFlgPkp = 'Y' AND B.flg_show_inv_tax = 'Y') THEN 'Y' ELSE 'N' END) INTO vFlgShowPpn
  78.     FROM sl_invoice_temp A
  79.         INNER JOIN sl_so B ON A.tenant_id = B.tenant_id AND A.ref_id = B.so_id
  80.     WHERE A.invoice_temp_id = pInvoiceTempId;
  81.  
  82.     /* get additional cost in invoice */
  83.     SELECT COALESCE(SUM(A.add_amount), 0) INTO vAdditionalCost
  84.     FROM sl_invoice_temp_cost A
  85.     WHERE A.tenant_id = pTenantId
  86.         AND A.invoice_temp_id = pInvoiceTempId;
  87.    
  88.     /* get down payment amount in invoice */
  89.     SELECT COALESCE(SUM(A.alloc_amount), 0), COALESCE(SUM(A.alloc_amount + f_tax_rounding(A.tenant_id, A.alloc_amount, B.tax_percentage)),0), COALESCE(SUM(f_tax_rounding(A.tenant_id, A.alloc_amount, B.tax_percentage)),0) INTO vDownPaymentAmount, vDownPaymentAmountWithTax, vTaxDownPaymentAmount
  90.     FROM sl_invoice_temp_advance A
  91.     INNER JOIN sl_so_balance_advance_invoice B ON A.tenant_id = B.tenant_id AND A.ref_doc_type_id = B.ref_doc_type_id AND A.ref_id = B.ref_id
  92.     WHERE A.tenant_id = pTenantId
  93.         AND A.invoice_temp_id = pInvoiceTempId;
  94.    
  95.     IF(vFlgShowPpn='Y') THEN
  96.         Open pRefHeader FOR
  97.             SELECT A.invoice_temp_id, A.ou_id, A.ou_legal_id, COALESCE(vOuBuInfoReport.address1 || ' ' || vOuBuInfoReport.address2 || ' ' || vOuBuInfoReport.address3, '-') AS ou_addr_1,
  98.                 COALESCE(vOuBuInfoReport.city || ', ' || vOuBuInfoReport.state_or_province || ', ' || vOuBuInfoReport.zip_code, '-') AS ou_addr_2, A.partner_id, C.partner_name,
  99.                 f_get_report_partner_address_for_vat_out(A.tenant_id, A.partner_id) AS partner_addr,
  100.                 A.doc_type_id, A.inv_doc_no AS so_invoice_no, A.inv_doc_date AS so_invoice_date, A.due_date, A.ref_id, E.doc_no AS so_no,
  101.                 E.ext_doc_no AS po_no, A.salesman_id, F.partner_name AS sales_name, A.curr_code AS currency,
  102.                 A.remark, (CASE WHEN A.curr_code = 'IDR' THEN 'rupiah' ELSE A.curr_code END) AS curr_name, vFlgShowPpn AS flg_show_ppn,
  103.                 SUM(G.nett_item_amount) AS sub_total, vAdditionalCost AS additional_cost, (SUM(G.tax_amount)-vTaxDownPaymentAmount) AS ppn, vDownPaymentAmount AS dp_amount,
  104.                 (((SUM(G.nett_item_amount)+vAdditionalCost)-(vDownPaymentAmount+vTaxDownPaymentAmount)) + SUM(G.tax_amount)) AS total_with_tax,
  105.                 ((SUM(G.nett_item_amount)+vAdditionalCost)-vDownPaymentAmount) AS total_no_tax, vDoNo AS do_no,
  106.                 lower(terbilang(((SUM(G.nett_item_amount)+vAdditionalCost)-(vDownPaymentAmount+vTaxDownPaymentAmount)) + SUM(G.tax_amount))) AS total_name,
  107.                 f_get_report_parameter_config_value(pTenantId, vAll, A.ou_id, 'printed_ou_name') AS ou_name,
  108.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_acc_desc_1') AS bank_acc_desc_1,
  109.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_acc_desc_2') AS bank_acc_desc_2,
  110.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_acc_1') AS bank_acc_1,
  111.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_acc_2') AS bank_acc_2,
  112.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_swift_code_1') AS bank_swift_code_1,
  113.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_swift_code_2') AS bank_swift_code_2,
  114.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_branch_1') AS bank_branch_1,
  115.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_branch_2') AS bank_branch_2,
  116.                 vOuBuInfoReport.image_url AS path_logo_ou
  117.             FROM sl_invoice_temp A
  118.                 --INNER JOIN t_ou_legal B ON A.tenant_id = B.tenant_id AND A.ou_legal_id = B.ou_legal_id
  119.                 INNER JOIN m_partner C ON A.tenant_id = C.tenant_id AND A.partner_id = C.partner_id
  120.                 INNER JOIN sl_so E ON A.tenant_id = E.tenant_id AND A.ref_id = E.so_id
  121.                 INNER JOIN m_partner F ON A.tenant_id = F.tenant_id AND A.salesman_id = F.partner_id
  122.                 INNER JOIN tr_sl_invoice_item G ON A.tenant_id = G.tenant_id AND G.session_id = pSessionId
  123.             WHERE A.tenant_id = pTenantId
  124.                 AND A.invoice_temp_id = pInvoiceTempId
  125.             GROUP BY A.invoice_temp_id, A.ou_id, A.ou_legal_id, vOuBuInfoReport.address1, vOuBuInfoReport.address2, vOuBuInfoReport.address3, vOuBuInfoReport.city, vOuBuInfoReport.state_or_province, vOuBuInfoReport.zip_code,
  126.                     A.partner_id, C.partner_name, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date, A.due_date, A.ref_id, E.doc_no,
  127.                     E.ext_doc_no, A.salesman_id, F.partner_name, A.curr_code, A.remark, vFlgShowPpn, vAdditionalCost, vDownPaymentAmount, vDoNo;
  128.         RETURN NEXT pRefHeader;
  129.    
  130.         Open pRefDetail FOR
  131.             SELECT product_code, product_name, SUM(qty_so) AS qty, uom_name,
  132.                nett_sell_price AS unit_price, SUM(nett_item_amount) AS amount, warranty
  133.             FROM tr_sl_invoice_item
  134.             WHERE session_id = pSessionId
  135.                 AND tenant_id = pTenantId
  136.             GROUP BY product_code, product_name, uom_name, nett_sell_price, warranty
  137.             HAVING SUM(qty_so) > 0
  138.             ORDER BY product_code, product_name;
  139.         RETURN NEXT pRefDetail;
  140.     ELSE
  141.         Open pRefHeader FOR
  142.             SELECT A.invoice_temp_id, A.ou_id, A.ou_legal_id, COALESCE(vOuBuInfoReport.address1 || ' ' || vOuBuInfoReport.address2 || ' ' || vOuBuInfoReport.address3, '-') AS ou_addr_1,
  143.                 COALESCE(vOuBuInfoReport.city || ', ' || vOuBuInfoReport.state_or_province || ', ' || vOuBuInfoReport.zip_code, '-') AS ou_addr_2, A.partner_id, C.partner_name,
  144.                 f_get_report_partner_address_for_vat_out(A.tenant_id, A.partner_id) AS partner_addr,
  145.                 A.doc_type_id, A.inv_doc_no AS so_invoice_no, A.inv_doc_date AS so_invoice_date, A.due_date, A.ref_id, E.doc_no AS so_no,
  146.                 E.ext_doc_no AS po_no, A.salesman_id, F.partner_name AS sales_name, A.curr_code AS currency,
  147.                 A.remark, (CASE WHEN A.curr_code = 'IDR' THEN 'rupiah' ELSE A.curr_code END) AS curr_name, vFlgShowPpn AS flg_show_ppn,
  148.                 SUM(G.gross_item_amount) AS sub_total, vAdditionalCost AS additional_cost, SUM(G.tax_amount) AS ppn, vDownPaymentAmountWithTax AS dp_amount,
  149.                 (SUM(G.gross_item_amount) - vDownPaymentAmountWithTax) AS total_with_tax, SUM(G.nett_item_amount) AS total_no_tax, vDoNo AS do_no,
  150.                 lower(terbilang(SUM(G.gross_item_amount) - vDownPaymentAmountWithTax)) AS total_name,
  151.                 f_get_report_parameter_config_value(pTenantId, vAll, A.ou_id, 'printed_ou_name') AS ou_name,
  152.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_acc_desc_1') AS bank_acc_desc_1,
  153.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_acc_desc_2') AS bank_acc_desc_2,
  154.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_acc_1') AS bank_acc_1,
  155.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_acc_2') AS bank_acc_2,
  156.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_swift_code_1') AS bank_swift_code_1,
  157.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_swift_code_2') AS bank_swift_code_2,
  158.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_branch_1') AS bank_branch_1,
  159.                 f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_branch_2') AS bank_branch_2,
  160.                 vOuBuInfoReport.image_url AS path_logo_ou
  161.             FROM sl_invoice_temp A
  162.                 --INNER JOIN t_ou_legal B ON A.tenant_id = B.tenant_id AND A.ou_legal_id = B.ou_legal_id
  163.                 INNER JOIN m_partner C ON A.tenant_id = C.tenant_id AND A.partner_id = C.partner_id
  164.                 INNER JOIN sl_so E ON A.tenant_id = E.tenant_id AND A.ref_id = E.so_id
  165.                 INNER JOIN m_partner F ON A.tenant_id = F.tenant_id AND A.salesman_id = F.partner_id
  166.                 INNER JOIN tr_sl_invoice_item G ON A.tenant_id = G.tenant_id AND G.session_id = pSessionId
  167.             WHERE A.tenant_id = pTenantId
  168.                 AND A.invoice_temp_id = pInvoiceTempId
  169.             GROUP BY A.invoice_temp_id, A.ou_id, A.ou_legal_id, vOuBuInfoReport.address1, vOuBuInfoReport.address2, vOuBuInfoReport.address3, vOuBuInfoReport.city, vOuBuInfoReport.state_or_province, vOuBuInfoReport.zip_code,
  170.                     A.partner_id, C.partner_name, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date, A.due_date, A.ref_id, E.doc_no,
  171.                     E.ext_doc_no, A.salesman_id, F.partner_name, A.curr_code, A.remark, vFlgShowPpn, vAdditionalCost, vDownPaymentAmountWithTax, vDoNo;
  172.         RETURN NEXT pRefHeader;
  173.        
  174.         Open pRefDetail FOR
  175.             SELECT product_code, product_name, SUM(qty_so) AS qty, uom_name,
  176.                gross_sell_price AS unit_price, SUM(gross_item_amount) AS amount, warranty
  177.             FROM tr_sl_invoice_item
  178.             WHERE session_id = pSessionId
  179.                 AND tenant_id = pTenantId
  180.             GROUP BY product_code, product_name, uom_name, gross_sell_price, warranty
  181.             HAVING SUM(qty_so) > 0
  182.             ORDER BY product_code, product_name;
  183.         RETURN NEXT pRefDetail;
  184.     END IF;
  185.    
  186.     DELETE FROM tr_sl_invoice_item WHERE session_id = pSessionId;
  187.  
  188. END;
  189. $BODY$
  190.   LANGUAGE plpgsql VOLATILE
  191.   COST 100
  192.   ROWS 1000;
  193. ALTER FUNCTION r_print_sales_invoice_temporary(character varying, bigint, bigint, bigint, character varying, bigint, character varying)
  194.   OWNER TO sts;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement