SET TERM ^ ;

CREATE OR ALTER procedure SP_VALIDAR_PRODUCAO_TALAO
as
declare variable GP_ID integer;
declare variable UP_PERFIL varchar(40);
declare variable FAMILIA_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable TALAO_ID integer;
declare variable ID integer;
declare variable ESTABELECIMENTO_ID integer;
declare variable PRODUTO_ID integer;
declare variable TAMANHO integer;
declare variable QUANTIDADE_PRODUCAO numeric(18,5);
declare variable QUANTIDADE numeric(18,5);
declare variable UP_CCUSTO varchar(32);
declare variable REMESSA_ID integer;
declare variable REMESSA_TALAO_ID integer;
declare variable PECA_CONJUNTO_SEQ integer;
declare variable PECA_CONJUNTO_NUM integer;
declare variable PECA_CONJUNTO_ID integer;
declare variable ADD_NOVO integer;
declare variable ESTOQUE_ID integer;
declare variable DATA_PRODUCAO date;
declare variable OPERADOR_ID integer;
declare variable DEFEITO integer;
declare variable QTD_REGISTRAR integer;
declare variable ABATER_DEFEITO integer;
declare variable SEM_ESTOQUE integer;
declare variable SITUACAO_ETAPA integer;
begin

  for select
        *
      from(
        SELECT
            p.operador_id_producao,
            p.DATA_PRODUCAO,
            p.ESTOQUE_ID,
            P.GP_ID,
            U.PERFIL UP_PERFIL,
            T.FAMILIA_ID,
            T.LOCALIZACAO_ID,
            P.ID AS TALAO_ID,
            P.ID,
            P.ESTABELECIMENTO_ID,
            P.PRODUTO_ID,
            P.TAMANHO,
            IIF(P.QUANTIDADE_PRODUCAO_TMP > 0, P.QUANTIDADE_PRODUCAO_TMP, P.QUANTIDADE_PRODUCAO) as QUANTIDADE_PRODUCAO,
            IIF(P.QUANTIDADE_PRODUCAO_TMP > 0, P.QUANTIDADE_PRODUCAO_TMP, P.QUANTIDADE_PRODUCAO) as QUANTIDADE,
            U.CCUSTO as UP_CCUSTO,
            P.REMESSA_ID,
            P.REMESSA_TALAO_ID,
            p.PECA_CONJUNTO_SEQ,
            p.PECA_CONJUNTO_NUM,
            p.PECA_CONJUNTO_ID,
            1 as ADD_NOVO,
            coalesce((select first 1 i.controle from tbestoque_transacao_item i where i.controle = p.ESTOQUE_ID),0) as sem_estoque,

            coalesce((
                select h.situacao from tbremessa_setor h where h.setor_id = coalesce((
                select first 1
                    s.codigo
                from tbsetor s, tbmodelo_setor d, tbproduto p2
                where s.etapa_roteiro   = '1'
                and d.modelo_codigo     = p2.modelo_codigo
                and d.setor_codigo      = s.codigo
                and d.estoque           = '1'
                and p2.codigo            = p.PRODUTO_ID ),0)
                and h.remessa = p.remessa_id
                and h.talao_id = p.id
                and h.data_producao >= '01.02.2021'
            ),'0') as situacao_etapa

        FROM VWREMESSA_TALAO_DETALHE P, VWREMESSA_TALAO T, TBUP U
        WHERE T.REMESSA_ID = P.REMESSA_ID
        AND T.REMESSA_TALAO_ID = P.REMESSA_TALAO_ID
        AND U.ID = T.UP_ID
        and p.data_producao >= '01.02.2021'
        and p.estoque_id > 0
        and p.status = 3

     ) where sem_estoque = 0 and situacao_etapa = 1
  into
    OPERADOR_ID,
    DATA_PRODUCAO,
    ESTOQUE_ID,
    GP_ID,
    UP_PERFIL,
    FAMILIA_ID,
    LOCALIZACAO_ID,
    TALAO_ID,
    ID,
    ESTABELECIMENTO_ID,
    PRODUTO_ID,
    TAMANHO,
    QUANTIDADE_PRODUCAO,
    QUANTIDADE,
    UP_CCUSTO,
    REMESSA_ID,
    REMESSA_TALAO_ID,
    PECA_CONJUNTO_SEQ,
    PECA_CONJUNTO_NUM,
    PECA_CONJUNTO_ID,
    ADD_NOVO,
    sem_estoque,
    situacao_etapa
  do begin

        QTD_REGISTRAR = QUANTIDADE_PRODUCAO;
    
        QTD_REGISTRAR = coalesce((
            select first 1
                s.abater_def_prod
            from tbsetor s, tbmodelo_setor d, tbproduto p
            where s.etapa_roteiro   = '1'
            and d.modelo_codigo     = p.modelo_codigo
            and d.setor_codigo      = s.codigo
            and d.estoque           = '1'
            and p.codigo            = :PRODUTO_ID
        ),'0');
    
        DEFEITO = coalesce((
            SELECT
                sum(F.QUANTIDADE)
            FROM TBDEFEITO_TRANSACAO_ITEM F
            WHERE F.ORIGEM = 2
            AND F.REMESSA = :REMESSA_ID
            AND F.REMESSA_CONTROLE = :REMESSA_TALAO_ID
            AND F.TALAO = :TALAO_ID
        ),0);
    
        if(QTD_REGISTRAR = 1)then
        begin
           QTD_REGISTRAR = QTD_REGISTRAR - DEFEITO;
        end
    
        if(QTD_REGISTRAR > 0)then
        begin
            EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO_REGRA(
                5,
                :GP_ID,
                :UP_PERFIL,
                :FAMILIA_ID,
                :LOCALIZACAO_ID,
                'TBPEDIDO_ITEM_PROCESSADO',
                3,
                :TALAO_ID,
                :ESTABELECIMENTO_ID,
                :DATA_PRODUCAO,
                :PRODUTO_ID,
                :TAMANHO,
                :QUANTIDADE,
                'E',
                '0',
                :UP_CCUSTO,
                'WEB22610 - REGISTRO DE PRODUÇÃO. REMESSA: ' || :REMESSA_ID || ' TALAO: ' || FN_LPAD(:REMESSA_TALAO_ID,4,0),
                :ESTOQUE_ID,
                :REMESSA_ID,
                :TALAO_ID,
                null,
                :OPERADOR_ID
            );
         end

  end

end
^

SET TERM ; ^

execute procedure SP_VALIDAR_PRODUCAO_TALAO;