from flask import Blueprint, render_template, request, redirect, url_for, current_app, send_from_directory from werkzeug.utils import secure_filename from flask_login import login_user, logout_user, login_required from sqlalchemy import desc, asc import datetime import os from .models import db, Repostajes, Vehiculos bp = Blueprint("paginas", __name__) @bp.route('/') def index(): vehiculos = Vehiculos.query.all() repostajes = Repostajes.query.all() return render_template('index.html', vehiculos=vehiculos, repostajes=repostajes) @bp.route('/repostajes') def repostajes(): repostajes = Repostajes.query.all() return render_template('repostajes.html', repostajes=repostajes) @bp.route('/vehiculos') def vehiculos(): vehiculos = Vehiculos.query.all() #return render_template('vehiculos.html', vehiculos=vehiculos) return render_template('vehiculoscard.html', vehiculos=vehiculos) @bp.route('/404') def cuatrocerocuatro(): return render_template('404.html') @bp.route('/help') def help(): return render_template('help.html') @bp.route('/account') @login_required def account(): return render_template('account.html') """ @bp.route('/repostaje/') def repostaje(repostaje_id): repostaje = Repostajes.query.get_or_404(repostaje_id) vehiculo = Vehiculos.query.get_or_404(repostaje.vehiculo_id) return render_template('repostaje.html', repostaje=repostaje, vehiculo=vehiculo) """ @bp.route('/add_repostaje', methods=['GET', 'POST']) @login_required def add_repostaje(): if request.method == 'POST': fecha = datetime.date.fromisoformat(request.form['fecha']) vehiculo_id = request.form['vehiculo_id'] kms = request.form['kms'] litros = request.form['litros'] importe = request.form['importe'] dtoing = request.form.get('dtoing') if dtoing: descuento = int(importe) * 0.03 # Aplico el descuento de ING else : descuento = 0 # no se marcó la casilla de descuento ING totalcondto = float(importe) - descuento precioxlitro = totalcondto / float(litros) # lee todos los repostajes del vehículo #repostajes = Repostajes.query.filter_by(vehiculo_id=vehiculo_id).all() repostajes = Repostajes.query.filter_by(vehiculo_id=vehiculo_id).order_by(Repostajes.fecha.desc()).first() #for i in repostajes: # print("add_repostaje: ", i.fecha, i.kms) kmsrecorridos = int(kms)-int(repostajes.kms) if kmsrecorridos > 0: consumo = float(litros)*100/kmsrecorridos print("add_repostaje kms recorridos: ", kmsrecorridos, " consumo: ", consumo) new_repostaje = Repostajes(fecha=fecha, vehiculo_id=vehiculo_id, kms=kms, litros=litros, importe=totalcondto, descuento=descuento, precioxlitro=precioxlitro, kmsrecorridos=kmsrecorridos, consumo=consumo) db.session.add(new_repostaje) db.session.commit() return redirect(url_for('paginas.vehiculo', vehiculo_id=vehiculo_id)) vehiculos = Vehiculos.query.all() return render_template('add_repostaje.html', vehiculos=vehiculos) @bp.route('/edit_repostaje/', methods=['GET', 'POST']) @login_required def edit_repostaje(repostaje_id): repostaje = Repostajes.query.get_or_404(repostaje_id) vehiculos = Vehiculos.query.all() if request.method == 'POST': repostaje.fecha = request.form['fecha'] repostaje.vehiculo_id = request.form['vehiculo_id'] repostaje.kms = request.form['kms'] repostaje.litros = request.form['litros'] repostaje.importe = request.form['importe'] db.session.commit() return redirect(url_for('paginas.repostaje', repostaje_id=repostaje.id)) vehiculos = Vehiculos.query.all() return render_template('edit_repostaje.html', repostaje=repostaje, vehiculos=vehiculos) @bp.route('/add_vehiculo', methods=['GET', 'POST']) @login_required def add_vehiculo(): if request.method == 'POST': marca = request.form['marca'] modelo = request.form['modelo'] matricula = request.form['matricula'] # Verificar que el campo 'cover_image' está en request.files if 'foto' not in request.files: return "No file part in the request", 400 foto = request.files['foto'] # Verificar que se ha seleccionado un archivo if foto.filename == '': return "No selected file", 400 if foto: image_filename = secure_filename(foto.filename) foto.save(os.path.join(current_app.config['UPLOAD_FOLDER'], image_filename)) else: image_filename = None new_vehiculo = Vehiculos(marca=marca, modelo=modelo, matricula=matricula, foto=image_filename) db.session.add(new_vehiculo) db.session.commit() return redirect(url_for('paginas.index')) return render_template('add_vehiculo.html') @bp.route('/edit_vehiculo/', methods=['GET', 'POST']) @login_required def edit_vehiculo(vehiculo_id): vehiculo = Vehiculos.query.get_or_404(vehiculo_id) if request.method == 'POST': vehiculo.marca = request.form['marca'] vehiculo.modelo = request.form['modelo'] vehiculo.matricula = request.form['matricula'] if 'foto' in request.files: foto = request.files['foto'] if foto.filename != '': image_filename = secure_filename(foto.filename) foto.save(os.path.join(current_app.config['UPLOAD_FOLDER'], image_filename)) vehiculo.foto = image_filename db.session.commit() return redirect(url_for('paginas.vehiculo', vehiculo_id=vehiculo.id)) return render_template('edit_vehiculo.html', vehiculo=vehiculo) @bp.route('/vehiculo/') def vehiculo(vehiculo_id): vehiculo = Vehiculos.query.get_or_404(vehiculo_id) repostajes = Repostajes.query.filter_by(vehiculo_id=vehiculo_id).all() return render_template('vehiculo.html', vehiculo=vehiculo, repostajes=repostajes) @bp.route('/uploads/') def uploaded_file(filename): return send_from_directory(current_app.config['UPLOAD_FOLDER'], filename) @bp.route('/searchvehiculo') def searchvehiculo(): query = request.args.get('query', '') if query: vehiculos = Vehiculos.query.filter(vehiculo.name.contains(query)).all() else: vehiculos = [] return render_template('searchvehiculo.html', query=query, vehiculos=vehiculos) @bp.route('/consumo') @login_required def consumo(): vehiculos = Vehiculos.query.all() for vehiculo in vehiculos: kmsanterior = 0 print("Consumo. Tratando vehículo '", vehiculo.matricula,"'") repostajes = Repostajes.query.filter_by(vehiculo_id=vehiculo.id).order_by(Repostajes.fecha.asc()).all() for repostaje in repostajes: kmsrecorridos = repostaje.kms - kmsanterior if kmsrecorridos > 0: consumo = repostaje.litros*100/kmsrecorridos print("Consumo: kms anteriores -> ", kmsanterior, " kms actuales ->", repostaje.kms, " recorridos ->", kmsrecorridos, " consumo ->", consumo) kmsanterior = repostaje.kms repostaje.kmsrecorridos = kmsrecorridos repostaje.consumo = consumo db.session.commit() return render_template('consumo.html', repostajes=repostajes)