CREATE OR ALTER PROCEDURE SP_CFE_PROCESSOS(
    PDV_CFE_ID_PARAM INTEGER = 0,
    FINANCEIRO INTEGER = 0,
    CONTABILIZACAO INTEGER = 0
)
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;
DECLARE VARIABLE CHECK_PARCELAS INTEGER;
DECLARE VARIABLE NATUREZA INTEGER;
DECLARE VARIABLE NUMERO_NOTAFISCAL INTEGER;
DECLARE VARIABLE DATA DATE;
DECLARE VARIABLE HISTORICO_CONTABIL VARCHAR(100);
DECLARE VARIABLE CONTA_DEBITO VARCHAR(50);
DECLARE VARIABLE CONTA_CREDITO VARCHAR(50);
DECLARE VARIABLE VALOR NUMERIC(18,2);
DECLARE VARIABLE VFALHAS VARCHAR(50);
BEGIN
        /* TRATATIVA PARA ESTOQUE */
        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
            AND IIF(:PDV_CFE_ID_PARAM > 0, C.ID = :PDV_CFE_ID_PARAM, TRUE)
            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_ITEM_PEDIDO(:PDV_CFE_ID, :PDV_CFE_ITEM_ID, 1);
            END

            IF(:CHECK_ESTOQUE = 0 AND :ESTOQUE_ID = 0) THEN
            BEGIN
                EXECUTE PROCEDURE SP_CFE_ITEM_CONFERENCIA(:PDV_CFE_ID, :PDV_CFE_ITEM_ID, 1);

                EXECUTE PROCEDURE SP_CFE_ITEM_ESTOQUE(:PDV_CFE_ID, :PDV_CFE_ITEM_ID, :ESTABELECIMENTO_ID, :CLIENTE_ID, :CAIXA_ID, :NUMERO_CFE, :SERIE_CFE, :DATA_EMISSAO, 1);
            END

            IF(:CHECK_ESTOQUE = 0 AND :ESTOQUE_ID > 0) THEN
            BEGIN
               UPDATE TBPDV_CFE_ITEM_TRATAMENTO SET ESTOQUE = 1 WHERE PDV_CFE_ITEM_ID = :PDV_CFE_ITEM_ID;
            END
        END
        

        /* TRATATIVA PARA FINANCEIRO */
        IF(:FINANCEIRO = 1) THEN
        BEGIN
            :CHECK_PARCELAS = COALESCE((SELECT FIRST 1
                    COUNT(V.CONTROLE)
                FROM TBPDV_CFE_FORMA_PAGAMENTO C, TBNFS_PARCELAMENTO V
                WHERE V.PDV_CFE_FORMA_PAGAMENTO_ID = C.ID
                AND C.PDV_CFE_ID = :PDV_CFE_ID_PARAM), 0);
    
            IF(:CHECK_PARCELAS = 0) THEN
            BEGIN
                EXECUTE PROCEDURE SP_CFE_PARCELAMENTO (:PDV_CFE_ID_PARAM, 1);
    
                EXECUTE PROCEDURE SP_CFE_FORMA_PAGAMENTO(:PDV_CFE_ID_PARAM, 2);
            END
        END

        /* TRATATIVA PARA CONTABILIZACAO */
        IF(:CONTABILIZACAO = 1) THEN
        BEGIN
            :NATUREZA = COALESCE((SELECT FIRST 1 T.NATUREZA FROM TBPDV_CFE T WHERE T.ID = :PDV_CFE_ID_PARAM), 0);

            IF(:NATUREZA = 1) THEN
            BEGIN
                FOR SELECT
                        ESTABELECIMENTO_ID,
                        NUMERO_NOTAFISCAL,
                        DATA,
                        HISTORICO_CONTABIL,
                        CONTA_DEBITO,
                        CONTA_CREDITO,
                        VALOR,
                        VFALHAS
                    FROM SPI_NF_CONTABIL('CFI', :PDV_CFE_ID_PARAM, 0) T
                INTO :ESTABELECIMENTO_ID, :NUMERO_NOTAFISCAL, :DATA,
                    :HISTORICO_CONTABIL, :CONTA_DEBITO, :CONTA_CREDITO,
                    :VALOR, :VFALHAS
                DO BEGIN
        
                END
            END
        END


END
