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 porCODIGO_FILIAL,TERMINAL,LANCAMENTO_CAIXAePARCELA. - 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 hydratehydrateLojaVendaParcelas, permitindoNULLpara colunas não preenchidas eGETDATE()emDATA_PARA_TRANSFERENCIA. Opcionalmente incluiLX_METODO_PGTOno 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 osqlPrepareInsert. - 2) Confirmação pós-insert: mesma assinatura de chamada da consulta anterior; se após o insert ainda não houver
PARCELAno 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 comstr_pad($params['PARCELA'], 2, '0', STR_PAD_LEFT).VALOR,TROCO: normalizados comgetNumericantes da persistência.MOEDA: fixada emR$.VALOR_CANCELADO: fixado em0no 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 porTXIDquando informado.NUMERO_APROVACAO_CARTAO: pode ser sobrescrito novamente porENDTOENDIDquando 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 deUPDATE.
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.