fix: DV usa valor normalizado, botao de confirmar DV invalido, TemplateResponse sem warning

This commit is contained in:
Gustavo
2026-08-13 10:12:26 -03:00
parent c7f2c5f92b
commit 2c7bf429fc
2 changed files with 26 additions and 10 deletions
+18 -9
View File
@@ -39,16 +39,18 @@ def listar(
):
clientes = db_clientes.listar_clientes(busca=busca or None)
return templates.TemplateResponse(
request,
"clientes_lista.html",
{"request": request, "clientes": clientes, "busca": busca, "mensagem": mensagem, "mensagem_tipo": mensagem_tipo},
{"clientes": clientes, "busca": busca, "mensagem": mensagem, "mensagem_tipo": mensagem_tipo},
)
@router.get("/novo", response_class=HTMLResponse)
def form_novo(request: Request, usuario: str = Depends(exigir_login)):
return templates.TemplateResponse(
request,
"cliente_form.html",
{"request": request, "cliente": None, "dados": {c: "" for c in db_clientes.CAMPOS_CLIENTE}, "campos": db_clientes.CAMPOS_CLIENTE},
{"cliente": None, "dados": {c: "" for c in db_clientes.CAMPOS_CLIENTE}, "campos": db_clientes.CAMPOS_CLIENTE},
)
@@ -60,18 +62,22 @@ async def criar(request: Request, usuario: str = Depends(exigir_login)):
if not confirmar_duplicado and db_clientes.codigo_em_uso(dados["CODIGO"]):
return templates.TemplateResponse(
request,
"cliente_form.html",
{"request": request, "cliente": None, "dados": dados, "campos": db_clientes.CAMPOS_CLIENTE, "aviso_codigo_duplicado": True},
{"cliente": None, "dados": dados, "campos": db_clientes.CAMPOS_CLIENTE, "aviso_codigo_duplicado": True},
)
_, formato_valido, tipo = normalizar_documento(dados["CNPJ"])
documento_normalizado, formato_valido, tipo = normalizar_documento(dados["CNPJ"])
dv_invalido = False
if formato_valido:
dv_invalido = not (validar_dv_cpf(dados["CNPJ"]) if tipo == "CPF" else validar_dv_cnpj(dados["CNPJ"]))
dv_invalido = not (
validar_dv_cpf(documento_normalizado) if tipo == "CPF" else validar_dv_cnpj(documento_normalizado)
)
if dv_invalido and form.get("confirmar_dv_invalido") != "1":
return templates.TemplateResponse(
request,
"cliente_form.html",
{"request": request, "cliente": None, "dados": dados, "campos": db_clientes.CAMPOS_CLIENTE, "aviso_dv_invalido": True},
{"cliente": None, "dados": dados, "campos": db_clientes.CAMPOS_CLIENTE, "aviso_dv_invalido": True},
)
novo_id = db_clientes.criar_cliente(dados)
@@ -93,9 +99,10 @@ def detalhe(
contatos = db_contatos.listar_contatos_por_cliente(cliente_id)
status = db_chaves.status_chaves(cliente["CODIGO"])
return templates.TemplateResponse(
request,
"cliente_detalhe.html",
{
"request": request, "cliente": cliente, "contatos": contatos, "status_chaves": status,
"cliente": cliente, "contatos": contatos, "status_chaves": status,
"mensagem": mensagem, "mensagem_tipo": mensagem_tipo,
},
)
@@ -107,8 +114,9 @@ def form_editar(request: Request, cliente_id: int, usuario: str = Depends(exigir
if cliente is None:
return _redirect_com_mensagem("/clientes", "Cliente não encontrado.", "danger")
return templates.TemplateResponse(
request,
"cliente_form.html",
{"request": request, "cliente": cliente, "dados": cliente, "campos": db_clientes.CAMPOS_CLIENTE},
{"cliente": cliente, "dados": cliente, "campos": db_clientes.CAMPOS_CLIENTE},
)
@@ -120,8 +128,9 @@ async def editar(request: Request, cliente_id: int, usuario: str = Depends(exigi
if not confirmar_duplicado and db_clientes.codigo_em_uso(dados["CODIGO"], ignorar_id=cliente_id):
return templates.TemplateResponse(
request,
"cliente_form.html",
{"request": request, "cliente": {"ID": cliente_id}, "dados": dados, "campos": db_clientes.CAMPOS_CLIENTE, "aviso_codigo_duplicado": True},
{"cliente": {"ID": cliente_id}, "dados": dados, "campos": db_clientes.CAMPOS_CLIENTE, "aviso_codigo_duplicado": True},
)
db_clientes.atualizar_cliente(cliente_id, dados)
+8 -1
View File
@@ -14,7 +14,14 @@
</div>
{% endif %}
{% if aviso_dv_invalido %}
<div class="mensagem warning">O dígito verificador do documento ({{ dados.CNPJ }}) não confere — confirme se digitou certo antes de salvar.</div>
<div class="mensagem warning">
O dígito verificador do documento ({{ dados.CNPJ }}) não confere — confirme se digitou certo antes de salvar.
<form method="post">
{% for campo, valor in dados.items() %}<input type="hidden" name="{{ campo }}" value="{{ valor }}">{% endfor %}
<input type="hidden" name="confirmar_dv_invalido" value="1">
<button type="submit">Cadastrar mesmo assim</button>
</form>
</div>
{% endif %}
<form method="post">
{% for campo in campos %}