feat: campo Ativo no cadastro e filtro de status na listagem de clientes

This commit is contained in:
Gustavo
2026-08-20 09:53:55 -03:00
parent 710d688d38
commit 0fdf4ab4e3
3 changed files with 60 additions and 2 deletions
+5
View File
@@ -46,6 +46,11 @@
<input type="date" id="{{ campo }}" name="{{ campo }}" value="{{ dados[campo] if dados else '' }}" {% if campo in campos_obrigatorios %}required{% endif %}>
{% elif campo in ["IMPLANTACAO", "MENSALIDADE", "JUROS_MORA", "JUROS_MULTA"] %}
<input type="number" step="0.01" id="{{ campo }}" name="{{ campo }}" value="{{ dados[campo] if dados else '' }}" {% if campo in campos_obrigatorios %}required{% endif %}>
{% elif campo == "ATIVO" %}
<select id="{{ campo }}" name="{{ campo }}">
<option value="1" {% if (dados[campo] if dados else "1")|string == "1" %}selected{% endif %}>Ativo</option>
<option value="0" {% if (dados[campo] if dados else "1")|string == "0" %}selected{% endif %}>Inativo</option>
</select>
{% else %}
<input type="text" id="{{ campo }}" name="{{ campo }}" value="{{ dados[campo] if dados else '' }}" {% if campo in campos_obrigatorios %}required{% endif %}>
{% if campo == "CNPJ" %}
+9 -2
View File
@@ -13,12 +13,18 @@
<option value="cnpj" {% if ordenar_por == "cnpj" %}selected{% endif %}>CNPJ</option>
</select>
<input type="text" name="busca" value="{{ busca or '' }}" placeholder="Buscar só no campo escolhido acima">
<label for="status">Status</label>
<select id="status" name="status">
<option value="ativos" {% if status == "ativos" %}selected{% endif %}>Ativos</option>
<option value="inativos" {% if status == "inativos" %}selected{% endif %}>Desativados ou inativos</option>
<option value="todos" {% if status == "todos" %}selected{% endif %}>Todos</option>
</select>
<button type="submit">Buscar</button>
</form>
</div>
<p><a class="botao" href="/clientes/novo">+ Novo cliente</a></p>
{% set busca_qs = ('&busca=' + (busca | urlencode)) if busca else '' %}
{% set qs_base = ('&ordenar_por=' + ordenar_por + '&direcao=' + direcao + '&por_pagina=' + (por_pagina | string) + busca_qs) | safe %}
{% set qs_base = ('&ordenar_por=' + ordenar_por + '&direcao=' + direcao + '&por_pagina=' + (por_pagina | string) + '&status=' + status + busca_qs) | safe %}
<div class="tabela-wrap">
<table>
<tr>
@@ -26,7 +32,7 @@
{% for campo, rotulo in colunas_tabela %}
{% set nova_direcao = "desc" if (ordenar_por == campo and direcao == "asc") else "asc" %}
<th>
<a href="/clientes?ordenar_por={{ campo }}&direcao={{ nova_direcao }}&pagina=1&por_pagina={{ por_pagina }}{{ busca_qs }}">
<a href="/clientes?ordenar_por={{ campo }}&direcao={{ nova_direcao }}&pagina=1&por_pagina={{ por_pagina }}&status={{ status }}{{ busca_qs }}">
{{ rotulo }}{% if ordenar_por == campo %}{{ " ▲" if direcao == "asc" else " ▼" }}{% endif %}
</a>
</th>
@@ -53,6 +59,7 @@
<input type="hidden" name="ordenar_por" value="{{ ordenar_por }}">
<input type="hidden" name="direcao" value="{{ direcao }}">
<input type="hidden" name="pagina" value="1">
<input type="hidden" name="status" value="{{ status }}">
{% if busca %}<input type="hidden" name="busca" value="{{ busca }}">{% endif %}
<label for="por_pagina">Linhas por página</label>
<select id="por_pagina" name="por_pagina" onchange="this.form.submit()">
+46
View File
@@ -436,6 +436,52 @@ def test_form_novo_preenche_codigo_sugerido(monkeypatch):
assert 'value="000243"' in resposta.text
def test_form_novo_ativo_pre_selecionado(monkeypatch):
monkeypatch.setattr(router_clientes.db_clientes, "proximo_codigo_sugerido", lambda: "000243")
resposta = client.get("/clientes/novo")
assert resposta.status_code == 200
assert '<option value="1" selected>Ativo</option>' in resposta.text
def test_editar_cliente_ativo_zero_fica_selecionado(monkeypatch):
monkeypatch.setattr(
router_clientes.db_clientes,
"obter_cliente",
lambda cid: {**{c: "" for c in router_clientes.db_clientes.CAMPOS_CLIENTE}, "ID": cid, "ATIVO": 0},
)
resposta = client.get("/clientes/1/editar")
assert resposta.status_code == 200
assert '<option value="0" selected>Inativo</option>' in resposta.text
def test_listar_clientes_tem_select_de_status(monkeypatch):
monkeypatch.setattr(router_clientes.db_clientes, "listar_clientes", lambda **kwargs: [])
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda **kwargs: 0)
resposta = client.get("/clientes")
assert resposta.status_code == 200
assert '<option value="ativos" selected>Ativos</option>' in resposta.text
assert '<option value="inativos" >Desativados ou inativos</option>' in resposta.text
assert '<option value="todos" >Todos</option>' in resposta.text
def test_listar_clientes_status_preservado_nos_links_de_paginacao(monkeypatch):
monkeypatch.setattr(
router_clientes.db_clientes,
"listar_clientes",
lambda **kwargs: [
{"ID": i, "CODIGO": f"{i:06d}", "RAZAO": f"Cliente {i}", "FANTASIA": f"C{i}", "CNPJ": "1"}
for i in range(1, 6)
],
)
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda **kwargs: 250)
resposta = client.get("/clientes?pagina=2&por_pagina=100&status=todos")
assert resposta.status_code == 200
assert "status=todos" in resposta.text
assert '<option value="todos" selected>Todos</option>' in resposta.text
def test_detalhe_cliente_mostra_formulario_de_edicao_de_contato(monkeypatch):
monkeypatch.setattr(
router_clientes.db_clientes,