Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_sell_price_product_for_so(BIGINT, BIGINT, CHARACTER VARYING, CHARACTER VARYING)
  2.   RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     pRefHeader              REFCURSOR := 'refHeader';
  6.     pRefDetail              REFCURSOR := 'refDetail';
  7.    
  8.     pTenantId           ALIAS FOR $1;
  9.     pReportMessageId    ALIAS FOR $2;
  10.     pSessionId          ALIAS FOR $3;
  11.     pProcessNo          ALIAS FOR $4;
  12.    
  13.     vOuId                       bigint;
  14.     vDateFrom                   CHARACTER varying; 
  15.     vDateTo                     CHARACTER varying;
  16.     vCustomerCodeName           CHARACTER varying;
  17.     vSalesmanCodeName           CHARACTER varying;
  18.     vGolonganProductCodeName    CHARACTER varying;
  19.    
  20.     vEmptyString                CHARACTER varying;
  21.     vOuBuId                     bigint;
  22.     vYes                        CHARACTER varying := 'Y';
  23.     vVoid                       CHARACTER varying := 'V';
  24.     vIndustryTypeComboId        CHARACTER varying := 'INDUSTRYTYPE';
  25.     vGRoupBrandComboId          CHARACTER varying := 'GROUPBRAND';
  26.     vFilterOu                   CHARACTER varying;
  27.     vFilterCustomer             CHARACTER varying;
  28.     vFilterSalesman             CHARACTER varying;
  29.     vFilterGolonganProduct      CHARACTER varying;
  30.    
  31. BEGIN
  32.     vOuId := CAST(f_get_report_parameter_value_by_id(pReportMessageId, 'ouId') AS bigint);
  33.     vDateFrom := f_get_report_parameter_value_by_id(pReportMessageId, 'dateFrom');
  34.     vDateTo := f_get_report_parameter_value_by_id(pReportMessageId, 'dateTo');
  35.     vCustomerCodeName := f_get_report_parameter_value_by_id(pReportMessageId, 'customerCodeName');
  36.     vSalesmanCodeName := f_get_report_parameter_value_by_id(pReportMessageId, 'salesmanCodeName');
  37.     vGolonganProductCodeName := f_get_report_parameter_value_by_id(pReportMessageId, 'golonganProductCodeName');
  38.    
  39.     vEmptyString :='';
  40.     vFilterOu := '';
  41.     vFilterCustomer := '';
  42.     vFilterSalesman := '';
  43.     vFilterGolonganProduct := '';
  44.    
  45.     SELECT (f_get_ou_bu_structure(pOuId)).ou_bu_id INTO vOuBuId;
  46.     --filter ou
  47.     IF(vOuId <> vOuBuId) THEN
  48.         vFilterOu := ' AND C.ou_id = '|| vOuId;
  49.     END IF;
  50.    
  51.     --filter customer
  52.     IF(vCustomerCodeName <> vEmptyString) THEN
  53.         vFilterCustomer := ' AND (UPPER(E.partner_code) LIKE UPPER('''||'%'||vCustomerCodeName||'%'||''') OR UPPER(E.partner_name) LIKE UPPER('''||'%'||vCustomerCodeName||'%'||''')) ';
  54.     END IF;
  55.    
  56.     --filter salesman
  57.     IF(vSalesmanCodeName <> vEmptyString) THEN
  58.         vFilterSalesman := ' AND (UPPER(f_get_partner_code(C.salesman_id)) LIKE UPPER('''||'%'||vSalesmanCodeName||'%'||''') OR UPPER(f_get_partner_name(C.salesman_id)) LIKE UPPER('''||'%'||vSalesmanCodeName||'%'||''')) ';
  59.     END IF;
  60.    
  61.     --filter golongan
  62.     IF(vGolonganProductCodeName <> vEmptyString) THEN
  63.         vFilterGolonganProduct :=' AND (UPPER(f_get_code_golongan_product(B.product_id)) LIKE UPPER('''||'%'||vGolonganProductCodeName||'%'||''') OR UPPER(f_get_name_golongan_product(B.product_id)) LIKE UPPER('''||'%'||vGolonganProductCodeName||'%'||''')) ';
  64.     END IF;
  65.    
  66.     OPEN pRefHeader FOR
  67.         SELECT 26 AS _COUNT,
  68.         'KODEAREA', 'NAMAAREA', 'KODESALES', 'NAMASALES',
  69.         'KOTA', 'NOSPB', 'TGLSPB', 'BULAN',
  70.         'STATUSDO',
  71.         'JENIS', 'NAMAJENIS','KODELANG','NAMALANG',
  72.         'ALAMAT',
  73.         'KODEGOL','GOL',
  74.         'KODEPROD','KODEHARGA', 'NAMAPROD',
  75.         'HARGA',
  76.         'JUMSPB',
  77.         'NILAISPB',
  78.         'AREACOVER','SUPPLIER',
  79.         'JENISBRG','TAHUN',1 AS ordinal
  80.         order BY ordinal;
  81.     RETURN NEXT pRefHeader;
  82.    
  83.     OPEN pRefDetail FOR
  84.         EXECUTE
  85.         'SELECT f_get_ou_code(C.ou_id) as ou_code, f_get_ou_name(C.ou_id) as ou_name, f_get_partner_code(C.salesman_id) as salesman_code, f_get_partner_name(C.salesman_id) as salesman_name,
  86.                f_get_city_name_official(c.partner_id) as city, C.doc_no, c.doc_date, SUBSTRING(c.doc_date,5,2) as month,
  87.                CASE WHEN EXISTS( SELECT 1
  88.                                  FROM sl_so_balance_invoice K
  89.                                  WHERE K.so_id = C.so_id    ) THEN 1 ELSE 0 END as status_do,
  90.                E.industry_type, f_get_combo_prop_key($1,E.industry_type) as desc_industry, E.partner_code, E.partner_name,
  91.                CONCAT((CASE WHEN F.address1 <> $2 THEN F.address1 ELSE $2 END),
  92.                      (CASE WHEN F.address2 <> $2 THEN CONCAT((CASE WHEN F.address1 <> $2 THEN ', ' ELSE $2 END), F.address2) ELSE $2 END),
  93.                      (CASE WHEN F.address3 <> $2 THEN CONCAT((CASE WHEN F.address1 <> $2 OR F.address2 <> $2 THEN ', ' ELSE $2 END), F.address3) ELSE $2 END)) AS address,
  94.               f_get_code_golongan_product(B.product_id) as gol_code, f_get_name_golongan_product(B.product_id) as gol_name,
  95.               f_get_product_code(B.product_id) as product_code, E.price_level, f_get_product_name(B.product_id) as product_name,
  96.               CASE WHEN flg_tax_amount =$3 THEN B.gross_sell_price ELSE B.gross_sell_price + B.tax_price END as harga_spb,
  97.               A.qty_so + A.qty_add - A.qty_cancel as qty,
  98.               (A.qty_so + A.qty_add - A.qty_cancel) * (CASE WHEN flg_tax_amount =$3 THEN B.gross_sell_price ELSE B.gross_sell_price + B.tax_price END) as nilai_spb,
  99.               I.region_name, f_get_partner_name(G.supplier_id) as supplier_name,
  100.               H.group_brand_product as group_brand, SUBSTRING(c.doc_date,1,4) as year
  101.         FROM sl_so_balance_item A
  102.         INNER JOIN sl_so_item B ON B.so_item_id = A.so_item_id
  103.         INNER JOIN sl_so C ON C.so_id = B.so_id
  104.         INNER JOIN sl_so_additional_for_dlg D ON D.so_id = C.so_id
  105.         INNER JOIN m_partner E ON E.partner_id = C.partner_id
  106.         INNER JOIN m_partner_address F ON F.partner_id = C.partner_id AND F.flg_official = $3
  107.         INNER JOIN m_product_custom_for_dlg G ON G.product_id = B.product_id
  108.         INNER JOIN m_product_group_brand H ON H.product_id = B.product_id
  109.         INNER JOIN m_region I ON I.region_id = D.region_id
  110.         INNER JOIN m_ou_structure J ON J.ou_id = C.ou_id
  111.         WHERE A.status_item <> $5 AND
  112.               A.qty_so + A.qty_add - A.qty_cancel > 0 AND
  113.               A.tenant_id = $6  AND
  114.               C.doc_date BETWEEN $7 AND $8 AND
  115.               J.ou_bu_id = $9 '||
  116.               vFilterOu ||
  117.               vFilterCustomer ||
  118.               vFilterSalesman ||
  119.               vFilterGolonganProduct ||
  120.         ' ORDER BY ou_code, c.doc_date, C.doc_no '
  121.         USING  vIndustryTypeComboId, vEmptyString, vYes, vGRoupBrandComboId, vVoid, pTenantId,
  122.                vDateFrom, vDateTo, vOuBuId;
  123.     RETURN NEXT pRefDetail;
  124.            
  125. END;
  126. $BODY$
  127.   LANGUAGE plpgsql VOLATILE
  128.   COST 100
  129.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement