diff --git a/inventory/models.py b/inventory/models.py index b8ed7462..0237332c 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -829,6 +829,7 @@ class Car(Base): def mark_as_sold(self): self.cancel_reservation() self.status = CarStatusChoices.SOLD + self.sold_date=timezone.now() self.save() def cancel_reservation(self): diff --git a/inventory/tasks.py b/inventory/tasks.py index 729fc65d..7fca2852 100644 --- a/inventory/tasks.py +++ b/inventory/tasks.py @@ -985,7 +985,9 @@ def send_schedule_reminder_email(schedule_id): """ try: schedule = Schedule.objects.get(pk=schedule_id) - + if schedule.completed: + logger.info("Schedule is already completed, existing.") + return # Ensure the user has an email and the schedule is not completed/canceled if not schedule.scheduled_by.email or schedule.status in [ "completed", diff --git a/inventory/views.py b/inventory/views.py index ed729dec..36f4920d 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -1402,7 +1402,7 @@ class CarListView(LoginRequiredMixin, PermissionRequiredMixin, ListView): template_name = "inventory/car_list_view.html" context_object_name = "cars" paginate_by = 10 - permission_required = "inventory.view_carcolors" + permission_required = "inventory.view_car" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -1422,7 +1422,6 @@ class CarListView(LoginRequiredMixin, PermissionRequiredMixin, ListView): context["year"] = models.Car.objects.none() make = self.request.GET.get("make") model = self.request.GET.get("model") - if make: make_ = models.CarMake.objects.get(id_car_make=int(make)) context["model"] = make_.carmodel_set.filter(car__in=cars).distinct() @@ -1440,15 +1439,16 @@ class CarListView(LoginRequiredMixin, PermissionRequiredMixin, ListView): dealer = get_user_type(self.request) qs = super().get_queryset() qs = qs.filter(dealer=dealer) - status = self.request.GET.get("status") + # status = self.request.GET.get("status") search = self.request.GET.get("search") make = self.request.GET.get("make", None) model = self.request.GET.get("model", None) year = self.request.GET.get("year", None) car_status = self.request.GET.get("car_status", None) + print("ALLLLLLLLL:::",make,model) - if status: - qs = qs.filter(status=status) + if car_status: + qs = qs.filter(status=car_status) if search: query = ( Q(vin__icontains=search) @@ -4990,6 +4990,7 @@ def create_estimate(request, dealer_slug, slug=None): .annotate(hash_count=Count("hash")) .distinct() ) + print(car_list) context = { "form": form, "items": [ @@ -5124,8 +5125,7 @@ def create_sale_order(request, dealer_slug, pk): f"KeyError: 'car_info' or 'status' key missing when attempting to update status to 'sold' for item.item_model PK: {getattr(item.item_model, 'pk', 'N/A')}." ) pass - item.item_model.car.sold_date=timezone.now() # to be checked added by faheed - item.item_model.car.save()# to be checked added byfaheed + item.item_model.car.mark_as_sold() messages.success(request, "Sale Order created successfully") @@ -7539,6 +7539,18 @@ class NotificationListView(LoginRequiredMixin, ListView): def get_queryset(self): return models.Notification.objects.filter(user=self.request.user) + + def get_context_data(self, **kwargs): + + context = super().get_context_data(**kwargs) + user_notifications = self.get_queryset() + + # Calculate the number of total, read and unread notifications + context['total_count'] = user_notifications.count() + context['read_count'] = user_notifications.filter(is_read=True).count() + context['unread_count'] = user_notifications.filter(is_read=False).count() + + return context class ItemServiceCreateView( @@ -8198,7 +8210,7 @@ def send_email_view(request, dealer_slug, pk): تحياتي، -{dealer.get_local_name} +{dealer.get_local_name()} {dealer.phone_number} Haikal | هيكل ----- diff --git a/templates/403.html b/templates/403.html index 8eb9a6c3..766aacaf 100644 --- a/templates/403.html +++ b/templates/403.html @@ -4,7 +4,7 @@ - 403 - Access Forbidden + 403 - {% trans "Access Forbidden" %}