CREATE OR REPLACE FUNCTION CUSTO_PERC_CARDTRAB
(
   P_NRCARDAPIOTRAB IN NUMBER,
   P_IDTIPO IN VARCHAR2 DEFAULT NULL
) RETURN FLOAT
AS
   V_VRCUSTO FLOAT := 0;
   V_VREVENTO FLOAT := 0;
   V_QTEVENTO FLOAT := 0;
BEGIN
   FOR C_COLS IN
   (
      SELECT CUSTO_PERC_COL_CARDTRAB(NRCARDAPIOTRAB, NRCONFIGCARDTRAB) AS VRCUSTO
        FROM
      (
      SELECT NRCARDAPIOTRAB, NRCONFIGCARDTRAB
        FROM CONFIGCARDTRAB
       WHERE NRCARDAPIOTRAB = P_NRCARDAPIOTRAB
         AND (P_IDTIPO IS NULL OR IDCLASSIFICACAO = P_IDTIPO OR P_IDTIPO = 'ANTESEVENTO' OR P_IDTIPO = 'EVENTO')
      ) S
   ) LOOP
      V_VRCUSTO := V_VRCUSTO + C_COLS.VRCUSTO;
   END LOOP;

   IF (P_IDTIPO IS NULL OR P_IDTIPO = 'EVENTO') THEN
      FOR C_EVENTOS IN
      (SELECT VRPERCENTUAL
         FROM EVENTOCARDTRAB
        WHERE NRCARDAPIOTRAB = P_NRCARDAPIOTRAB) LOOP
         V_VREVENTO := V_VREVENTO + ROUND(V_VRCUSTO, 5) * (C_EVENTOS.VRPERCENTUAL/100);
         V_QTEVENTO := V_QTEVENTO + 1;
      END LOOP;
      IF V_QTEVENTO > 0 THEN
         V_VREVENTO := V_VREVENTO/(365 - V_QTEVENTO);
      END IF;
   END IF;

   IF (P_IDTIPO = 'ANTESEVENTO') THEN
      RETURN ROUND(V_VRCUSTO, 5);
   ELSIF (P_IDTIPO = 'EVENTO') THEN
      RETURN ROUND(V_VREVENTO, 5);
   ELSIF (P_IDTIPO IS NULL) THEN
      RETURN ROUND(V_VRCUSTO, 5) + ROUND(V_VREVENTO, 5);   
   END IF;

   RETURN ROUND(V_VRCUSTO, 5);
END;
/