Vehicle names now must be only unique per owner, not globally. Also errors are displayed to the forms on creation and edit of vehicles.
67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
import logging
|
|
|
|
|
|
class VehicleStats:
|
|
def __init__(self, vehicle):
|
|
self.name = vehicle.name
|
|
self.id = vehicle.id
|
|
self.pitstop_count = len(vehicle.pitstops)
|
|
self.overall_distance = 0
|
|
self.average_distance = 0
|
|
self.overall_litres = 0
|
|
self.average_litres_fuelled = 0
|
|
self.average_litres_used = 0
|
|
self.litres = []
|
|
self.average_litres = []
|
|
self.odometers = []
|
|
|
|
if self.pitstop_count > 0:
|
|
for pitstop in vehicle.pitstops:
|
|
self.overall_litres += pitstop.litres
|
|
self.litres.append(StatsEvent(pitstop.date, pitstop.litres))
|
|
self.odometers.append(StatsEvent(pitstop.date, pitstop.odometer))
|
|
self.average_litres_fuelled = self.overall_litres / self.pitstop_count
|
|
if self.pitstop_count > 1:
|
|
self.overall_distance = vehicle.pitstops[-1].odometer - vehicle.pitstops[0].odometer
|
|
self.average_distance = self.overall_distance / (self.pitstop_count - 1)
|
|
self.average_litres_used = 100 * (self.overall_litres - vehicle.pitstops[0].litres) / self.overall_distance
|
|
for index in range(1, self.pitstop_count):
|
|
last_ps = vehicle.pitstops[index - 1]
|
|
current_ps = vehicle.pitstops[index]
|
|
self.average_litres.append(StatsEvent(current_ps.date, round(100 * current_ps.litres/(current_ps.odometer - last_ps.odometer),2)))
|
|
|
|
|
|
class StatsEvent:
|
|
def __init__(self, date, value):
|
|
self.date = date
|
|
self.value = value
|
|
|
|
|
|
def db_log_add(entity):
|
|
logging.info('db_add: %s' % str(entity))
|
|
|
|
|
|
def db_log_delete(entity):
|
|
logging.info('db_delete: %s' % str(entity))
|
|
|
|
|
|
def db_log_update(entity):
|
|
logging.info('db_update: %s' % str(entity))
|
|
|
|
|
|
def check_vehicle_name_is_unique(current_user, name_field):
|
|
"""
|
|
Checks if the vehicle name given in the name_field is unique for the vehicles of the current user. An error is added
|
|
to the field it the name is not unique.
|
|
|
|
:param current_user: the user currently logged in
|
|
:param name_field: the form field to enter the name to
|
|
:return: True if the name is unique, False otherwise.
|
|
"""
|
|
vehicle_name = name_field.data
|
|
for vehicle in current_user.vehicles:
|
|
if vehicle.name == vehicle_name:
|
|
name_field.default = vehicle_name
|
|
name_field.errors.append('Vehicle "%s" already exists.' % vehicle_name)
|
|
return False
|
|
return True |