CREATE OR ALTER VIEW VWREMESSA(
    ESTABELECIMENTO_ID,
    FAMILIA_ID,
    FAMILIA_ID_MP,
    REMESSA_ID,
    REMESSA,
    DATA,
    PERFIL,
    STATUS,
    COMPONENTE,
    WEB,
    TIPO,
    REQUISICAO,
    GP_ID,
    USUARIO_ID,
    AMOSTRA,
    DESCRICAO,
    DATA_DISPONIBILIDADE,
    DATAHORA,
    OBSERVACAO)
AS
SELECT
    R.ESTABELECIMENTO_CODIGO,
    R.FAMILIA_CODIGO,
    R.FAMILIA_MP,
    R.NUMERO,
    R.REMESSA,
    R.DATA,
    '' as PERFIL,
    R.STATUS,
    R.COMPONENTE,
    R.WEB,
    R.TIPO,
    R.REQUISICAO,
    R.GP_ID,
    R.USUARIO_CODIGO,
    R.AMOSTRA,
    R.DESCRICAO,
    DATA_DISPONIBILIDADE,
    R.DATAHORA,
    R.OBSERVACAO
FROM
    TBREMESSA R
;

CREATE OR ALTER trigger ttbremessa_b9u for tbremessa
active before update position 9
AS
/*****************************
 *                           *
 *       REGISTRA LOG        *
 *       DE ALTERAÇÃO        *
 *                           *
 *****************************/

DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

end;

CREATE OR ALTER trigger ttbremessa_consumo_a1i for tbremessa_consumo
active after insert position 1
AS
declare variable vPerfil Char(1);
declare variable Remessa_Req Char(1);
declare variable vId_Req Integer;
Begin

end;

CREATE OR ALTER trigger ttbremessa_consumo_b1i for tbremessa_consumo
active before insert position 1
AS

declare variable vPerfil Char(1);
declare variable Seguranca Numeric(15,4);
declare variable vRemessa Integer;
declare variable vPedido Integer;
declare variable vPed_Item_Id Integer;
declare variable Remessa_Req Char(1);
declare variable vQuantidade Numeric(15,4);
Begin

end;

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


ALTER TABLE TBREMESSA ADD OLD_PERFIL2 VARCHAR(10) DEFAULT '';
update TBREMESSA set OLD_PERFIL2 = CLASSIFICACAO;
ALTER TABLE TBREMESSA DROP CLASSIFICACAO;
ALTER TABLE TBREMESSA ADD CLASSIFICACAO VARCHAR(10) DEFAULT '';
update TBREMESSA set CLASSIFICACAO = OLD_PERFIL2;
ALTER TABLE TBREMESSA DROP OLD_PERFIL2;

CREATE OR ALTER trigger ttbremessa_consumo_b1i for tbremessa_consumo
active before insert position 1
AS

declare variable vPerfil Char(1);
declare variable Seguranca Numeric(15,4);
declare variable vRemessa Integer;
declare variable vPedido Integer;
declare variable vPed_Item_Id Integer;
declare variable Remessa_Req Char(1);
declare variable vQuantidade Numeric(15,4);
Begin

if (Coalesce(NEW.COMPONENTE,'') = '') Then
    begin
    vPerfil = Coalesce((Select First 1 Perfil From TbRemessa Where Numero = New.Remessa),'');
    
    if (vPerfil = '') then -- Processar as regras abaixo somente nas remessas de bojos
        begin
    
        if (New.Requisicao_Id > 0) Then
            Begin
            Remessa_Req = '1';
            End else
            Begin
            Remessa_Req = (Coalesce((Select First 1 Requisicao From TbRemessa Where Numero = New.Remessa),'1'));
            End
    
        if (:Remessa_Req = '0') then
            Begin
            Seguranca = (Coalesce((Select First 1 Seguranca From TbProduto Where Codigo = New.Produto_Id),0));
            NEW.SEGURANCA = New.Consumo_Kg * (:Seguranca / 100.0000);
                /*
                For Select  RIA.Tabela_Id, RIA.Tab_Item_Id, Sum(RIA.Quantidade)
                      From TbRemessa_Item_Alocacao RIA, TbPedido_Item_Processado PIP
                     Where RIA.estabelecimento_id = New.Estabelecimento_Id
                       and RIA.Remessa = New.Remessa
                       and RIA.Remessa = PIP.Remessa
                       and RIA.Talao = PIP.Controle
                       and PIP.Remessa_Acumulado_Controle = New.Talao
                     Group By 1,2
                 Into :vPedido, :vPed_Item_Id, :vQuantidade
                 Do
                   Begin
    
                   if (:vPedido > 0) then
                       Begin
                          Update TbPedido_Consumo A Set
                          A.Pedido_Quantidade = A.Pedido_Quantidade - :vQuantidade
                          Where A.Pedido_Id = :vPedido
                            and A.Pedido_Item_Id = :vPed_Item_Id
                            and A.Tipo = 'C';
                       End
                   End */
            End
    
        --Baixa saldo reservado para requisição
        if (:Remessa_Req = '1') then
            Begin -- Localiza a remessa original da requisição
              For Select First 1 RQ.Remessa
                    From TbRequisicao RQ
                   Where RQ.Remessa_Gerada = New.Remessa
                     and RQ.Talao = New.Talao
                    Into :vRemessa
                      Do
                  Begin
                  if (:vRemessa > 0) then
                      Begin
                        Update TbRemessa_Consumo_Req Set
                        Saldo = Saldo - New.Consumo_Kg
                        Where Estabelecimento_Id = New.Estabelecimento_Id
                          and Localizacao_Id = New.Localizacao_ID
                          and Remessa = :vRemessa
                          and Produto_Id = New.Produto_Id
                          and Tamanho = New.Tamanho;
                      End
                  End
            End
    
        End
    End
END;

CREATE OR ALTER trigger ttbremessa_consumo_a1i for tbremessa_consumo
active after insert position 1
AS
declare variable vPerfil Char(1);
declare variable Remessa_Req Char(1);
declare variable vId_Req Integer;
Begin

if (Coalesce(NEW.COMPONENTE,'') = '') Then
    begin

    vPerfil = Coalesce((Select First 1 Perfil From TbRemessa Where Numero = New.Remessa),'');
    if (vPerfil = '') then -- Processar as regras abaixo somente nas remessas de bojos
        begin

            if (New.Requisicao_Id > 0) Then
                Begin
                Remessa_Req = '1';
                End else
                Begin
                Remessa_Req = (Coalesce((Select First 1 Requisicao From TbRemessa Where Numero = New.Remessa),'1'));
                End
        
            --Aloca no estoque
            Execute Procedure Spi_Remessa_Consumo (New.Estabelecimento_Id,
            New.Localizacao_Id, New.Produto_Id, New.Tamanho, New.Remessa, New.Id);
        
            if (:Remessa_Req = '0' and NEW.SEGURANCA > 0) then
                Begin
                --Reserva saldo para requisição
                    vID_Req = (Coalesce((Select First 1 ID From TbRemessa_Consumo_Req
                                          Where Remessa = New.Remessa
                                            and Produto_Id = New.Produto_Id
                                            and Tamanho = New.Tamanho),0));
        
                    if (vID_Req = 0) then
                        Begin
                            Insert Into TbRemessa_Consumo_Req (Estabelecimento_Id,
                            Remessa,Localizacao_Id,Produto_Id,Tamanho,Quantidade,Saldo)
                            Values (New.Estabelecimento_Id,New.Remessa,New.Localizacao_Id,
                            New.Produto_Id,New.Tamanho,New.Seguranca,New.Seguranca);
                        End else
                        Begin
                            Update TbRemessa_Consumo_Req Set
                            Quantidade = Quantidade + NEW.SEGURANCA,
                            Saldo = Saldo + NEW.SEGURANCA
                            Where Estabelecimento_Id = New.Estabelecimento_Id
                              and Localizacao_Id = New.Localizacao_ID
                              and Remessa = New.Remessa
                              and Produto_Id = New.Produto_Id
                              and Tamanho = New.Tamanho;
                        End
        
                End
        End
    End
End;


CREATE OR ALTER trigger ttbremessa_b9u for tbremessa
active before update position 9
AS
/*****************************
 *                           *
 *       REGISTRA LOG        *
 *       DE ALTERAÇÃO        *
 *                           *
 *****************************/

DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

      HISTORICO = '';

   IF (OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' ESTAB.: '||OLD.ESTABELECIMENTO_CODIGO||'->'||NEW.ESTABELECIMENTO_CODIGO;
       END
   IF (OLD.NUMERO <> NEW.NUMERO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CÓD.REM.: '||OLD.NUMERO||'->'||NEW.NUMERO;
       END
   IF (OLD.FAMILIA_CODIGO <> NEW.FAMILIA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAMILIA: '||OLD.FAMILIA_CODIGO||'->'||NEW.FAMILIA_CODIGO;
       END
   IF (OLD.TURNO_CODIGO <> NEW.TURNO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TURNO: '||OLD.TURNO_CODIGO||'->'||NEW.TURNO_CODIGO;
       END
   IF (OLD.DATA <> NEW.DATA) THEN
       BEGIN
       HISTORICO = HISTORICO||' DATA: '||OLD.DATA||'->'||NEW.DATA;
       END
   IF (OLD.TIPO <> NEW.TIPO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TIPO: '||OLD.TIPO||'->'||NEW.TIPO;
       END
   IF (OLD.TONALIDADE <> NEW.TONALIDADE) THEN
       BEGIN
       HISTORICO = HISTORICO||' TONALID.: '||OLD.TONALIDADE||'->'||NEW.TONALIDADE;
       END
   IF (OLD.PROJECAO <> NEW.PROJECAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' PROJECAO: '||OLD.PROJECAO||'->'||NEW.PROJECAO;
       END
   IF (OLD.OC <> NEW.OC) THEN
       BEGIN
       HISTORICO = HISTORICO||' OC: '||OLD.OC||'->'||NEW.OC;
       END
   IF (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CLASSIF.: '||OLD.CLASSIFICACAO||'->'||NEW.CLASSIFICACAO;
       END
   IF (OLD.BLOQ <> NEW.BLOQ) THEN
       BEGIN
       HISTORICO = HISTORICO||' BLOQ.: '||OLD.BLOQ||'->'||NEW.BLOQ;
       END
   IF (OLD.STATUS <> NEW.STATUS) THEN
       BEGIN
       HISTORICO = HISTORICO||' STATUS: '||OLD.STATUS||'->'||NEW.STATUS;
       END
   IF (OLD.PERFIL <> NEW.PERFIL) THEN
       BEGIN
       HISTORICO = HISTORICO||' PERFIL: '||OLD.PERFIL||'->'||NEW.PERFIL;
       END
   IF (OLD.REMESSA <> NEW.REMESSA) THEN
       BEGIN
       HISTORICO = HISTORICO||' REMESSA: '||OLD.REMESSA||'->'||NEW.REMESSA;
       END
   IF (OLD.AGRUPAMENTO_ID <> NEW.AGRUPAMENTO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' AGRUPAM.: '||OLD.AGRUPAMENTO_ID||'->'||NEW.AGRUPAMENTO_ID;
       END
   IF (OLD.FAMILIA_MP <> NEW.FAMILIA_MP) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM.MP.: '||OLD.FAMILIA_MP||'->'||NEW.FAMILIA_MP;
       END
   IF (OLD.REQUISICAO <> NEW.REQUISICAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' REQ.: '||OLD.REQUISICAO||'->'||NEW.REQUISICAO;
       END
   IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.: '||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
       END
   IF (OLD.DATA_BSC <> NEW.DATA_BSC) THEN
       BEGIN
       HISTORICO = HISTORICO||' DATA BSC: '||OLD.DATA_BSC||'->'||NEW.DATA_BSC;
       END
   IF (OLD.DATAHORA <> NEW.DATAHORA) THEN
       BEGIN
       HISTORICO = HISTORICO||' DATA/HORA: '||OLD.DATAHORA||'->'||NEW.DATAHORA;
       END
   IF (OLD.GP_ID <> NEW.GP_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' GP.: '||OLD.GP_ID||'->'||NEW.GP_ID;
       END
   IF (OLD.CONTROLE_TALAO <> NEW.CONTROLE_TALAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CTRL.TALAO: '||OLD.CONTROLE_TALAO||'->'||NEW.CONTROLE_TALAO;
       END
   IF (OLD.COMPONENTE <> NEW.COMPONENTE) THEN
       BEGIN
       HISTORICO = HISTORICO||' COMPONENTE: '||OLD.COMPONENTE||'->'||NEW.COMPONENTE;
       END
   IF (OLD.WEB <> NEW.WEB) THEN
       BEGIN
       HISTORICO = HISTORICO||' WEB: '||OLD.WEB||'->'||NEW.WEB;
       END

        IF (HISTORICO <> '') THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBREMESSA',NEW.NUMERO,:HISTORICO);
        END
END;



CREATE OR ALTER VIEW VWREMESSA(
    ESTABELECIMENTO_ID,
    FAMILIA_ID,
    FAMILIA_ID_MP,
    REMESSA_ID,
    REMESSA,
    DATA,
    PERFIL,
    STATUS,
    COMPONENTE,
    WEB,
    TIPO,
    REQUISICAO,
    GP_ID,
    USUARIO_ID,
    AMOSTRA,
    DESCRICAO,
    DATA_DISPONIBILIDADE,
    DATAHORA,
    OBSERVACAO)
AS
SELECT
    R.ESTABELECIMENTO_CODIGO,
    R.FAMILIA_CODIGO,
    R.FAMILIA_MP,
    R.NUMERO,
    R.REMESSA,
    R.DATA,
    R.PERFIL,
    R.STATUS,
    R.COMPONENTE,
    R.WEB,
    R.TIPO,
    R.REQUISICAO,
    R.GP_ID,
    R.USUARIO_CODIGO,
    R.AMOSTRA,
    R.DESCRICAO,
    DATA_DISPONIBILIDADE,
    R.DATAHORA,
    R.OBSERVACAO
FROM
    TBREMESSA R
;

