You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

215 lines
7.4 KiB

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/<int:repostaje_id>')
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/<int:repostaje_id>', 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/<int:vehiculo_id>', 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/<int:vehiculo_id>')
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/<filename>')
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)