Advertisement
samuel025

Cetak Invoice JRP

Sep 6th, 2021
1,386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_print_sales_invoice_escp_for_jrp(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, character varying)
  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.     pFlgPkp                 ALIAS FOR $7;
  14.     pNamaPenanggungJwb      ALIAS FOR $8;
  15.     pSikaPenanggungJwb      ALIAS FOR $9;
  16.    
  17.     vDoDocTypeId                bigint;
  18.     vReportName                 character varying;
  19.     vDoNo                       character varying;
  20.     vAdditionalCost             numeric;
  21.     vDownPaymentAmount          numeric;
  22.     vDownPaymentAmountWithTax   numeric;
  23.     vTaxDownPaymentAmount       numeric;
  24.     vFlgShowPpn                 character varying := 'Y';
  25.     vOuBuInfoReport             OU_INFO_REPORT%ROWTYPE;
  26.     result                      record;
  27.    
  28.     vSubTotal                   numeric;
  29.     vDiscount                   numeric;
  30.     vDpp                        numeric;
  31.     vPpn                        numeric;
  32.     vTaxPercentage              numeric := 100.00;
  33.     vRoundingModeTax            character varying(5);
  34.     vRoundingModeNonTax         character varying(5);
  35.     vRoundingScalePrintTotal    integer;
  36.     vNullRefId                  bigint := -99;
  37.     vEmptyString                character varying(1) :='';
  38.     vCtgrProductCode                character varying;
  39.     vCtgrProductName                character varying;
  40.     vYes                        character varying(1) :='Y';
  41.     vAll                        character varying;
  42.     vOuBuId                     bigint;
  43.     vGovTaxAmount               numeric;
  44.    
  45. BEGIN
  46.     vDoDocTypeId := 311;
  47.     vReportName := 'FormSalesInvoiceForJrp';   
  48.     vAll := 'ALL';
  49.    
  50.     DELETE FROM tt_cetak_invoice_jrp WHERE session_id = pSessionId;
  51.     DELETE FROM tt_final_cetak_invoice_jrp WHERE session_id = pSessionId;
  52.  
  53.     select (f_get_ou_bu_structure(A.ou_id)).ou_bu_id
  54.     FROM sl_invoice A
  55.     WHERE A.invoice_id = pInvoiceId INTO vOuBuId ;
  56.    
  57.     SELECT f_get_ou_bu_info_report(pTenantId, A.ou_id) AS info
  58.     FROM sl_invoice A
  59.     WHERE A.invoice_id = pInvoiceId INTO result ;
  60.     vOuBuInfoReport := result.info;
  61.    
  62.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.tax') INTO vRoundingModeTax;
  63.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  64.     SELECT CAST(f_get_value_system_config_by_param_code(pTenantId, 'rounding.scale.print.total') AS integer) INTO vRoundingScalePrintTotal;
  65.    
  66.     vRoundingScalePrintTotal := COALESCE(vRoundingScalePrintTotal,2);
  67.  
  68.    
  69.     /* get delivery order number */
  70.     SELECT STRING_AGG(Z.doc_no, ' , ' ) INTO vDoNo
  71.     FROM (
  72.         SELECT B.doc_no
  73.         FROM sl_invoice_item A
  74.           INNER JOIN sl_do B ON A.tenant_id = B.tenant_id AND A.ref_id = B.do_id
  75.         WHERE A.tenant_id = pTenantId
  76.           AND A.invoice_id = pInvoiceId
  77.         GROUP BY B.do_id
  78.         ORDER BY B.doc_no) Z;
  79.     SELECT ctgr_product_code, ctgr_product_name INTO vCtgrProductCode, vCtgrProductName
  80.     FROM (
  81.         SELECT f_get_ctgr_product_code(C.ctgr_product_id) AS ctgr_product_code,
  82.                f_get_ctgr_product_name(C.ctgr_product_id) AS ctgr_product_name
  83.         FROM sl_invoice_item A
  84.         INNER JOIN sl_do_item B ON A.tenant_id = B.tenant_id AND A.ref_item_id = B.do_item_id
  85.         INNER JOIN m_product C ON B.product_id = C.product_id
  86.         WHERE A.tenant_id = pTenantId
  87.           AND A.invoice_id = pInvoiceId
  88.         limit 1) Z;
  89.  
  90.  
  91.    
  92.     /* insert into table tr_sl_invoice_item*/
  93.     INSERT INTO tr_sl_invoice_item(
  94.         session_id, tenant_id, product_code, product_name,
  95.         qty_so,
  96.         uom_name,
  97.         nett_sell_price,
  98.         gross_sell_price,
  99.         nett_item_amount,
  100.         gross_item_amount,
  101.         tax_price, tax_amount, warranty,
  102.         discount_pct_so,
  103.         serial_number,
  104.         product_expired_date,
  105.         regular_disc_amount,
  106.         promo_disc_amount,
  107.         adj_regular_disc_amount,
  108.         adj_promo_disc_amount,
  109.         dpp_ppn_in_so,
  110.         item_amount_in_so_balance,
  111.         regular_disc_amount_in_so_balance,
  112.         promo_disc_amount_in_so_balance,
  113.         adj_regular_disc_amount_in_so_balance,
  114.         adj_promo_disc_amount_in_so_balance,
  115.         tax_amount_in_so_balance,
  116.         so_balance_invoice_id,
  117.         line_no)
  118.     SELECT pSessionId, pTenantId, D.product_code, D.product_name,
  119.     CASE WHEN G.do_receipt_item_id = vNullRefId THEN
  120.         COALESCE(F.qty_dlv_int, G.qty_dlv_so) ELSE COALESCE(K.qty_return, 0)*-1
  121.     END AS qty_so,
  122.     E.uom_name,
  123.     G.price_so AS nett_sell_price,
  124.     (G.item_amount + COALESCE(L.tax_amount, 0)) / G.qty_dlv_so AS gross_sell_price,
  125.     0 as nett_item_amount,--(G.qty_dlv_so * G.price_so) AS nett_item_amount,
  126.     0 AS gross_item_amount,--(G.price_so + f_tax_rounding(G.tenant_id, G.price_so, 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,
  127.     f_tax_rounding(G.tenant_id, G.price_so, 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,
  128.     COALESCE(L.tax_amount, 0) / G.qty_dlv_so AS tax_amunt,--f_tax_rounding(G.tenant_id, G.price_so, 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,
  129.     (f_get_product_warranty_service(C.product_id) :: integer) AS warranty,
  130.     J.discount_percentage,
  131.     COALESCE (I.serial_number, vEmptyString) as serial_number,
  132.     COALESCE (I.product_expired_date, vEmptyString) as product_expired_date,
  133.     G.regular_disc_amount/G.qty_dlv_so AS regular_disc_amount,
  134.     G.promo_disc_amount/G.qty_dlv_so AS promo_disc_amount,
  135.     G.adj_regular_disc_amount/G.qty_dlv_so AS adj_regular_disc_amount,
  136.     G.adj_promo_disc_amount/G.qty_dlv_so AS adj_promo_disc_amount,
  137.     f_calculate_dpp_amount_from_gross_price(J.gross_sell_price, 1, 0,J.flg_tax_amount,J.tax_percentage,vRoundingScalePrintTotal,vRoundingModeNonTax) +
  138.     f_calculate_tax_amount_from_gross_price(J.gross_sell_price, 1, 0,J.flg_tax_amount,J.tax_percentage,vRoundingScalePrintTotal,vRoundingModeNonTax) AS dpp_ppn_in_so,
  139.     G.item_amount AS item_amount_in_so_balance,
  140.     G.regular_disc_amount AS regular_disc_amount_in_so_balance,
  141.     G.promo_disc_amount AS promo_disc_amount_in_so_balance,
  142.     G.adj_regular_disc_amount AS adj_regular_disc_amount_in_so_balance,
  143.     G.adj_promo_disc_amount AS adj_promo_disc_amount_in_so_balance,
  144.     COALESCE(L.tax_amount, 0) AS tax_amount_in_so_balance,
  145.     G.so_balance_invoice_id,
  146.     row_number() OVER(PARTITION BY G.so_balance_invoice_id ORDER BY (G.item_amount + COALESCE(L.tax_amount, 0)) / G.qty_dlv_so * CASE WHEN G.do_receipt_item_id = vNullRefId THEN COALESCE(F.qty_dlv_int, G.qty_dlv_so) ELSE COALESCE(K.qty_return, G.qty_dlv_so)*-1 END DESC,
  147.                                                                      D.product_code, COALESCE (I.serial_number, vEmptyString))
  148.     FROM sl_invoice_item A
  149.     INNER JOIN sl_invoice H ON A.tenant_id = H.tenant_id AND A.invoice_id = H.invoice_id  
  150.     INNER JOIN sl_do B ON A.tenant_id = B.tenant_id AND A.ref_id = B.do_id
  151.     INNER JOIN sl_do_item C ON A.tenant_id = C.tenant_id AND A.ref_item_id = C.do_item_id
  152.     INNER JOIN m_product D ON A.tenant_id = D.tenant_id AND C.product_id = D.product_id
  153.     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
  154.     LEFT JOIN sl_so_balance_invoice_tax L ON L.tenant_id = G.tenant_id AND
  155.                                               L.ou_id = G.ou_id AND
  156.                                               L.partner_id = G.partner_id AND
  157.                                               L.ref_doc_type_id = G.ref_doc_type_id AND
  158.                                               L.ref_id = G.ref_id AND
  159.                                               L.ref_item_id = G.ref_item_id AND
  160.                                               L.do_receipt_item_id = G.do_receipt_item_id
  161.     INNER JOIN m_uom E ON A.tenant_id = E.tenant_id AND G.so_uom_id = E.uom_id
  162.     INNER JOIN sl_so_item J ON J.so_item_id = C.ref_id
  163.     LEFT JOIN sl_do_product F ON F.do_item_id = C.do_item_id
  164.     LEFT JOIN in_do_receipt_product K ON K.do_receipt_item_id = G.do_receipt_item_id AND F.product_balance_id = K.product_balance_id
  165.     LEFT JOIN in_product_balance I ON I.product_balance_id = F.product_balance_id
  166.     WHERE A.tenant_id = pTenantId
  167.         AND A.invoice_id = pInvoiceId;
  168.        
  169.     UPDATE tr_sl_invoice_item
  170.     SET nett_item_amount = ROUND(qty_so * nett_sell_price,vRoundingScalePrintTotal),
  171.         gross_item_amount = ROUND(qty_so * gross_sell_price,vRoundingScalePrintTotal),
  172.         regular_disc_amount = ROUND(regular_disc_amount * qty_so,vRoundingScalePrintTotal),
  173.         promo_disc_amount  = ROUND(promo_disc_amount* qty_so,vRoundingScalePrintTotal),
  174.         adj_regular_disc_amount  = ROUND(adj_regular_disc_amount* qty_so,vRoundingScalePrintTotal),
  175.         adj_promo_disc_amount  = ROUND(adj_promo_disc_amount* qty_so,vRoundingScalePrintTotal)
  176.     WHERE session_id = pSessionId;
  177.    
  178.     --hitung selisih regular_disc_amount dari data balance SO, dan dimasukan ke
  179.     -- harga paling tingi (line no nya 1)
  180.     WITH data_selisih AS (
  181.         SELECT so_balance_invoice_id, (regular_disc_amount_in_so_balance) - sum(regular_disc_amount) AS selisih
  182.         FROM tr_sl_invoice_item
  183.         WHERE session_id = pSessionId
  184.         GROUP BY so_balance_invoice_id, regular_disc_amount_in_so_balance
  185.     )
  186.     UPDATE tr_sl_invoice_item Z
  187.     SET regular_disc_amount = Z.regular_disc_amount + A.selisih
  188.     FROM data_selisih A
  189.     WHERE A.so_balance_invoice_id = Z.so_balance_invoice_id AND
  190.           Z.line_no = 1 AND
  191.           Z.session_id = pSessionId;
  192.    
  193.     --hitung selisih promo_disc_amount dari data balance SO, dan dimasukan ke
  194.     -- harga paling tingi (line no nya 1)
  195.     WITH data_selisih AS (
  196.         SELECT so_balance_invoice_id, (promo_disc_amount_in_so_balance) - sum(promo_disc_amount) AS selisih
  197.         FROM tr_sl_invoice_item
  198.         WHERE session_id = pSessionId
  199.         GROUP BY so_balance_invoice_id, promo_disc_amount_in_so_balance
  200.     )
  201.     UPDATE tr_sl_invoice_item Z
  202.     SET promo_disc_amount = Z.promo_disc_amount + A.selisih
  203.     FROM data_selisih A
  204.     WHERE A.so_balance_invoice_id = Z.so_balance_invoice_id AND
  205.           Z.line_no = 1 AND
  206.           Z.session_id = pSessionId;
  207.          
  208.     --hitung selisih item amount dari data balance SO, dan dimasukan ke
  209.     -- harga paling tingi (line no nya 1)
  210.     WITH data_selisih AS (
  211.         SELECT so_balance_invoice_id, (item_amount_in_so_balance + tax_amount_in_so_balance) - sum(gross_item_amount) AS selisih
  212.         FROM tr_sl_invoice_item
  213.         WHERE session_id = pSessionId
  214.         GROUP BY so_balance_invoice_id, item_amount_in_so_balance + tax_amount_in_so_balance
  215.     )
  216.     UPDATE tr_sl_invoice_item Z
  217.     SET gross_item_amount = Z.gross_item_amount + A.selisih
  218.     FROM data_selisih A
  219.     WHERE A.so_balance_invoice_id = Z.so_balance_invoice_id AND
  220.           Z.line_no = 1 AND
  221.           Z.session_id = pSessionId;
  222.    
  223.     --hitung selisih nett item amount dari data balance SO, dan dimasukan ke
  224.     -- harga paling tingi (line no nya 1)
  225.     WITH data_selisih AS (
  226.         SELECT so_balance_invoice_id, (item_amount_in_so_balance - regular_disc_amount_in_so_balance - promo_disc_amount_in_so_balance) - sum(nett_item_amount) AS selisih
  227.         FROM tr_sl_invoice_item
  228.         WHERE session_id = pSessionId
  229.         GROUP BY so_balance_invoice_id, item_amount_in_so_balance - regular_disc_amount_in_so_balance - promo_disc_amount_in_so_balance
  230.     )
  231.     UPDATE tr_sl_invoice_item Z
  232.     SET nett_item_amount = Z.nett_item_amount + A.selisih
  233.     FROM data_selisih A
  234.     WHERE A.so_balance_invoice_id = Z.so_balance_invoice_id AND
  235.           Z.line_no = 1 AND
  236.           Z.session_id = pSessionId;
  237.          
  238.     --hitung selisih tax amount dari data balance SO, dan dimasukan ke
  239.     -- harga paling tingi (line no nya 1)
  240.    
  241.     SELECT gov_tax_amount INTO vGovTaxAmount
  242.     FROM sl_invoice_tax
  243.     WHERE invoice_id = pInvoiceId;
  244.    
  245.     vGovTaxAmount := COALESCE(vGovTaxAmount, 0);
  246.  
  247.     SELECT tax_percentage INTO vTaxPercentage
  248.     FROM sl_invoice_tax
  249.     WHERE invoice_id = pInvoiceId;
  250.    
  251.        
  252.     /* get vFlgShowPpn */
  253.     SELECT (CASE WHEN (pFlgPkp = 'Y' AND B.flg_show_inv_tax = 'Y') THEN 'Y' ELSE 'N' END) INTO vFlgShowPpn
  254.     FROM sl_invoice A
  255.         INNER JOIN sl_so B ON A.tenant_id = B.tenant_id AND A.ref_id = B.so_id
  256.     WHERE A.invoice_id = pInvoiceId;
  257.    
  258.     /* get additional amount*/
  259.     SELECT CASE WHEN vRoundingModeNonTax = 'RD' THEN
  260.                 TRUNC(COALESCE(SUM(A.add_amount), 0), vRoundingScalePrintTotal)
  261.             ELSE
  262.                 ROUND(COALESCE(SUM(A.add_amount), 0), vRoundingScalePrintTotal)
  263.             END
  264.     INTO vAdditionalCost
  265.     FROM sl_invoice_cost A
  266.     WHERE A.tenant_id = pTenantId
  267.         AND A.invoice_id = pInvoiceId;
  268.        
  269.     /* get down payment amount in invoice */
  270.     SELECT CASE WHEN vRoundingModeNonTax = 'RD' THEN       
  271.                 TRUNC(COALESCE(SUM(A.alloc_amount), 0), vRoundingScalePrintTotal)
  272.             ELSE
  273.                 ROUND(COALESCE(SUM(A.alloc_amount), 0), vRoundingScalePrintTotal)
  274.             END,
  275.             CASE WHEN vRoundingModeNonTax = 'RD' THEN
  276.                 TRUNC(COALESCE(SUM(A.alloc_amount + f_tax_rounding(A.tenant_id, A.alloc_amount, B.tax_percentage)),0), vRoundingScalePrintTotal)
  277.             ELSE
  278.                 ROUND(COALESCE(SUM(A.alloc_amount + f_tax_rounding(A.tenant_id, A.alloc_amount, B.tax_percentage)),0), vRoundingScalePrintTotal)
  279.             END,
  280.             CASE WHEN vRoundingModeTax = 'RD' THEN
  281.                 TRUNC(COALESCE(SUM(f_tax_rounding(A.tenant_id, A.alloc_amount, B.tax_percentage)),0), vRoundingScalePrintTotal)
  282.             ELSE
  283.                 ROUND(COALESCE(SUM(f_tax_rounding(A.tenant_id, A.alloc_amount, B.tax_percentage)),0), vRoundingScalePrintTotal)
  284.             END
  285.     INTO vDownPaymentAmount, vDownPaymentAmountWithTax, vTaxDownPaymentAmount
  286.     FROM sl_invoice_advance A
  287.     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
  288.     WHERE A.tenant_id = pTenantId
  289.         AND A.invoice_id = pInvoiceId;
  290.    
  291.     --insert yg do receipt id nya  -99
  292.     INSERT INTO tt_cetak_invoice_jrp
  293.     SELECT pSessionId, A.tenant_id,A.ref_item_id,C.product_id,f_get_uom_name(C.base_uom_id) unit,
  294.     D.serial_number batch,D.product_expired_date ed,C.qty_dlv_int
  295.     from  sl_so_balance_invoice A
  296.     INNER  JOIN sl_do_product C ON A.ref_item_id = C.do_item_id
  297.     INNER JOIN in_product_balance D ON C.product_balance_id = D.product_balance_id
  298.     where flg_invoice = 'Y'
  299.     AND A.tenant_id =  pTenantId
  300.     AND A.do_receipt_item_id = -99
  301.     AND invoice_id = pInvoiceId;
  302.  
  303.     --insert yg do receipt id nya bukan -99
  304.     INSERT INTO tt_cetak_invoice_jrp
  305.     SELECT pSessionId, A.tenant_id,A.ref_item_id,C.product_id,f_get_uom_name(A.so_uom_id) unit,
  306.     D.serial_number batch,D.product_expired_date ed,C.qty_return*-1
  307.     from  sl_so_balance_invoice A
  308.     INNER JOIN in_do_receipt_item B ON A.do_receipt_item_id = B.do_receipt_item_id
  309.     INNER  JOIN in_do_receipt_product C ON A.do_receipt_item_id = C.do_receipt_item_id
  310.     INNER JOIN in_product_balance D ON C.product_balance_id = D.product_balance_id
  311.     where flg_invoice = 'Y'
  312.     AND A.tenant_id =  pTenantId
  313.     AND A.do_receipt_item_id <> -99
  314.     AND invoice_id = pInvoiceId;
  315.  
  316.     -- insert ke final table temp
  317.     WITH temp_final AS (
  318.     SELECT A.session_id,A.tenant_id,MAX(A.item_id) item_id ,f_get_product_name(A.product_id) nama_barang,SUM(A.qty) qty,A.unit,A.batch,A.ed
  319.     FROM tt_cetak_invoice_jrp A
  320.     WHERE A.session_id = pSessionId
  321.     AND A.tenant_id =  pTenantId
  322.     GROUP BY A.session_id,A.tenant_id,A.product_id,A.unit,A.batch,A.ed
  323.     HAVING SUM(A.qty) > 0
  324.     )
  325.     INSERT INTO tt_final_cetak_invoice_jrp(session_id,tenant_id,nama_barang,qty,unit,batch,ed,
  326.                                            harga,discount_percentage,discount_amount,total_amount)
  327.     SELECT A.session_id,A.tenant_id,A.nama_barang,A.qty,A.unit,A.batch,A.ed,
  328.     f_get_sell_price_wo_tax_for_efaktur(B.gross_sell_price_so, B.tax_percentage, B.flg_tax_amount) AS harga,B.discount_percentage,
  329.     TRUNC((f_get_sell_price_wo_tax_for_efaktur(B.gross_sell_price_so, B.tax_percentage, B.flg_tax_amount)*A.qty)*(B.discount_percentage/100.0),0) AS discount_amount,
  330.     f_get_sell_price_wo_tax_for_efaktur(B.gross_sell_price_so, B.tax_percentage, B.flg_tax_amount)*A.qty AS total
  331.     FROM temp_final A
  332.     INNER JOIN sl_so_balance_invoice B ON A.item_id = B.ref_item_id AND B.do_receipt_item_id = -99
  333.     WHERE A.session_id = pSessionId
  334.     AND A.tenant_id =  pTenantId;
  335.  
  336.     SELECT COALESCE(SUM(total_amount),0) INTO vSubTotal
  337.     FROM tt_final_cetak_invoice_jrp
  338.     WHERE session_id =  pSessionId;
  339.  
  340.     SELECT COALESCE(SUM(discount_amount),0) INTO vDiscount
  341.     FROM tt_final_cetak_invoice_jrp
  342.     WHERE session_id =  pSessionId;
  343.  
  344.     vDpp := COALESCE(vSubTotal-vDiscount,0);
  345.     vPpn := COALESCE((vSubTotal-vDiscount)*(vTaxPercentage/100.00),0);
  346.  
  347.     Open pRefHeader FOR
  348.         SELECT A.invoice_id, A.ou_id, A.ou_legal_id,
  349.             UPPER(vOuBuInfoReport.printed_ou_name) AS ou_name,
  350.             UPPER(COALESCE(vOuBuInfoReport.address1 || ' ' || vOuBuInfoReport.address2 || ' ' || vOuBuInfoReport.address3, '-')) AS ou_addr_1,
  351.             UPPER(COALESCE(vOuBuInfoReport.city || ', ' || vOuBuInfoReport.state_or_province || ', ' || vOuBuInfoReport.zip_code, '-')) AS ou_addr_2,
  352.             UPPER(vOuBuInfoReport.npwp_no) AS ou_npwp,
  353.             UPPER(vOuBuInfoReport.image_url) AS path_logo_ou,
  354.             (vOuBuInfoReport.phone1) AS ou_phone,
  355.             (vOuBuInfoReport.fax1) AS ou_fax,
  356.             UPPER(f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ou_email')) AS ou_email,
  357.             UPPER(f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'ijin_pbf')) AS ijin_pbf,
  358.             UPPER(vCtgrProductCode) AS ctgr_product_code,
  359.             UPPER(vCtgrProductName) AS ctgr_product_name,
  360.             A.partner_id,
  361.             UPPER(C.partner_name) as customer_name,
  362.             UPPER(COALESCE(H.address1 || ' ' || H.address2 || ' ' || H.address3, '-')) AS customer_address_1,
  363.             UPPER(COALESCE(H.city || ' ' || H.state_or_province || ' ' || H.zip_code, '-')) AS customer_address_2,
  364.             UPPER(COALESCE(I.npwp_no, vEmptyString)) AS customer_npwp,
  365.             A.doc_type_id,
  366.             UPPER(A.doc_no) AS invoice_no, A.doc_date AS invoice_date,
  367.             TO_DATE(A.due_date, 'YYYYMMDD') - TO_DATE(A.doc_date, 'YYYYMMDD') AS top,
  368.             A.due_date,
  369.             COALESCE(J.tax_no, vEmptyString) AS tax_no,
  370.             UPPER(E.doc_no) AS so_no,
  371.             UPPER(vDoNo) AS do_no,
  372.             UPPER(E.ext_doc_no) AS po_no, A.salesman_id,
  373.             UPPER(COALESCE(F.partner_name, ' ')) AS salesman_name,
  374.             UPPER(A.curr_code) AS currency,
  375.             UPPER(A.remark) AS remark,
  376.             UPPER((CASE WHEN A.curr_code = 'IDR' THEN 'rupiah' ELSE A.curr_code END)) AS curr_name, vFlgShowPpn AS flg_show_ppn,
  377.             ROUND(vSubTotal, 0)::character varying AS sub_total,
  378.             --SUM(regular_disc_amount + promo_disc_amount + adj_regular_disc_amount + adj_promo_disc_amount)::character varying AS total_disc,
  379.             vDiscount::character varying AS total_disc,
  380.             vAdditionalCost::character varying AS additional_cost,
  381.             ROUND( vPpn, 0)::character varying AS ppn,
  382.             vDownPaymentAmountWithTax::character varying AS dp_amount,
  383.             ROUND(vDpp, 0)::character varying AS dpp,
  384.             (ROUND(vDpp, 0)+ROUND( vPpn, 0))::character varying AS total,
  385.             UPPER(terbilang(
  386.                 ROUND(vDpp+vPpn, 0)
  387.             )) AS terbilang,
  388.             UPPER(f_get_report_parameter_config_value(pTenantId, vAll, vOuBuId, 'email')) AS ou_email,
  389.             UPPER(f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'note1')) AS footer_note_1,
  390.             UPPER(f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'note2')) AS footer_note_2,
  391.             UPPER(f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'note3')) AS footer_note_3,
  392.             UPPER(f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'note4')) AS footer_note_4,
  393.             UPPER(f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'note5')) AS footer_note_5,
  394.             UPPER(f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'note6')) AS footer_note_6,
  395.             UPPER(f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, 'note7')) AS footer_note_7,
  396.            
  397.             UPPER(f_get_username(pUserId)) AS username,
  398.             pDatetime AS datetime,
  399.             UPPER(pNamaPenanggungJwb) AS penanggung_jawab_name,
  400.             UPPER(pSikaPenanggungJwb) AS penanggung_jawab_sika
  401.         FROM sl_invoice A
  402.             INNER JOIN m_partner C ON A.tenant_id = C.tenant_id AND A.partner_id = C.partner_id
  403.             INNER JOIN sl_so E ON A.tenant_id = E.tenant_id AND A.ref_id = E.so_id
  404.             LEFT OUTER JOIN m_partner F ON A.tenant_id = F.tenant_id AND A.salesman_id = F.partner_id
  405.  
  406.             LEFT JOIN m_partner_address H ON H.partner_id = A.partner_id AND H.flg_official = vYes
  407.             LEFT JOIN m_partner_npwp I ON I.partner_id = A.partner_id AND I.active = vYes
  408.             LEFT JOIN sl_invoice_tax J ON J.invoice_id = A.invoice_id
  409.         WHERE A.tenant_id = pTenantId
  410.             AND A.invoice_id = pInvoiceId
  411.         GROUP BY A.invoice_id, C.partner_id, E.so_id, F.partner_id, H.partner_address_id, I.npwp_id, J.tax_no;
  412.     RETURN NEXT pRefHeader;
  413.    
  414.     Open pRefDetail FOR
  415.         SELECT row_number() OVER(order by nama_barang ASC) as line_no,
  416.         nama_barang product_name,COALESCE(qty,0)::character varying AS qty,unit uom_name,batch serial_number,ed product_expired_date,
  417.         harga::character varying AS unit_price,discount_percentage AS discount_pct_so,discount_amount::character varying AS unit_price_rp,
  418.         total_amount::character varying AS amount
  419.         FROM tt_final_cetak_invoice_jrp
  420.         WHERE session_id = pSessionId
  421.         ORDER BY product_name ASC;
  422.     RETURN NEXT pRefDetail;
  423.    
  424.     DELETE FROM tt_cetak_invoice_jrp WHERE session_id = pSessionId;
  425.     DELETE FROM tt_final_cetak_invoice_jrp WHERE session_id = pSessionId;
  426.    
  427. END;
  428. $BODY$
  429.   LANGUAGE plpgsql VOLATILE
  430.   COST 100
  431.   ROWS 1000;
  432.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement