CREATE OR ALTER PROCEDURE SPI_MOVIMENTO_CAIXA
AS
DECLARE VARIABLE PDV_MOVIMENTO_ID INTEGER;
DECLARE VARIABLE ESTABELECIMENTO_ID INTEGER;
DECLARE VARIABLE PDV_ID INTEGER;
DECLARE VARIABLE CAIXA_ID INTEGER;
DECLARE VARIABLE TABELA_PRECO_ID INTEGER;
BEGIN

    FOR SELECT
        T.ID,
        T.ESTABELECIMENTO_ID,
        T.PDV_ID
    FROM TBPDV_MOVIMENTO T
    LEFT JOIN TBPDV_MOVIMENTO_CAIXA C ON C.PDV_MOVIMENTO_ID = T.ID
    WHERE C.ID IS NULL
    AND CAST(T.DATA AS DATE) >= CURRENT_DATE
    INTO :PDV_MOVIMENTO_ID, :ESTABELECIMENTO_ID, :PDV_ID
    DO BEGIN

        FOR SELECT
            A.ID
        FROM TBPDV_CAIXA A
        WHERE A.PDV_ID = :PDV_ID
        INTO :CAIXA_ID
        DO BEGIN
            FOR SELECT
                B.TABELA_PRECO_ID
            FROM TBPDV_CAIXA_PRECO B
            WHERE B.PDV_CAIXA_ID = :CAIXA_ID
            AND B.PADRAO_MOVIMENTO = 1
            INTO :TABELA_PRECO_ID
            DO BEGIN

                UPDATE OR INSERT INTO TBPDV_MOVIMENTO_CAIXA (PDV_MOVIMENTO_ID, PDV_CAIXA_ID, TABELA_PRECO_ID, STATUS)
                        VALUES (:PDV_MOVIMENTO_ID, :CAIXA_ID, :TABELA_PRECO_ID, 0)
                MATCHING (PDV_MOVIMENTO_ID, PDV_CAIXA_ID);
    
            END
        END
    END

END;