Jul 26 - Update scheduled inspection settings (weekly/monthly)
This commit is contained in:
+46
-2
@@ -2,7 +2,7 @@ from flask_wtf import FlaskForm
|
||||
from flask_wtf.file import FileField, FileAllowed, MultipleFileField
|
||||
from wtforms import (StringField, PasswordField, SelectField, TextAreaField,
|
||||
DecimalField, BooleanField, IntegerField, HiddenField,
|
||||
RadioField, DateField)
|
||||
RadioField, DateField, SelectMultipleField)
|
||||
from wtforms.validators import (DataRequired, Email, Length, EqualTo,
|
||||
Optional, NumberRange, ValidationError)
|
||||
from app.models.user import User
|
||||
@@ -338,10 +338,54 @@ class ScheduledInspectionForm(FlaskForm):
|
||||
('once', 'One-time'), ('daily', 'Daily'),
|
||||
('weekly', 'Weekly'), ('monthly', 'Monthly'),
|
||||
], validators=[DataRequired()])
|
||||
next_due_date = DateField('Due Date', validators=[DataRequired()])
|
||||
next_due_date = DateField('Start / Due Date', validators=[DataRequired()])
|
||||
notes = TextAreaField('Notes', validators=[Optional(), Length(max=1000)])
|
||||
active = BooleanField('Active', default=True)
|
||||
|
||||
# ── Recurrence detail (phase43) ──────────────────────────────────────────
|
||||
# Only the block matching `frequency` is required; the rest is ignored and
|
||||
# cleared on save. Shown/hidden client-side, enforced in validate() below.
|
||||
weekdays = SelectMultipleField(
|
||||
'Days of the Week', coerce=int, validators=[Optional()],
|
||||
choices=[(i, n) for i, n in enumerate(
|
||||
['Monday', 'Tuesday', 'Wednesday', 'Thursday',
|
||||
'Friday', 'Saturday', 'Sunday'])],
|
||||
)
|
||||
month_mode = SelectField('Monthly Rule', validators=[Optional()], choices=[
|
||||
('day_of_month', 'On a day of the month'),
|
||||
('nth_weekday', 'On a weekday of the month'),
|
||||
], default='day_of_month')
|
||||
day_of_month = IntegerField(
|
||||
'Day of Month', validators=[Optional(), NumberRange(min=1, max=31)])
|
||||
nth_week = SelectField('Week', coerce=int, validators=[Optional()], choices=[
|
||||
(1, '1st'), (2, '2nd'), (3, '3rd'), (4, '4th'), (5, '5th'), (-1, 'Last'),
|
||||
], default=1)
|
||||
nth_weekday = SelectField(
|
||||
'Weekday', coerce=int, validators=[Optional()],
|
||||
choices=[(i, n) for i, n in enumerate(
|
||||
['Monday', 'Tuesday', 'Wednesday', 'Thursday',
|
||||
'Friday', 'Saturday', 'Sunday'])],
|
||||
default=0,
|
||||
)
|
||||
|
||||
def validate(self, extra_validators=None):
|
||||
"""Conditionally require the recurrence block for the chosen frequency."""
|
||||
if not super().validate(extra_validators):
|
||||
return False
|
||||
ok = True
|
||||
if self.frequency.data == 'weekly' and not self.weekdays.data:
|
||||
self.weekdays.errors.append('Pick at least one day of the week.')
|
||||
ok = False
|
||||
elif self.frequency.data == 'monthly':
|
||||
if self.month_mode.data == 'nth_weekday':
|
||||
if not self.nth_week.data or self.nth_weekday.data is None:
|
||||
self.nth_week.errors.append('Choose which weekday of the month.')
|
||||
ok = False
|
||||
elif not self.day_of_month.data:
|
||||
self.day_of_month.errors.append('Enter a day of the month (1–31).')
|
||||
ok = False
|
||||
return ok
|
||||
|
||||
|
||||
# ── Support Knowledge Base (phase38) ─────────────────────────────────────────
|
||||
|
||||
|
||||
Reference in New Issue
Block a user