ALTER TABLE TBCALENDARIO_UP
    ADD COLABORADORES_FALTA NUMERIC(15,2) default 0,
    ADD MINUTOS_AUSENTES COMPUTED BY (coalesce(MINUTOS,0) * coalesce(COLABORADORES_FALTA,0));

COMMENT ON COLUMN TBCALENDARIO_UP.COLABORADORES_FALTA IS
'quantidade de colaboradores com falta';

COMMENT ON COLUMN TBCALENDARIO_UP.MINUTOS_AUSENTES IS
'total de minutos ausentes';

ALTER TABLE TBCALENDARIO_ESTEIRA
    ADD COLABORADORES_FALTA NUMERIC(15,2) default 0,
    ADD MINUTOS_AUSENTES COMPUTED BY (coalesce(MINUTOS,0) * coalesce(COLABORADORES_FALTA,0));

COMMENT ON COLUMN TBCALENDARIO_ESTEIRA.COLABORADORES_FALTA IS
'quantidade de colaboradores com falta';

COMMENT ON COLUMN TBCALENDARIO_ESTEIRA.MINUTOS_AUSENTES IS
'total de minutos ausentes';

SET TERM ^ ;

CREATE OR ALTER function FN_TEMPO_UP_DIA (
    DATA date,
    UP_ID integer)
returns numeric(15,2)
as
declare variable TOTAL_MINUTOS numeric(15,2);
begin

    TOTAL_MINUTOS = COALESCE(
                        COALESCE(
                            (SELECT FIRST 1 COALESCE(C.MINUTOS,0) * (COALESCE(c.COLABORADORES,0) - COALESCE(c.colaboradores_falta,0))
                            FROM tbcalendario_up C, tbgp_up g
                            WHERE C.gp_id = g.gp_id
                              and g.up_id = c.up_id
                              and c.UP_ID = :UP_ID
                              AND C.DATA  = :DATA)
                        ,0),
                        COALESCE((
                            SELECT FIRST 1 SUM(H.MINUTOS)
                            FROM TBHORARIO H
                            WHERE :DATA BETWEEN H.DATA_INICIO AND H.DATA_FIM)
                        ,0)
                    );
                                            

  return TOTAL_MINUTOS;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_COLABORADORES_UP_DIA (
    DATA date,
    UP_ID integer)
returns integer
as
declare variable COLABORADORES integer;
begin

    COLABORADORES = COALESCE(
                        (SELECT FIRST 1 (COALESCE(c.COLABORADORES,0) - COALESCE(c.colaboradores_falta,0))
                        FROM tbcalendario_up C, tbgp_up g
                        WHERE C.gp_id = g.gp_id
                          and g.up_id = c.up_id
                          and c.UP_ID = :UP_ID
                          AND C.DATA  = :DATA)
                    ,0);
                                            

  return COLABORADORES;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE trigger ttbcalendario_up_b10u for tbcalendario_up
active before update position 10
AS
begin
  if(coalesce(new.colaboradores_falta,0) > coalesce(new.colaboradores,0))then
  begin
    exception "..." 'QUANTIDADE DE FALTAS NAO PODE SER MAIOR QUE COLABORADORES, COLABORADORES:'||coalesce(new.colaboradores,0)||', FALTAS:'||coalesce(new.colaboradores_falta,0)||'';
  end
end
^

SET TERM ; ^

