Enhance textarea synchronization and improve WorkerForm save logic
This commit is contained in:
+10
-42
@@ -444,57 +444,25 @@ class WorkerSelfServiceForm(forms.ModelForm):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def save(self, commit=True):
|
||||
"""Persist FTE and non-working days (nwds) into the Worker instance.
|
||||
|
||||
The form exposes only `fte` and `nwds`. `fte` is handled by the
|
||||
ModelForm machinery; we need to ensure `nwds` is persisted inside
|
||||
`instance.options['nwds']` as a list of ints.
|
||||
"""
|
||||
instance = super().save(commit=False)
|
||||
# persist non-working days into instance.options['nwds'] as list of ints
|
||||
|
||||
# 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:
|
||||
# fallback: keep as-is
|
||||
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")
|
||||
if end_date:
|
||||
instance.end_date = end_date
|
||||
# Collect option fields and persist into instance.options
|
||||
opts = instance.options or {}
|
||||
# constraint-based option fields
|
||||
for key in getattr(self, "_constraint_defaults", {}).keys():
|
||||
field_name = f"opt__{key}"
|
||||
if field_name in self.cleaned_data:
|
||||
val = self.cleaned_data[field_name]
|
||||
default = self._constraint_defaults.get(key)
|
||||
# Parse JSON for list/dict fields
|
||||
if isinstance(default, (list, dict)):
|
||||
try:
|
||||
parsed = json.loads(val) if val is not None and val != "" else []
|
||||
except Exception:
|
||||
parsed = val
|
||||
opts[key] = parsed
|
||||
else:
|
||||
opts[key] = val
|
||||
|
||||
# builder args (prefixed with opt__)
|
||||
builder_keys = [
|
||||
"balance_offset_modifier",
|
||||
"ltft_balance_offset",
|
||||
"use_previous_shifts",
|
||||
"use_shift_balance_extra",
|
||||
"use_bank_holiday_extra",
|
||||
"allow_force_assignment_with_leave_conflict",
|
||||
]
|
||||
for k in builder_keys:
|
||||
field_name = f"opt__{k}"
|
||||
if field_name in self.cleaned_data:
|
||||
opts[k] = self.cleaned_data[field_name]
|
||||
|
||||
instance.options = opts
|
||||
|
||||
if commit:
|
||||
instance.save()
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user