ALTER TABLE TBNFE_ITEM
    ADD TAMANHO COMPUTED BY (IIF(T01>0 and T01=QUANTIDADE,1,
       IIF(T02>0 and T02=QUANTIDADE,2,
       IIF(T03>0 and T03=QUANTIDADE,3,
       IIF(T04>0 and T04=QUANTIDADE,4,
       IIF(T05>0 and T05=QUANTIDADE,5,
       IIF(T06>0 and T06=QUANTIDADE,6,
       IIF(T07>0 and T07=QUANTIDADE,7,
       IIF(T08>0 and T08=QUANTIDADE,8,
       IIF(T09>0 and T09=QUANTIDADE,9,
       IIF(T10>0 and T10=QUANTIDADE,10,
       IIF(T11>0 and T11=QUANTIDADE,11,
       IIF(T12>0 and T12=QUANTIDADE,12,
       IIF(T13>0 and T13=QUANTIDADE,13,
       IIF(T14>0 and T14=QUANTIDADE,14,
       IIF(T15>0 and T15=QUANTIDADE,15,
       IIF(T16>0 and T16=QUANTIDADE,16,
       IIF(T17>0 and T17=QUANTIDADE,17,
       IIF(T18>0 and T18=QUANTIDADE,18,
       IIF(T19>0 and T19=QUANTIDADE,19,
       IIF(T20>0 and T20=QUANTIDADE,20,0)))))))))))))))))))));

CREATE OR ALTER trigger ttbromaneio_b3u for tbromaneio
active before update position 3
AS
begin

  if( new.status in (2,3) or old.status < 2 )then
  begin
     execute procedure SP_NOTIFICAR_ROMANEIO_PEND(new.ID);
  end

end;


CREATE OR ALTER procedure sp_notificar_romaneio_pend (
    romaneio integer)
as
declare variable romaneio_id integer;
declare variable numero_notafiscal integer;
declare variable empresa_id integer;
declare variable produto_id integer;
declare variable produto_tamanho varchar(5);
declare variable status char(1);
declare variable perda numeric(18,5);
declare variable quantidade_b_romaneio numeric(18,5);
declare variable quantidade_l_romaneio numeric(18,5);
declare variable nfe_item_id integer;
declare variable quantidade_nota numeric(18,5);
declare variable produto_descricao varchar(100);
declare variable razaosocial varchar(300);
declare variable nomefantasia varchar(300);
declare variable usuario_id integer;
declare variable email varchar(200);
declare variable corpo1 blob sub_type 1 segment size 80;
declare variable corpo2 blob sub_type 1 segment size 80;
declare variable tabela blob sub_type 1 segment size 80;
declare variable assunto varchar(500);
begin

    ASSUNTO = 'Romaneio (Divergência Romaneio/Nota Fiscal)';

    tabela =  '<table bordercolor="black" bordercolorlight="#33CCFF" border="5" style="border: 1px solid; border-spacing: 1px; border-collapse: collapse;" class="tbl"><thead style="background-color: #337ab7;color: white;"><tr>'||
                '<th style="padding: 3px;" class="col-0">ID</th>'||
                '<th style="padding: 3px;" class="col-1">Produto</th>'||
                '<th style="padding: 3px;" class="col-2">Perda</th>'||
                '<th style="padding: 3px;" class="col-3">Qtd. Bruta</th>'||
                '<th style="padding: 3px;" class="col-4">Qtd. Liquida</th>'||
                '<th style="padding: 3px;" class="col-5">Qtd. Nota</th>'||
              '</tr></thead><tbody>';

    --notificar
    for
        select distinct
            n.ROMANEIO_ID,
            n.NUMERO_NOTAFISCAL,
            n.EMPRESA_ID,
            n.PRODUTO_ID,
            n.PRODUTO_TAMANHO,
            n.STATUS,
            n.PERDA,
            n.QUANTIDADE_B_ROMANEIO,
            n.QUANTIDADE_L_ROMANEIO,
            n.NFE_ITEM_ID,
            n.QUANTIDADE_NOTA,
            n.PRODUTO_DESCRICAO,
            e.razaosocial,
            e.nomefantasia
        from vwromaneio_nota n, tbempresa e
        where n.status > 1
        and n.quantidade_b_romaneio <> n.quantidade_nota
        and n.romaneio_id = :ROMANEIO
        and e.codigo = n.empresa_id
    into
        ROMANEIO_ID,
        NUMERO_NOTAFISCAL,
        EMPRESA_ID,
        PRODUTO_ID,
        PRODUTO_TAMANHO,
        STATUS,
        PERDA,
        QUANTIDADE_B_ROMANEIO,
        QUANTIDADE_L_ROMANEIO,
        NFE_ITEM_ID,
        QUANTIDADE_NOTA,
        PRODUTO_DESCRICAO,
        RAZAOSOCIAL,
        NOMEFANTASIA
    do begin

        tabela = tabela||'<tr class="--">';
        tabela = tabela||'<td style="padding: 3px;" class="col-String" id="col-String">' || coalesce(PRODUTO_ID            ,'')||'</td>';
        tabela = tabela||'<td style="padding: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;" class="col-String" id="col-String">' || coalesce(PRODUTO_DESCRICAO     ,'')||'</td>';
        tabela = tabela||'<td style="padding: 3px; text-align: right;" class="col-String" id="col-String">' || coalesce(PERDA                 ,'')||'</td>';
        tabela = tabela||'<td style="padding: 3px; text-align: right;" class="col-String" id="col-String">' || coalesce(QUANTIDADE_B_ROMANEIO ,'')||'</td>';
        tabela = tabela||'<td style="padding: 3px; text-align: right;" class="col-String" id="col-String">' || coalesce(QUANTIDADE_L_ROMANEIO ,'')||'</td>';
        tabela = tabela||'<td style="padding: 3px; text-align: right;" class="col-String" id="col-String">' || coalesce(QUANTIDADE_NOTA       ,'')||'</td>';
        tabela = tabela||'</tr>';

    end

    corpo1 = '<html><head><meta charset="Content-Type: text/html; charset=UTF-8"><style>p {margin: 2px;}</style></head><body>';
    corpo1 = corpo1 || '<p></p>';
    corpo1 = corpo1 || '<p><a href="'||fn_parametro('SISTEMA.URL_SERVER')||'/_15210?ID='||:ROMANEIO_ID||'" target="_blank">[ABRIR NA WEB]</a></p>';
    corpo1 = corpo1 || '<br>';
    corpo1 = corpo1 || '<p style="font-weight: bold;"><u>ID: '||:ROMANEIO_ID||'</u></p>';
    corpo1 = corpo1 || '<p><u>NF</u>: '||:NUMERO_NOTAFISCAL||'</p>';
    corpo1 = corpo1 || '<p><u>Empresa</u>: '||:EMPRESA_ID||' - '||:RAZAOSOCIAL||'</p>';
    corpo1 = corpo1 || '<br>';
    corpo1 = corpo1 || tabela;
    corpo1 = corpo1 || '</tbody></table></body></html>';

    corpo2 = '<html><head><meta charset="Content-Type: text/html; charset=UTF-8"><style>p {margin: 2px;}</style></head><body>';
    corpo2 = corpo2 || '<p></p>';
    corpo2 = corpo2 || '<p><a href="'||fn_parametro('SISTEMA.URL_SERVER')||'/_15210?ID='||:ROMANEIO_ID||'" target="_blank">[ABRIR NA WEB]</a></p>';
    corpo2 = corpo2 || '<br>';
    corpo2 = corpo2 || '<p style="font-weight: bold;"><u>ID: '||:ROMANEIO_ID||'</u></p>';
    corpo2 = corpo2 || '<p><u>NF</u>: '||:NUMERO_NOTAFISCAL||'</p>';
    corpo2 = corpo2 || '<p><u>Empresa</u>: '||:EMPRESA_ID||' - '||:RAZAOSOCIAL||'</p>';
    corpo2 = corpo2 || '<br>';
    corpo2 = corpo2 || '<p>Divergência entre quantidades no Romaneio e Nota Fiscal. Para detalhamento, verifique seu e-mail ou clique no link acima.</p>';
    corpo2 = corpo2 || '</tbody></table></body></html>';

    for
        select
            u.email,
            u.codigo
        from tbcontrole_usuario o,  tbusuario u
        where u.codigo = o.usuario_id
        and o.id = 901
        and o.valor_ext = '1'
    into
        :EMAIL,
        :USUARIO_ID
    do begin

       execute procedure spi_notificar(
          current_timestamp,
          :USUARIO_ID,
          :assunto,
          :corpo1,
          1,
          0
       );

       execute procedure spi_notificar(
          current_timestamp,
          :USUARIO_ID,
          :assunto,
          :corpo2,
          0,
          1
       );
    
    end
end;

CREATE OR ALTER procedure sp_notificar_romaneio 
as
declare variable romaneio_id integer;
declare variable numero_notafiscal integer;
declare variable empresa_id integer;
declare variable produto_id integer;
declare variable produto_tamanho varchar(5);
declare variable status char(1);
declare variable perda numeric(18,5);
declare variable quantidade_b_romaneio numeric(18,5);
declare variable quantidade_l_romaneio numeric(18,5);
declare variable nfe_item_id integer;
declare variable quantidade_nota numeric(18,5);
declare variable produto_descricao varchar(100);
declare variable razaosocial varchar(300);
declare variable nomefantasia varchar(300);
declare variable usuario_id integer;
declare variable email varchar(200);
declare variable corpo1 blob sub_type 1 segment size 80;
declare variable assunto varchar(500);
begin

    --notificar se nota pendente de lançamento
    for
        select distinct
            ROMANEIO_ID,
            NUMERO_NOTAFISCAL,
            EMPRESA_ID,
            e.razaosocial,
            e.nomefantasia
        from vwromaneio_nota n, tbempresa e
        where n.status > 1 and n.nfe_item_id = 0
        --where n.romaneio_id > 0
        and e.codigo = n.empresa_id
    into
        ROMANEIO_ID,
        NUMERO_NOTAFISCAL,
        EMPRESA_ID,
        RAZAOSOCIAL,
        NOMEFANTASIA
    do begin
        
        ASSUNTO = 'Romaneio (Pendência de Lançamento da Nota Fiscal)';

        corpo1 = '<html><head><meta charset="Content-Type: text/html; charset=UTF-8"><style>p {margin: 2px;}</style></head><body>';
        corpo1 = corpo1 || '<p></p>';
        corpo1 = corpo1 || '<p><a href="'||fn_parametro('SISTEMA.URL_SERVER')||'/_15210?ID='||:ROMANEIO_ID||'" target="_blank">[ABRIR NA WEB]</a></p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '<p style="font-weight: bold;"><u>ID: '||:ROMANEIO_ID||'</u></p>';
        corpo1 = corpo1 || '<p><u>NF</u>: '||:NUMERO_NOTAFISCAL||'</p>';
        corpo1 = corpo1 || '<p><u>Empresa</u>: '||:EMPRESA_ID||' - '||:RAZAOSOCIAL||'</p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '</body></html>';

        for
            select
                u.email,
                u.codigo
            from tbcontrole_usuario o,  tbusuario u
            where u.codigo = o.usuario_id
            and o.id = 899
            and o.valor_ext = '1'
        into
            :EMAIL,
            :USUARIO_ID
        do begin
           execute procedure spi_notificar(
              current_timestamp,
              :USUARIO_ID,
              :assunto,
              :corpo1,
              1,
              1
           );

        end

    end

    --notificar se nota pendente de lançamento
    for
        select distinct
            ROMANEIO_ID,
            NUMERO_NOTAFISCAL,
            EMPRESA_ID,
            e.razaosocial,
            e.nomefantasia
        from vwromaneio_nota n, tbempresa e
        where n.status < 1 and n.nfe_item_id > 0
        --where n.romaneio_id > 0
        and e.codigo = n.empresa_id
    into
        ROMANEIO_ID,
        NUMERO_NOTAFISCAL,
        EMPRESA_ID,
        RAZAOSOCIAL,
        NOMEFANTASIA
    do begin
        
        ASSUNTO = 'Romaneio (Pendente de Conferência)';

        corpo1 = '<html><head><meta charset="Content-Type: text/html; charset=UTF-8"><style>p {margin: 2px;}</style></head><body>';
        corpo1 = corpo1 || '<p></p>';
        corpo1 = corpo1 || '<p><a href="'||fn_parametro('SISTEMA.URL_SERVER')||'/_15210?ID='||:ROMANEIO_ID||'" target="_blank">[ABRIR NA WEB]</a></p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '<p style="font-weight: bold;"><u>ID: '||:ROMANEIO_ID||'</u></p>';
        corpo1 = corpo1 || '<p><u>NF</u>: '||:NUMERO_NOTAFISCAL||'</p>';
        corpo1 = corpo1 || '<p><u>Empresa</u>: '||:EMPRESA_ID||' - '||:RAZAOSOCIAL||'</p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '</body></html>';

        for
            select
                u.email,
                u.codigo
            from tbcontrole_usuario o,  tbusuario u
            where u.codigo = o.usuario_id
            and o.id = 900
            and o.valor_ext = '1'
        into
            :EMAIL,
            :USUARIO_ID
        do begin
           execute procedure spi_notificar(
              current_timestamp,
              :USUARIO_ID,
              :assunto,
              :corpo1,
              1,
              1
           );

        end

    end
end;

CREATE OR ALTER trigger ttbnfe_b07u for tbnfe
active before update position 7
AS
declare variable ROMANEIO_ID integer;
begin

    if( new.numero_notafiscal > 0 and new.empresa_codigo > 0)then
    begin
        
        ROMANEIO_ID = coalesce((select r.ID from tbromaneio r where r.EMPRESA_ID = new.empresa_codigo and r.NUMERO_NOTAFISCAL = new.numero_notafiscal and r.status > 1),0);

        if(ROMANEIO_ID > 0)then
        begin
            execute procedure SP_NOTIFICAR_ROMANEIO_PEND(:ROMANEIO_ID);
        end

    end

end;

CREATE OR ALTER trigger ttbromaneio_b3u for tbromaneio
active before update position 3
AS
begin

  if( new.status in (2,3) or old.status < 2 )then
  begin
     execute procedure SP_NOTIFICAR_ROMANEIO_PEND(new.ID);
  end

end;

