Ir para o conteúdo principal

Nova Página

setLojaVendaParcelas
Descrição geral da função

Esta função prepara os dados de uma parcela de pagamento, aplica regras de sobrescrita para identificadores de transação e persiste em LOJA_VENDA_PARCELAS quando a chave da parcela ainda não existe para o caixa da venda. O método não executa UPDATE; o fluxo é de criação condicional com validação pós-insert.

FONTES
  • Origem consultada: LOJA_VENDA_PARCELAS | Tipo: leitura | Uso: verificar existência por CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA e PARCELA.
  • Origem persistida: LOJA_VENDA_PARCELAS | Tipo: insert | Uso: inserir parcela quando não encontrada na consulta de pré-validação.
  • Origem de SQL dinâmico: helper sqlPrepareInsert (classe base) com hydrate hydrateLojaVendaParcelas, permitindo NULL para colunas não preenchidas e GETDATE() em DATA_PARA_TRANSFERENCIA. Opcionalmente inclui LX_METODO_PGTO no hydrate quando informado.
Consultas SQL

Leituras feitas com sqlSimpleQuery (classe base): colunas ['*'], tabela LOJA_VENDA_PARCELAS, condições CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA e PARCELA (esta última com o valor já normalizado em $_params['PARCELA']), sem ordenação, limite TOP 1.

  • 1) Pré-validação (antes do insert): verifica se já existe linha para a chave. Se $_LOJA_VENDA_PARCELAS[0]['PARCELA'] estiver vazio, o fluxo segue para o sqlPrepareInsert.
  • 2) Confirmação pós-insert: mesma assinatura de chamada da consulta anterior; se após o insert ainda não houver PARCELA no retorno, o método lança exceção com a chave na mensagem.

Template gerado por sqlSimpleQuery (forma geral):

SELECT TOP 1 * FROM [dbo].[LOJA_VENDA_PARCELAS] (NOLOCK) WHERE CODIGO_FILIAL = '{CODIGO_FILIAL}' AND TERMINAL = '{TERMINAL}' AND LANCAMENTO_CAIXA = '{LANCAMENTO_CAIXA}' AND PARCELA = '{PARCELA}'

Observação: os valores de filtro são interpolados na montagem da string SQL conforme a implementação de sqlSimpleQuery na classe base; não são parâmetros nomeados de prepared statement nessa leitura.

PARAMETROS

Parâmetros de entrada da função:
TERMINAL, LANCAMENTO_CAIXA, CODIGO_FILIAL, PARCELA, CODIGO_ADMINISTRADORA, NUMERO_TITULO, TIPO_PGTO, VALOR, VENCIMENTO, NUMERO_APROVACAO_CARTAO, PARCELAS, CHEQUE_CARTAO, REDE_CONTROLADORA, TROCO, DATA_HORA_TEF, TXID, ENDTOENDID, LX_METODO_PGTO.

Campos montados em $_params para persistência:
TERMINAL, LANCAMENTO_CAIXA, CODIGO_FILIAL, PARCELA, CODIGO_ADMINISTRADORA, NUMERO_TITULO, TIPO_PGTO, VALOR, VENCIMENTO, MOEDA, NUMERO_APROVACAO_CARTAO, PARCELAS_CARTAO, VALOR_CANCELADO, CHEQUE_CARTAO, REDE_CONTROLADORA, TROCO, DATA_HORA_TEF, LX_METODO_PGTO (quando aplicável).

Campos usados nas condições de busca/validação:
CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA, PARCELA.

TRATAMENTO DE DADOS
  • PARCELA: normalizada com str_pad($params['PARCELA'], 2, '0', STR_PAD_LEFT).
  • VALOR, TROCO: normalizados com getNumeric antes da persistência.
  • MOEDA: fixada em R$.
  • VALOR_CANCELADO: fixado em 0 no insert.
  • CHEQUE_CARTAO: gerado por composição {CODIGO_FILIAL}-{TERMINAL}-{LANCAMENTO_CAIXA}-{PARCELA}; se $params['CHEQUE_CARTAO'] vier preenchido, sobrescreve o valor composto.
  • NUMERO_TITULO, NUMERO_APROVACAO_CARTAO: podem ser sobrescritos por TXID quando informado.
  • NUMERO_APROVACAO_CARTAO: pode ser sobrescrito novamente por ENDTOENDID quando informado.
  • LX_METODO_PGTO: quando preenchido, adiciona dinamicamente a coluna no hydrate ($this->hydrateLojaVendaParcelas[] = 'LX_METODO_PGTO') e entra no insert.
  • Tratamento de criação vs atualização: este método possui apenas criação condicional (INSERT) e não possui bloco de UPDATE.
Dicionário de dados e query gerada
Campo Origem Tratamento aplicado Operação
TERMINAL $params['TERMINAL'] Sem alteração adicional INSERT
LANCAMENTO_CAIXA $params['LANCAMENTO_CAIXA'] Sem alteração adicional INSERT
CODIGO_FILIAL $params['CODIGO_FILIAL'] Sem alteração adicional INSERT
PARCELA $params['PARCELA'] str_pad(2) INSERT
CODIGO_ADMINISTRADORA $params['CODIGO_ADMINISTRADORA'] Condicional por preenchimento INSERT
NUMERO_TITULO $params['NUMERO_TITULO'] / $params['TXID'] Sobrescrita por TXID quando informado INSERT
TIPO_PGTO $params['TIPO_PGTO'] Sem alteração adicional INSERT
VALOR $params['VALOR'] getNumeric INSERT
VENCIMENTO $params['VENCIMENTO'] Sem alteração adicional INSERT
MOEDA Valor fixo R$ INSERT
NUMERO_APROVACAO_CARTAO $params['NUMERO_APROVACAO_CARTAO'] / $params['TXID'] / $params['ENDTOENDID'] Sobrescritas em cascata (TXID e depois ENDTOENDID) INSERT
PARCELAS_CARTAO $params['PARCELAS'] Mapeamento direto INSERT
VALOR_CANCELADO Valor fixo 0 INSERT
CHEQUE_CARTAO Composição do método / $params['CHEQUE_CARTAO'] Composição padrão com sobrescrita opcional INSERT
REDE_CONTROLADORA $params['REDE_CONTROLADORA'] Condicional por preenchimento INSERT
TROCO $params['TROCO'] getNumeric INSERT
DATA_HORA_TEF $params['DATA_HORA_TEF'] Condicional por preenchimento INSERT
LX_METODO_PGTO $params['LX_METODO_PGTO'] Inclusão dinâmica no hydrate e no payload INSERT
DATA_PARA_TRANSFERENCIA Hydrate GETDATE() INSERT
NSU_CANCELAMENTO Não preenchido no fluxo NULL no insert INSERT

INSERT com hydrate padrão (sem LX_METODO_PGTO anexado em tempo de execução):

SET NOCOUNT ON; INSERT INTO [dbo].[LOJA_VENDA_PARCELAS] (TERMINAL, LANCAMENTO_CAIXA, CODIGO_FILIAL, PARCELA, CODIGO_ADMINISTRADORA, TIPO_PGTO, VALOR, VENCIMENTO, NUMERO_TITULO, MOEDA, NUMERO_APROVACAO_CARTAO, PARCELAS_CARTAO, VALOR_CANCELADO, CHEQUE_CARTAO, DATA_PARA_TRANSFERENCIA, REDE_CONTROLADORA, TROCO, DATA_HORA_TEF, NSU_CANCELAMENTO) VALUES (:TERMINAL, :LANCAMENTO_CAIXA, :CODIGO_FILIAL, :PARCELA, :CODIGO_ADMINISTRADORA, :TIPO_PGTO, :VALOR, :VENCIMENTO, :NUMERO_TITULO, :MOEDA, :NUMERO_APROVACAO_CARTAO, :PARCELAS_CARTAO, :VALOR_CANCELADO, :CHEQUE_CARTAO, GETDATE(), :REDE_CONTROLADORA, :TROCO, :DATA_HORA_TEF, NULL)

INSERT quando $this->hydrateLojaVendaParcelas[] = 'LX_METODO_PGTO' foi aplicado (Omni3):

SET NOCOUNT ON; INSERT INTO [dbo].[LOJA_VENDA_PARCELAS] (TERMINAL, LANCAMENTO_CAIXA, CODIGO_FILIAL, PARCELA, CODIGO_ADMINISTRADORA, TIPO_PGTO, VALOR, VENCIMENTO, NUMERO_TITULO, MOEDA, NUMERO_APROVACAO_CARTAO, PARCELAS_CARTAO, VALOR_CANCELADO, CHEQUE_CARTAO, DATA_PARA_TRANSFERENCIA, REDE_CONTROLADORA, TROCO, DATA_HORA_TEF, NSU_CANCELAMENTO, LX_METODO_PGTO) VALUES (:TERMINAL, :LANCAMENTO_CAIXA, :CODIGO_FILIAL, :PARCELA, :CODIGO_ADMINISTRADORA, :TIPO_PGTO, :VALOR, :VENCIMENTO, :NUMERO_TITULO, :MOEDA, :NUMERO_APROVACAO_CARTAO, :PARCELAS_CARTAO, :VALOR_CANCELADO, :CHEQUE_CARTAO, GETDATE(), :REDE_CONTROLADORA, :TROCO, :DATA_HORA_TEF, NULL, :LX_METODO_PGTO)

Critério de criação: o insert ocorre apenas quando a consulta por CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA e PARCELA não retorna registro.