Advertisement
samuel025

Function Report Invoice MF

Aug 19th, 2021
1,305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_print_sales_invoice_for_mf(character varying, bigint, bigint, bigint, character varying, bigint)
  2.   RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     pRefHeader              REFCURSOR := 'refHeader';
  6.     pRefDetail              REFCURSOR := 'refDetail';
  7.     pSessionId              ALIAS FOR $1;
  8.     pTenantId               ALIAS FOR $2;
  9.     pUserId                 ALIAS FOR $3;
  10.     pRoleId                 ALIAS FOR $4;
  11.     pDatetime               ALIAS FOR $5;
  12.     pInvoiceId              ALIAS FOR $6;
  13.  
  14.  
  15.     vDoDocTypeId                bigint;
  16.     vReportName                 character varying;
  17.     vDoNo                       character varying;
  18.     vAdditionalCost             numeric;
  19.     vDownPaymentAmount          numeric;
  20.     vDownPaymentAmountWithTax   numeric;
  21.     vTaxDownPaymentAmount       numeric;
  22.     vTotalAmount                numeric;
  23.     vTotalPayment               numeric;
  24.     vTotalTax                   numeric;
  25.     vFlgShowPpn                 character varying := 'Y';
  26.     vOuBuInfoReport             OU_INFO_REPORT%ROWTYPE;
  27.     result                      record;
  28.  
  29.     vRoundingModeTax            character varying(5);
  30.     vRoundingModeNonTax         character varying(5);
  31.     vRoundingScalePrintTotal    integer;
  32.     vNullRefId                  bigint := -99;
  33.     vEmptyString                character varying(1) :='';
  34.     vCtgrProductCode                character varying;
  35.     vCtgrProductName                character varying;
  36.     vYes                        character varying(1) :='Y';
  37.     vNo                         character varying(1) :='N';
  38.     vAll                        character varying;
  39.     vOuBuId                     bigint;
  40.     vOuPkp                      bigint;
  41.     vGovTaxAmount               numeric;
  42.     vZero                       numeric;
  43.  
  44. BEGIN
  45.     vDoDocTypeId := 311;
  46.     vReportName := 'FormSalesInvoiceForMF';
  47.     vZero := 0;
  48.  
  49.      --> Ambil Ou PkP
  50.     SELECT COUNT(1) INTO vOuPkp
  51.     FROM sl_invoice A
  52.     INNER JOIN t_ou_legal B ON A.ou_id = B.ou_id
  53.     WHERE A.invoice_id = pInvoiceId
  54.         AND B.flg_pkp = 'Y' ;
  55.  
  56.     --> Ambil total amount
  57.     SELECT SUM(F.qty_dlv_so * F.price_so) AS total_amount INTO vTotalAmount
  58.     FROM sl_invoice_item  Z
  59.     INNER JOIN sl_invoice A ON Z.invoice_id = A.invoice_id
  60.     INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = B.doc_type_id
  61.     INNER JOIN sl_do C ON B.so_id = C.ref_id
  62.     INNER JOIN sl_so_balance_invoice F ON A.tenant_id = F.tenant_id AND F.ou_id = A.ou_id AND F.ref_doc_type_id = vDoDocTypeId
  63.                 AND F.ref_id = C.do_id AND F.so_id = C.ref_id AND F.ref_item_id = Z.ref_item_id
  64.                 AND F.do_receipt_item_id = Z.do_receipt_item_id
  65.     WHERE A.tenant_id = pTenantId
  66.         AND A.invoice_id = pInvoiceId;
  67.  
  68.     -- Ambil total payment from mapping cb in to so
  69.     -- Note: ambil dari nilai di SI-nya
  70.     SELECT CASE WHEN COALESCE (D.payment_amount,0) <> 0 THEN D.payment_amount
  71.         WHEN COALESCE(C.amount, 0) = 0 THEN 0
  72.             ELSE A.gross_amount
  73.             END AS payment INTO vTotalPayment
  74.     FROM sl_invoice A
  75.     INNER JOIN sl_so B ON A.ref_id = B.so_id
  76.     LEFT JOIN cb_mapping_cbin_so_balance_item C ON B.so_id = C.so_id AND B.doc_no = C.doc_no
  77.     LEFT JOIN fi_invoice_ar_balance D ON B.so_id = D.ref_id AND D.ref_doc_type_id = B.doc_type_id
  78.     WHERE A.tenant_id = pTenantId
  79.             AND A.invoice_id = pInvoiceId;
  80.  
  81.     --> Ambil Total Tax
  82.     SELECT SUM(L.tax_amount) AS total_amount INTO vTotalTax
  83.     FROM sl_invoice_item  Z
  84.     INNER JOIN sl_invoice A ON Z.invoice_id = A.invoice_id
  85.     INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = B.doc_type_id
  86.     INNER JOIN sl_do C ON B.so_id = C.ref_id
  87.     INNER JOIN sl_so_balance_invoice F ON A.tenant_id = F.tenant_id AND F.ou_id = A.ou_id AND F.ref_doc_type_id = vDoDocTypeId
  88.                 AND F.ref_id = C.do_id AND F.so_id = C.ref_id AND F.ref_item_id = Z.ref_item_id
  89.                 AND F.do_receipt_item_id = Z.do_receipt_item_id
  90.     INNER JOIN sl_so_balance_invoice_tax L ON L.tenant_id = F.tenant_id AND
  91.                                               L.ou_id = F.ou_id AND
  92.                                               L.partner_id = F.partner_id AND
  93.                                               L.ref_doc_type_id = F.ref_doc_type_id AND
  94.                                               L.ref_id = F.ref_id AND
  95.                                               L.ref_item_id = F.ref_item_id AND
  96.                                               L.do_receipt_item_id = F.do_receipt_item_id
  97.     WHERE A.tenant_id = pTenantId
  98.         AND A.invoice_id = pInvoiceId;
  99.  
  100.  
  101.     IF(vOuPkp = 1) THEN
  102.  
  103.      Open pRefHeader FOR
  104.             SELECT  f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_name_pkp') AS ou_name,
  105.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_address') AS ou_address,
  106.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_npwp') AS ou_phone,
  107.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_mail') AS ou_mail,
  108.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_web') AS ou_web,
  109.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'remark1') AS remark1,
  110.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'remark5') AS remark2,
  111.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'remark3') AS remark3,
  112.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'remark4') AS remark4,
  113.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_account1') AS bank_account1,
  114.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'bank_account2') AS bank_account2,
  115.                     A.doc_no, A.doc_date, f_get_partner_name(B.partner_bill_to_id) AS customer_name, vTotalPayment AS payment,
  116.                     (vTotalAmount + vTotalTax - vTotalPayment) AS total_due, vTotalAmount AS sub_total, vTotalTax AS tax,
  117.                     (vTotalAmount + vTotalTax) AS total_amount, vYes AS Pkp, A.due_date AS terms
  118.             FROM sl_invoice A
  119.             INNER JOIN sl_so B ON A.ref_id = B.so_id
  120.             WHERE A.invoice_id = pInvoiceId;
  121.  
  122.         RETURN NEXT pRefHeader;
  123.  
  124.         Open pRefDetail FOR
  125.             SELECT COALESCE(E.product_desc,f_get_product_name(G.product_id)) AS ORDER, F.qty_dlv_so AS qty, F.price_so AS price, (F.qty_dlv_so * F.price_so) AS amount,
  126.                 COALESCE(D.partner_name,f_get_partner_name(A.partner_id)) AS partner_name, COALESCE(D.partner_address1,'') AS cust_address,
  127.                 COALESCE(E.remark,'No. order : ' || B.doc_no) AS remark, C.doc_date AS doc_date
  128.             FROM sl_invoice_item Z
  129.             INNER JOIN sl_invoice A ON Z.invoice_id = A.invoice_id
  130.             INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = B.doc_type_id
  131.             INNER JOIN sl_do C ON B.so_id = C.ref_id
  132.             LEFT JOIN sl_quotation D ON B.ref_id = D.quotation_id
  133.             INNER JOIN sl_so_balance_invoice F ON A.tenant_id = F.tenant_id AND F.ou_id = A.ou_id AND F.ref_doc_type_id = 311
  134.                         AND F.ref_id = C.do_id AND F.so_id = C.ref_id AND F.ref_item_id = Z.ref_item_id
  135.                         AND F.do_receipt_item_id = Z.do_receipt_item_id
  136.             INNER JOIN sl_do_item G ON Z.ref_item_id = G.do_item_id
  137.             INNER JOIN sl_so_item H ON G.ref_id = H.so_item_id
  138.             LEFT JOIN sl_quotation_item E ON H.ref_id = E.quotation_item_id
  139.             WHERE A.tenant_id = pTenantId
  140.                 AND A.invoice_id = pInvoiceId;
  141.  
  142.         RETURN NEXT pRefDetail;
  143.  
  144.     ELSE
  145.  
  146.         Open pRefHeader FOR
  147.             SELECT  f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_name_non_pkp') AS ou_name,
  148.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_phone') AS ou_phone,
  149.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_mail') AS ou_mail,
  150.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_web') AS ou_web,
  151.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'remark1') AS remark1,
  152.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'remark2') AS remark2,
  153.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'remark3') AS remark3,
  154.                     f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'remark4') AS remark4,
  155.                     A.doc_no, A.doc_date, f_get_partner_name(B.partner_bill_to_id) AS customer_name, vTotalPayment AS payment,
  156.                     (vTotalAmount - vTotalPayment) AS total_due, vNo AS Pkp, A.due_date AS terms
  157.             FROM sl_invoice A
  158.             INNER JOIN sl_so B ON A.ref_id = B.so_id
  159.             WHERE A.invoice_id = pInvoiceId;
  160.  
  161.         RETURN NEXT pRefHeader;
  162.  
  163.         Open pRefDetail FOR
  164.            SELECT COALESCE(E.product_desc,f_get_product_name(G.product_id)) AS ORDER, F.qty_dlv_so AS qty, F.price_so AS price, (F.qty_dlv_so * F.price_so) AS amount,
  165.                 COALESCE(D.partner_name,f_get_partner_name(A.partner_id)) AS partner_name, COALESCE(D.partner_address1,'') AS cust_address,
  166.                 COALESCE(E.remark,'No. order : ' || B.doc_no) AS remark, C.doc_date AS doc_date
  167.             FROM sl_invoice_item Z
  168.             INNER JOIN sl_invoice A ON Z.invoice_id = A.invoice_id
  169.             INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = B.doc_type_id
  170.             INNER JOIN sl_do C ON B.so_id = C.ref_id
  171.             LEFT JOIN sl_quotation D ON B.ref_id = D.quotation_id
  172.             INNER JOIN sl_so_balance_invoice F ON A.tenant_id = F.tenant_id AND F.ou_id = A.ou_id AND F.ref_doc_type_id = 311
  173.                         AND F.ref_id = C.do_id AND F.so_id = C.ref_id AND F.ref_item_id = Z.ref_item_id
  174.                         AND F.do_receipt_item_id = Z.do_receipt_item_id
  175.             INNER JOIN sl_do_item G ON Z.ref_item_id = G.do_item_id
  176.             INNER JOIN sl_so_item H ON G.ref_id = H.so_item_id
  177.             LEFT JOIN sl_quotation_item E ON H.ref_id = E.quotation_item_id
  178.             WHERE A.tenant_id = pTenantId
  179.                 AND A.invoice_id = pInvoiceId;
  180.  
  181.         RETURN NEXT pRefDetail;
  182.  
  183.     END IF;
  184.  
  185.  
  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