.
This commit is contained in:
@@ -407,6 +407,56 @@ class RotaScheduleForm(forms.ModelForm):
|
||||
self.fields["end_date"].initial = end_date
|
||||
return cleaned
|
||||
|
||||
|
||||
class WorkerSelfServiceForm(forms.ModelForm):
|
||||
"""Small form exposed to workers via tokenized links so they can set
|
||||
their FTE and pick non-working days.
|
||||
"""
|
||||
WEEKDAYS = [
|
||||
('0', 'Monday'),
|
||||
('1', 'Tuesday'),
|
||||
('2', 'Wednesday'),
|
||||
('3', 'Thursday'),
|
||||
('4', 'Friday'),
|
||||
('5', 'Saturday'),
|
||||
('6', 'Sunday'),
|
||||
]
|
||||
|
||||
nwds = forms.MultipleChoiceField(choices=WEEKDAYS, required=False, widget=forms.CheckboxSelectMultiple, label="Non-working days")
|
||||
|
||||
class Meta:
|
||||
model = Worker
|
||||
fields = ["fte"]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
instance = kwargs.get('instance')
|
||||
initial = kwargs.get('initial', {})
|
||||
if instance is not None:
|
||||
try:
|
||||
opts = instance.options or {}
|
||||
nwds = opts.get('nwds', [])
|
||||
# store as strings for the MultipleChoiceField
|
||||
initial['nwds'] = [str(x) for x in (nwds or [])]
|
||||
initial['fte'] = instance.fte
|
||||
except Exception:
|
||||
pass
|
||||
kwargs['initial'] = initial
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def save(self, commit=True):
|
||||
instance = super().save(commit=False)
|
||||
# persist non-working days into instance.options['nwds'] as list of ints
|
||||
opts = instance.options or {}
|
||||
nwds = self.cleaned_data.get('nwds') or []
|
||||
try:
|
||||
opts['nwds'] = [int(x) for x in nwds]
|
||||
except Exception:
|
||||
opts['nwds'] = nwds
|
||||
instance.options = opts
|
||||
if commit:
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
def save(self, commit=True):
|
||||
instance = super().save(commit=False)
|
||||
end_date = self.cleaned_data.get("end_date")
|
||||
|
||||
Reference in New Issue
Block a user