feat: bloqueia CNPJ/CPF duplicado ao cadastrar ou editar cliente
Mesmo padrão já usado pro CODIGO (db_clientes.codigo_em_uso): nova db_clientes.cnpj_em_uso(documento, ignorar_id=None) checada em criar()/editar() antes de gravar. A comparação ignora pontuação dos dois lados (não só normaliza o valor recebido) porque CLIENTE.CNPJ tem formatação inconsistente em registros legados (alguns com máscara, outros sem) — sem isso, um cadastro novo com o mesmo documento de um legado ainda mascarado passaria batido. app/templates/cliente_form.html: nova mensagem de erro 'erro_cnpj_duplicado', mesmo estilo visual do erro de código duplicado. 6 testes novos (unitário do db + integração do router pros dois fluxos), suíte completa (196 testes) passando. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
eed473c5f3
commit
f940ff5768
@@ -74,6 +74,26 @@ def test_codigo_em_uso(cliente_id):
|
||||
assert db_clientes.codigo_em_uso("000000") is False
|
||||
|
||||
|
||||
def test_cnpj_em_uso(cliente_id):
|
||||
assert db_clientes.cnpj_em_uso("11222333000181") is True
|
||||
assert db_clientes.cnpj_em_uso("11222333000181", ignorar_id=cliente_id) is False
|
||||
assert db_clientes.cnpj_em_uso("99988877000166") is False
|
||||
|
||||
|
||||
def test_cnpj_em_uso_ignora_pontuacao_de_registros_legados(cliente_id):
|
||||
# CLIENTE.CNPJ tem formatação inconsistente em registros legados (ver
|
||||
# licenciamento-n8n/docs/ANALISE_CLIENTE_IPREAL.md) — cnpj_em_uso
|
||||
# precisa achar o duplicado mesmo se o legado ainda tem máscara.
|
||||
conn = get_connection()
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute("UPDATE CLIENTE SET CNPJ = %s WHERE ID = %s", ("11.222.333/0001-81", cliente_id))
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
assert db_clientes.cnpj_em_uso("11222333000181") is True
|
||||
|
||||
|
||||
def test_atualizar_cliente(cliente_id):
|
||||
dados = dict(CLIENTE_TESTE)
|
||||
dados["FANTASIA"] = "TESTE PAINEL FANTASIA EDITADA"
|
||||
|
||||
Reference in New Issue
Block a user