SET TERM ^ ;

CREATE OR ALTER procedure SPUI_CHEQUE (
    DATA_EMISSAO date,
    BANCO_ID integer,
    AGENCIA varchar(15),
    CONTA varchar(15),
    NUMERO_CHEQUE varchar(15),
    EMPRESA_ID integer,
    NOME_TITULAR varchar(100),
    DATA_CHEQUE date,
    VALOR decimal(15,4),
    OBSERVACAO varchar(200),
    CHEQUE_PDV_ID integer,
    PDV_ID integer,
    PDV_CFE_ID INTEGER,
    FLAG_ONLINE integer = 0)
returns (
    ID integer)
as
declare variable ESTABELECIMENTO_ID integer;
declare variable CAIXABANCO_ID_CHEQUE integer;
declare variable CLASSIFICACAO_FINAN_CHEQUE varchar(10);
declare variable CCUSTO_CHEQUE varchar(10);
BEGIN

    SELECT FIRST 1
        T.ESTABELECIMENTO_ID,
        T.CAIXABANCO_ID_CHEQUE,
        T.CLASSIFICACAO_FINAN_CHEQUE,
        T.CCUSTO_CHEQUE
    FROM TBPDV T
    WHERE T.ID = :PDV_ID
    INTO :ESTABELECIMENTO_ID, :CAIXABANCO_ID_CHEQUE, :CLASSIFICACAO_FINAN_CHEQUE, :CCUSTO_CHEQUE;
    

    UPDATE OR INSERT INTO TBCHEQUE (ESTABELECIMENTO_ID, DATA_RECEBIMENTO, BANCO_ID, AGENCIA, CONTA,
                                    NUMERO_CHEQUE, NOME_TITULAR, DATA_CHEQUE, VALOR, OBSERVACAO,
                                    CHEQUE_SEM_PARCELA, CAIXABANCO_ID, TIPO, EMPRESA_ID, CLASSIFICACAO, CENTRO_DE_CUSTO,
                                    CHEQUE_PDV_ID, PDV_ID, PDV_CFE_ID, FLAG_ONLINE)
    VALUES (:ESTABELECIMENTO_ID, :DATA_EMISSAO, :BANCO_ID, :AGENCIA, :CONTA,
            :NUMERO_CHEQUE, :NOME_TITULAR, :DATA_CHEQUE, :VALOR, :OBSERVACAO, '0', :CAIXABANCO_ID_CHEQUE,
            'D', :EMPRESA_ID, :CLASSIFICACAO_FINAN_CHEQUE, :CCUSTO_CHEQUE, :CHEQUE_PDV_ID, :PDV_ID, :PDV_CFE_ID, :FLAG_ONLINE)
    MATCHING (ESTABELECIMENTO_ID, CHEQUE_PDV_ID, NUMERO_CHEQUE, PDV_ID, FLAG_ONLINE)
    RETURNING ID INTO :ID;

  SUSPEND;

END
^

SET TERM ; ^

