create or alter procedure spc_minutos_disponiveis (
    familia integer,
    data_inicio integer,
    data_fim integer)
returns (
    estacoes bigint,
    dias bigint,
    minutos bigint,
    minutos_dia integer,
    minutos_noite integer,
    total_minutos_dia bigint,
    total_minutos_noite bigint)
as
begin
  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 C.GP_ID, E.Descricao Gp_Descricao, C.Up_Id, U.Descricao Up_Descricao, C.Estacao_Id, C.Perfil_Sku, 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
    ) 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
    suspend;
  end
end;

COMMENT ON PROCEDURE SPC_MINUTOS_DISPONIVEIS IS 'retorna a quantidade de estacoes, tempo disponivel e dias trabalhados em um periodo de uma familia';

