Skip to content

Commit

Permalink
Merge pull request #978 from guivaloz:guivaloz/roles-filtros
Browse files Browse the repository at this point in the history
Filtros en detalle de Rol
  • Loading branch information
guivaloz authored May 6, 2024
2 parents ea0c4ff + 474c167 commit 06a2b73
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
<form class="row g-1 mb-3" id="filtradorForm" onsubmit="filtrosPermisos.buscar(); return false;">
<div class="col-3">
<div class="form-floating">
<input id="filtroPermisoDescripcion" type="text" class="form-control" aria-label="Descripción" style="text-transform: uppercase;">
<label for="filtroPermisoDescripcion">Descripción</label>
<input id="filtroPermisoNombre" type="text" class="form-control" aria-label="Nombre" style="text-transform: uppercase;">
<label for="filtroPermisoNombre">Nombre</label>
</div>
</div>
<div class="col-3">
Expand Down Expand Up @@ -124,7 +124,7 @@
];
// Filtros permisos
const filtrosPermisos = new FiltrosDataTable('#permisos_datatable', configDataTable);
filtrosPermisos.agregarInput('filtroPermisoDescripcion', 'descripcion');
filtrosPermisos.agregarInput('filtroPermisoNombre', 'nombre');
filtrosPermisos.agregarInput('filtroPermisoRolNombre', 'rol_nombre');
filtrosPermisos.agregarInput('filtroPermisoModuloNombre', 'modulo_nombre');
filtrosPermisos.agregarInput('filtroPermisoNivel', 'nivel');
Expand Down
8 changes: 4 additions & 4 deletions plataforma_web/blueprints/permisos/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ def datatable_json():
consulta = consulta.filter_by(modulo_id=request.form["modulo_id"])
if "rol_id" in request.form:
consulta = consulta.filter_by(rol_id=request.form["rol_id"])
if "descripcion" in request.form:
descripcion = safe_string(request.form["descripcion"], save_enie=True)
if descripcion != "":
consulta = consulta.filter(Permiso.descripcion.contains(descripcion))
if "nombre" in request.form:
nombre = safe_string(request.form["nombre"], save_enie=True)
if nombre != "":
consulta = consulta.filter(Permiso.nombre.contains(nombre))
if "nivel" in request.form:
nivel = safe_string(request.form["nivel"], save_enie=True)
if nivel != "":
Expand Down
118 changes: 97 additions & 21 deletions plataforma_web/blueprints/roles/templates/roles/detail.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,45 @@
{% block content %}
{% if current_user.can_view('PERMISOS') %}
{% call detail.card('Permisos') %}
<!-- Filtros permisos -->
<div class="row">
<div class="col">
<form class="row g-1 mb-3" id="filtradorForm" onsubmit="filtrosPermisos.buscar(); return false;">
<div class="col-3">
<div class="form-floating">
<input id="filtroPermisoNombre" type="text" class="form-control" aria-label="Nombre" style="text-transform: uppercase;">
<label for="filtroPermisoNombre">Nombre</label>
</div>
</div>
<div class="col-3">
<div class="form-floating">
<input id="filtroPermisoModuloNombre" type="text" class="form-control" aria-label="Módulo" style="text-transform: uppercase;">
<label for="filtroPermisoModuloNombre">Módulo</label>
</div>
</div>
<div class="col-3">
<select id="filtroPermisoNivel" class="form-select" aria-label="Nivel">
<option selected value="">Todos los niveles</option>
<option value="1">VER</option>
<option value="2">VER y MODIFICAR</option>
<option value="3">VER, MODIFICAR y CREAR</option>
<option value="4">ADMINISTRAR</option>
</select>
</div>
<div class="col-3 text-end">
<button title="Buscar" class="btn btn-primary btn-lg" onclick="filtrosPermisos.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="filtrosPermisos.limpiar();" id="button-limpiar"><span class="iconify" data-icon="mdi:broom"></span></button>
</div>
</form>
</div>
</div>
<!-- Datatable permisos -->
<table id="permisos_datatable" class="table display nowrap" style="width:100%">
<thead>
<tr>
<th>Nombres</th>
<th>Modulos</th>
<th>Niveles</th>
<th>Nombre</th>
<th>Módulo</th>
<th>Nivel</th>
</tr>
</thead>
</table>
Expand All @@ -36,6 +69,36 @@
{% endif %}
{% if current_user.can_view('USUARIOS ROLES') %}
{% call detail.card('Usuarios') %}
<!-- Filtros usuarios-roles -->
<div class="row">
<div class="col">
<form class="row g-1 mb-3" id="filtradorForm" onsubmit="filtrosUsuarios.buscar(); return false;">
<div class="col-4">
<div class="form-floating">
<input id="filtroEMail" type="text" class="form-control" aria-label="e-mail">
<label for="filtroEMail">e-mail</label>
</div>
</div>
<div class="col-3">
<div class="form-floating">
<input id="filtroNombres" type="text" class="form-control" aria-label="Nombres" style="text-transform: uppercase;">
<label for="filtroNombres">Nombres</label>
</div>
</div>
<div class="col-3">
<div class="form-floating">
<input id="filtroApellidoPrimero" type="text" class="form-control" aria-label="Apellido primero" style="text-transform: uppercase;">
<label for="filtroApellidoPrimero">Apellido primero</label>
</div>
</div>
<div class="col-2 text-end">
<button title="Buscar" class="btn btn-primary btn-lg" onclick="filtrosUsuarios.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="filtrosUsuarios.limpiar();" id="button-limpiar"><span class="iconify" data-icon="mdi:broom"></span></button>
</div>
</form>
</div>
</div>
<!-- Datatable usuarios-roles -->
<table id="usuarios_roles_datatable" class="table display nowrap" style="width:100%">
<thead>
<tr>
Expand All @@ -55,23 +118,23 @@
{% if rol.estatus == 'A' %}{{ modals.custom_javascript_delete('Eliminar', '¿Eliminar a ' + rol.nombre + '?') }}{% endif %}
{% if rol.estatus == 'B' %}{{ modals.custom_javascript_recover('Recuperar', '¿Recuperar a ' + rol.nombre + '?') }}{% endif %}
{% endif %}
{% if current_user.can_edit('PERMISOS') %}
{{ modals.custom_javascript('Eliminar', '¿Eliminar ese permiso del rol?', 'DeletePermiso') }}
{% endif %}
{% if current_user.can_edit('USUARIOS ROLES') %}
{{ modals.custom_javascript('Eliminar', '¿Eliminar ese usuario del rol?', 'DeleteUsuarioRol') }}
{% endif %}
{{ detail.config_datatable() }}
<script src="/static/js/datatables-constructor.js"></script>
<script src="/static/js/datatables-filtros.js"></script>
<script>
const constructorDataTable = new ConfigDataTable( '{{ csrf_token() }}' );
</script>
{% if current_user.can_view('PERMISOS') %}
<script>
configDataTable['ajax']['url'] = '/permisos/datatable_json';
configDataTable['ajax']['data'] = { 'estatus': "A", 'rol_id': {{ rol.id }} };
configDataTable['columns'] = [
// DataTable permisos
let configDTPermisos = constructorDataTable.config();
configDTPermisos['ajax']['url'] = '/permisos/datatable_json';
configDTPermisos['ajax']['data'] = { 'estatus': "A", 'rol_id': {{ rol.id}} };
configDTPermisos['columns'] = [
{ data: "detalle" },
{ data: "modulo" },
{ data: "nivel" }
];
configDataTable['columnDefs'] = [
configDTPermisos['columnDefs'] = [
{
targets: 0, // detalle
data: null,
Expand All @@ -91,20 +154,27 @@
}
}
];
$('#permisos_datatable').DataTable(configDataTable);
// Filtros permisos
const filtrosPermisos = new FiltrosDataTable('#permisos_datatable', configDTPermisos);
filtrosPermisos.agregarInput('filtroPermisoNombre', 'nombre');
filtrosPermisos.agregarInput('filtroPermisoModuloNombre', 'modulo_nombre');
filtrosPermisos.agregarInput('filtroPermisoNivel', 'nivel');
filtrosPermisos.precargar();
</script>
{% endif %}
{% if current_user.can_view('USUARIOS ROLES') %}
<script>
configDataTable['ajax']['url'] = '/usuarios_roles/datatable_json';
configDataTable['ajax']['data'] = { 'estatus': "A", 'rol_id': {{ rol.id }} };
configDataTable['columns'] = [
// DataTable usuarios-roles
let configDTUsuarios = constructorDataTable.config();
configDTUsuarios['ajax']['url'] = '/usuarios_roles/datatable_json';
configDTUsuarios['ajax']['data'] = { 'estatus': "A", 'rol_id': {{ rol.id}} };
configDTUsuarios['columns'] = [
{ data: "detalle" },
{ data: "usuario" },
{ data: "usuario_nombre" },
{ data: "usuario_puesto" }
];
configDataTable['columnDefs'] = [
configDTUsuarios['columnDefs'] = [
{
targets: 0, // detalle
data: null,
Expand All @@ -127,11 +197,17 @@
targets: [2, 3], // usuario_nombre, usuario_puesto
data: null,
render: function(data, type, row, meta) {
return (data.length > 24 ? data.substr(0, 24) + '' : data);
return (data.length > 32 ? data.substr(0, 32) + '' : data);
}
}
];
$('#usuarios_roles_datatable').DataTable(configDataTable);
// Filtros usuarios-roles
const filtrosUsuarios = new FiltrosDataTable('#usuarios_roles_datatable', configDTUsuarios);
filtrosUsuarios.agregarInput('filtroEMail', 'email');
filtrosUsuarios.agregarInput('filtroNombres', 'nombres');
filtrosUsuarios.agregarInput('filtroApellidoPrimero', 'apellido_paterno');
filtrosUsuarios.precargar();
</script>
{% endif %}
{{ detail.moment_js(moment) }}
{% endblock %}
3 changes: 3 additions & 0 deletions plataforma_web/blueprints/usuarios/views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
Usuarios, vistas
"""

import json
import os
import re
Expand Down Expand Up @@ -212,6 +213,7 @@ def datatable_json():
consulta = consulta.filter_by(estatus=request.form["estatus"])
else:
consulta = consulta.filter_by(estatus="A")
# Primero filtrar por columnas propias
if "autoridad_id" in request.form:
consulta = consulta.filter_by(autoridad_id=request.form["autoridad_id"])
if "oficina_id" in request.form:
Expand All @@ -234,6 +236,7 @@ def datatable_json():
consulta = consulta.filter(Usuario.email.contains(safe_email(request.form["email"], search_fragment=True)))
if "workspace" in request.form:
consulta = consulta.filter(Usuario.workspace == safe_string(request.form["email"]))
# Ordenar y paginar
registros = consulta.order_by(Usuario.email).offset(start).limit(rows_per_page).all()
total = consulta.count()
# Elaborar datos para DataTable
Expand Down
23 changes: 23 additions & 0 deletions plataforma_web/blueprints/usuarios_roles/views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
Usuarios Roles, vistas
"""

import json

from flask import Blueprint, flash, redirect, render_template, request, url_for
Expand Down Expand Up @@ -44,6 +45,28 @@ def datatable_json():
consulta = consulta.filter_by(usuario_id=request.form["usuario_id"])
if "rol_id" in request.form:
consulta = consulta.filter_by(rol_id=request.form["rol_id"])
# Luego filtrar por columnas de otras tablas
email = ""
if "email" in request.form:
try:
email = safe_email(request.form["email"], search_fragment=True)
except ValueError:
pass
nombres = ""
if "nombres" in request.form:
nombres = safe_string(request.form["nombres"], save_enie=True)
apellido_paterno = ""
if "apellido_paterno" in request.form:
apellido_paterno = safe_string(request.form["apellido_paterno"], save_enie=True)
if email != "" or nombres != "" or apellido_paterno != "":
consulta = consulta.join(Usuario)
if email != "":
consulta = consulta.filter(Usuario.email.contains(email))
if nombres != "":
consulta = consulta.filter(Usuario.nombres.contains(nombres))
if apellido_paterno != "":
consulta = consulta.filter(Usuario.apellido_paterno.contains(apellido_paterno))
# Ordenar y paginar
registros = consulta.order_by(UsuarioRol.descripcion).offset(start).limit(rows_per_page).all()
total = consulta.count()
# Elaborar datos para DataTable
Expand Down

0 comments on commit 06a2b73

Please sign in to comment.