97 lines
3.1 KiB
Python
97 lines
3.1 KiB
Python
from flask_wtf import FlaskForm
|
|
from wtforms import DateField, IntegerField, DecimalField, SubmitField
|
|
|
|
from .checks import *
|
|
|
|
|
|
class DeletePitStopForm(FlaskForm):
|
|
submit = SubmitField(label='Really delete this pitstop!')
|
|
|
|
|
|
class EditPitstopForm(FlaskForm):
|
|
date = DateField('Date of Pitstop')
|
|
odometer = IntegerField('Odometer (km)', validators=[edit_odometer_date_check])
|
|
litres = DecimalField('Litres (l)', places=2, validators=[litres_check])
|
|
costs = DecimalField('Costs (€, overall)', places=2, validators=[costs_check])
|
|
submit = SubmitField(label='Update it!')
|
|
last_pitstop = None
|
|
same_odometer_allowed = True
|
|
pitstops = []
|
|
|
|
def set_pitstops(self, pitstops):
|
|
self.pitstops = pitstops
|
|
|
|
def set_pitstop(self, last_pitstop):
|
|
self.last_pitstop = last_pitstop
|
|
|
|
def set_consumable(self, consumable):
|
|
self.litres.label = '%s (%s)' % (consumable.name, consumable.unit)
|
|
|
|
def preinit_with_data(self):
|
|
if self.date.data:
|
|
self.date.default = self.date.data
|
|
if self.odometer.data:
|
|
self.odometer.default = self.odometer.data
|
|
if self.litres.data:
|
|
self.litres.default = self.litres.data
|
|
if self.costs.data:
|
|
self.costs.default = self.costs.data
|
|
|
|
def get_hint_messages(self):
|
|
messages = {
|
|
'litres': 'Litres must be higher than 0.01 L.',
|
|
'costs': 'Costs must be higher than 0.01 €.'
|
|
}
|
|
return messages
|
|
|
|
class CreatePitstopForm(FlaskForm):
|
|
date = DateField('Date of Pitstop')
|
|
odometer = IntegerField('Odometer (km)', validators=[odometer_date_check])
|
|
litres = DecimalField('Litres (l)', places=2, validators=[litres_check])
|
|
costs = DecimalField('Costs (€, overall)', places=2, validators=[costs_check])
|
|
submit = SubmitField(label='Do it!')
|
|
same_odometer_allowed = True
|
|
pitstops = []
|
|
|
|
def set_pitstops(self, pitstops):
|
|
self.pitstops = pitstops
|
|
|
|
def set_consumable(self, consumable):
|
|
self.litres.label = '%s (%s)' % (consumable.name, consumable.unit)
|
|
|
|
def preinit_with_data(self):
|
|
if self.date.data:
|
|
self.date.default = self.date.data
|
|
else:
|
|
self.date.default = date.today()
|
|
|
|
if self.odometer.data:
|
|
self.odometer.default = self.odometer.data
|
|
elif len(self.pitstops) > 0:
|
|
self.odometer.default = self.pitstops[-1].odometer
|
|
else:
|
|
self.odometer.default = 0
|
|
|
|
if self.litres.data:
|
|
self.litres.default = self.litres.data
|
|
elif len(self.pitstops) > 0 and 'amount' in self.pitstops[-1].__dict__:
|
|
self.litres.default = self.pitstops[-1].amount
|
|
else:
|
|
self.litres.default = 0
|
|
|
|
if self.costs.data:
|
|
self.costs.default = self.costs.data
|
|
elif len(self.pitstops) > 0:
|
|
self.costs.default = self.pitstops[-1].costs
|
|
else:
|
|
self.costs.default = 0
|
|
|
|
def get_hint_messages(self):
|
|
messages = {
|
|
'litres': 'Litres must be higher than 0.01 L.',
|
|
'costs': 'Costs must be higher than 0.01 €.'
|
|
}
|
|
return messages
|
|
|
|
|