ALTER TABLE TBPEDIDO
    ADD AUTORIZACAO_SUPERVISOR 	INTEGER DEFAULT 0,
    ADD AUTORIZACAO_FINANCEIRO 	INTEGER DEFAULT 0,
    ADD CLIENTE_TIPO_ID 		INTEGER DEFAULT 0,
    ADD CLIENTE_SUB_TIPO_ID 	INTEGER DEFAULT 0;

ALTER TABLE TBPEDIDO_ITEM
    ADD VALOR_ORIGINAL NUMERIC(10,5),
    ADD VALOR_MANUAL INTEGER DEFAULT 0;

CREATE OR ALTER trigger ttbpedido_item00iu for tbpedido_item
active before insert or update position 0
AS
begin
  if(new.perfil <> ' ')then
  begin
     new.perfil = trim(new.perfil);
  end

  if(new.perfil_cor <> ' ')then
  begin
     new.perfil_cor = trim(new.perfil_cor);
  end

  --PEDIDOS DIGITADOS NA TELA 12200 TEM VALOR ORIGINAL
  IF(coalesce(NEW.valor_original,0) = 0)THEN
  BEGIN
    NEW.valor_original = NEW.valor;
  END
end;

CREATE TABLE TBPEDIDO_APROVACAO (
    ID INTEGER NOT NULL,
    PEDIDO_ID INTEGER,
    USUARIO_ID INTEGER,
    TIPO INTEGER,
    STATUS INTEGER,
    MOTIVO BLOB SUB_TYPE 1 SEGMENT SIZE 80);

ALTER TABLE TBPEDIDO_APROVACAO
ADD CONSTRAINT PK_TBPEDIDO_APROVACAO
PRIMARY KEY (ID);

COMMENT ON COLUMN TBPEDIDO_APROVACAO.PEDIDO_ID IS
'id do pedido';

COMMENT ON COLUMN TBPEDIDO_APROVACAO.USUARIO_ID IS
'id do usuário que aprovou';

COMMENT ON COLUMN TBPEDIDO_APROVACAO.TIPO IS
'1 - supervisor
2 - financeiro';

COMMENT ON COLUMN TBPEDIDO_APROVACAO.STATUS IS
'2 - reprovado
3 - aprovado';

COMMENT ON COLUMN TBPEDIDO_APROVACAO.MOTIVO IS
'motivo da aprovação ou reprovação';

CREATE SEQUENCE GTBPEDIDO_APROVACAO;

create trigger ttbPEDIDO_aprovacao_b01i for tbPEDIDO_aprovacao
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbPEDIDO_aprovacao,1);
end;

ALTER TABLE TBPEDIDO_APROVACAO
    ADD DATA_HORA TIMESTAMP DEFAULT 'now';

COMMENT ON COLUMN TBPEDIDO_APROVACAO.DATA_HORA IS
'data e hora do registro';

CREATE INDEX ITBPEDIDO_APROVACAO_02
ON TBPEDIDO_APROVACAO (PEDIDO_ID,TIPO);

CREATE UNIQUE DESCENDING INDEX ITBPEDIDO_APROVACAO_01
ON TBPEDIDO_APROVACAO (ID);


CREATE trigger ttbpedido_b12u for tbpedido
active before update position 12
AS
begin

  if(new.situacao = 1 and old.situacao = 0)then
  begin
     if(new.autorizacao_supervisor = 1 or new.autorizacao_financeiro = 1)then
     begin
        exception "..." 'Não é possível confirmar pedidos pendentes de confirmação pelo supervisor ou financeiro';
     end

     if(new.autorizacao_supervisor = 2 or new.autorizacao_financeiro = 2)then
     begin
        exception "..." 'Não é possível confirmar pedidos reprovados pelo supervisor ou financeiro';
     end
  end

end;

COMMENT ON TRIGGER TTBPEDIDO_B12U IS 'NÃO PERMITE CONFIRMAR PEDIDO SE ESTA PENDENTE DE CONFIRMAÇÃO DO SUPERVISOR OU FINANCEIRO';

CREATE OR ALTER trigger ttbpedido_b11u for tbpedido
active before update position 13
AS
declare variable supervisor integer;
declare variable supervisores varchar(300);
declare variable REPROVADO integer;
declare variable primeiro_pedido integer;
declare variable url varchar(500);
declare variable corpo1 blob sub_type 1 segment size 80;
declare variable motivo blob sub_type 1 segment size 80;
begin

  --se pedido gravado pelo representante
  if(new.autorizacao_supervisor = 1 and (old.autorizacao_supervisor = 0 or old.autorizacao_supervisor = 2))then
  begin

    supervisor = coalesce((select
                                r.supervisor_id
                            from TBREPRESENTANTE r where r.codigo = new.representante_codigo),0);

    if(supervisor > 0)then
    begin

        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')||'/_12200?PEDIDO='||new.pedido||'" target="_blank">[ABRIR PEDIDO NA WEB]</a></p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '<p style="font-weight: bold;"><u>Pedido: '||new.pedido||'</u></p>';
        corpo1 = corpo1 || '<p><u>Digitado por</u>: '||coalesce((select coalesce(u.nome, u.usuario) from tbusuario u where u.codigo = new.usuario_codigo),'')||'</p>';
        corpo1 = corpo1 || '<p><u>Observação</u>: '||new.observacao||'</p>';
        corpo1 = corpo1 || '<p><u>Cliente</u>: '||coalesce((select first 1 fn_lpad(c.codigo,6,'0')||' - '||c.razaosocial from tbcliente c where c.codigo = new.cliente_codigo),'')||'</p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '</body></html>';

        execute procedure SPI_NOTIFICAR(
            current_timestamp,
            :supervisor,
            'Pedido pendente de aprovação (SUPERVISOR)',
            :corpo1,
            1,
            1
        );
    end

  end

  --se reprovado pelo supervisor
  if((old.autorizacao_supervisor = 1 or old.autorizacao_supervisor = 3) and new.autorizacao_supervisor = 2)then
  begin

    supervisor = coalesce((select
                                r.supervisor_id
                            from TBREPRESENTANTE r where r.codigo = new.representante_codigo),0);

    if(new.usuario_codigo > 0)then
    begin

        select first 1 s.motivo, S.usuario_id from TBPEDIDO_APROVACAO s where s.pedido_id = new.pedido and s.tipo = 1 order by ID desc
        INTO motivo, REPROVADO;

        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')||'/_12200?PEDIDO='||new.pedido||'" target="_blank">[ABRIR PEDIDO NA WEB]</a></p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '<p style="font-weight: bold;"><u>Pedido: '||new.pedido||'</u></p>';
        corpo1 = corpo1 || '<p><u>Reprovador por</u>: '||coalesce((select coalesce(u.nome, u.usuario) from tbusuario u where u.codigo = :REPROVADO),'')||'</p>';
        corpo1 = corpo1 || '<p><u>Motivo:</u>: '||:motivo||'</p>';
        corpo1 = corpo1 || '<p><u>Observação</u>: '||new.observacao||'</p>';
        corpo1 = corpo1 || '<p><u>Cliente</u>: '||coalesce((select first 1 fn_lpad(c.codigo,6,'0')||' - '||c.razaosocial from tbcliente c where c.codigo = new.cliente_codigo),'')||'</p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '</body></html>';

        execute procedure SPI_NOTIFICAR(
            current_timestamp,
            new.usuario_codigo,
            'Pedido reprovado (SUPERVISOR)',
            :corpo1,
            1,
            1
        );
    end

  end

  --se aprovado pelo supervisor
  if(new.autorizacao_supervisor = 3 and new.autorizacao_financeiro = 1 and (old.autorizacao_supervisor = 1 or old.autorizacao_supervisor = 2))then
  begin

    supervisores = coalesce((select LIST(U.usuario_id,',') FROM tbcontrole_usuario U WHERE  U.id = 897),'186');

    --se cliente tem um pedido já confirmado
    primeiro_pedido = coalesce((select first 1 p.pedido from tbpedido p where p.pedido <> new.pedido and p.cliente_codigo = new.cliente_codigo and p.situacao = 1),0);
    if(primeiro_pedido = 0)then
    begin
       primeiro_pedido = 'Sim';
    end else
    begin
       primeiro_pedido = 'Não';
    end

    if( char_length(coalesce(supervisores,'')) > 0)then
    begin

        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')||'/_12200?PEDIDO='||new.pedido||'" target="_blank">[ABRIR PEDIDO NA WEB]</a></p>';
        corpo1 = corpo1 || '<p><a href="'||fn_parametro('SISTEMA.URL_SERVER')||'/_12090?EMPRESA_ID='||new.cliente_codigo||'" target="_blank">[ABRIR CLIENTE NA WEB]</a></p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '<p style="font-weight: bold;"><u>Pedido: '||new.pedido||'</u></p>';
        corpo1 = corpo1 || '<p><u>Primeiro Pedido</u>: '||coalesce(primeiro_pedido,'')||'</p>';
        corpo1 = corpo1 || '<p><u>Digitado por</u>: '||coalesce((select coalesce(u.nome, u.usuario) from tbusuario u where u.codigo = new.usuario_codigo),'')||'</p>';
        corpo1 = corpo1 || '<p><u>Observação</u>: '||new.observacao||'</p>';
        corpo1 = corpo1 || '<p><u>Cliente</u>: '||coalesce((select first 1 fn_lpad(c.codigo,6,'0')||' - '||c.razaosocial from tbcliente c where c.codigo = new.cliente_codigo),'')||'</p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '</body></html>';

        FOR
            select OSPLIT FROM split2(:supervisores,',')
        INTO
            :supervisores
        do BEGIN
            execute procedure SPI_NOTIFICAR(
                current_timestamp,
                :supervisores,
                'Pedido pendente de aprovação (FINANCEIRO)',
                :corpo1,
                1,
                1
            );
       END
    end

  end

  --se reprovado pelo financeiro
  if(new.autorizacao_financeiro = 2 and (old.autorizacao_financeiro = 1 or old.autorizacao_financeiro = 3))then
  begin

    supervisor = coalesce((select
                                r.supervisor_id
                            from TBREPRESENTANTE r where r.codigo = new.representante_codigo),0);

    if(supervisor > 0)then
    begin

        select first 1 s.motivo, S.usuario_id from TBPEDIDO_APROVACAO s where s.pedido_id = new.pedido and s.tipo = 2 order by ID desc
        INTO motivo, REPROVADO;

        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')||'/_12200?PEDIDO='||new.pedido||'" target="_blank">[ABRIR PEDIDO NA WEB]</a></p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '<p style="font-weight: bold;"><u>Pedido: '||new.pedido||'</u></p>';
        corpo1 = corpo1 || '<p><u>Reprovador por</u>: '||coalesce((select coalesce(u.nome, u.usuario) from tbusuario u where u.codigo = :REPROVADO),'')||'</p>';
        corpo1 = corpo1 || '<p><u>Digitado por</u>: '||coalesce((select coalesce(u.nome, u.usuario) from tbusuario u where u.codigo = new.usuario_codigo),'')||'</p>';
        corpo1 = corpo1 || '<p><u>Motivo:</u>: '||:motivo||'</p>';
        corpo1 = corpo1 || '<p><u>Observação</u>: '||new.observacao||'</p>';
        corpo1 = corpo1 || '<p><u>Cliente</u>: '||coalesce((select first 1 fn_lpad(c.codigo,6,'0')||' - '||c.razaosocial from tbcliente c where c.codigo = new.cliente_codigo),'')||'</p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '</body></html>';

        execute procedure SPI_NOTIFICAR(
            current_timestamp,
            new.usuario_codigo,
            'Pedido reprovado (FINANCEIRO)',
            :corpo1,
            1,
            1
        );
    end

  end

  --se aprovado
  if(new.autorizacao_supervisor = 3 and new.autorizacao_financeiro = 3 and (old.autorizacao_supervisor <> 3 or old.autorizacao_financeiro <> 3))then
  begin

    supervisores = coalesce((select LIST(U.usuario_id,',') FROM tbcontrole_usuario U WHERE  U.id = 898),'186');

    if( char_length(coalesce(supervisores,'')) > 0)then
    begin

        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')||'/_12200?PEDIDO='||new.pedido||'" target="_blank">[ABRIR PEDIDO NA WEB]</a></p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '<p style="font-weight: bold;"><u>Pedido: '||new.pedido||'</u></p>';
        corpo1 = corpo1 || '<p><u>Digitado por</u>: '||coalesce((select coalesce(u.nome, u.usuario) from tbusuario u where u.codigo = new.usuario_codigo),'')||'</p>';
        corpo1 = corpo1 || '<p><u>Observação</u>: '||new.observacao||'</p>';
        corpo1 = corpo1 || '<p><u>Cliente</u>: '||coalesce((select first 1 fn_lpad(c.codigo,6,'0')||' - '||c.razaosocial from tbcliente c where c.codigo = new.cliente_codigo),'')||'</p>';
        corpo1 = corpo1 || '<br>';
        corpo1 = corpo1 || '</body></html>';

        FOR
            select OSPLIT FROM split2(:supervisores,',')
        INTO
            :supervisores
        do BEGIN
            execute procedure SPI_NOTIFICAR(
                current_timestamp,
                :supervisores,
                'Novo Pedido LaCloft',
                :corpo1,
                1,
                1
            );
       END
    end

  end

end;
