correcciones finales
This commit is contained in:
@@ -16,7 +16,8 @@ app.secret_key = 'clave-secreta-navbar-app'
|
||||
# Límite máximo de subida: 5 MiB
|
||||
# app.config['MAX_CONTENT_LENGTH'] = 5 * 1024 * 1024
|
||||
|
||||
DATABASE = 'database/pyfleet.db'
|
||||
# DATABASE = 'database/pyfleet.db'
|
||||
DATABASE = 'database/auto.db'
|
||||
|
||||
PASSWORD_HASH = generate_password_hash('123')
|
||||
|
||||
@@ -236,7 +237,7 @@ def vehiculos_list():
|
||||
NORM(modelo) LIKE ? OR
|
||||
NORM(poblacion) LIKE ? OR
|
||||
NORM(unidad) LIKE ? OR
|
||||
NORM(denominacion) LIKE ? OR
|
||||
NORM(tipo) LIKE ? OR
|
||||
NORM(situacion) LIKE ?
|
||||
)''')
|
||||
params.extend([like] * 9)
|
||||
@@ -245,7 +246,7 @@ def vehiculos_list():
|
||||
|
||||
rows = db.execute(
|
||||
f'''SELECT id, m_oficial, m_reservada, marca, modelo, poblacion, unidad,
|
||||
denominacion, tipo, situacion, lanzadestellos
|
||||
tipo, situacion, lanzadestellos
|
||||
FROM vehiculos
|
||||
WHERE {where} {filtro_bajas}
|
||||
ORDER BY id''',
|
||||
@@ -329,7 +330,7 @@ def vehiculos_editar(id):
|
||||
desde = request.args.get('desde', '')
|
||||
hasta = request.args.get('hasta', '')
|
||||
q_itv = request.args.get('q_itv', '')
|
||||
origen = request.args.get('origen', '')
|
||||
origen = request.args.get('origen', '')
|
||||
q_viat = request.args.get('q_viat', '')
|
||||
|
||||
if not vehiculo:
|
||||
@@ -409,12 +410,20 @@ def vehiculos_eliminar(id):
|
||||
return redirect(url_for('vehiculos_list', q=q) if q else url_for('vehiculos_list'))
|
||||
|
||||
|
||||
|
||||
@app.route('/vehiculos/<int:vid>/historial/nuevo', methods=['POST'])
|
||||
@login_required
|
||||
def historial_nuevo(vid):
|
||||
q = request.form.get('_q', '')
|
||||
db = get_db()
|
||||
|
||||
# Recoger TODOS los parámetros de navegación del POST
|
||||
q = request.form.get('_q', '')
|
||||
desde = request.form.get('_desde', '')
|
||||
hasta = request.form.get('_hasta', '')
|
||||
q_itv = request.form.get('_q_itv', '')
|
||||
origen = request.form.get('_origen', '')
|
||||
q_viat = request.form.get('_q_viat', '') # ← POST no GET
|
||||
|
||||
# Datos del historial
|
||||
h_fecha = request.form.get('h_fecha') or None
|
||||
h_vehiculo_id = request.form.get('h_vehiculo_id', '').strip()
|
||||
h_matricula = request.form.get('h_matricula', '').strip()
|
||||
@@ -424,11 +433,7 @@ def historial_nuevo(vid):
|
||||
h_grupo = request.form.get('h_grupo', '').strip()
|
||||
h_observaciones = request.form.get('h_observaciones', '').strip()
|
||||
|
||||
desde = request.form.get('_desde', '')
|
||||
hasta = request.form.get('_hasta', '')
|
||||
q_itv = request.form.get('_q_itv', '')
|
||||
|
||||
# Obtener el NOMBRE de la población a partir del id
|
||||
# Obtener nombre de población
|
||||
poblacion_nombre = ''
|
||||
if h_poblacion_id:
|
||||
row = db.execute('SELECT poblacion FROM poblaciones WHERE id=?', (h_poblacion_id,)).fetchone()
|
||||
@@ -440,32 +445,47 @@ def historial_nuevo(vid):
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||
''', (h_fecha, h_vehiculo_id, h_matricula, h_situacion, poblacion_nombre, h_unidad, h_grupo, h_observaciones))
|
||||
|
||||
# Si la unidad es BAJA, actualizar situacion del vehiculo
|
||||
# Actualizar situacion del vehiculo
|
||||
if h_situacion.upper() == 'BAJA':
|
||||
db.execute("UPDATE vehiculos SET situacion='BAJA' WHERE id=?", (vid,))
|
||||
db.execute("UPDATE vehiculos SET situacion='BAJA', poblacion='', unidad='' WHERE id=?", (vid,))
|
||||
else:
|
||||
db.execute("UPDATE vehiculos SET situacion=?, poblacion=?, unidad=?, grupo=? WHERE id=?", (h_situacion, poblacion_nombre, h_unidad, h_grupo, vid,))
|
||||
db.execute(
|
||||
"UPDATE vehiculos SET situacion=?, poblacion=?, unidad=?, grupo=? WHERE id=?",
|
||||
(h_situacion, poblacion_nombre, h_unidad, h_grupo, vid)
|
||||
)
|
||||
|
||||
db.commit()
|
||||
flash('Entrada añadida al historial.', 'ok')
|
||||
|
||||
# Volver a ITV si venía de ahí, si no al formulario del vehículo
|
||||
# Redirect según origen
|
||||
if origen == 'viat':
|
||||
return redirect(f'/vehiculos/{vid}/editar?origen=viat&q_viat={q_viat}')
|
||||
if desde or hasta or q_itv:
|
||||
return redirect(f'/vehiculos/{vid}/editar?desde={desde}&hasta={hasta}&q_itv={q_itv}')
|
||||
# return redirect(f'/vehiculos/{vid}/editar?q={q}')
|
||||
return redirect(f'/vehiculos/{vid}/editar?desde={desde}&hasta={hasta}&q_itv={q_itv}')
|
||||
return redirect(url_for('vehiculos_editar', id=vid, q=q))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@app.route('/vehiculos/<int:vid>/historial/<int:hid>/eliminar', methods=['POST'])
|
||||
@login_required
|
||||
def historial_eliminar(vid, hid):
|
||||
q = request.form.get('_q', '')
|
||||
desde = request.form.get('_desde', '')
|
||||
hasta = request.form.get('_hasta', '')
|
||||
unidad_itv = request.form.get('_unidad_itv', '')
|
||||
|
||||
db = get_db()
|
||||
|
||||
# Recoger parámetros de navegación
|
||||
q = request.form.get('_q', '')
|
||||
desde = request.form.get('_desde', '')
|
||||
hasta = request.form.get('_hasta', '')
|
||||
q_itv = request.form.get('_q_itv', '')
|
||||
origen = request.form.get('_origen', '')
|
||||
q_viat = request.form.get('_q_viat', '') # ← POST no GET
|
||||
|
||||
|
||||
# 1. Comprobar que el vehículo existe
|
||||
vehiculo = db.execute('''
|
||||
SELECT id, m_oficial
|
||||
@@ -541,16 +561,16 @@ def historial_eliminar(vid, hid):
|
||||
WHERE id = ?
|
||||
''', (vid,))
|
||||
|
||||
# 7. Confirmar cambios
|
||||
db.commit()
|
||||
|
||||
flash('Entrada eliminada del historial.', 'ok')
|
||||
|
||||
# Volver a ITV si venía de ahí
|
||||
if desde or hasta or unidad_itv:
|
||||
return redirect(f'/vehiculos/{vid}/editar?desde={desde}&hasta={hasta}&unidad_itv={unidad_itv}')
|
||||
# return redirect(f'/vehiculos/{vid}/editar?q={q}')
|
||||
|
||||
# Redirect según origen
|
||||
if origen == 'viat':
|
||||
return redirect(f'/vehiculos/{vid}/editar?origen=viat&q_viat={q_viat}')
|
||||
if desde or hasta or q_itv:
|
||||
return redirect(f'/vehiculos/{vid}/editar?desde={desde}&hasta={hasta}&q_itv={q_itv}')
|
||||
|
||||
url = f'/vehiculos/{vid}/editar'
|
||||
if q:
|
||||
url += f'?q={q}'
|
||||
@@ -625,7 +645,7 @@ def vehiculos_exportar():
|
||||
ws = wb.active
|
||||
ws.title = 'Vehículos'
|
||||
|
||||
headers = ['M. Oficial', 'M. Civil', 'Marca', 'Modelo',
|
||||
headers = ['M. Oficial', 'M. Reservada', 'Marca', 'Modelo',
|
||||
'Poblacion', 'Unidad', 'Grupo', 'Denominación', 'Situación' ]
|
||||
header_fill = PatternFill('solid', fgColor='5C6EF8')
|
||||
header_font = Font(bold=True, color='FFFFFF', size=11)
|
||||
@@ -684,7 +704,8 @@ def documentos_upload(id):
|
||||
q_itv = request.form.get('_q_itv', '')
|
||||
origen = request.form.get('_origen', '')
|
||||
q_viat = request.form.get('_q_viat', '')
|
||||
nombre = request.form.get('nombre_doc', '').strip()
|
||||
nombre = request.form.get('nombre_doc', '').strip() + '.pdf'
|
||||
|
||||
|
||||
if 'pdf' not in request.files:
|
||||
flash('No se seleccionó ningún archivo.', 'error')
|
||||
@@ -757,7 +778,7 @@ def documentos_descargar(doc_id):
|
||||
return send_from_directory(UPLOAD_FOLDER, doc['filename'],
|
||||
as_attachment=True,
|
||||
download_name=doc['nombre'])
|
||||
# download_name=doc['nombre'] + '.pdf')
|
||||
# download_name=doc['nombre'] + '.pdf'
|
||||
|
||||
@app.route('/vehiculos/documentos/<int:doc_id>/eliminar', methods=['POST'])
|
||||
@login_required
|
||||
@@ -781,85 +802,6 @@ def documentos_eliminar(doc_id):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# @app.route('/vehiculos/<int:id>/upload', methods=['POST'])
|
||||
# @login_required
|
||||
# def vehiculos_upload(id):
|
||||
# q = request.form.get('_q', '')
|
||||
# incl_bajas = request.form.get('_incl_bajas', '0')
|
||||
# desde = request.form.get('_desde', '')
|
||||
# hasta = request.form.get('_hasta', '')
|
||||
# q_itv = request.form.get('_q_itv', '')
|
||||
# origen = request.form.get('_origen', '')
|
||||
# q_viat = request.form.get('_q_viat', '')
|
||||
|
||||
# if 'pdf' not in request.files:
|
||||
# flash('No se seleccionó ningún archivo.', 'error')
|
||||
# return redirect(f'/vehiculos/{id}/editar?q={q}&incl_bajas={incl_bajas}')
|
||||
|
||||
# file = request.files['pdf']
|
||||
# if file.filename == '':
|
||||
# flash('No se seleccionó ningún archivo.', 'error')
|
||||
# return redirect(f'/vehiculos/{id}/editar?q={q}&incl_bajas={incl_bajas}')
|
||||
|
||||
# if file and allowed_file(file.filename):
|
||||
# # Guardar con nombre único basado en id del vehículo
|
||||
# os.makedirs(UPLOAD_FOLDER, exist_ok=True)
|
||||
# filename = f'ficha_tecnica_id_{id}.pdf'
|
||||
# filepath = os.path.join(UPLOAD_FOLDER, filename)
|
||||
# file.save(filepath)
|
||||
|
||||
# # Guardar referencia en BD
|
||||
# db = get_db()
|
||||
# db.execute('UPDATE vehiculos SET pdf=? WHERE id=?', (filename, id))
|
||||
# db.commit()
|
||||
# flash('Documento PDF subido correctamente.', 'ok')
|
||||
# else:
|
||||
# flash('Solo se permiten archivos PDF.', 'error')
|
||||
|
||||
# url = f'/vehiculos/{id}/editar?q={q}&incl_bajas={incl_bajas}'
|
||||
# if origen == 'viat':
|
||||
# url = f'/vehiculos/{id}/editar?origen=viat&q_viat={q_viat}'
|
||||
# elif desde or hasta or q_itv:
|
||||
# url = f'/vehiculos/{id}/editar?desde={desde}&hasta={hasta}&q_itv={q_itv}'
|
||||
# return redirect(url)
|
||||
|
||||
|
||||
# @app.route('/vehiculos/<int:id>/pdf')
|
||||
# @login_required
|
||||
# def vehiculos_pdf(id):
|
||||
# from flask import send_from_directory
|
||||
# db = get_db()
|
||||
# vehiculo = db.execute('SELECT pdf FROM vehiculos WHERE id=?', (id,)).fetchone()
|
||||
# if not vehiculo or not vehiculo['pdf']:
|
||||
# flash('No hay documento PDF para este vehículo.', 'error')
|
||||
# return redirect(f'/vehiculos/{id}/editar')
|
||||
# return send_from_directory(UPLOAD_FOLDER, vehiculo['pdf'], as_attachment=False)
|
||||
|
||||
|
||||
# @app.route('/vehiculos/<int:id>/pdf/eliminar', methods=['POST'])
|
||||
# @login_required
|
||||
# def vehiculos_pdf_eliminar(id):
|
||||
# q = request.form.get('_q', '')
|
||||
# incl_bajas = request.form.get('_incl_bajas', '0')
|
||||
# db = get_db()
|
||||
# vehiculo = db.execute('SELECT pdf FROM vehiculos WHERE id=?', (id,)).fetchone()
|
||||
# if vehiculo and vehiculo['pdf']:
|
||||
# filepath = os.path.join(UPLOAD_FOLDER, vehiculo['pdf'])
|
||||
# if os.path.exists(filepath):
|
||||
# os.remove(filepath)
|
||||
# db.execute('UPDATE vehiculos SET pdf=NULL WHERE id=?', (id,))
|
||||
# db.commit()
|
||||
# flash('Documento PDF eliminado.', 'ok')
|
||||
# return redirect(f'/vehiculos/{id}/editar?q={q}&incl_bajas={incl_bajas}')
|
||||
|
||||
|
||||
# Ruta API que devuelve unidades según población
|
||||
@app.route('/api/unidades/<int:poblacion_id>')
|
||||
@login_required
|
||||
@@ -978,7 +920,7 @@ def itv_exportar():
|
||||
ws = wb.active
|
||||
ws.title = 'ITV'
|
||||
|
||||
headers = ['M. Oficial', 'M. Civil', 'Marca', 'Modelo',
|
||||
headers = ['M. Oficial', 'M. Reservada', 'Marca', 'Modelo',
|
||||
'Denominación', 'Tipo', 'Unidad', 'Población', 'Fecha ITV']
|
||||
header_fill = PatternFill('solid', fgColor='5C6EF8')
|
||||
header_font = Font(bold=True, color='FFFFFF', size=11)
|
||||
@@ -1432,7 +1374,7 @@ def viat_exportar():
|
||||
ws = wb.active
|
||||
ws.title = 'Via-T'
|
||||
|
||||
headers = ['Via-T', 'M. Oficial', 'M. Civil', 'Marca',
|
||||
headers = ['Via-T', 'M. Oficial', 'M. Reservada', 'Marca',
|
||||
'Modelo', 'Población', 'Unidad', 'Tipo']
|
||||
header_fill = PatternFill('solid', fgColor='5C6EF8')
|
||||
header_font = Font(bold=True, color='FFFFFF', size=11)
|
||||
@@ -1635,4 +1577,4 @@ if __name__ == '__main__':
|
||||
# f'SELECT id, m_oficial, m_reservada, marca, modelo, poblacion, unidad, grupo, tipo, situacion FROM vehiculos WHERE {where} {filtro_bajas} ORDER BY id',
|
||||
# params
|
||||
# ).fetchall()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user