[ADD] BASE: Multi select widget

This commit is contained in:
Horilla
2024-01-03 16:21:50 +05:30
parent b284932167
commit 4f01690c46
3 changed files with 31 additions and 10 deletions

View File

@@ -5,7 +5,6 @@ This module is used to register forms for base module
"""
import calendar
import os
from typing import Any, Dict
import uuid
import datetime
from datetime import timedelta
@@ -17,6 +16,7 @@ from django.core.exceptions import ValidationError
from django.utils.translation import gettext as _
from django.utils.translation import gettext_lazy as _trans
from django.template.loader import render_to_string
from employee.filters import EmployeeFilter
from employee.models import Employee
from base.models import (
Company,
@@ -36,6 +36,8 @@ from base.models import (
EmployeeShiftDay,
)
from base.methods import reload_queryset
from horilla_widgets.widgets.horilla_multi_select_field import HorillaMultiSelectField
from horilla_widgets.widgets.select_widgets import HorillaMultiSelectWidget
# your form here
@@ -236,6 +238,7 @@ class UserGroupForm(ModelForm):
"""
Django user groups form
"""
try:
permissions = forms.MultipleChoiceField(
choices=[(perm.codename, perm.name) for perm in Permission.objects.all()],
@@ -281,7 +284,9 @@ class AssignUserGroup(Form):
Form to assign groups
"""
employee = forms.ModelMultipleChoiceField(queryset=Employee.objects.all(),required=False)
employee = forms.ModelMultipleChoiceField(
queryset=Employee.objects.all(), required=False
)
group = forms.ModelChoiceField(queryset=Group.objects.all())
def __init__(self, *args, **kwargs):
@@ -305,7 +310,17 @@ class AssignPermission(Form):
Forms to assign user permision
"""
employee = forms.ModelMultipleChoiceField(queryset=Employee.objects.all())
employee = HorillaMultiSelectField(
queryset=Employee.objects.all(),
widget=HorillaMultiSelectWidget(
filter_route_name="employee-widget-filter",
filter_class=EmployeeFilter,
filter_instance_contex_name="f",
filter_template_path="employee_filters.html",
required=True,
),
label="Employee",
)
try:
permissions = forms.MultipleChoiceField(
choices=[(perm.codename, perm.name) for perm in Permission.objects.all()],
@@ -315,15 +330,23 @@ class AssignPermission(Form):
)
except:
pass
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
reload_queryset(self.fields)
def clean(self):
emps = self.data.getlist("employee")
if emps:
self.errors.pop("employee", None)
super().clean()
return
def save(self):
"""
Save method to assign permission to employee
"""
employees = self.cleaned_data["employee"]
employees = self.data["employee"]
permissions = self.cleaned_data["permissions"]
permissions = Permission.objects.filter(codename__in=permissions)
users = User.objects.filter(employee_get__id__in=employees)
@@ -345,8 +368,7 @@ class CompanyForm(ModelForm):
model = Company
fields = "__all__"
excluded_fields=["date_format", "time_format"]
excluded_fields = ["date_format", "time_format"]
def validate_image(self, file):
max_size = 5 * 1024 * 1024
@@ -731,7 +753,7 @@ class EmployeeShiftForm(ModelForm):
fields = "__all__"
exclude = ("days",)
def clean(self) -> Dict[str, Any]:
def clean(self):
full_time = self.data["full_time"]
validate_time_format(full_time)
full_time = self.data["weekly_full_time"]

View File

@@ -11,6 +11,8 @@
class="oh-btn oh-btn--secondary oh-btn--shadow"
data-toggle="oh-modal-toggle"
data-target="#Permissions"
hx-get="{% url "permission-table" %}"
hx-target="#permissionForm"
>
<ion-icon
name="add-outline"
@@ -74,7 +76,6 @@
class="perm-form"
id="permissionForm"
>
{% include "base/auth/permission_assign.html" %}
</form>
</div>
</div>

View File

@@ -1949,7 +1949,6 @@ def employee_permission_assign(request):
"""
context = {}
form = AssignPermission()
template = "base/auth/permission.html"
if request.GET.get("profile_tab"):
template = "base/auth/permission_accordion.html"
@@ -1982,7 +1981,6 @@ def employee_permission_assign(request):
}
)
permissions.append({"app": app_name.capitalize(), "app_models": app_models})
context["form"] = form
context["permissions"] = permissions
context["employees"] = employees
return render(