diff --git a/inventory/forms.py b/inventory/forms.py index 31328ab2..39158b24 100644 --- a/inventory/forms.py +++ b/inventory/forms.py @@ -135,10 +135,15 @@ class StaffForm(forms.ModelForm): ), label=_("Phone Number"), ) - + group = forms.ModelMultipleChoiceField( + label=_("Group"), + widget=forms.CheckboxSelectMultiple(attrs={"class": "form-check-input"}), + queryset=CustomGroup.objects.all(), + required=True, + ) class Meta: model = Staff - fields = ["name", "arabic_name", "phone_number", "staff_type"] + fields = ["name", "arabic_name", "phone_number", "group"] # Dealer Form diff --git a/inventory/models.py b/inventory/models.py index 504eb873..a633bf6d 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -1188,31 +1188,33 @@ class Staff(models.Model, LocalizedNameMixin): return [x.customgroup for x in self.user.groups.all()] def clear_groups(self): - EntityManagementModel.objects.filter( - user=self.user, entity=self.dealer.entity - ).delete() + self.remove_superuser_permission() return self.user.groups.clear() - def add_group(self, group): + def add_group(self, group,clean=False): + if clean: + self.clear_groups() try: self.user.groups.add(group) - if self.staff_type in ["accountant", "manager"]: - self.add_as_manager() + if "accountant" in group.name.lower() or "manager" in group.name.lower(): + self.add_as_superuser() except Exception as e: print(e) - def add_as_manager(self): - if self.staff_type in ["accountant", "manager"]: - EntityManagementModel.objects.get_or_create( - user=self.user, entity=self.dealer.entity - ) - else: - self.user.groups.clear() - group = Group.objects.filter( - customgroup__name__iexact=self.staff_type - ).first() - if group: - self.add_group(group) + def add_as_superuser(self): + EntityManagementModel.objects.get_or_create( + user=self.user, entity=self.dealer.entity + ) + def remove_superuser_permission(self): + EntityManagementModel.objects.filter( + user=self.user, entity=self.dealer.entity + ).delete() + # self.user.groups.clear() + # group = Group.objects.filter( + # customgroup__name__iexact=self.staff_type + # ).first() + # if group: + # self.add_group(group) class Meta: verbose_name = _("Staff") @@ -2519,7 +2521,7 @@ class CustomGroup(models.Model): @property def entity(self): - return self.invoice.entity + return self.dealer.entity @property def users(self): diff --git a/inventory/urls.py b/inventory/urls.py index b5469311..e711597d 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -913,7 +913,6 @@ urlpatterns = [ name="bill-action-force-migrate", ), # path("items/bills/create/", views.bill_create, name="bill_create"), - # >>>>>>>>>>>>>>>>>>>>>>... path( "items/bills//bill_detail/", views.BillDetailView.as_view(), diff --git a/inventory/views.py b/inventory/views.py index 2b564dca..34d5890a 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -318,6 +318,7 @@ def dealer_signup(request): if password != password_confirm: return JsonResponse({"error": _("Passwords do not match")}, status=400) try: + #TODO make this a django-q task create_user_dealer( email, password, name, arabic_name, phone, crn, vrn, address ) @@ -2666,20 +2667,26 @@ class GroupCreateView( success_message = _("Group created successfully") def form_valid(self, form): - dealer = get_user_type(self.request) + dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"]) instance = form.save(commit=False) group_name = f"{dealer.slug}_{instance.name}" - group,created = Group.objects.get_or_create(name=group_name) + try: + group, created = Group.objects.get_or_create(name=group_name) + instance.dealer = dealer + instance.group = group + instance.save() + except IntegrityError as e: + from django.utils.translation import gettext_lazy as _ + print(e) + messages.error(self.request, _("Group name already exists")) + return redirect("group_create", dealer_slug=dealer.slug) + if created: - group_manager, created = models.CustomGroup.objects.get_or_create( - name=group_name, dealer=dealer, group=group + group_manager, _ = models.CustomGroup.objects.get_or_create( + name=instance.name, dealer=dealer, group=group ) group_manager.set_default_permissions() dealer.user.groups.add(group) - else: - instance.dealer = dealer - instance.group = group - instance.save() return super().form_valid(form) def get_success_url(self): @@ -2915,6 +2922,12 @@ class UserCreateView( success_url = reverse_lazy("user_list") success_message = _("User created successfully") + def get_form(self, form_class=None): + form = super().get_form(form_class) + dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"]) + form.fields["group"].queryset = models.CustomGroup.objects.filter(dealer=dealer) + return form + def form_valid(self, form): dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"]) # quota_dict = get_user_quota(dealer.user) @@ -2956,11 +2969,9 @@ class UserCreateView( staff = form.save(commit=False) staff.staff_member = staff_member staff.dealer = dealer - staff.add_as_manager() - group = models.CustomGroup.objects.filter(dealer=dealer,name__iexact=staff.staff_type).first() staff.save() - if group: - staff.add_group(group.group) + for customgroup in form.cleaned_data["group"]: + staff.add_group(customgroup.group) return super().form_valid(form) def get_success_url(self): return reverse_lazy("user_list", args=[self.request.dealer.slug]) @@ -3004,30 +3015,32 @@ class UserUpdateView( def get_form(self, form_class=None): form = super().get_form(form_class) + dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"]) + form.fields["group"].queryset = models.CustomGroup.objects.filter(dealer=dealer) form.fields["email"].disabled = True return form def get_initial(self): initial = super().get_initial() initial["email"] = self.object.staff_member.user.email - initial["service_offered"] = self.object.staff_member.services_offered.all() + initial["group"] = self.object.groups + return initial def form_valid(self, form): - services = form.cleaned_data["service_offered"] - if not services: - self.object.staff_member.services_offered.clear() - else: - for service in services: - self.object.staff_member.services_offered.add(service) + # services = form.cleaned_data["service_offered"] + # if not services: + # self.object.staff_member.services_offered.clear() + # else: + # for service in services: + # self.object.staff_member.services_offered.add(service) staff = form.save(commit=False) staff.name = form.cleaned_data["name"] staff.arabic_name = form.cleaned_data["arabic_name"] staff.phone_number = form.cleaned_data["phone_number"] - staff.staff_type = form.cleaned_data["staff_type"] - - staff.add_as_manager() + for customgroup in form.cleaned_data["group"]: + staff.add_group(customgroup.group,True) staff.save() return super().form_valid(form) def get_success_url(self): diff --git a/templates/sales/orders/order_details.html b/templates/sales/orders/order_details.html index 49b55e17..2807c637 100644 --- a/templates/sales/orders/order_details.html +++ b/templates/sales/orders/order_details.html @@ -81,10 +81,6 @@ {{ _("Sale Order")}} #{{ saleorder.formatted_order_id }}
- <<<<<<< HEAD - ======= - - >>>>>>> e9e2fd3 (add bulk insert + po item insert) @@ -275,18 +271,10 @@
- <<<<<<< HEAD
{{ _("Documents") }}
+
@@ -330,13 +318,7 @@
- <<<<<<< HEAD - ======= - - - - >>>>>>> e9e2fd3 (add bulk insert + po item insert)
@@ -379,52 +361,27 @@ {% endif %} {% comment %} {% endcomment %} - <<<<<<< HEAD - ======= - - >>>>>>> e9e2fd3 (add bulk insert + po item insert) {{ _("Edit Order")}} {% if not saleorder.invoice %} {% comment %} {% endcomment %} - <<<<<<< HEAD {{ _("Create Invoice")}} - ======= - - - {{ _("Create Invoice")}} - - >>>>>>> e9e2fd3 (add bulk insert + po item insert) - + {% endif %} {% if saleorder.status == 'approved' and not saleorder.actual_delivery_date %} - <<<<<<< HEAD + {% endif %} {% if saleorder.status != 'cancelled' %} - <<<<<<< HEAD + {% endif %}
@@ -575,15 +532,8 @@
@@ -612,15 +562,8 @@ diff --git a/templates/users/user_form.html b/templates/users/user_form.html index 8ff143e9..1780755b 100644 --- a/templates/users/user_form.html +++ b/templates/users/user_form.html @@ -39,8 +39,7 @@ {{ form.arabic_name|as_crispy_field }} {{ form.email|as_crispy_field }} {{ form.phone_number|as_crispy_field }} - {{ form.staff_type|as_crispy_field }} - {{ form.service_offered|as_crispy_field }} + {{ form.group|as_crispy_field }} {% for error in form.errors %}
{{ error }}
{% endfor %} @@ -55,4 +54,5 @@ -{% endblock %} \ No newline at end of file +{% endblock %} + diff --git a/templates/users/user_list.html b/templates/users/user_list.html index 40e01930..846cdb75 100644 --- a/templates/users/user_list.html +++ b/templates/users/user_list.html @@ -47,7 +47,9 @@ {{ user.email }} {{ user.phone_number }} - {% trans user.staff_type|title %} + {% for group in user.groups %} + {% trans group.name|title %} + {% endfor %}