CREATE OR ALTER procedure SP_CFE_BAIXA_AUTOMATICA
as
declare variable PDV_CFE_ID integer;
declare variable PDV_CFE_ITEM_ID integer;
declare variable ESTABELECIMENTO_ID integer;
declare variable CLIENTE_ID integer;
declare variable CAIXA_ID integer;
declare variable NUMERO_CFE integer;
declare variable SERIE_CFE varchar(3);
declare variable DATA_EMISSAO date;
declare variable PEDIDO_ITEM_ID integer;
declare variable CHECK_PEDIDO integer;
declare variable CHECK_ESTOQUE integer;
declare variable ESTOQUE_ID integer;
BEGIN

        FOR

            SELECT
                C.ID AS PDV_CFE_ID,
                ITEM.ID,
                C.ESTABELECIMENTO_ID,
                COALESCE(C.CLIENTE_ID, 0) AS CLIENTE_ID,
                COALESCE((SELECT T.PDV_CAIXA_ID FROM TBPDV_MOVIMENTO_CAIXA T WHERE T.ID = C.PDV_MOVIMENTO_CAIXA_ID), 0) AS CAIXA_ID,
                C.NUMERO_CFE,
                C.SERIE,
                C.DATA_EMISSAO,
                ITEM.PEDIDO_ITEM_ID,
                T.PEDIDO,
                T.ESTOQUE,
                ITEM.ESTOQUE_ID
    
            FROM TBPDV_CFE_ITEM_TRATAMENTO T
            INNER JOIN TBPDV_CFE_ITEM ITEM ON ITEM.ID = T.PDV_CFE_ITEM_ID
            INNER JOIN TBPDV_CFE C ON C.ID = ITEM.PDV_CFE_ID
            WHERE ((T.PEDIDO = 0 AND ITEM.PEDIDO_ITEM_ID > 0) OR T.ESTOQUE = 0)
            AND C.SITUACAO = 2
            INTO :PDV_CFE_ID, :PDV_CFE_ITEM_ID, :ESTABELECIMENTO_ID, :CLIENTE_ID, :CAIXA_ID,
                :NUMERO_CFE, :SERIE_CFE, :DATA_EMISSAO, :PEDIDO_ITEM_ID, :CHECK_PEDIDO, :CHECK_ESTOQUE, :ESTOQUE_ID

        DO BEGIN

            IF(:CHECK_PEDIDO = 0 AND :PEDIDO_ITEM_ID > 0) THEN
            BEGIN
                EXECUTE PROCEDURE SP_CFE_PEDIDO(:PDV_CFE_ITEM_ID, 1);
            END

            IF(:CHECK_ESTOQUE = 0 AND :ESTOQUE_ID = 0) THEN
            BEGIN
                EXECUTE PROCEDURE SP_CFE_ESTOQUE(:PDV_CFE_ID, :ESTABELECIMENTO_ID, :CLIENTE_ID, :CAIXA_ID, :NUMERO_CFE, :SERIE_CFE, :DATA_EMISSAO, 1);
            END
        END
END;