bank fields, date range filters, add worker modal, fix empty report crash

This commit is contained in:
2026-06-22 01:28:33 -04:00
parent dcad421c27
commit 81251fb869
16 changed files with 346 additions and 225 deletions

View File

@@ -14,40 +14,13 @@
<form method="GET" action="{{ url_for('admin.admin_rendiciones') }}" id="filterForm">
<div class="row g-2 align-items-end">
<div class="col-md-2">
<label class="form-label small text-muted mb-1">Año</label>
<select name="anio" class="form-select form-select-sm">
{% for anio in anios_disponibles %}
<option value="{{ anio }}" {% if anio_actual == anio %}selected{% endif %}>{{ anio }}</option>
{% endfor %}
</select>
<label class="form-label small text-muted mb-1">Desde</label>
<input type="date" name="fecha_inicio" class="form-control form-control-sm" value="{{ fecha_inicio }}">
</div>
<div class="col-md-2">
<label class="form-label small text-muted mb-1">Mes</label>
<select name="mes" class="form-select form-select-sm">
<option value="01" {% if mes_actual == '01' %}selected{% endif %}>Enero</option>
<option value="02" {% if mes_actual == '02' %}selected{% endif %}>Febrero</option>
<option value="03" {% if mes_actual == '03' %}selected{% endif %}>Marzo</option>
<option value="04" {% if mes_actual == '04' %}selected{% endif %}>Abril</option>
<option value="05" {% if mes_actual == '05' %}selected{% endif %}>Mayo</option>
<option value="06" {% if mes_actual == '06' %}selected{% endif %}>Junio</option>
<option value="07" {% if mes_actual == '07' %}selected{% endif %}>Julio</option>
<option value="08" {% if mes_actual == '08' %}selected{% endif %}>Agosto</option>
<option value="09" {% if mes_actual == '09' %}selected{% endif %}>Septiembre</option>
<option value="10" {% if mes_actual == '10' %}selected{% endif %}>Octubre</option>
<option value="11" {% if mes_actual == '11' %}selected{% endif %}>Noviembre</option>
<option value="12" {% if mes_actual == '12' %}selected{% endif %}>Diciembre</option>
</select>
<label class="form-label small text-muted mb-1">Hasta</label>
<input type="date" name="fecha_fin" class="form-control form-control-sm" value="{{ fecha_fin }}">
</div>
<div class="col-md-1">
<label class="form-label small text-muted mb-1">Día</label>
<select name="dia" class="form-select form-select-sm">
<option value="">Todos</option>
{% for d in dias_disponibles %}
<option value="{{ d }}" {% if dia_actual == d %}selected{% endif %}>{{ d }}</option>
{% endfor %}
</select>
</div>
<div class="col-md-3">
<label class="form-label small text-muted mb-1">Zona</label>
<select name="zona_id" id="zonaSelect" class="form-select form-select-sm">
@@ -66,8 +39,7 @@
{% endfor %}
</select>
</div>
<div class="col-md-1">
<div class="col-md-2">
<button type="submit" class="btn btn-primary btn-sm w-100"><i class="bi bi-search"></i> Filtrar</button>
</div>
</div>

View File

@@ -16,14 +16,11 @@
</div>
</div>
{{ report_filters(
url_for('admin.report_modulo_periodo', modulo_id=modulo_id),
url_for('admin.report_modulo_centros_comerciales', modulo_id=modulo_id),
workers_list,
worker_actual,
dia_actual,
[('01','Ene'),('02','Feb'),('03','Mar'),('04','Abr'),('05','May'),('06','Jun'),('07','Jul'),('08','Ago'),('09','Sep'),('10','Oct'),('11','Nov'),('12','Dic')],
mes_actual,
anios_disponibles,
anio_actual
fecha_inicio,
fecha_fin
) }}
<div class="card shadow-sm border-0">
<div class="card-body p-0">

View File

@@ -16,14 +16,11 @@
</div>
</div>
{{ report_filters(
url_for('admin.report_modulo_periodo', modulo_id=modulo_id),
url_for('admin.report_modulo_comisiones', modulo_id=modulo_id),
workers_list,
worker_actual,
dia_actual,
[('01','Ene'),('02','Feb'),('03','Mar'),('04','Abr'),('05','May'),('06','Jun'),('07','Jul'),('08','Ago'),('09','Sep'),('10','Oct'),('11','Nov'),('12','Dic')],
mes_actual,
anios_disponibles,
anio_actual
fecha_inicio,
fecha_fin
) }}
<div class="card shadow-sm border-0">
<div class="card-body">

View File

@@ -16,14 +16,11 @@
</div>
</div>
{{ report_filters(
url_for('admin.report_modulo_periodo', modulo_id=modulo_id),
url_for('admin.report_modulo_horarios', modulo_id=modulo_id),
workers_list,
worker_actual,
dia_actual,
[('01','Ene'),('02','Feb'),('03','Mar'),('04','Abr'),('05','May'),('06','Jun'),('07','Jul'),('08','Ago'),('09','Sep'),('10','Oct'),('11','Nov'),('12','Dic')],
mes_actual,
anios_disponibles,
anio_actual
fecha_inicio,
fecha_fin
) }}
{% if workers_data %}
<div class="card shadow-sm border-0">

View File

@@ -16,14 +16,11 @@
</div>
</div>
{{ report_filters(
url_for('admin.report_modulo_periodo', modulo_id=modulo_id),
url_for('admin.report_modulo_calculo_iva', modulo_id=modulo_id),
workers_list,
worker_actual,
dia_actual,
[('01','Ene'),('02','Feb'),('03','Mar'),('04','Abr'),('05','May'),('06','Jun'),('07','Jul'),('08','Ago'),('09','Sep'),('10','Oct'),('11','Nov'),('12','Dic')],
mes_actual,
anios_disponibles,
anio_actual
fecha_inicio,
fecha_fin
) }}
<div class="card shadow-sm border-0">
<div class="card-body p-0">

View File

@@ -55,11 +55,8 @@
url_for('admin.report_modulo_periodo', modulo_id=modulo_id),
workers_list,
worker_actual,
dia_actual,
[('01','Ene'),('02','Feb'),('03','Mar'),('04','Abr'),('05','May'),('06','Jun'),('07','Jul'),('08','Ago'),('09','Sep'),('10','Oct'),('11','Nov'),('12','Dic')],
mes_actual,
anios_disponibles,
anio_actual
fecha_inicio,
fecha_fin
) }}
<div class="card shadow-sm border-0">

View File

@@ -1,53 +1,20 @@
{% extends "macros/base.html" %}
{% from 'macros/modals.html' import confirm_modal, edit_worker_modal %}
{% from 'macros/modals.html' import confirm_modal, edit_worker_modal, add_worker_modal %}
{% from "macros/ui.html" import flashed_messages %}
{% block title %}Gestión de Trabajadores{% endblock %}
{% block content %}
<h2 class="mb-4">Gestión de Trabajadores</h2>
{{ flashed_messages() }}
{{ edit_worker_modal(modulos) }}
{{ edit_worker_modal(modulos, bancos) }}
{{ add_worker_modal(modulos, bancos) }}
<div class="card mb-4">
<div class="card-header bg-primary text-white">Agregar Nuevo Trabajador</div>
<div class="card-body">
<form method="POST" action="{{ url_for('admin.manage_workers') }}">
<div class="row g-3">
<div class="col-md-2">
<label class="form-label">RUT</label>
<input type="text" class="form-control" name="rut" id="rutInput" placeholder="12.345.678-9" value="{{ form.get('rut', '') }}" maxlength="12" required>
</div>
<div class="col-md-3">
<label class="form-label">Nombre Completo</label>
<input type="text" class="form-control" name="name" value="{{ form.get('name', '') }}" required>
</div>
<div class="col-md-2">
<label class="form-label">Teléfono</label>
<input type="text" class="form-control" name="phone" id="phoneInput" placeholder="9 1234 5678" value="{{ form.get('phone', '') }}" required>
</div>
<div class="col-md-3">
<label class="form-label">Módulo Asignado</label>
<select class="form-select" name="modulo_id" required>
<option value="" selected disabled>Seleccionar Módulo...</option>
{% for mod in modulos %}
<option value="{{ mod[0] }}">{{ mod[2] }} - {{ mod[1] }}</option>
{% endfor %}
</select>
</div>
<div class="col-md-2">
<label class="form-label">Jornada</label>
<select class="form-select" name="tipo" required>
<option value="Full Time" {% if form.get('tipo') == 'Full Time' %}selected{% endif %}>Full Time</option>
<option value="Part Time" {% if form.get('tipo') == 'Part Time' %}selected{% endif %}>Part Time</option>
</select>
</div>
</div>
<button type="submit" class="btn btn-primary mt-3">Guardar Trabajador</button>
</form>
</div>
<div class="d-flex justify-content-between align-items-center mb-3">
<h2 class="mb-0">Gestión de Trabajadores</h2>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addWorkerModal">
<i class="bi bi-plus-lg"></i> Agregar Trabajador
</button>
</div>
<div class="card mb-4 shadow-sm border-0">
@@ -88,6 +55,10 @@
<th>Teléfono</th>
<th>Módulo</th>
<th>Tipo</th>
<th>Banco</th>
<th>N° Cuenta</th>
<th>RUT Cuenta</th>
<th>Tipo Cuenta</th>
<th class="text-end">Acciones</th>
</tr>
</thead>
@@ -103,6 +74,10 @@
{{ worker[6] }}
</span>
</td>
<td class="align-middle">{{ worker[7] or '-' }}</td>
<td class="align-middle">{{ worker[8] or '-' }}</td>
<td class="align-middle">{{ worker[10] or '-' }}</td>
<td class="align-middle">{{ worker[9] or '-' }}</td>
<td class="text-end">
<button type="button"
class="btn btn-primary btn-sm btn-edit-sm"
@@ -113,7 +88,11 @@
data-name="{{ worker[2] }}"
data-phone="{{ worker[3] }}"
data-modulo="{{ worker[5] }}"
data-tipo="{{ worker[6] }}">
data-tipo="{{ worker[6] }}"
data-nombre-banco="{{ worker[7] }}"
data-numero-cuenta="{{ worker[8] }}"
data-tipo-cuenta="{{ worker[9] }}"
data-rut-banco="{{ worker[10] }}">
<i class="bi bi-pencil"></i>
</button>
@@ -132,7 +111,7 @@
</tr>
{% else %}
<tr>
<td colspan="6" class="text-center py-3 text-muted">No hay trabajadores registrados.</td>
<td colspan="10" class="text-center py-3 text-muted">No hay trabajadores registrados.</td>
</tr>
{% endfor %}
</tbody>

View File

@@ -82,7 +82,7 @@
</div>
{% endmacro %}
{% macro edit_worker_modal(modulos) %}
{% macro edit_worker_modal(modulos, bancos) %}
<div class="modal fade" id="editWorkerModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
@@ -120,6 +120,37 @@
<option value="Part Time">Part Time</option>
</select>
</div>
<div class="mb-3">
<label class="form-label">Banco</label>
<select class="form-select" name="nombre_banco" id="edit_worker_nombre_banco" onchange="toggleOtroBanco(this, 'edit_otro_banco_wrapper')">
<option value="">Seleccionar...</option>
{% for b in bancos %}
<option value="{{ b }}">{{ b }}</option>
{% endfor %}
<option value="__otro__">Otro...</option>
</select>
<div id="edit_otro_banco_wrapper" class="mt-1" style="display:none">
<input type="text" class="form-control form-control-sm" name="nombre_banco_otro" id="edit_worker_nombre_banco_otro" placeholder="Especificar banco...">
</div>
</div>
<div class="mb-3">
<label class="form-label">N° Cuenta</label>
<input type="text" class="form-control" name="numero_cuenta" id="edit_worker_numero_cuenta" placeholder="Ej: 12345678">
</div>
<div class="mb-3">
<label class="form-label">RUT Cuenta</label>
<input type="text" class="form-control" name="rut_banco" id="edit_worker_rut_banco" placeholder="Ej: 12.345.678-9">
</div>
<div class="mb-3">
<label class="form-label">Tipo Cuenta</label>
<select class="form-select" name="tipo_cuenta" id="edit_worker_tipo_cuenta">
<option value="">Seleccionar...</option>
<option value="Cuenta Corriente">Cuenta Corriente</option>
<option value="Cuenta Vista">Cuenta Vista</option>
<option value="Cuenta Rut">Cuenta Rut</option>
<option value="Cuenta de Ahorro">Cuenta de Ahorro</option>
</select>
</div>
</form>
<hr>
@@ -144,6 +175,88 @@
</div>
{% endmacro %}
{% macro add_worker_modal(modulos, bancos) %}
<div class="modal fade" id="addWorkerModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Agregar Nuevo Trabajador</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form method="POST" action="{{ url_for('admin.manage_workers') }}">
<div class="modal-body">
<div class="row g-3">
<div class="col-md-4">
<label class="form-label">RUT</label>
<input type="text" class="form-control" name="rut" id="addRutInput" placeholder="12.345.678-9" maxlength="12" required>
</div>
<div class="col-md-8">
<label class="form-label">Nombre Completo</label>
<input type="text" class="form-control" name="name" required>
</div>
<div class="col-md-4">
<label class="form-label">Teléfono</label>
<input type="text" class="form-control" name="phone" id="addPhoneInput" placeholder="9 1234 5678" required>
</div>
<div class="col-md-4">
<label class="form-label">Módulo Asignado</label>
<select class="form-select" name="modulo_id" required>
<option value="" selected disabled>Seleccionar Módulo...</option>
{% for mod in modulos %}
<option value="{{ mod[0] }}">{{ mod[2] }} - {{ mod[1] }}</option>
{% endfor %}
</select>
</div>
<div class="col-md-4">
<label class="form-label">Jornada</label>
<select class="form-select" name="tipo" required>
<option value="Full Time">Full Time</option>
<option value="Part Time">Part Time</option>
</select>
</div>
<div class="col-md-4">
<label class="form-label">Banco</label>
<select class="form-select" name="nombre_banco" onchange="toggleOtroBanco(this, 'add_otro_banco_wrapper')">
<option value="">Seleccionar...</option>
{% for b in bancos %}
<option value="{{ b }}">{{ b }}</option>
{% endfor %}
<option value="__otro__">Otro...</option>
</select>
<div id="add_otro_banco_wrapper" class="mt-1" style="display:none">
<input type="text" class="form-control form-control-sm" name="nombre_banco_otro" placeholder="Especificar banco...">
</div>
</div>
<div class="col-md-4">
<label class="form-label">N° Cuenta</label>
<input type="text" class="form-control" name="numero_cuenta" placeholder="Ej: 12345678">
</div>
<div class="col-md-4">
<label class="form-label">RUT Cuenta</label>
<input type="text" class="form-control" name="rut_banco" placeholder="Ej: 12.345.678-9">
</div>
<div class="col-md-4">
<label class="form-label">Tipo Cuenta</label>
<select class="form-select" name="tipo_cuenta">
<option value="">Seleccionar...</option>
<option value="Cuenta Corriente">Cuenta Corriente</option>
<option value="Cuenta Vista">Cuenta Vista</option>
<option value="Cuenta Rut">Cuenta Rut</option>
<option value="Cuenta de Ahorro">Cuenta de Ahorro</option>
</select>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
<button type="submit" class="btn btn-primary">Guardar Trabajador</button>
</div>
</form>
</div>
</div>
</div>
{% endmacro %}
{% macro rendicion_detail_modal(rendicion, items, total_calculado, comision_total) %}
<div class="modal fade" id="viewRendicion{{ rendicion[0] }}" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
@@ -575,30 +688,17 @@
</div>
{% endmacro %}
{% macro report_filters(action_url, workers, selected_worker, selected_dia, meses, mes_act, anios, anio_act) %}
{% macro report_filters(action_url, workers, selected_worker, fecha_inicio, fecha_fin) %}
<div class="card shadow-sm mb-4 border-0 bg-dark-subtle">
<div class="card-body p-3">
<form method="GET" action="{{ action_url }}" class="row g-2 align-items-end">
<div class="col-md-2">
<label class="form-label small text-muted mb-1">Año/Mes</label>
<div class="input-group input-group-sm">
<select name="anio" class="form-select">
{% for a in anios %}<option value="{{ a }}" {{ 'selected' if a|string == anio_act|string }}>{{ a }}</option>{% endfor %}
</select>
<select name="mes" class="form-select">
{% for m_num, m_name in meses %}<option value="{{ m_num }}" {{ 'selected' if m_num == mes_act }}>{{ m_name }}</option>{% endfor %}
</select>
</div>
<label class="form-label small text-muted mb-1">Desde</label>
<input type="date" name="fecha_inicio" class="form-control form-control-sm" value="{{ fecha_inicio }}">
</div>
<div class="col-md-2">
<label class="form-label small text-muted mb-1">Día (Opcional)</label>
<select name="dia" class="form-select form-select-sm">
<option value="">Todos los días</option>
{% for d in range(1, 32) %}
{% set d_str = "%02d"|format(d) %}
<option value="{{ d_str }}" {{ 'selected' if d_str == selected_dia }}>{{ d_str }}</option>
{% endfor %}
</select>
<label class="form-label small text-muted mb-1">Hasta</label>
<input type="date" name="fecha_fin" class="form-control form-control-sm" value="{{ fecha_fin }}">
</div>
<div class="col-md-3">
<label class="form-label small text-muted mb-1">Trabajador</label>