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
CampoOrigemTratamento aplicadoOperação
TERMINAL$params['TERMINAL']Sem alteração adicionalINSERT
LANCAMENTO_CAIXA$params['LANCAMENTO_CAIXA']Sem alteração adicionalINSERT
CODIGO_FILIAL$params['CODIGO_FILIAL']Sem alteração adicionalINSERT
PARCELA$params['PARCELA']str_pad(2)INSERT
CODIGO_ADMINISTRADORA$params['CODIGO_ADMINISTRADORA']Condicional por preenchimentoINSERT
NUMERO_TITULO$params['NUMERO_TITULO'] / $params['TXID']Sobrescrita por TXID quando informadoINSERT
TIPO_PGTO$params['TIPO_PGTO']Sem alteração adicionalINSERT
VALOR$params['VALOR']getNumericINSERT
VENCIMENTO$params['VENCIMENTO']Sem alteração adicionalINSERT
MOEDAValor fixoR$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 diretoINSERT
VALOR_CANCELADOValor fixo0INSERT
CHEQUE_CARTAOComposição do método / $params['CHEQUE_CARTAO']Composição padrão com sobrescrita opcionalINSERT
REDE_CONTROLADORA$params['REDE_CONTROLADORA']Condicional por preenchimentoINSERT
TROCO$params['TROCO']getNumericINSERT
DATA_HORA_TEF$params['DATA_HORA_TEF']Condicional por preenchimentoINSERT
LX_METODO_PGTO$params['LX_METODO_PGTO']Inclusão dinâmica no hydrate e no payloadINSERT
DATA_PARA_TRANSFERENCIAHydrateGETDATE()INSERT
NSU_CANCELAMENTONão preenchido no fluxoNULL no insertINSERT

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.