SET TERM ^ ;

CREATE OR ALTER procedure SP_CONFERIR_REQ_PLACA (
    ALOCACAO_ID integer,
    REQUISICAO_PLACA_ID integer,
    ID_OPERADOR integer,
    ID_ENTREGADOR integer)
as
declare variable SALDO numeric(15,4);
declare variable BAIXADO numeric(15,4);
declare variable PENDENTE numeric(15,4);
declare variable OPERADOR_NOME varchar(50);
declare variable ENTREGADOR_NOME varchar(50);
begin

    select first 1
        o.nome
    from tboperador o where o.codigo = :ID_OPERADOR
    into :OPERADOR_NOME;

    OPERADOR_NOME = coalesce(OPERADOR_NOME,'');

    select first 1
        o.nome
    from tboperador o where o.codigo = :ID_ENTREGADOR
    into :ENTREGADOR_NOME;

    ENTREGADOR_NOME = coalesce(ENTREGADOR_NOME,'');

    UPDATE TBREQUISICAO_PLACA_BAIXA F SET F.STATUS = 2 WHERE ID = :ALOCACAO_ID;

    EXECUTE PROCEDURE SPI_HISTORICO('TBREQUISICAO_PLACA', :REQUISICAO_PLACA_ID , 'Confirmado por '||:ID_OPERADOR||'-'||:OPERADOR_NOME||' E ENTREGUE POR '||:ID_OPERADOR||'-'||:OPERADOR_NOME||'');

    for
        SELECT first 1
            p.saldo,
            coalesce((select sum(b.quantidade) from tbrequisicao_placa_baixa b where b.requisicao_placa_id = p.id and b.status = 2),0) as baixado,
            coalesce((select sum(b.quantidade) from tbrequisicao_placa_baixa b where b.requisicao_placa_id = p.id and b.status = 1),0) as pendente
        from tbrequisicao_placa p where p.id = :REQUISICAO_PLACA_ID
    into
        SALDO,
        BAIXADO,
        PENDENTE
    do begin
        if(:SALDO = 0 AND :BAIXADO > 0 AND :PENDENTE = 0)THEN
        BEGIN
            UPDATE TBREQUISICAO_PLACA F SET F.STATUS = 2 WHERE ID = :REQUISICAO_PLACA_ID;
        END
    end

end
^

SET TERM ; ^

