Skip to content

Commit

Permalink
Merge pull request #966 from ricval/Exhortos-Estados-y-municipios-vistas
Browse files Browse the repository at this point in the history
Exhortos - estados y municipios vistas
  • Loading branch information
guivaloz authored Apr 25, 2024
2 parents b1fcc40 + 2a62e6b commit 98fec6e
Show file tree
Hide file tree
Showing 6 changed files with 241 additions and 2 deletions.
23 changes: 23 additions & 0 deletions plataforma_web/blueprints/estados/templates/estados/detail.jinja2
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{% extends 'layouts/app.jinja2' %}
{% import 'macros/detail.jinja2' as detail %}
{% import 'macros/modals.jinja2' as modals %}
{% import 'macros/topbar.jinja2' as topbar %}

{% block title %}Estado{% endblock %}

{% block topbar_actions %}
{% call topbar.page_buttons(estado.nombre) %}
{{ topbar.button_previous('Estados', url_for('estados.list_active')) }}
{% endcall %}
{% endblock %}

{% block content %}
{% call detail.card(estatus=estado.estatus) %}
{{ detail.label_value('Clave', estado.clave) }}
{{ detail.label_value('Nombre', estado.nombre) }}
{{ detail.label_value('Fecha de creación', estado.creado.strftime('%Y-%m-%d %H:%M')) }}
{% endcall %}
{% endblock %}

{% block custom_javascript %}
{% endblock %}
78 changes: 78 additions & 0 deletions plataforma_web/blueprints/estados/templates/estados/list.jinja2
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{% extends 'layouts/app.jinja2' %}
{% import 'macros/list.jinja2' as list %}
{% import 'macros/topbar.jinja2' as topbar %}

{% block title %}Estados{% endblock %}

{% block topbar_actions %}
{% call topbar.page_buttons(titulo) %}
{% endcall %}
{% endblock %}

{% block content %}
{% call list.card() %}
<!-- Filtros CidFormatos -->
<div class="row">
<div class="col">
<form class="row g-1 mb-3" id="filtradorForm" onsubmit="filtrosEstados.buscar(); return false;">
<div class="col-2">
<div class="form-floating">
<input id="filtroClave" type="text" class="form-control" aria-label="Clave">
<label for="filtroClave">Clave</label>
</div>
</div>
<div class="col-8">
<div class="form-floating">
<input id="filtroNombre" type="text" class="form-control" aria-label="Nombre" style="text-transform: uppercase;">
<label for="filtroNombre">Nombre</label>
</div>
</div>
<div class="col-2 text-end">
<button title="Buscar" class="btn btn-primary btn-lg" onclick="filtrosEstados.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="filtrosEstados.limpiar();" id="button-limpiar"><span class="iconify" data-icon="mdi:broom"></span></button>
</div>
</form>
</div>
</div>
<!-- Datatable de estados -->
<table id="estados_datatable" class="table {% if estatus == 'B'%}table-dark{% endif %} display nowrap" style="width:100%">
<thead>
<tr>
<th>Claves</th>
<th>Nombres</th>
</tr>
</thead>
</table>
{% endcall %}
{% endblock %}

{% block custom_javascript %}
<script src="/static/js/datatables-constructor.js"></script>
<script src="/static/js/datatables-filtros.js"></script>
<script>
// DataTable Estados
const constructorDataTable = new ConfigDataTable( '{{ csrf_token() }}' );
let configDTEstados = constructorDataTable.config();
configDTEstados['ajax']['url'] = '/estados/datatable_json';
configDTEstados['ajax']['data'] = {{ filtros }};
configDTEstados['columns'] = [
{ data: 'detalle' },
{ data: 'nombre' },
];
configDTEstados['columnDefs'] = [
{
targets: 0, // detalle
data: null,
render: function(data, type, row, meta) {
return '<a href="' + data.url + '">' + data.clave + '</a>';
}
}
];
// Filtros Cid Procedimientos
const filtrosEstados = new FiltrosDataTable('#estados_datatable', configDTEstados);
filtrosEstados.agregarInput('filtroClave', 'clave');
filtrosEstados.agregarInput('filtroNombre', 'nombre');
filtrosEstados.precargar();
</script>

{% endblock %}
6 changes: 5 additions & 1 deletion 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, safe_message
from lib.safe_string import safe_string

from plataforma_web.blueprints.bitacoras.models import Bitacora
from plataforma_web.blueprints.modulos.models import Modulo
Expand Down Expand Up @@ -38,6 +38,10 @@ def datatable_json():
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"]))
if "nombre" in request.form:
consulta = consulta.filter(Estado.nombre.contains(safe_string(request.form["nombre"])))
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
@@ -0,0 +1,25 @@
{% extends 'layouts/app.jinja2' %}
{% import 'macros/detail.jinja2' as detail %}
{% import 'macros/modals.jinja2' as modals %}
{% import 'macros/topbar.jinja2' as topbar %}

{% block title %}Municipio{% endblock %}

{% block topbar_actions %}
{% call topbar.page_buttons(municipio.nombre) %}
{{ topbar.button_previous('Municipios', url_for('municipios.list_active')) }}
{% endcall %}
{% endblock %}

{% block content %}
{% 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) }}
{{ 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 %}
{% endblock %}

{% block custom_javascript %}
{% endblock %}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
{% extends 'layouts/app.jinja2' %}
{% import 'macros/list.jinja2' as list %}
{% import 'macros/topbar.jinja2' as topbar %}

{% block title %}Municipios{% endblock %}

{% block topbar_actions %}
{% call topbar.page_buttons(titulo) %}
{% endcall %}
{% endblock %}

{% block content %}
{% call list.card() %}
<!-- Filtros CidFormatos -->
<div class="row">
<div class="col">
<form class="row g-1 mb-3" id="filtradorForm" onsubmit="filtrosMunicipios.buscar(); return false;">
<div class="col-1">
<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-1">
<div class="form-floating">
<input id="filtroEstadoClave" type="text" class="form-control" aria-label="Clave del Estado">
<label for="filtroEstadoClave">Clave Estado</label>
</div>
</div>
<div class="col-4">
<div class="form-floating">
<input id="filtroEstadoNombre" type="text" class="form-control" aria-label="Nombre del Estado" style="text-transform: uppercase;">
<label for="filtroEstadoNombre">Nombre del Estado</label>
</div>
</div>
<div class="col-2 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 de municipios -->
<table id="municipios_datatable" class="table {% if estatus == 'B'%}table-dark{% endif %} display nowrap" style="width:100%">
<thead>
<tr>
<th>Claves del Municipio</th>
<th>Nombres de los Municipios</th>
<th>Claves de Estados</th>
<th>Estados</th>
</tr>
</thead>
</table>
{% endcall %}
{% 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'] = {{ filtros }};
configDTMunicipios['columns'] = [
{ data: 'detalle' },
{ data: 'municipio_nombre' },
{ data: 'estado_clave' },
{ data: 'estado_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('filtroEstadoClave', 'estado_clave');
filtrosMunicipios.agregarInput('filtroEstadoNombre', 'estado_nombre');
filtrosMunicipios.agregarInput('filtroMunicipioClave', 'municipio_clave');
filtrosMunicipios.agregarInput('filtroMunicipioNombre', 'municipio_nombre');
filtrosMunicipios.precargar();
</script>

{% endblock %}
15 changes: 14 additions & 1 deletion plataforma_web/blueprints/municipios/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from plataforma_web.blueprints.permisos.models import Permiso
from plataforma_web.blueprints.usuarios.decorators import permission_required
from plataforma_web.blueprints.municipios.models import Municipio
from plataforma_web.blueprints.estados.models import Estado

MODULO = "MUNICIPIOS"

Expand All @@ -38,6 +39,16 @@ def datatable_json():
consulta = consulta.filter_by(estatus=request.form["estatus"])
else:
consulta = consulta.filter_by(estatus="A")
if "municipio_clave" in request.form:
consulta = consulta.filter_by(clave=safe_string(request.form["municipio_clave"]))
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)
if "estado_clave" in request.form:
consulta = consulta.filter(Estado.clave==safe_string(request.form["estado_clave"]))
if "estado_nombre" in request.form:
consulta = consulta.filter(Estado.nombre.contains(safe_string(request.form["estado_nombre"])))
registros = consulta.order_by(Municipio.id).offset(start).limit(rows_per_page).all()
total = consulta.count()
# Elaborar datos para DataTable
Expand All @@ -49,7 +60,9 @@ def datatable_json():
"clave": resultado.clave,
"url": url_for("municipios.detail", municipio_id=resultado.id),
},
"nombre": resultado.nombre,
"municipio_nombre": resultado.nombre,
"estado_clave": resultado.estado.clave,
"estado_nombre": resultado.estado.nombre,
}
)
# Entregar JSON
Expand Down

0 comments on commit 98fec6e

Please sign in to comment.