update the perms

This commit is contained in:
gitea 2025-02-20 10:30:10 +00:00
parent fe0f0d836d
commit 1bd663446b
9 changed files with 174 additions and 64 deletions

View File

@ -10,7 +10,7 @@ from django.core.validators import RegexValidator
from django import forms
from django.contrib.auth import get_user_model
from phonenumber_field.phonenumber import PhoneNumber
from .models import Status, Stage
from .models import CustomGroup, Status, Stage
from .mixins import AddClassMixin
from django.forms.models import inlineformset_factory
from django_ledger.forms.invoice import (
@ -900,7 +900,7 @@ class OpportunityStatusForm(forms.Form):
class GroupForm(forms.ModelForm):
class Meta:
model = Group
model = CustomGroup
fields = ["name"]
class PermissionForm(forms.ModelForm):
@ -915,10 +915,10 @@ class PermissionForm(forms.ModelForm):
class UserGroupForm(forms.ModelForm):
name = forms.ModelMultipleChoiceField(
queryset= Group.objects.all(),
queryset= CustomGroup.objects.all(),
widget=forms.CheckboxSelectMultiple(),
required=True
)
class Meta:
model = Group
model = CustomGroup
fields = ["name"]

View File

@ -0,0 +1,24 @@
# Generated by Django 4.2.17 on 2025-02-20 08:16
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
('inventory', '0037_alter_schedule_scheduled_type'),
]
operations = [
migrations.CreateModel(
name='CustomGroup',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('dealer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.dealer')),
('group', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='auth.group', verbose_name='')),
],
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 4.2.17 on 2025-02-20 08:17
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('inventory', '0038_customgroup'),
]
operations = [
migrations.AlterField(
model_name='customgroup',
name='dealer',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='groups', to='inventory.dealer'),
),
]

View File

@ -1,3 +1,4 @@
from django.contrib.auth.models import Permission
from decimal import Decimal
import hashlib
from django.db import models
@ -940,11 +941,20 @@ class Staff(models.Model, LocalizedNameMixin):
@property
def user(self):
return self.staff_member.user
return self.staff_member.user
@property
def groups(self):
return self.staff_member.user.groups
return [x.customgroup for x in self.user.groups.all()]
def clear_groups(self):
return self.user.groups.clear()
def add_group(self,group):
try:
self.user.groups.add(group)
except Exception as e:
pass
class Meta:
verbose_name = _("Staff")
verbose_name_plural = _("Staff")
@ -1766,4 +1776,63 @@ class SaleOrder(models.Model):
@property
def customer(self):
return self.estimate.customer
return self.estimate.customer
class CustomGroup(models.Model):
name = models.CharField(max_length=100)
dealer = models.ForeignKey(Dealer, on_delete=models.CASCADE, related_name="groups")
group = models.OneToOneField("auth.Group", verbose_name=_(""), on_delete=models.CASCADE)
@property
def users(self):
return self.group.user_set.all()
@property
def permissions(self):
return self.group.permissions.all()
def clear_permissions(self):
self.group.permissions.clear()
def add_permission(self, permission):
try:
self.group.permissions.add(permission)
except Permission.DoesNotExist:
pass
def __str__(self):
return self.name
def set_default_manager_permissions(self):
self.clear_permissions()
try:
for perm in Permission.objects.filter(content_type__app_label="inventory"):
self.add_permission(perm)
except Exception as e:
pass
def set_default_inventory_permissions(self):
self.clear_permissions()
allowed_models = ["car","carequipment","interiorcolors","exteriorcolors","carcolors","carlocation","customcard"]
self.set_permissions(allowed_models,['view_carfinance'])
def set_default_accountant_permissions(self):
self.clear_permissions()
allowed_models = [""]
self.set_permissions(allowed_models)
def set_default_agent_permissions(self):
pass
def set_default_sales_permissions(self):
pass
def set_permissions(self, allowed_models,other_perms=[]):
self.clear_permissions()
try:
for perm in Permission.objects.filter(content_type__app_label="inventory",content_type__model__in=allowed_models):
self.add_permission(perm)
for perm in other_perms:
Permission.objects.get(codename=perm)
self.add_permission(perm)
except Exception as e:
pass

View File

@ -614,7 +614,17 @@ def create_ledger_entity(sender, instance, created, **kwargs):
entity.create_account(coa_model=coa, code="6303", role=roles.EXPENSE_OTHER, name=_("Foreign Currency Translation"), balance_type="debit", active=True)
entity.create_account(coa_model=coa, code="6304", role=roles.EXPENSE_OTHER, name=_("Interest Expenses"), balance_type="debit", active=True)
# Create groups
group_manager = models.CustomGroup.objects.create(name="Manager", dealer=instance)
group_manager.set_default_manager_permissions()
group_inventory = models.CustomGroup.objects.create(name="Inventory", dealer=instance)
group_inventory.set_default_inventory_permissions()
group_accountant = models.CustomGroup.objects.create(name="Accountant", dealer=instance)
group_accountant.set_default_accountant_permissions()
group_agent = models.CustomGroup.objects.create(name="Agent", dealer=instance)
group_agent.set_default_agent_permissions()
group_sales = models.CustomGroup.objects.create(name="Sales", dealer=instance)
group_sales.set_default_sales_permissions()
# Create Vendor
@receiver(post_save, sender=models.Vendor)

View File

@ -1848,65 +1848,60 @@ def delete_vendor(request, pk):
#group
class GroupListView(LoginRequiredMixin, ListView):
model = Group
model = models.CustomGroup
context_object_name = "groups"
paginate_by = 10
template_name = "groups/group_list.html"
# def get_queryset(self):
# query = self.request.GET.get("q")
# dealer = get_user_type(self.request)
# staff = models.Staff.objects.filter(dealer=dealer).all()
# return apply_search_filters(staff, query)
def get_queryset(self):
dealer = get_user_type(self.request)
return dealer.groups.all()
class GroupDetailView(LoginRequiredMixin, DetailView):
model = Group
model = models.CustomGroup
template_name = "groups/group_detail.html"
context_object_name = "group"
context_object_name = "group"
class GroupCreateView(
LoginRequiredMixin,
SuccessMessageMixin,
CreateView,
):
model = Group
model = models.CustomGroup
form_class = forms.GroupForm
template_name = "groups/group_form.html"
success_url = reverse_lazy("group_list")
success_message = _("Group created successfully.")
# def form_valid(self, form):
# dealer = get_user_type(self.request)
# email = form.cleaned_data["email"]
# password = "Tenhal@123"
# user = User.objects.create_user(username=form.cleaned_data["name"], email=email, password=password)
# user.is_staff = True
# user.save()
# staff_member = StaffMember.objects.create(user=user)
# services = form.cleaned_data["service_offered"]
# if services:
# for service in services:
# staff_member.services_offered.add(service)
# staff = form.save(commit=False)
# staff.staff_member = staff_member
# staff.dealer = dealer
# staff.save()
# return super().form_valid(form)
def form_valid(self, form):
dealer = get_user_type(self.request)
instance = form.save(commit=False)
group = Group.objects.create(name=f"{dealer.pk}_{instance.name}")
instance.dealer = dealer
instance.group = group
instance.save()
return super().form_valid(form)
class GroupUpdateView(
LoginRequiredMixin,
SuccessMessageMixin,
UpdateView,
):
model = Group
model = models.CustomGroup
form_class = forms.GroupForm
template_name = "groups/group_form.html"
success_url = reverse_lazy("group_list")
success_message = _("Group updated successfully.")
def form_valid(self, form):
dealer = get_user_type(self.request)
instance = form.save(commit=False)
instance.group.name = f"{dealer.pk}_{instance.name}"
instance.save()
return super().form_valid(form)
# def get_form_kwargs(self):
# kwargs = super().get_form_kwargs()
# kwargs["instance"] = self.get_object() # Pass the Staff instance to the form
@ -1938,28 +1933,23 @@ class GroupUpdateView(
# return super().form_valid(form)
def GroupDeleteview(request, pk):
group = get_object_or_404(Group, pk=pk)
group = get_object_or_404(models.CustomGroup, pk=pk)
group.delete()
messages.success(request, _("Group deleted successfully."))
return redirect("group_list")
def GroupPermissionView(request, pk):
group = get_object_or_404(Group, pk=pk)
group = get_object_or_404(models.CustomGroup, pk=pk)
if request.method == "POST":
form = forms.PermissionForm(request.POST)
group.permissions.clear()
permissions = request.POST.getlist("name")
for i in permissions:
try:
group.permissions.add(Permission.objects.get(id=int(i)))
except Permission.DoesNotExist:
continue
group.clear_permissions()
permissions = request.POST.getlist("name")
for i in permissions:
group.add_permission(Permission.objects.get(id=int(i)))
messages.success(request, _("Permission added successfully."))
return redirect("group_detail", pk=group.pk)
form = forms.PermissionForm(initial={"name": group.permissions.all()})
form = forms.PermissionForm(initial={"name": group.permissions})
return render(request,"groups/group_permission_form.html",{"group": group, "form": form})
# Users
@ -1968,18 +1958,16 @@ def UserGroupView(request, pk):
staff = get_object_or_404(models.Staff, pk=pk)
if request.method == "POST":
form = forms.UserGroupForm(request.POST)
groups = request.POST.getlist("name")
staff.groups.clear()
for i in groups:
try:
staff.groups.add(Group.objects.get(id=int(i)))
except Group.DoesNotExist:
continue
groups = request.POST.getlist("name")
staff.clear_groups()
for i in groups:
cg = models.CustomGroup.objects.get(id=int(i))
staff.add_group(cg.group)
messages.success(request, _("Group added successfully."))
return redirect("user_detail", pk=staff.pk)
form = forms.UserGroupForm(initial={"name": staff.user.groups.all()})
form = forms.UserGroupForm(initial={"name": staff.groups})
return render(request,"users/user_group_form.html",{"staff": staff, "form": form})
class UserListView(LoginRequiredMixin, ListView):
@ -2026,9 +2014,9 @@ class UserCreateView(
staff = form.save(commit=False)
staff.staff_member = staff_member
staff.dealer = dealer
group = Group.objects.filter(name__iexact=staff.staff_type).first()
group = Group.objects.filter(customgroup__name__iexact=staff.staff_type).first()
if group:
staff.groups.add(group)
staff.add_group(group)
staff.save()
return super().form_valid(form)

View File

@ -55,7 +55,7 @@
</tr>
</thead>
<tbody>
{% for user in group.user_set.all %}
{% for user in group.users %}
<tr>
<td><p><strong>{{ _("Name") }}:</strong> {{ user.staffmember.staff }}</p></td>
<td><p><strong>{{ _("Email") }}:</strong> {{ user }}</p></td>
@ -84,7 +84,7 @@
</tr>
</thead>
<tbody>
{% for permission in group.permissions.all %}
{% for permission in group.permissions %}
<tr>
<td>{{ permission.codename }}</td>
<td>{{ permission.name }}</td>

View File

@ -31,7 +31,7 @@
{% for group in groups %}
<tr>
<td>{{ group.name }}</td>
<td><i class="fa-solid fa-users"></i> {{ group.user_set.count }}</td>
<td><i class="fa-solid fa-users"></i> {{ group.users.count }}</td>
<td><i class="fa-solid fa-unlock"></i> {{ group.permissions.count }}</td>
<td>
<a class="btn btn-phoenix-success"

View File

@ -66,7 +66,7 @@
</tr>
</thead>
<tbody>
{% for group in user_.groups.all %}
{% for group in user_.groups %}
<tr>
<td>{{ group }}</td>
</tr>