Advertisement
aadddrr

[BACKUP] r_print_purchase_order

Jul 5th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_print_purchase_order(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.         pPoId                                   ALIAS FOR $6;
  13.         pApprovalName                   ALIAS FOR $7;
  14.         pPreparedBy                             ALIAS FOR $8;
  15.         pSupplierCp                             ALIAS FOR $9;
  16.        
  17.         vReportName                             character varying;
  18.         vSubTotal                               numeric;
  19.         vPpn                                    numeric;
  20.         vTotal                                  numeric;
  21.         vTotalQty                               numeric;
  22.         vEmptyId                                bigint;
  23.         vKeySignApprovalName    character varying;
  24.         vKeySignPreparedBy              character varying;
  25.        
  26.         vOuBuInfoReport                 OU_INFO_REPORT%ROWTYPE;
  27.         result                                  record;
  28.        
  29.         vTermOfPaymentCode              character varying := ' ';
  30.         vTermOfPayment                  character varying := '-';
  31.        
  32.         vTotalHargaBeli             numeric;
  33.     vTotalPotongan              numeric;
  34.     vTotalSetelahPotongan           numeric;
  35.     vTotalDPP               numeric;
  36.     vTotalPPN               numeric;
  37.     vTotalDPPdanPPN             numeric;
  38.     vIncludeTax         character varying;
  39.        
  40. BEGIN
  41.         vReportName := 'FormPurchaseOrder';
  42.         vEmptyId := -99;
  43.        
  44.         SELECT f_get_ou_bu_info_report(pTenantId, A.ou_id) AS info
  45.         FROM pu_po A
  46.         WHERE A.po_id = pPoId INTO result ;
  47.  
  48.         vOuBuInfoReport := result.info;
  49.        
  50.         vKeySignApprovalName := 'path.sign.'||lower(replace(trim(pApprovalName), ' ', '_'));
  51.         vKeySignPreparedBy := 'path.sign.'||lower(replace(trim(pPreparedBy), ' ', '_'));
  52.  
  53.         -- Untuk PO Item sudah dijaga include tax atau tidak semuanya sama
  54.         SELECT flg_tax_amount INTO vIncludeTax FROM pu_po_item WHERE po_id = pPoId LIMIT 1;
  55.        
  56.         -- Tambahan data summary
  57.         SELECT COALESCE(SUM(A.gross_item_amount),0) INTO vTotalHargaBeli
  58.         FROM pu_po_item A
  59.     WHERE A.po_id = pPoId;
  60.  
  61.     SELECT SUM(discount_amount * qty_int) INTO vTotalPotongan
  62.         FROM pu_po_item A
  63.     WHERE A.po_id = pPoId;
  64.  
  65.     SELECT vTotalHargaBeli - vTotalPotongan INTO vTotalSetelahPotongan;
  66.    
  67.     IF vIncludeTax = 'Y' THEN
  68.         SELECT COALESCE(SUM(A.nett_item_amount),0) INTO vTotalDPP
  69.             FROM pu_po_item A
  70.         WHERE A.po_id = pPoId;
  71.        
  72.         SELECT COALESCE(SUM(A.tax_amount),0) INTO vTotalPPN
  73.             FROM pu_po_item A
  74.         WHERE A.po_id = pPoId;     
  75.     ELSE
  76.         vTotalDPP := vTotalSetelahPotongan;
  77.         SELECT COALESCE(SUM(A.tax_amount),0) INTO vTotalPPN
  78.             FROM pu_po_item A
  79.         WHERE A.po_id = pPoId;     
  80.     END IF;
  81.  
  82.     SELECT vTotalDPP + vTotalPPN INTO vTotalDPPdanPPN;
  83.        
  84.         /* get sub total */
  85.         SELECT COALESCE(SUM(a.nett_item_amount), 0) INTO vSubTotal
  86.         FROM pu_po_item A
  87.         LEFT OUTER JOIN pu_po_balance_item E ON A.po_item_id=E.po_item_id
  88.         WHERE A.po_id = pPoId
  89.                 AND COALESCE(E.qty_int_po+E.qty_int_add-E.qty_int_cancel,A.qty_int) > 0;
  90.  
  91.         -- Get total Item
  92.         SELECT SUM( COALESCE(E.qty_int_po+E.qty_int_add-E.qty_int_cancel,A.qty_int) ) INTO vTotalQty
  93.         FROM pu_po_item A
  94.         LEFT OUTER JOIN pu_po_balance_item E ON A.po_item_id=E.po_item_id
  95.         WHERE A.po_id = pPoId
  96.         AND COALESCE(E.qty_int_po+E.qty_int_add-E.qty_int_cancel,A.qty_int) > 0;
  97.                
  98.         /* get ppn */
  99.         /* David, 4 Februari 2015 : tidak boleh gunakan cara ini, bisa selisih karena ada pembulatan
  100.          * SELECT COALESCE(SUM(A.tax_amount),0) INTO vPpn
  101.         FROM pu_po_item A
  102.         WHERE A.po_id = pPoId;
  103.         */
  104.        
  105.         IF EXISTS(SELECT 1 FROM pu_po_item WHERE po_id = pPoId AND tax_percentage <> 0) THEN
  106.                 SELECT COALESCE(f_tax_rounding(pTenantId, vSubTotal, a.tax_percentage), 0) INTO vPpn
  107.                 FROM pu_po_item A WHERE A.po_id = pPoId
  108.                 AND A.tax_percentage <> 0
  109.                 GROUP BY A.tax_percentage;
  110.         ELSE
  111.                 vPpn = 0;
  112.         END IF;
  113.        
  114.         /* get total */
  115.         SELECT (vSubTotal + vPpn) INTO vTotal;
  116.        
  117.         /* get term of payment code */
  118.         SELECT A.top_code INTO vTermOfPaymentCode
  119.         FROM pu_po A
  120.         INNER JOIN t_combo_value B ON B.combo_id = 'TERMOFPAYMENT' AND A.top_code = B.code
  121.         WHERE A.po_id = pPoId;
  122.        
  123.         /* get term of payment */
  124.         IF (vTermOfPaymentCode = 'COD') THEN
  125.                 vTermOfPayment := 'COD';
  126.         ELSEIF (vTermOfPaymentCode = 'T7D') THEN
  127.                 vTermOfPayment := '7 Days';
  128.         ELSEIF (vTermOfPaymentCode = 'T14D') THEN
  129.                 vTermOfPayment := '14 Days';
  130.         ELSEIF (vTermOfPaymentCode = 'T15D') THEN
  131.                 vTermOfPayment := '15 Days';
  132.         ELSEIF (vTermOfPaymentCode = 'T21D') THEN
  133.                 vTermOfPayment := '21 Days';
  134.         ELSEIF (vTermOfPaymentCode = 'T30D') THEN
  135.                 vTermOfPayment := '30 Days';
  136.         ELSEIF (vTermOfPaymentCode = 'T45D') THEN
  137.                 vTermOfPayment := '45 Days';
  138.         ELSEIF (vTermOfPaymentCode = 'T60D') THEN
  139.                 vTermOfPayment := '60 Days';
  140.         ELSE
  141.                 vTermOfPayment := '-';
  142.         END IF;
  143.        
  144.         Open pRefHeader FOR
  145.         SELECT A.po_id, A.doc_no, A.doc_date, A.ou_id, COALESCE(B.npwp_name, f_get_ou_name(vOuBuInfoReport.ou_id)) AS ou_name,
  146.                    (vOuBuInfoReport.address1 || ' ' || vOuBuInfoReport.address2 || ' ' || vOuBuInfoReport.address3) AS ou_addr_1,
  147.                    (vOuBuInfoReport.city || ', ' || vOuBuInfoReport.state_or_province || ', ' || vOuBuInfoReport.zip_code) AS ou_addr_2, COALESCE(B.npwp_no, ' ') AS ou_npwp,
  148.                    (vOuBuInfoReport.phone1) AS ou_phone, (vOuBuInfoReport.fax1) AS ou_fax, COALESCE(B.flg_pkp, 'N') AS flg_ppn, A.partner_id,
  149.                    CONCAT(f_get_partner_code(A.partner_id), ' - ', f_get_partner_name(A.partner_id)) AS supplier_name,
  150.                    COALESCE(C.partner_address_id, vEmptyId) AS partner_address_id,
  151.                    COALESCE(C.address1, ' ') AS supplier_addr_1, COALESCE(C.address2, ' ') || COALESCE(C.address3, ' ') AS supplier_addr_2, pSupplierCp AS supplier_cp,
  152.                    COALESCE(C.phone1, ' ') AS supplier_phone, COALESCE(C.fax1, ' ') AS supplier_fax, vEmptyId AS partner_cp_id,
  153.                    A.remark, A.flg_delivery, A.curr_code, A.top_code, vTermOfPayment AS term_of_payment, A.purchaser_id, pPreparedBy AS prepared_by,
  154.                    pApprovalName AS approval_name, vSubTotal AS sub_total, vPpn AS ppn, vTotal AS total, COALESCE(vTotalQty, 0) AS total_qty,
  155.                    lower(terbilang(vTotal)) AS total_name,      (CASE WHEN A.curr_code = 'IDR' THEN 'rupiah' ELSE A.curr_code END) AS curr_name,
  156.                    f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, vKeySignApprovalName) AS path_sign_approval,
  157.                    f_get_report_parameter_config_value(pTenantId, vReportName, A.ou_id, vKeySignPreparedBy) AS path_sign_prepared_by,
  158.                    vOuBuInfoReport.image_url AS path_logo_ou,
  159.                    pDatetime AS datetime,
  160.            vTotalHargaBeli as total_harga_beli,
  161.            vTotalPotongan as total_potongan,
  162.            vTotalSetelahPotongan as total_setelah_potongan,
  163.            vTotalDPP as dpp,
  164.            vTotalPPN as ppn,
  165.            vTotalDPPdanPPN as total_bayar,
  166.            D.warehouse_name as nama_gudang,
  167.                    D.address1 as alamat_gudang_1,
  168.                    D.address2 as alamat_gudang_2,
  169.                    D.city as kota_gudang,
  170.                    D.zip_code as kode_pos_gudang,
  171.                    D.phone1 as telepon_gudang,
  172.                    D.fax1 as fax_gudang
  173.        
  174.         FROM pu_po A
  175.         LEFT OUTER JOIN t_ou_legal B ON A.ou_id = B.ou_id
  176.         LEFT OUTER JOIN m_partner_address C ON A.partner_id = C.partner_id AND C.flg_official = 'Y'
  177.                 INNER JOIN m_warehouse D ON A.warehouse_id = D.warehouse_id
  178.         WHERE A.po_id = pPoId;
  179.        
  180.         RETURN NEXT pRefHeader;
  181.        
  182.         Open pRefDetail FOR    
  183.         SELECT '1' AS grouping, A.po_item_id, A.po_id, A.product_id, C.product_code, C.product_name, A.curr_code,
  184.         A.gross_price_po AS price,
  185.         COALESCE(E.qty_int_po+E.qty_int_add-E.qty_int_cancel,A.qty_int) AS qty,
  186.         COALESCE(E.qty_int_po+E.qty_int_add-E.qty_int_cancel,A.qty_int) * A.gross_price_po AS amount, A.base_uom_id, D.uom_name,
  187.         (f_get_product_warranty_service(A.product_id) :: integer) AS warranty,
  188.         f_get_product_specs(A.product_id) AS product_specs, A.discount_percentage, A.nett_item_amount,
  189.         COALESCE(E.qty_int_po+E.qty_int_add-E.qty_int_cancel,A.qty_int) * A.discount_amount AS total_discount_amount
  190.         FROM pu_po_item A
  191.                 INNER JOIN pu_po B ON A.tenant_id = B.tenant_id AND A.po_id = B.po_id
  192.                 LEFT OUTER JOIN pu_po_balance_item E ON A.po_item_id=E.po_item_id
  193.                 INNER JOIN m_product C ON A.tenant_id = C.tenant_id AND A.product_id = C.product_id
  194.                 INNER JOIN m_uom D ON A.tenant_id = D.tenant_id AND A.base_uom_id = D.uom_id
  195.         WHERE A.po_id = pPoId AND
  196.                 COALESCE(E.qty_int_po+E.qty_int_add-E.qty_int_cancel,A.qty_int) > 0
  197.         ORDER BY A.line_no;
  198.                
  199.         RETURN NEXT pRefDetail;
  200.        
  201. END;
  202. $BODY$
  203.   LANGUAGE plpgsql VOLATILE
  204.   COST 100
  205.   ROWS 1000;
  206.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement