This commit is contained in:
gitea 2025-02-20 14:18:39 +00:00
parent 1bd663446b
commit 68652d17e5
5 changed files with 78 additions and 43 deletions

View File

@ -1,3 +1,4 @@
from django.core.cache import cache
from django.contrib.auth.models import Permission
from django.contrib.auth.models import Group
from appointment.models import Appointment, Service, StaffMember
@ -905,14 +906,18 @@ class GroupForm(forms.ModelForm):
class PermissionForm(forms.ModelForm):
name = forms.ModelMultipleChoiceField(
queryset=Permission.objects.filter(content_type__app_label='inventory'),
queryset=cache.get('permissions_queryset', Permission.objects.filter(content_type__app_label__in=["inventory","django_ledger"])),
widget=forms.CheckboxSelectMultiple(),
required=True
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
cache.set('permissions_queryset', Permission.objects.filter(content_type__app_label__in=["inventory","django_ledger"]), 60*60)
class Meta:
model = Permission
fields = ["name"]
class UserGroupForm(forms.ModelForm):
name = forms.ModelMultipleChoiceField(
queryset= CustomGroup.objects.all(),

View File

@ -1811,28 +1811,43 @@ class CustomGroup(models.Model):
except Exception as e:
pass
def set_default_inventory_permissions(self):
# def set_default_inventory_permissions(self):
# self.clear_permissions()
# allowed_models = ["car","carequipment","interiorcolors","exteriorcolors","carcolors","carlocation","customcard"]
# self.set_permissions(allowed_models=allowed_models,other_perms=['view_carfinance'])
# def set_default_accountant_permissions(self):
# self.clear_permissions()
# allowed_models = ["car","carfinance","carlocation","customcard"]
# allowed_models_ledger = ["accountmodel","chartofaccountmodel","customcard","billmodel"]
# self.set_permissions(allowed_models=allowed_models,other_perms=['view_carfinance'])
# self.set_permissions(app="django_ledger",allowed_models=allowed_models_ledger)
def set_default_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)
if self.name == "Manager":
self.set_permissions(app="inventory",allowed_models=["car","carfinance","carlocation","customcard"])
self.set_permissions(app="django_ledger",allowed_models=["accountmodel","chartofaccountmodel","customcard","billmodel"])
elif self.name == "Inventory":
self.set_permissions(allowed_models=["car","carequipment","interiorcolors","exteriorcolors","carcolors","carlocation","customcard"]
,other_perms=['view_carfinance'])
elif self.name == "Sales":
self.set_permissions(app="inventory",allowed_models=["lead","salequotation","salequotationcar"],
other_perms=['view_car','view_carlocation','view_customcard','view_carcolors','view_cartransfer'].
extend(['view_estimatemodel','view_invoicemodel','view_saleorder']))
elif self.name == "Accountant":
self.set_permissions(app="inventory",allowed_models=["carfinance"],other_perms=['view_car','view_carlocation','view_customcard','view_carcolors','view_cartransfer'])
self.set_permissions(app="django_ledger",allowed_models=["accountmodel","chartofaccountmodel","customcard","billmodel"])
elif self.name == "Agent":
# Todo : set permissions for agent
pass
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()
def set_permissions(self,app="inventory", allowed_models=[],other_perms=[]):
try:
for perm in Permission.objects.filter(content_type__app_label="inventory",content_type__model__in=allowed_models):
for perm in Permission.objects.filter(content_type__app_label=app,content_type__model__in=allowed_models):
self.add_permission(perm)
for perm in other_perms:
Permission.objects.get(codename=perm)
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

@ -1,3 +1,4 @@
from django.contrib.auth.models import Group
from decimal import Decimal
from django.db.models.signals import post_save, post_delete, pre_delete, pre_save
from .utils import to_dict
@ -16,6 +17,7 @@ from django_ledger.models import (
)
from . import models
from django.utils.timezone import now
from django.db import transaction
User = get_user_model()
@ -614,18 +616,19 @@ 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()
@receiver(post_save, sender=models.Dealer)
def create_dealer_groups(sender, instance, created, **kwargs):
group_names = ["Manager", "Inventory", "Accountant", "Agent", "Sales"]
def create_groups():
for group_name in group_names:
group, created = Group.objects.get_or_create(name=f"{instance.pk}_{group_name}")
group_manager,created = models.CustomGroup.objects.get_or_create(name=group_name, dealer=instance, group=group)
group_manager.set_default_permissions()
transaction.on_commit(create_groups)
# Create Vendor
@receiver(post_save, sender=models.Vendor)
def create_ledger_vendor(sender, instance, created, **kwargs):

View File

@ -1941,15 +1941,14 @@ def GroupDeleteview(request, pk):
def GroupPermissionView(request, pk):
group = get_object_or_404(models.CustomGroup, pk=pk)
if request.method == "POST":
form = forms.PermissionForm(request.POST)
form = forms.PermissionForm(request.POST)
group.clear_permissions()
permissions = request.POST.getlist("name")
for i in permissions:
group.add_permission(Permission.objects.get(id=int(i)))
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})
return redirect("group_detail", pk=group.pk)
form = forms.PermissionForm(initial={"name": group.permissions})
return render(request,"groups/group_permission_form.html",{"group": group, "form": form})
# Users

View File

@ -1,10 +1,11 @@
from django.contrib.auth.models import Group
from django_ledger.models.invoice import InvoiceModel
from django_ledger.utils import accruable_net_summary
from decimal import Decimal
from django_ledger.models import EstimateModel,EntityModel,ItemModel,ItemTransactionModel,AccountModel,CustomerModel
from rich import print
from datetime import date
from inventory.models import Car, Dealer, VatRate,Lead,CarMake,CarModel,Schedule
from inventory.models import Car, Dealer, VatRate,Lead,CarMake,CarModel,Schedule,CustomGroup
from inventory.utils import CarFinanceCalculator
from appointment.models import Appointment,AppointmentRequest,Service,StaffMember
from django.contrib.auth import get_user_model
@ -121,6 +122,18 @@ def run():
# print(CustomerModel.objects.all())
# customer = CustomerModel.objects.first()
# dealer = Dealer.objects.filter(user__email="esma3el555@gmail.com").first()
# customer = CustomerModel.objects.filter(dealer=dealer).first()
# print(Car.objects.filter(dealer=dealer,status="available"))
# CustomGroup.objects.all().delete()
# Group.objects.all().delete()
dealer = Dealer.objects.filter(user__email="esma3el555@gmail.com").first()
customer = CustomerModel.objects.filter(dealer=dealer).first()
print(Car.objects.filter(dealer=dealer,status="available"))
group_names = ["Manager", "Inventory", "Accountant", "Agent", "Sales"]
for group_name in group_names:
group,created = Group.objects.get_or_create(name=f"{dealer.pk}_{group_name}")
group_manager,created = CustomGroup.objects.get_or_create(name=group_name, dealer=dealer, group=group)
group_manager.set_default_permissions()
print(CustomGroup.objects.all())