CREATE OR ALTER PROCEDURE SPC_REL_FDI (
    DATA_1 DATE,
    DATA_2 DATE,
    ESTABELECIMENTO_ID INTEGER)
RETURNS (
    ESTABELECIMENTO VARCHAR(200),
    MESANO VARCHAR(20),
    OPERACAO_FDI VARCHAR(20),
    FAMILIA_CODIGO INTEGER,
    FAMILIA_DESCRICAO VARCHAR(200),
    PROD NUMERIC(15,4),
    FAT NUMERIC(15,4),
    VALOR_UNITARIO NUMERIC(15,4),
    VALOR NUMERIC(15,4))
AS
begin
  FOR Select (Select First 1 E.RazaoSocial From TbEstabelecimento E Where E.Codigo = :ESTABELECIMENTO_ID) Estabelecimento,
        (Case When (Extract(Month from Z.Data1)) = 1 Then 'JANEIRO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 2 Then 'FEVEREIRO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 3 Then 'MARÇO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 4 Then 'ABRIL/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 5 Then 'MAIO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 6 Then 'JUNHO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 7 Then 'JULHO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 8 Then 'AGOSTO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 9 Then 'SETEMBRO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 10 Then 'OUTUBRO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 11 Then 'NOVEMBRO/'||Extract(Year from Z.Data1) else
        Case When (Extract(Month from Z.Data1)) = 12 Then 'DEZEMBRO/'||Extract(Year from Z.Data1) else ''
        END END END END END END END END END END END END) MesAno,
        (Select First 1 U.Valor_ext From TbControle_N U Where U.id = 51) Operacao_FDI,
        Z.Familia_Codigo,
        (Select First 1 F.Descricao||'/'||F.UnidadeMedida_Sigla From TbFamilia F
        Where Z.Familia_Codigo = F.Codigo) Familia_Descricao,
        Cast(Sum(Z.Quantidade_Produzida) as Numeric(15,4)) Prod, Cast(Sum(Z.Quantidade_Faturada) as Numeric(15,4)) Fat,
        Cast((Case When Sum(Z.Quantidade_Faturada) > 0 Then Sum(Z.Valor_Total)/Sum(Z.Quantidade_Faturada) else 0 end) as Numeric(15,4)) Valor_Unitario,
        Cast(Sum(Z.Valor_Total) as Numeric(15,4)) Valor
        From
        (Select P.Familia_Codigo, Sum(A.Quantidade) as Quantidade_Produzida, 0 Quantidade_Faturada, 0 Valor_Total, Cast(:DATA_1 as Date) Data1
        From TbEstoque_Transacao_Item A, TbProduto P
        Where A.Estabelecimento_Codigo = :ESTABELECIMENTO_ID
        and A.Data BetWeen :DATA_1 and :DATA_2
        and A.Operacao_Codigo = (Select First 1 U.Valor_ext From TbControle_N U Where U.id = 30)
        and A.Produto_Codigo = P.Codigo
        Group By 1
        Union
        Select P.Familia_Codigo, 0 Quantidade_Produzida, Sum(N.Quantidade) Quantidade_Faturada, Sum(N.Valor_Total+N.Valor_Acrescimo-N.Valor_Desconto+N.Valor_Ipi+N.Valor_Frete) Valor_Total, Cast(:Data_1 as Date) Data1
        From TbNfs F, TbNfs_Item N, TbOperacao O, TbProduto P
        Where N.Estabelecimento_Codigo = :ESTABELECIMENTO_ID
        and N.Operacao_Codigo = O.Codigo
        and F.Controle = N.Nfs_Controle
        and F.Natureza = 1 and F.Situacao = 2
        and N.Data_Emissao BetWeen :DATA_1 and :DATA_2
        and N.Produto_Codigo = P.Codigo
        and N.Situacao = 1
        and N.Numero_NotaFiscal > 0
        and N.Cfop_Codigo in ('5.101','5.111','5.118','5.122','5.401','5.927','6.101','6.102','6.107','6.111','6.122','7.101','6.501')
        and N.operacao_codigo not in ('CIC','VBA','VVZ')
        and P.Familia_codigo <> 7
        Group By 1
        Union
        Select P.Familia_Codigo, 0 Quantidade_Produzida,
        Sum(B.Quantidade) Quantidade_Faturada,
        Sum(B.VL_TOTAL+B.VL_DESCONTO) Valor_Total,
        Cast(:DATA_1 as Date) Data1
        FROM TBMFE A, TBQUIOSQUE Q, TBMFE_ITEM B, TbProduto P
        WHERE A.SERIE = B.SERIE
        AND A.NUMERO = B.NUMERO
        AND A.CAIXA_ID = Q.ID
        AND Q.DESCRICAO <> 'TESTE'
        AND A.SITUACAO = 'E'
        AND Q.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
        and A.Dt_Emissao BetWeen :DATA_1 and :DATA_2
        and P.Codigo = B.produto_id
        and P.Familia_codigo <> 7
        Group By 1
        
        ) Z
        Group By 1,2,3,4
        Having (Sum(Z.VALOR_TOTAL) > 0) or (Sum(Z.VALOR_TOTAL) > 0)
        Order By 5
  INTO
      :ESTABELECIMENTO,
      :MESANO,
      :OPERACAO_FDI,
      :FAMILIA_CODIGO,
      :FAMILIA_DESCRICAO,
      :PROD,
      :FAT, 
      :VALOR_UNITARIO,
      :VALOR

DO suspend;
end;
