Merge branch 'main' of http://10.10.1.136:3000/ismail/haikal into frontend
This commit is contained in:
commit
4cc10b48c1
@ -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
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -913,7 +913,6 @@ urlpatterns = [
|
||||
name="bill-action-force-migrate",
|
||||
),
|
||||
# path("items/bills/create/", views.bill_create, name="bill_create"),
|
||||
# >>>>>>>>>>>>>>>>>>>>>>...
|
||||
path(
|
||||
"items/bills/<uuid:pk>/bill_detail/",
|
||||
views.BillDetailView.as_view(),
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -81,10 +81,6 @@
|
||||
{{ _("Sale Order")}} #{{ saleorder.formatted_order_id }}
|
||||
</h1>
|
||||
<div>
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
|
||||
<button class="btn btn-sm btn-outline-light me-2">
|
||||
<i class="fas fa-print me-1"></i> {{ _("Print") }}
|
||||
</button>
|
||||
@ -275,18 +271,10 @@
|
||||
<!-- Documents Card -->
|
||||
<div class="card mb-4 shadow-sm">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<<<<<<< HEAD
|
||||
<h5 class="mb-0">{{ _("Documents") }}</h5>
|
||||
<button class="btn btn-sm btn-primary">
|
||||
<i class="fas fa-plus me-1"></i> {{ _("Add Document")}}
|
||||
=======
|
||||
|
||||
<h5 class="mb-0">{{ _("Documents") }}</h5>
|
||||
<button class="btn btn-sm btn-primary">
|
||||
<i class="fas fa-plus me-1"></i> {{ _("Add Document")}}
|
||||
|
||||
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
|
||||
</button>
|
||||
</button>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="file-upload mb-3">
|
||||
@ -330,13 +318,7 @@
|
||||
<div class="mb-3">
|
||||
<textarea class="form-control" name="comment" rows="3" placeholder="Add a comment or note..." required></textarea>
|
||||
<div class="d-flex justify-content-end mt-2">
|
||||
<<<<<<< HEAD
|
||||
<button type="submit" class="btn btn-primary btn-sm">{{ _("Post Comment")}}</button>
|
||||
=======
|
||||
|
||||
<button type="submit" class="btn btn-primary btn-sm">{{ _("Post Comment")}}</button>
|
||||
|
||||
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@ -379,52 +361,27 @@
|
||||
{% endif %}
|
||||
|
||||
{% comment %} <a href="{% url 'edit_sale_order' saleorder.pk %}" class="btn btn-primary"> {% endcomment %}
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
|
||||
<a href="" class="btn btn-primary">
|
||||
<i class="fas fa-edit me-2"></i> {{ _("Edit Order")}}
|
||||
</a>
|
||||
|
||||
{% if not saleorder.invoice %}
|
||||
{% comment %} <a href="{% url 'create_invoice_from_order' saleorder.pk %}" class="btn btn-info"> {% endcomment %}
|
||||
<<<<<<< HEAD
|
||||
<a href="" class="btn btn-info">
|
||||
<i class="fas fa-file-invoice-dollar me-2"></i> {{ _("Create Invoice")}}
|
||||
=======
|
||||
|
||||
<a href="" class="btn btn-info">
|
||||
<i class="fas fa-file-invoice-dollar me-2"></i> {{ _("Create Invoice")}}
|
||||
|
||||
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
|
||||
</a>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if saleorder.status == 'approved' and not saleorder.actual_delivery_date %}
|
||||
<<<<<<< HEAD
|
||||
<button class="btn btn-warning" data-bs-toggle="modal" data-bs-target="#deliveryModal">
|
||||
<i class="fas fa-truck me-2"></i> {{ _("Schedule Delivery")}}
|
||||
=======
|
||||
|
||||
<button class="btn btn-warning" data-bs-toggle="modal" data-bs-target="#deliveryModal">
|
||||
<i class="fas fa-truck me-2"></i> {{ _("Schedule Delivery")}}
|
||||
|
||||
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
|
||||
</button>
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
{% if saleorder.status != 'cancelled' %}
|
||||
<<<<<<< HEAD
|
||||
<button class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#cancelModal">
|
||||
<i class="fas fa-times-circle me-2"></i> {{ _("Cancel Order")}}
|
||||
=======
|
||||
|
||||
<button class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#cancelModal">
|
||||
<i class="fas fa-times-circle me-2"></i> {{ _("Cancel Order")}}
|
||||
|
||||
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
|
||||
</button>
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@ -575,15 +532,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<<<<<<< HEAD
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
|
||||
<button type="submit" class="btn btn-danger">{{ _("Confirm Cancellation")}}</button>
|
||||
=======
|
||||
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
|
||||
<button type="submit" class="btn btn-danger">{{ _("Confirm Cancellation")}}</button>
|
||||
|
||||
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@ -612,15 +562,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<<<<<<< HEAD
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
|
||||
<button type="submit" class="btn btn-primary">{{ _("Schedule Delivery")}}</button>
|
||||
=======
|
||||
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
|
||||
<button type="submit" class="btn btn-primary">{{ _("Schedule Delivery")}}</button>
|
||||
|
||||
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@ -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 %}
|
||||
<div class="text-danger">{{ error }}</div>
|
||||
{% endfor %}
|
||||
@ -55,4 +54,5 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@ -47,7 +47,9 @@
|
||||
<td class="align-middle white-space-nowrap align-items-center">{{ user.email }}</td>
|
||||
<td class="align-middle white-space-nowrap align-items-center justify-content-center">{{ user.phone_number }}</td>
|
||||
<td>
|
||||
<span class="badge badge-sm bg-primary text-center"><i class="fa-solid fa-scroll"></i> {% trans user.staff_type|title %}</span>
|
||||
{% for group in user.groups %}
|
||||
<span class="badge badge-sm bg-primary text-center"><i class="fa-solid fa-scroll"></i> {% trans group.name|title %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
|
||||
<td class="align-middle white-space-nowrap">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user