menu reportes a modal

This commit is contained in:
2026-03-22 19:50:27 -03:00
parent c6440e819e
commit e801fb9ee1
7 changed files with 136 additions and 145 deletions

View File

@@ -38,6 +38,8 @@ services:
- ver como funcionan los productos / precios de HC
# TODO general:
- generar reportes y exportar a excel
- sistema de comisiones para gente part time temporal(?)
- tabla de productos vendidos durante el mes
- formulario de cosas robadas
- implementar horas extra?
@@ -54,9 +56,10 @@ services:
- categorias de productos (complementos, etc)
- precio de prodcot por zona
- proteccion contra borrado de zonas o modulos i ya estan asignados a algo
- ahcer que contraseña autogerada force a crear una neva
# TODO quizas:
- generar reportes(?)
# TODO no prioritario:
- dejar mas bonito las cosas de admin en media ventana o otros formatos
# TODO peppermint:
## formulario

19
app.py
View File

@@ -868,25 +868,6 @@ def admin_reportes_index():
return render_template('admin_reportes_index.html', modulos=modulos)
@app.route('/admin/reportes/modulo/<int:modulo_id>/menu')
@admin_required
def admin_reportes_menu_modulo(modulo_id):
# Esta ruta muestra las opciones de reporte para un módulo específico
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
c.execute("SELECT name FROM modulos WHERE id = ?", (modulo_id,))
modulo_info = c.fetchone()
conn.close()
if not modulo_info:
flash("Módulo no encontrado.", "danger")
return redirect(url_for('admin_reportes_index'))
modulo_name = modulo_info[0]
return render_template('admin_reportes_menu.html', modulo_id=modulo_id, modulo_name=modulo_name)
@app.route('/admin/reportes/modulo/<int:modulo_id>')
@admin_required
def report_modulo_periodo(modulo_id):

View File

@@ -2,10 +2,10 @@ name: rendiciones
services:
rendiciones:
ports:
- 5001:5000
- 5500:5000
volumes:
- YOUR_PATH/rendiciones/db:/app/db
- YOUR_PATH/rendiciones/static/cache:/app/static/cache
- /home/shironeko/Documents/dockerVols/rendiciones/db:/app/db
- /home/shironeko/Documents/dockerVols/rendiciones/static/cache:/app/static/cache
container_name: rendiciones-server
image: rendiciones:latest
restart: unless-stopped

View File

@@ -26,8 +26,8 @@
{% block content %}
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<a href="{{ url_for('admin_reportes_menu_modulo', modulo_id=request.view_args.get('modulo_id', 0)) }}" class="btn btn-outline-secondary btn-sm mb-2">
<i class="bi bi-arrow-left"></i> Volver al Menú
<a href="{{ url_for('admin_reportes_index') }}" class="btn btn-outline-secondary btn-sm mb-2">
<i class="bi bi-arrow-left"></i> Volver al Menú
</a>
<h2>Resumen Financiero y Medios de Pago</h2>
</div>

View File

@@ -1,4 +1,5 @@
{% extends "macros/base.html" %}
{% from "macros/modals.html" import reportes_menu_modal %}
{% block title %}Panel de Reportes{% endblock %}
@@ -20,7 +21,7 @@
<div class="row g-4">
{% for mod in lista_modulos %}
<div class="col-md-4 col-sm-6">
<a href="{{ url_for('admin_reportes_menu_modulo', modulo_id=mod[0]) }}" class="text-decoration-none">
<a href="#" class="text-decoration-none" data-bs-toggle="modal" data-bs-target="#reportMenuModal{{ mod[0] }}">
<div class="card shadow-sm h-100 border-0 hover-shadow transition-all bg-dark-subtle">
<div class="card-body text-center py-4">
<div class="mb-3">
@@ -39,11 +40,25 @@
<div class="alert alert-info">No hay módulos registrados en el sistema.</div>
{% endfor %}
{% for zona_name, lista_modulos in modulos|groupby(2) %}
{% for mod in lista_modulos %}
{{ reportes_menu_modal(mod[0], mod[1]) }}
{% endfor %}
{% endfor %}
<style>
.hover-shadow:hover {
transform: translateY(-5px);
box-shadow: 0 .5rem 1rem rgba(0,0,0,.3)!important;
border-color: #0dcaf0 !important; /* Resalta en azul claro (info) al pasar el mouse */
border-color: #0dcaf0 !important;
}
.hover-card {
transition: transform 0.2s ease, box-shadow 0.2s ease;
background-color: #1e2125;
}
.hover-card:hover {
transform: translateY(-3px);
box-shadow: 0 .5rem 1rem rgba(0,0,0,.25)!important;
}
.transition-all {
transition: all .3s ease-in-out;

View File

@@ -1,117 +0,0 @@
{% extends "macros/base.html" %}
{% block title %}Menú de Reportes - {{ modulo_name }}{% endblock %}
{% block content %}
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<a href="{{ url_for('admin_reportes_index') }}" class="btn btn-outline-secondary btn-sm mb-2">
<i class="bi bi-arrow-left"></i> Volver a Módulos
</a>
<h2>Reportes: <span class="text-info">{{ modulo_name }}</span></h2>
</div>
</div>
<div class="row g-4 mt-2">
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body">
<div class="d-flex align-items-center mb-3">
<div class="bg-primary text-white rounded p-3 me-3">
<i class="bi bi-cash-coin fs-4"></i>
</div>
<h5 class="card-title mb-0">Detalle de Ventas y Medios de Pago</h5>
</div>
<p class="text-muted small">Análisis detallado de ventas diarias, productos vendidos y consolidado mensual.</p>
<a href="{{ url_for('report_modulo_periodo', modulo_id=modulo_id) }}" class="btn btn-primary w-100">Generar Reporte</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body">
<div class="d-flex align-items-center mb-3">
<div class="bg-success text-white rounded p-3 me-3">
<i class="bi bi-percent fs-4"></i>
</div>
<h5 class="card-title mb-0">Comisiones</h5>
</div>
<p class="text-muted small">Cálculo de comisiones generadas por los trabajadores en este módulo.</p>
<button class="btn btn-outline-success w-100" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body">
<div class="d-flex align-items-center mb-3">
<div class="bg-warning text-dark rounded p-3 me-3">
<i class="bi bi-clock-history fs-4"></i>
</div>
<h5 class="card-title mb-0">Control de Horarios</h5>
</div>
<p class="text-muted small">Registro de horas de entrada y salida de los trabajadores y acompañantes.</p>
<button class="btn btn-outline-warning w-100" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body">
<div class="d-flex align-items-center mb-3">
<div class="bg-info text-dark rounded p-3 me-3">
<i class="bi bi-building fs-4"></i>
</div>
<h5 class="card-title mb-0">Centros Comerciales</h5>
</div>
<p class="text-muted small">Reporte de datos exigidos por la administración del centro comercial.</p>
<button class="btn btn-outline-info w-100" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body">
<div class="d-flex align-items-center mb-3">
<div class="bg-secondary text-white rounded p-3 me-3">
<i class="bi bi-calculator fs-4"></i>
</div>
<h5 class="card-title mb-0">Cálculo de IVA</h5>
</div>
<p class="text-muted small">Proyección de impuestos basados en las ventas declaradas.</p>
<button class="btn btn-outline-secondary w-100" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body">
<div class="d-flex align-items-center mb-3">
<div class="bg-danger text-white rounded p-3 me-3">
<i class="bi bi-shield-exclamation fs-4"></i>
</div>
<h5 class="card-title mb-0">Robos y Mermas</h5>
</div>
<p class="text-muted small">Cuadratura de inventario y registro de pérdida de productos.</p>
<button class="btn btn-outline-danger w-100" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
</div>
<style>
.hover-card {
transition: transform 0.2s ease, box-shadow 0.2s ease;
background-color: #1e2125; /* Fondo oscuro sutil */
}
.hover-card:hover {
transform: translateY(-3px);
box-shadow: 0 .5rem 1rem rgba(0,0,0,.25)!important;
}
</style>
{% endblock %}

View File

@@ -385,4 +385,113 @@
</div>
</div>
</div>
{% endmacro %}
{% macro reportes_menu_modal(modulo_id, modulo_name) %}
<div class="modal fade" id="reportMenuModal{{ modulo_id }}" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Reportes: <span class="text-info">{{ modulo_name }}</span></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body bg-body-tertiary text-start">
<div class="row g-4 mt-1 mb-3">
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body d-flex flex-column">
<div class="d-flex align-items-center mb-3">
<div class="bg-primary text-white rounded p-3 me-3">
<i class="bi bi-cash-coin fs-4"></i>
</div>
<h5 class="card-title mb-0">Detalle de Ventas</h5>
</div>
<p class="text-muted small flex-grow-1">Análisis detallado de ventas diarias, productos vendidos y consolidado mensual.</p>
<a href="{{ url_for('report_modulo_periodo', modulo_id=modulo_id) }}" class="btn btn-primary w-100 mt-3">Generar Reporte</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body d-flex flex-column">
<div class="d-flex align-items-center mb-3">
<div class="bg-success text-white rounded p-3 me-3">
<i class="bi bi-percent fs-4"></i>
</div>
<h5 class="card-title mb-0">Comisiones</h5>
</div>
<p class="text-muted small flex-grow-1">Cálculo de comisiones generadas por los trabajadores en este módulo.</p>
<button class="btn btn-outline-success w-100 mt-3" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body d-flex flex-column">
<div class="d-flex align-items-center mb-3">
<div class="bg-warning text-dark rounded p-3 me-3">
<i class="bi bi-clock-history fs-4"></i>
</div>
<h5 class="card-title mb-0">Control de Horarios</h5>
</div>
<p class="text-muted small flex-grow-1">Registro de horas de entrada y salida de los trabajadores y acompañantes.</p>
<button class="btn btn-outline-warning w-100 mt-3" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body d-flex flex-column">
<div class="d-flex align-items-center mb-3">
<div class="bg-info text-dark rounded p-3 me-3">
<i class="bi bi-building fs-4"></i>
</div>
<h5 class="card-title mb-0">Centros Comerciales</h5>
</div>
<p class="text-muted small flex-grow-1">Reporte de datos exigidos por la administración del centro comercial.</p>
<button class="btn btn-outline-info w-100 mt-3" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body d-flex flex-column">
<div class="d-flex align-items-center mb-3">
<div class="bg-secondary text-white rounded p-3 me-3">
<i class="bi bi-calculator fs-4"></i>
</div>
<h5 class="card-title mb-0">Cálculo de IVA</h5>
</div>
<p class="text-muted small flex-grow-1">Proyección de impuestos basados en las ventas declaradas.</p>
<button class="btn btn-outline-secondary w-100 mt-3" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100 hover-card">
<div class="card-body d-flex flex-column">
<div class="d-flex align-items-center mb-3">
<div class="bg-danger text-white rounded p-3 me-3">
<i class="bi bi-shield-exclamation fs-4"></i>
</div>
<h5 class="card-title mb-0">Robos y Mermas</h5>
</div>
<p class="text-muted small flex-grow-1">Cuadratura de inventario y registro de pérdida de productos.</p>
<button class="btn btn-outline-danger w-100 mt-3" onclick="alert('Reporte en construcción')">Generar Reporte</button>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
</div>
</div>
</div>
</div>
{% endmacro %}