diff --git a/offboarding/forms.py b/offboarding/forms.py index 29df141ea..a1be5b28a 100644 --- a/offboarding/forms.py +++ b/offboarding/forms.py @@ -12,8 +12,13 @@ from django.contrib import messages from django.template.loader import render_to_string from base.forms import ModelForm +from base.methods import reload_queryset +from employee.filters import EmployeeFilter from employee.forms import MultipleFileField +from employee.models import Employee from horilla import horilla_middlewares +from horilla_widgets.widgets.horilla_multi_select_field import HorillaMultiSelectField +from horilla_widgets.widgets.select_widgets import HorillaMultiSelectWidget from notifications.signals import notify from offboarding.models import ( EmployeeTask, @@ -47,6 +52,30 @@ class OffboardingForm(ModelForm): table_html = render_to_string("common_form.html", context) return table_html + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + reload_queryset(self.fields) + self.fields["managers"] = HorillaMultiSelectField( + queryset=Employee.objects.filter(is_active=True), + widget=HorillaMultiSelectWidget( + filter_route_name="employee-widget-filter", + filter_class=EmployeeFilter, + filter_instance_contex_name="f", + filter_template_path="employee_filters.html", + required=True, + instance=self.instance, + ), + label="Managers", + ) + + def clean(self): + if isinstance(self.fields["managers"], HorillaMultiSelectField): + ids = self.data.getlist("managers") + if ids: + self.errors.pop("managers", None) + super().clean() + class OffboardingStageForm(ModelForm): """ @@ -68,6 +97,30 @@ class OffboardingStageForm(ModelForm): table_html = render_to_string("common_form.html", context) return table_html + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + reload_queryset(self.fields) + self.fields["managers"] = HorillaMultiSelectField( + queryset=Employee.objects.filter(is_active=True), + widget=HorillaMultiSelectWidget( + filter_route_name="employee-widget-filter", + filter_class=EmployeeFilter, + filter_instance_contex_name="f", + filter_template_path="employee_filters.html", + required=True, + instance=self.instance, + ), + label="Managers", + ) + + def clean(self): + if isinstance(self.fields["managers"], HorillaMultiSelectField): + ids = self.data.getlist("managers") + if ids: + self.errors.pop("managers", None) + super().clean() + class OffboardingEmployeeForm(ModelForm): """ diff --git a/offboarding/views.py b/offboarding/views.py index 0573cc498..65de2ae1c 100644 --- a/offboarding/views.py +++ b/offboarding/views.py @@ -185,7 +185,10 @@ def create_offboarding(request): if request.method == "POST": form = OffboardingForm(request.POST, instance=instance) if form.is_valid(): - form.save() + off_obj = form.save() + off_obj.managers.set( + Employee.objects.filter(id__in=form.data.getlist("managers")) + ) messages.success(request, _("Offboarding saved")) return HttpResponse("")