Skip to content

Commit

Permalink
Merge pull request #968 from guivaloz:guivaloz/mejoras-estados-munici…
Browse files Browse the repository at this point in the history
…pios

Mejoras en Estados y Municipios
  • Loading branch information
guivaloz authored Apr 25, 2024
2 parents 98fec6e + 6d75421 commit f91e308
Show file tree
Hide file tree
Showing 8 changed files with 119 additions and 19 deletions.
4 changes: 2 additions & 2 deletions cli/commands/cmd_estados.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def alimentar(entrada_csv):
for row in rows:
try:
clave = row["estado_clave"].zfill(2)
nombre = row["estado_nombre"]
nombre = safe_string(row["estado_nombre"], save_enie=True)
except (IndexError, ValueError):
click.echo(" Dato incorrecto: " + str(row))
continue
Expand All @@ -54,7 +54,7 @@ def alimentar(entrada_csv):
continue
datos = {
"clave": clave,
"nombre": safe_string(nombre),
"nombre": nombre,
}
Estado(**datos).save()
contador += 1
Expand Down
4 changes: 2 additions & 2 deletions cli/commands/cmd_municipios.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def alimentar(entrada_csv):
try:
estado_clave = row["estado_clave"].zfill(2)
municipio_clave = row["municipio_clave"].zfill(3)
municipio_nombre = row["municipio_nombre"]
municipio_nombre = safe_string(row["municipio_nombre"], save_enie=True)
except (IndexError, ValueError):
click.echo(" Dato incorrecto: " + str(row))
continue
Expand All @@ -61,7 +61,7 @@ def alimentar(entrada_csv):
continue
datos = {
"clave": municipio_clave,
"nombre": safe_string(municipio_nombre),
"nombre": municipio_nombre,
"estado": estado,
}
Municipio(**datos).save()
Expand Down
63 changes: 63 additions & 0 deletions plataforma_web/blueprints/estados/templates/estados/detail.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,70 @@
{{ detail.label_value('Nombre', estado.nombre) }}
{{ detail.label_value('Fecha de creación', estado.creado.strftime('%Y-%m-%d %H:%M')) }}
{% endcall %}
{% if current_user.can_view('MUNICIPIOS') %}
{% call detail.card('Municipios') %}
<!-- Filtros Municipios -->
<div class="row">
<div class="col">
<form class="row g-1 mb-3" id="filtradorForm" onsubmit="filtrosMunicipios.buscar(); return false;">
<div class="col-2">
<div class="form-floating">
<input id="filtroMunicipioClave" type="text" class="form-control" aria-label="Clave del Municipio">
<label for="filtroMunicipioClave">Clave Municipio</label>
</div>
</div>
<div class="col-4">
<div class="form-floating">
<input id="filtroMunicipioNombre" type="text" class="form-control" aria-label="Nombre del Municipio" style="text-transform: uppercase;">
<label for="filtroMunicipioNombre">Nombre del Municipio</label>
</div>
</div>
<div class="col-6 text-end">
<button title="Buscar" class="btn btn-primary btn-lg" onclick="filtrosMunicipios.buscar(); return false;" id="button-buscar"><span class="iconify" data-icon="mdi:magnify"></span></button>
<button title="Limpiar" class="btn btn-warning btn-lg" type="reset" onclick="filtrosMunicipios.limpiar();" id="button-limpiar"><span class="iconify" data-icon="mdi:broom"></span></button>
</div>
</form>
</div>
</div>
<!-- Datatable Municipios -->
<table id="municipios_datatable" class="table display nowrap" style="width:100%">
<thead>
<tr>
<th>Clave del Municipio</th>
<th>Nombre del Municipio</th>
</tr>
</thead>
</table>
{% endcall %}
{% endif %}
{% endblock %}

{% block custom_javascript %}
<script src="/static/js/datatables-constructor.js"></script>
<script src="/static/js/datatables-filtros.js"></script>
<script>
// DataTable Municipios
const constructorDataTable = new ConfigDataTable( '{{ csrf_token() }}' );
let configDTMunicipios = constructorDataTable.config();
configDTMunicipios['ajax']['url'] = '/municipios/datatable_json';
configDTMunicipios['ajax']['data'] = { 'estatus': "A", 'estado_id': {{ estado.id}} };
configDTMunicipios['columns'] = [
{ data: 'detalle' },
{ data: 'municipio_nombre' }
];
configDTMunicipios['columnDefs'] = [
{
targets: 0, // detalle
data: null,
render: function(data, type, row, meta) {
return '<a href="' + data.url + '">' + data.clave + '</a>';
}
}
];
// Filtros Cid Procedimientos
const filtrosMunicipios = new FiltrosDataTable('#municipios_datatable', configDTMunicipios);
filtrosMunicipios.agregarInput('filtroMunicipioClave', 'municipio_clave');
filtrosMunicipios.agregarInput('filtroMunicipioNombre', 'municipio_nombre');
filtrosMunicipios.precargar();
</script>
{% endblock %}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@

{% block topbar_actions %}
{% call topbar.page_buttons(titulo) %}
{% if current_user.can_view('MUNICIPIOS') %}
{{ topbar.button_districts('Municipios', url_for('municipios.list_active')) }}
{% endif %}
{% endcall %}
{% endblock %}

Expand Down Expand Up @@ -74,5 +77,5 @@
filtrosEstados.agregarInput('filtroNombre', 'nombre');
filtrosEstados.precargar();
</script>

{% endblock %}
15 changes: 12 additions & 3 deletions plataforma_web/blueprints/estados/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from flask_login import current_user, login_required

from lib.datatables import get_datatable_parameters, output_datatable_json
from lib.safe_string import safe_string
from lib.safe_string import safe_clave, safe_string

from plataforma_web.blueprints.bitacoras.models import Bitacora
from plataforma_web.blueprints.modulos.models import Modulo
Expand All @@ -34,14 +34,23 @@ def datatable_json():
draw, start, rows_per_page = get_datatable_parameters()
# Consultar
consulta = Estado.query
# Primero filtrar por columnas propias
if "estatus" in request.form:
consulta = consulta.filter_by(estatus=request.form["estatus"])
else:
consulta = consulta.filter_by(estatus="A")
if "clave" in request.form:
consulta = consulta.filter_by(clave=safe_string(request.form["clave"]))
try:
clave = safe_clave(request.form["clave"], max_len=2).zfill(2)
if clave != "":
consulta = consulta.filter(Estado.clave.contains(clave))
except ValueError:
pass
if "nombre" in request.form:
consulta = consulta.filter(Estado.nombre.contains(safe_string(request.form["nombre"])))
nombre = safe_string(request.form["nombre"], save_enie=True)
if nombre != "":
consulta = consulta.filter(Estado.nombre.contains(nombre))
# Ordenar y paginar
registros = consulta.order_by(Estado.id).offset(start).limit(rows_per_page).all()
total = consulta.count()
# Elaborar datos para DataTable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@
{% call detail.card(estatus=municipio.estatus) %}
{{ detail.label_value('Clave del Municipio', municipio.clave) }}
{{ detail.label_value('Nombre del Muncipio', municipio.nombre) }}
{{ detail.label_value('Clave del Estado', municipio.estado.clave) }}
{% if current_user.can_view("ESTADOS") %}
{{ detail.label_value('Clave del Estado', municipio.estado.clave, url_for('estados.detail', estado_id=municipio.estado_id)) }}
{% else %}
{{ detail.label_value('Clave del Estado', municipio.estado.clave) }}
{% endif %}
{{ detail.label_value('Nombre del Estado', municipio.estado.nombre) }}
{{ detail.label_value('Fecha de creación', municipio.creado.strftime('%Y-%m-%d %H:%M')) }}
{% endcall %}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@

{% block topbar_actions %}
{% call topbar.page_buttons(titulo) %}
{% if current_user.can_view('ESTADOS') %}
{{ topbar.button_districts('Estados', url_for('estados.list_active')) }}
{% endif %}
{% endcall %}
{% endblock %}

{% block content %}
{% call list.card() %}
<!-- Filtros CidFormatos -->
<!-- Filtros Municipios -->
<div class="row">
<div class="col">
<form class="row g-1 mb-3" id="filtradorForm" onsubmit="filtrosMunicipios.buscar(); return false;">
Expand Down Expand Up @@ -46,7 +49,7 @@
</form>
</div>
</div>
<!-- Datatable de municipios -->
<!-- Datatable Municipios -->
<table id="municipios_datatable" class="table {% if estatus == 'B'%}table-dark{% endif %} display nowrap" style="width:100%">
<thead>
<tr>
Expand Down Expand Up @@ -92,5 +95,4 @@
filtrosMunicipios.agregarInput('filtroMunicipioNombre', 'municipio_nombre');
filtrosMunicipios.precargar();
</script>

{% endblock %}
33 changes: 26 additions & 7 deletions plataforma_web/blueprints/municipios/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from flask_login import current_user, login_required

from lib.datatables import get_datatable_parameters, output_datatable_json
from lib.safe_string import safe_string, safe_message
from lib.safe_string import safe_clave, safe_string, safe_message

from plataforma_web.blueprints.bitacoras.models import Bitacora
from plataforma_web.blueprints.modulos.models import Modulo
Expand Down Expand Up @@ -35,20 +35,39 @@ def datatable_json():
draw, start, rows_per_page = get_datatable_parameters()
# Consultar
consulta = Municipio.query
# Si viene estado_clave o estado_nombre, hacer join con Estado
if {"estado_clave", "estado_nombre"}.intersection(request.form):
consulta = consulta.join(Estado)
# Primero filtrar por columnas propias
if "estatus" in request.form:
consulta = consulta.filter_by(estatus=request.form["estatus"])
else:
consulta = consulta.filter_by(estatus="A")
if "estado_id" in request.form:
consulta = consulta.filter_by(estado_id=request.form["estado_id"])
if "municipio_clave" in request.form:
consulta = consulta.filter_by(clave=safe_string(request.form["municipio_clave"]))
try:
municipio_clave = safe_clave(request.form["municipio_clave"], max_len=3).zfill(3)
if municipio_clave != "":
consulta = consulta.filter(Municipio.clave.contains(municipio_clave))
except ValueError:
pass
if "municipio_nombre" in request.form:
consulta = consulta.filter(Municipio.nombre.contains(safe_string(request.form["municipio_nombre"])))
if {"estado_clave", "estado_nombre"}.intersection(request.form):
consulta = consulta.join(Estado)
municipio_nombre = safe_string(request.form["municipio_nombre"], save_enie=True)
if municipio_nombre != "":
consulta = consulta.filter(Municipio.nombre.contains(municipio_nombre))
if "estado_clave" in request.form:
consulta = consulta.filter(Estado.clave==safe_string(request.form["estado_clave"]))
try:
estado_clave = safe_clave(request.form["estado_clave"], max_len=2).zfill(2)
if estado_clave != "":
consulta = consulta.filter(Estado.clave.contains(estado_clave))
except ValueError:
pass
if "estado_nombre" in request.form:
consulta = consulta.filter(Estado.nombre.contains(safe_string(request.form["estado_nombre"])))
estado_nombre = safe_string(request.form["estado_nombre"], save_enie=True)
if estado_nombre != "":
consulta = consulta.filter(Estado.nombre.contains(estado_nombre))
# Ordenar y paginar
registros = consulta.order_by(Municipio.id).offset(start).limit(rows_per_page).all()
total = consulta.count()
# Elaborar datos para DataTable
Expand Down

0 comments on commit f91e308

Please sign in to comment.