SET TERM ^ ;

CREATE OR ALTER PROCEDURE SPU_CONFERENCIA_MOVIMENTACAO
AS
DECLARE VARIABLE PRE_PEDIDO_ID INTEGER;
DECLARE VARIABLE PRE_PEDIDO_ITEM_ID INTEGER;
DECLARE VARIABLE DATA DATE;
DECLARE VARIABLE DATAHORA TIMESTAMP;
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE CHECK_CONFERENCIA_MOVIMENTACAO INTEGER;
DECLARE VARIABLE PDV_CONFERENCIA_MOVIMENTACAO_ID INTEGER;
DECLARE VARIABLE ID INTEGER;
BEGIN
    FOR SELECT
        T.ID AS PRE_PEDIDO_ID,
        I.ID AS PRE_PEDIDO_ITEM_ID,
        I.DATA,
        I.DATAHORA,
        I.USUARIO_ID
    FROM TBPDV_CONFERENCIA T, TBPDV_CONFERENCIA_ITEM I
    WHERE T.ID = I.PDV_CONFERENCIA_ID
    AND T.TIPO = 2
    INTO :PRE_PEDIDO_ID, :PRE_PEDIDO_ITEM_ID, :DATA, :DATAHORA, :USUARIO_ID
    DO BEGIN
        
        :CHECK_CONFERENCIA_MOVIMENTACAO = COALESCE((SELECT FIRST 1 M.ID FROM TBPDV_CONFERENCIA_MOVIMENTACAO M WHERE M.PRE_PEDIDO_ID = :PRE_PEDIDO_ID AND M.DATA = :DATA), 0);

        IF(COALESCE(:CHECK_CONFERENCIA_MOVIMENTACAO, 0) > 0) THEN
        BEGIN
            UPDATE TBPDV_CONFERENCIA_ITEM I SET I.PDV_CONFERENCIA_MOVIMENTACAO_ID = :CHECK_CONFERENCIA_MOVIMENTACAO WHERE I.ID = :PRE_PEDIDO_ITEM_ID;
        END ELSE
        BEGIN
            :PDV_CONFERENCIA_MOVIMENTACAO_ID = GEN_ID(GTBPDV_CONFERENCIA_MOV, 1);

            UPDATE OR INSERT INTO TBPDV_CONFERENCIA_MOVIMENTACAO
                (ID, PRE_PEDIDO_ID, DATA, USUARIO_ID, SITUACAO, DATAHORA, DATAHORA_FECHAMENTO)
            VALUES (:PDV_CONFERENCIA_MOVIMENTACAO_ID, :PRE_PEDIDO_ID, :DATA, :USUARIO_ID, 2, :DATAHORA, :DATAHORA)
            MATCHING (ID);

            UPDATE TBPDV_CONFERENCIA_ITEM I SET I.PDV_CONFERENCIA_MOVIMENTACAO_ID = :PDV_CONFERENCIA_MOVIMENTACAO_ID WHERE I.ID = :PRE_PEDIDO_ITEM_ID;
        END

    END
        

END
^

SET TERM ; ^

