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, COALESCE(NEW.CLIENTE_ID, 0), COALESCE(NEW.REPRESENTANTE_ID, 0), COALESCE(NEW.CORRETOR_ID, 0), 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_CFE_GERAR_COMISSAO(NEW.ID);

        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, COALESCE(NEW.CLIENTE_ID, 0), COALESCE(NEW.REPRESENTANTE_ID, 0), COALESCE(NEW.CORRETOR_ID, 0), 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;

        /*APAGAR COMISSAO*/
        DELETE FROM TBCOMISSAO A WHERE A.ORIGEM = 'CFE' AND A.TABELA_ID = NEW.ID;
  END

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPU_PREPEDIDO_CLIENTE (
    PDV_CFE_ID integer,
    CLIENTE_CFE_ID integer,
    REPRESENTANTE_CFE_ID integer,
    CORRETOR_CFE_ID integer,
    ACAO integer)
as
declare variable PRE_PEDIDO_ID integer;
declare variable CLIENTE_ID integer;
declare variable CLIENTE_ORIGINAL integer;
declare variable REPRESENTANTE_ID integer;
declare variable REPRESENTANTE_ORIGINAL integer;
declare variable CORRETOR_ID integer;
declare variable CORRETOR_ORIGINAL integer;
BEGIN

    FOR SELECT DISTINCT
        C.ID,
        C.CLIENTE_ID,
        C.CLIENTE_ORIGINAL,
        COALESCE(C.REPRESENTANTE_ID, 0),
        COALESCE(C.REPRESENTANTE_ORIGINAL, 0),
        COALESCE(C.CORRETOR_ID, 0),
        COALESCE(C.CORRETOR_ORIGINAL, 0)
    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,
    :REPRESENTANTE_ID, :REPRESENTANTE_ORIGINAL, :CORRETOR_ID, :CORRETOR_ORIGINAL
    DO BEGIN

        /* REALIZAR BAIXA DE CONFERENCIA */
        IF (:ACAO = 1) THEN
           BEGIN
                UPDATE TBPDV_CONFERENCIA T SET
                    T.CLIENTE_ORIGINAL = COALESCE(T.CLIENTE_ID, 0),
                    T.CLIENTE_ID = :CLIENTE_CFE_ID,
                    T.REPRESENTANTE_ORIGINAL = T.REPRESENTANTE_ID,
                    T.REPRESENTANTE_ID = :REPRESENTANTE_CFE_ID,
                    T.CORRETOR_ORIGINAL = COALESCE(T.CORRETOR_ID, 0),
                    T.CORRETOR_ID = :CORRETOR_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,
                    T.REPRESENTANTE_ID = COALESCE(T.REPRESENTANTE_ORIGINAL, 0),
                    T.REPRESENTANTE_ORIGINAL = 0,
                    T.CORRETOR_ID = COALESCE(T.CORRETOR_ORIGINAL, 0),
                    T.CORRETOR_ORIGINAL = 0
                WHERE T.ID = :PRE_PEDIDO_ID;

           END

       END

END
^

SET TERM ; ^


