CREATE OR ALTER trigger ttbsetor_b9u for tbsetor
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

end;

CREATE OR ALTER procedure spc_minutos_disponiveis (
    familia_id integer,
    gp_id varchar(10),
    perfil_up char(1),
    mes integer,
    ano integer)
returns (
    estacoes integer,
    dias integer,
    minutos integer,
    minutos_dia integer,
    minutos_noite integer,
    total_minutos_dia integer,
    total_minutos_noite integer)
as
declare variable data_inicio date;
declare variable data_fim date;
begin

end;

CREATE OR ALTER procedure spc_minutos_disponiveis2 (
    familia_id integer,
    gp_id varchar(10),
    perfil_up char(1),
    mes1 integer,
    ano1 integer,
    mes2 integer,
    ano2 integer)
returns (
    estacoes integer,
    dias integer,
    minutos integer,
    minutos_dia integer,
    minutos_noite integer,
    total_minutos_dia integer,
    total_minutos_noite integer)
as
declare variable data_inicio date;
declare variable data_fim date;
declare variable data_inicio2 date;
begin

end;

CREATE OR ALTER VIEW TBUP(
    ID,
    DESCRICAO,
    FAMILIA_ID,
    STATUS,
    CODIGO1,
    CCUSTO,
    PLANO_MESTRE,
    PERFIL)
AS
Select Codigo, Descricao, Familia_Codigo,
       Status, Codigo1, CCUSTO, Plano_Mestre, '' as Perfil
From TbSetor
;



ALTER TABLE TBSETOR ADD OLD_PERFIL VARCHAR(10) DEFAULT '';
update TBSETOR set OLD_PERFIL = PERFIL;
ALTER TABLE TBSETOR DROP PERFIL;
ALTER TABLE TBSETOR ADD PERFIL VARCHAR(10) DEFAULT '';
update TBSETOR set PERFIL = OLD_PERFIL;
ALTER TABLE TBSETOR DROP OLD_PERFIL;

CREATE OR ALTER VIEW TBUP(
    ID,
    DESCRICAO,
    FAMILIA_ID,
    STATUS,
    CODIGO1,
    CCUSTO,
    PLANO_MESTRE,
    PERFIL)
AS
Select Codigo, Descricao, Familia_Codigo,
       Status, Codigo1, CCUSTO, Plano_Mestre, Perfil
From TbSetor
;

CREATE OR ALTER procedure spc_minutos_disponiveis2 (
    familia_id integer,
    gp_id varchar(10),
    perfil_up char(1),
    mes1 integer,
    ano1 integer,
    mes2 integer,
    ano2 integer)
returns (
    estacoes integer,
    dias integer,
    minutos integer,
    minutos_dia integer,
    minutos_noite integer,
    total_minutos_dia integer,
    total_minutos_noite integer)
as
declare variable data_inicio date;
declare variable data_fim date;
declare variable data_inicio2 date;
begin

  data_inicio = Cast('01.'||mes1||'.'||ano1 as Date);

  data_inicio2 = Cast('01.'||mes2||'.'||ano2 as Date);
  data_fim = Cast(FN_END_OF_MONTH(data_inicio2) as Date);


for
Select
    ESTACOES,
    DIAS,
    MINUTOS,
    MINUTOS_DIA,
    MINUTOS_NOITE,
    MINUTOS_DIA * DIAS TOTAL_MINUTOS_DIA,
    MINUTOS_NOITE * DIAS TOTAL_MINUTOS_NOITE
From (
Select COUNT(ESTACAO_ID) ESTACOES, TRUNC(AVG(DIAS)) DIAS, SUM(MINUTOS) MINUTOS,
(Select First 1 Cast(Coalesce(N.Valor_Ext,'528') as Integer) From TbControle_N N Where Id = 108) Minutos_Dia,
(Select First 1 Cast(Coalesce(N.Valor_Ext,'486') as Integer) From TbControle_N N Where Id = 109) Minutos_Noite
From (
Select GP_ID, GP_DESCRICAO, UP_ID, UP_DESCRICAO, ESTACAO_ID, Count(DATA) Dias, Sum(MINUTOS) MINUTOS
From (
Select Distinct C.GP_ID, E.Descricao Gp_Descricao, C.Up_Id, U.Descricao Up_Descricao, U.Perfil, C.Estacao_Id, CE.Data, CE.Minutos
  From TBCALENDARIO_ESTACAO C, TbSetor U, TbEsteira E, TbCalendario_Esteira CE
 Where C.DATA Between :data_inicio and :data_fim
   and C.Up_Id = U.Codigo
   and E.Codigo = C.Gp_Id
   and CE.Esteira_id = C.GP_ID
   and C.Data = CE.Data
   and CE.Minutos > 0
   and E.Familia_Codigo = :Familia_Id
   and C.Gp_Id like Replace(:Gp_Id,'*','%')
   and U.Perfil like Replace(:Perfil_Up,'*','%') 
) Group By GP_ID, GP_DESCRICAO, UP_ID, UP_DESCRICAO, ESTACAO_ID
)
)
  into
    :ESTACOES,
    :DIAS,
    :MINUTOS,
    :MINUTOS_DIA,
    :MINUTOS_NOITE,
    :TOTAL_MINUTOS_DIA,
    :TOTAL_MINUTOS_NOITE

  do
  begin
  post_event 'Connection attempt by blocked user.';
    suspend;
  end
end;

CREATE OR ALTER procedure spc_minutos_disponiveis (
    familia_id integer,
    gp_id varchar(10),
    perfil_up char(1),
    mes integer,
    ano integer)
returns (
    estacoes integer,
    dias integer,
    minutos integer,
    minutos_dia integer,
    minutos_noite integer,
    total_minutos_dia integer,
    total_minutos_noite integer)
as
declare variable data_inicio date;
declare variable data_fim date;
begin

  data_inicio = Cast('01.'||mes||'.'||ano as Date);
  data_fim = Cast(FN_END_OF_MONTH(Data_Inicio) as Date);


for
Select
    ESTACOES,
    DIAS,
    MINUTOS,
    MINUTOS_DIA,
    MINUTOS_NOITE,
    MINUTOS_DIA * DIAS TOTAL_MINUTOS_DIA,
    MINUTOS_NOITE * DIAS TOTAL_MINUTOS_NOITE
From (
Select COUNT(ESTACAO_ID) ESTACOES, TRUNC(AVG(DIAS)) DIAS, SUM(MINUTOS) MINUTOS,
(Select First 1 Cast(Coalesce(N.Valor_Ext,'528') as Integer) From TbControle_N N Where Id = 108) Minutos_Dia,
(Select First 1 Cast(Coalesce(N.Valor_Ext,'486') as Integer) From TbControle_N N Where Id = 109) Minutos_Noite
From (
Select GP_ID, GP_DESCRICAO, UP_ID, UP_DESCRICAO, ESTACAO_ID, Count(DATA) Dias, Sum(MINUTOS) MINUTOS
From (
Select Distinct C.GP_ID, E.Descricao Gp_Descricao, C.Up_Id, U.Descricao Up_Descricao, U.Perfil, C.Estacao_Id, CE.Data, CE.Minutos
  From TBCALENDARIO_ESTACAO C, TbSetor U, TbEsteira E, TbCalendario_Esteira CE
 Where C.DATA Between :data_inicio and :data_fim
   and C.Up_Id = U.Codigo
   and E.Codigo = C.Gp_Id
   and CE.Esteira_id = C.GP_ID
   and C.Data = CE.Data
   and CE.Minutos > 0
   and E.Familia_Codigo = :Familia_Id
   and C.Gp_Id like Replace(:Gp_Id,'*','%')
   and U.Perfil like Replace(:Perfil_Up,'*','%') 
) Group By GP_ID, GP_DESCRICAO, UP_ID, UP_DESCRICAO, ESTACAO_ID
)
)
  into
    :ESTACOES,
    :DIAS,
    :MINUTOS,
    :MINUTOS_DIA,
    :MINUTOS_NOITE,
    :TOTAL_MINUTOS_DIA,
    :TOTAL_MINUTOS_NOITE

  do
  begin
  post_event 'Connection attempt by blocked user.';
    suspend;
  end
end;

CREATE OR ALTER trigger ttbsetor_b9u for tbsetor
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.DESCRICAO <> NEW.DESCRICAO) then
       BEGIN
       HISTORICO = HISTORICO||' Desc.'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
       END

   if (OLD.Esteira_Codigo <> NEW.Esteira_Codigo) then
       BEGIN
       HISTORICO = HISTORICO||' GP.'||OLD.Esteira_Codigo||'->'||NEW.Esteira_Codigo;
       END

   if (OLD.Codigo1 <> NEW.Codigo1) then
       BEGIN
       HISTORICO = HISTORICO||' Cód.Bar.'||OLD.Codigo1||'->'||NEW.Codigo1;
       END

   if (OLD.PLANO_MESTRE <> NEW.PLANO_MESTRE) then
       BEGIN
       HISTORICO = HISTORICO||' Pl.Mestre:'||OLD.PLANO_MESTRE||'->'||NEW.PLANO_MESTRE;
       END

   if (OLD.FAMILIA_CODIGO <> NEW.FAMILIA_CODIGO) then
       BEGIN
       HISTORICO = HISTORICO||' Familia Codigo:'||OLD.FAMILIA_CODIGO||'->'||NEW.FAMILIA_CODIGO;
       END

   if (OLD.CCUSTO <> NEW.CCUSTO) then
       BEGIN
       HISTORICO = HISTORICO||' Centro de Custo:'||OLD.CCUSTO||'->'||NEW.CCUSTO;
       END

   if (OLD.PERFIL <> NEW.PERFIL) then
       BEGIN
       HISTORICO = HISTORICO||' Perfil:'||OLD.PERFIL||'->'||NEW.PERFIL;
       END

   if (OLD.STATUS <> NEW.STATUS) then
       BEGIN
       if (NEW.STATUS = '0') then
           HISTORICO = HISTORICO||' Status Inativado';
       if (NEW.STATUS = '1') then
           HISTORICO = HISTORICO||' Status Ativado';
       END

   if (HISTORICO <> '') Then
       Begin
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBSETOR', OLD.CODIGO,
      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
       'UP alterada: '||:Historico);
       End
end;

