Advertisement
widana

f_get_calculate_nett_sell_price_by_promo

Oct 16th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION f_get_calculate_nett_sell_price_by_promo(CHARACTER VARYING, NUMERIC)
  2.   RETURNS NUMERIC AS
  3. $BODY$
  4. DECLARE
  5.     pPromoCode          ALIAS FOR $1;
  6.     pGrossSellPrice     ALIAS FOR $2;
  7.  
  8.     vPromotype1         CHARACTER VARYING;
  9.     vPromotype2         CHARACTER VARYING;
  10.     vPromodisc1         numeric(15,2);
  11.     vPromodisc2         numeric(15,2);
  12.     vNettSellPrice  numeric(15,2) := 0;
  13.    
  14.     vPromoTypePct       CHARACTER VARYING := 'PROMO.DISC.PCT';
  15.     vPromoTypeAmt       CHARACTER VARYING := 'PROMO.DISC.AMT';
  16.     vPromoTypeVcr       CHARACTER VARYING := 'PROMO.VCR';
  17.     vPromoTypeBigi      CHARACTER VARYING := 'PROMO.BIGI';
  18.  
  19.     vDiscountTypePct        CHARACTER VARYING := 'AMT';
  20.     vDiscountTypeAmt        CHARACTER VARYING := 'PCT';
  21.     vDiscountTypeSp     CHARACTER VARYING := 'SP';
  22.     vEmpty          CHARACTER VARYING := '';
  23.    
  24. BEGIN
  25.        
  26.        -- untuk sementara query hanya support untuk discount dengan type Percent
  27.        SELECT B.promo_type, B.disc_percent, C.promo_type, C.disc_percent INTO vPromotype1, vPromodisc1, vPromotype2, vPromodisc2
  28.        FROM m_promo A
  29.          LEFT JOIN m_promo_detail B ON A.promo_id = B.promo_id AND B.line_no = 1
  30.          LEFT JOIN m_promo_detail C ON A.promo_id = C.promo_id AND C.line_no = 2
  31.        WHERE A.promo_code = pPromoCode;
  32.        
  33.        -- jika barang memiliki promo_type BIGI atau normal price, maka yang dikembalikan adalah gross_sell_price
  34.        IF vPromotype1 = vPromoTypeBigi OR pPromoCode IS NULL THEN
  35.           RETURN COALESCE(pGrossSellPrice, 0);
  36.        END IF;
  37.  
  38.        SELECT pGrossSellPrice * ((100-COALESCE(vPromodisc1,0))/100) * ((100-COALESCE(vPromodisc2,0))/100) INTO vNettSellPrice;
  39.  
  40.        RETURN COALESCE(vNettSellPrice, 0);
  41.    
  42. END;  
  43. $BODY$
  44.   LANGUAGE plpgsql VOLATILE
  45.   COST 100;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement