feat: campo Ativo no cadastro e filtro de status na listagem de clientes
This commit is contained in:
@@ -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" %}
|
||||
|
||||
@@ -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()">
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user