ALTER TABLE TBPDV_CONFERENCIA
    ADD CLIENTE_ORIGINAL INTEGER DEFAULT 0 NOT NULL;

CREATE OR ALTER PROCEDURE SPU_PREPEDIDO_CLIENTE (
    PDV_CFE_ID INTEGER,
    CLIENTE_CFE_ID INTEGER,
    ACAO INTEGER)
AS
DECLARE VARIABLE PRE_PEDIDO_ID INTEGER;
DECLARE VARIABLE CLIENTE_ID INTEGER;
DECLARE VARIABLE CLIENTE_ORIGINAL INTEGER;
BEGIN

    FOR SELECT DISTINCT
        C.ID,
        C.CLIENTE_ID,
        C.CLIENTE_ORIGINAL
    FROM TBPDV_CFE_ITEM A, TBPDV_CONFERENCIA C
    WHERE A.CONFERENCIA_ITEM_ID > 0
      AND A.PDV_CFE_ID = :PDV_CFE_ID
      AND C.ID = A.CONFERENCIA_ID
    INTO
    :PRE_PEDIDO_ID, :CLIENTE_ID, :CLIENTE_ORIGINAL
    DO BEGIN

        /* REALIZAR BAIXA DE CONFERENCIA */
        IF (:ACAO = 1) THEN
           BEGIN
                UPDATE TBPDV_CONFERENCIA T SET T.CLIENTE_ORIGINAL = T.CLIENTE_ID, T.CLIENTE_ID = :CLIENTE_CFE_ID WHERE T.ID = :PRE_PEDIDO_ID;
           END
           /* DESFAZ BAIXA DE CONFERENCIA */
           ELSE IF(:ACAO = 2) THEN
           BEGIN
                UPDATE TBPDV_CONFERENCIA T SET T.CLIENTE_ID = T.CLIENTE_ORIGINAL, T.CLIENTE_ORIGINAL = 0 WHERE T.ID = :PRE_PEDIDO_ID;

           END

       END

END;

SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_cfe_a01u for tbpdv_cfe
active after update position 1
AS
DECLARE VARIABLE CAIXA_ID INTEGER;

DECLARE VARIABLE ESTABELECIMENTO_ID 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);
DECLARE VARIABLE DOCUMENTO_TIPO VARCHAR(3);
DECLARE VARIABLE DOCUMENTO INTEGER;
DECLARE VARIABLE PAGAMENTO_FORMA_ID INTEGER;
DECLARE VARIABLE PARCELA INTEGER;
DECLARE VARIABLE VALOR_PARCELA DECIMAL(15,2);
DECLARE VARIABLE TARIFA DECIMAL(15,4);
DECLARE VARIABLE VALOR_LIQUIDO DECIMAL(15,2);
DECLARE VARIABLE NSU VARCHAR(50);
DECLARE VARIABLE ADQUIRENTE_ID INTEGER;
DECLARE VARIABLE BANDEIRA_CARTAO VARCHAR(100);
DECLARE VARIABLE CODIGO_AUTORIZACAO VARCHAR(50);
DECLARE VARIABLE CONCILIACAO VARCHAR(1);

BEGIN

  SELECT T.PDV_CAIXA_ID FROM TBPDV_MOVIMENTO_CAIXA T WHERE T.ID = NEW.PDV_MOVIMENTO_CAIXA_ID INTO CAIXA_ID;

  /* SITUACAO AUTORIZADO */
  IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 2) THEN
  BEGIN
        EXECUTE PROCEDURE SP_CFE_PEDIDO(NEW.ID, 1);

        EXECUTE PROCEDURE SP_CFE_CONFERENCIA(NEW.ID, 1);

        EXECUTE PROCEDURE SP_CFE_ESTOQUE(NEW.ID, NEW.ESTABELECIMENTO_ID, NEW.CLIENTE_ID, :CAIXA_ID,
            NEW.NUMERO_CFE, NEW.SERIE, NEW.DATA_EMISSAO, 1);

        EXECUTE PROCEDURE SP_CFE_PARCELAMENTO (NEW.ID, 1);

        EXECUTE PROCEDURE SP_CFE_FORMA_PAGAMENTO(NEW.ID, 2);

        EXECUTE PROCEDURE SPU_PREPEDIDO_CLIENTE(NEW.ID, NEW.CLIENTE_ID, 1);

        IF(NEW.NATUREZA = 1) THEN
        BEGIN

            FOR SELECT
                    ESTABELECIMENTO_ID,
                    NUMERO_NOTAFISCAL,
                    DATA,
                    HISTORICO_CONTABIL,
                    CONTA_DEBITO,
                    CONTA_CREDITO,
                    VALOR,
                    VFALHAS
                FROM SPI_NF_CONTABIL('CFI', NEW.ID, 0) T
            INTO :ESTABELECIMENTO_ID, :NUMERO_NOTAFISCAL, :DATA,
                :HISTORICO_CONTABIL, :CONTA_DEBITO, :CONTA_CREDITO,
                :VALOR, :VFALHAS
            DO BEGIN
    
            END

        END


        SELECT * FROM SP_FORMA_PAGAMENTO_CARTAO('CFE', NEW.ID, 1)
        INTO :DOCUMENTO_TIPO, :DOCUMENTO, :PAGAMENTO_FORMA_ID, :PARCELA, :VALOR_PARCELA, :TARIFA, :VALOR_LIQUIDO,
                 :NSU, :ADQUIRENTE_ID, :BANDEIRA_CARTAO, :CODIGO_AUTORIZACAO, :CONCILIACAO;

        /*GERAR COMISSAO*/
        EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.ID,'CFE');

  END ELSE
  /* SITUACAO CANCELADO */
  IF((OLD.SITUACAO = 2 AND NEW.SITUACAO = 3) OR (OLD.SITUACAO = 1 AND NEW.SITUACAO = 3) OR (OLD.SITUACAO = 2 AND NEW.SITUACAO = 1) ) THEN
  BEGIN

        EXECUTE PROCEDURE SP_CFE_PARCELAMENTO (NEW.ID, 2);

        EXECUTE PROCEDURE SP_CFE_ESTOQUE(NEW.ID, NEW.ESTABELECIMENTO_ID, NEW.CLIENTE_ID, :CAIXA_ID,
            NEW.NUMERO_CFE, NEW.SERIE, NEW.DATA_EMISSAO, 2, 0);

        EXECUTE PROCEDURE SP_CFE_PEDIDO(NEW.ID, 2);

        EXECUTE PROCEDURE SP_CFE_CONFERENCIA(NEW.ID, 2);

        EXECUTE PROCEDURE SPU_PREPEDIDO_CLIENTE(NEW.ID, NEW.CLIENTE_ID, 2);

        IF(OLD.NATUREZA = 1) THEN
        BEGIN
            EXECUTE PROCEDURE SPD_MOVCONTABIL(NEW.ID, 'CFI');
        END

        EXECUTE PROCEDURE SP_CFE_FORMA_PAGAMENTO(NEW.ID, 1);

        DELETE FROM TBNFS_FORMA_PAGAMENTO T WHERE T.DOCUMENTO_TIPO = 'CFE' AND T.DOCUMENTO_ID = NEW.ID;

  END

END
^

SET TERM ; ^


