From 68652d17e5fd55ef02ea14b2a877b6cfc37be8e6 Mon Sep 17 00:00:00 2001 From: gitea Date: Thu, 20 Feb 2025 14:18:39 +0000 Subject: [PATCH] update --- inventory/forms.py | 9 ++++++-- inventory/models.py | 53 ++++++++++++++++++++++++++++---------------- inventory/signals.py | 27 ++++++++++++---------- inventory/views.py | 13 +++++------ scripts/run.py | 19 +++++++++++++--- 5 files changed, 78 insertions(+), 43 deletions(-) diff --git a/inventory/forms.py b/inventory/forms.py index aaefb763..63fbfb81 100644 --- a/inventory/forms.py +++ b/inventory/forms.py @@ -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(), diff --git a/inventory/models.py b/inventory/models.py index 4cb15eb8..7a8f8d32 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -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 \ No newline at end of file diff --git a/inventory/signals.py b/inventory/signals.py index c71930fa..9397c65d 100644 --- a/inventory/signals.py +++ b/inventory/signals.py @@ -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): diff --git a/inventory/views.py b/inventory/views.py index 304cdc77..f226a4b5 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -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 diff --git a/scripts/run.py b/scripts/run.py index ab70e21c..b853355f 100644 --- a/scripts/run.py +++ b/scripts/run.py @@ -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")) \ No newline at end of file + 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()) \ No newline at end of file