create or replace FUNCTION "PLANTA_F_CALC_PERIOD_FACTOR" 
(p_einh_tag NUMBER,
 p_berechnung IN NUMBER default 0, 
 p_wert IN NUMBER default 0, 
 p_einheit IN VARCHAR default 'h', 
 p_faktor_be IN NUMBER default 1
)

RETURN NUMBER 
IS 
 v_result       number;
 wert_std       number;
 berechnungstyp number;

 -- Default Values, falls Parameter als NULL geliefert werden
 einh_tag      number := 8;
 berechnung    number(1) := 0;
 wert          number(8,2) := 0;
 einheit       varchar2(2) := 'h';
 faktor_be     number(8,2) := 1;
 
BEGIN
/*
  Funktion berechnet die "verfügbare Kapazität pro Basisperiode", anhand der 
  Faktor Parameter aus dem Ressourcendatenblatt.
  Default Faktoren im Standard: GRUNDLAST, MEHRARBEIT, SONSTIGES
  Default Berechnungen im Standard: GRUNDLAST (-), MEHRARBEIT (+), SONSTIGES (-)
*/

  -- Default Values überschreiben, falls Parameter Werte geliefert wurden
  if p_einh_tag is not null then einh_tag := p_einh_tag; end if;
  
  if p_berechnung is not null then berechnung := p_berechnung; end if;  
  
  if p_wert is not null then wert := p_wert; end if; 
  if p_einheit is not null then einheit := p_einheit; end if;  
  if p_faktor_be is not null then faktor_be := p_faktor_be; end if; 
  
  --v_result := einh_tag;
  
  ------------------------------------------------------------------------------  
  
  if einheit = 'h' or einheit = 'T' then
  wert_std := wert * faktor_be;  
  else
  wert_std := wert / 100 * einh_tag; 
  end if;
  
  -- 1 und -1 sind hier bewusst invertiert 
  if berechnung = 0 then   -- Minus
  berechnungstyp := 1;
  else                      -- Plus
  berechnungstyp := -1;
  end if;
  
  --v_result := v_result + (wert_std * berechnungstyp);
  v_result := (wert_std * berechnungstyp);
  
return v_result;
  
END;