diff --git a/inventory/middleware.py b/inventory/middleware.py index f0467a55..52dae133 100644 --- a/inventory/middleware.py +++ b/inventory/middleware.py @@ -97,7 +97,7 @@ class InjectDealerMiddleware: request.is_staff = False if hasattr(request.user, "dealer"): request.is_dealer = True - if hasattr(request.user, "staffmember"): + elif hasattr(request.user, "staffmember"): request.is_staff = True except Exception: pass diff --git a/inventory/models.py b/inventory/models.py index 0f5392c3..00111089 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -31,6 +31,8 @@ from django_ledger.models import ( InvoiceModel, AccountModel, EntityManagementModel, + PurchaseOrderModel, + ItemTransactionModel, ) from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType @@ -722,7 +724,7 @@ class Car(Base): self.save() @property def logo(self): - return self.id_car_make.logo.url if self.id_car_make.logo else None + return self.id_car_make.logo.url if self.id_car_make.logo else None class CarTransfer(models.Model): car = models.ForeignKey( @@ -2835,3 +2837,18 @@ class PaymentHistory(models.Model): ###################################################################################################### ###################################################################################################### ###################################################################################################### +class PoItemsUploaded(models.Model): + dealer = models.ForeignKey(Dealer, on_delete=models.CASCADE, null=True, blank=True) + po = models.ForeignKey( + PurchaseOrderModel, on_delete=models.CASCADE, null=True, blank=True, related_name="items" + ) + item = models.ForeignKey( + ItemTransactionModel, + on_delete=models.CASCADE, + null=True, + blank=True, + related_name="po_items", + ) + status = models.CharField(max_length=100, null=True, blank=True) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) \ No newline at end of file diff --git a/inventory/views.py b/inventory/views.py index 7e907fba..5f73ce2a 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -2929,21 +2929,22 @@ class UserCreateView( return self.form_invalid(form) email = form.cleaned_data["email"] - password = "Tenhal@123" - try: - user = User.objects.create_user( - username=email, email=email, password=password - ) - user.is_staff = True - user.save() - except IntegrityError as e: + if User.objects.filter(email=email).exists(): messages.error( self.request, _( "A user with this email already exists. Please use a different email." ), ) - return redirect("user_create") + return redirect("user_create", dealer_slug=dealer.slug) + password = "Tenhal@123" + + user = User.objects.create_user( + username=email, email=email, password=password + ) + user.is_staff = True + user.save() + staff_member = StaffMember.objects.create(user=user) for service in form.cleaned_data["service_offered"]: staff_member.services_offered.add(service) @@ -9535,6 +9536,11 @@ class PurchaseOrderMarkAsApprovedView(BasePurchaseOrderActionActionView): class PurchaseOrderMarkAsFulfilledView(BasePurchaseOrderActionActionView): action_name = "mark_as_fulfilled" + def get(self, request, dealer_slug, entity_slug, po_pk, *args, **kwargs): + po = get_object_or_404(PurchaseOrderModel, pk=po_pk) + for item in po.get_itemtxs_data()[0]: + models.PoItemsUploaded.objects.create(po=po, item=item, status="fulfilled") + return super().get(request, dealer_slug, entity_slug, po_pk, *args, **kwargs) class PurchaseOrderMarkAsCanceledView(BasePurchaseOrderActionActionView): action_name = "mark_as_canceled" @@ -9602,36 +9608,23 @@ class BillModelActionForceMigrateView(BaseBillActionView): def view_items_inventory(request, dealer_slug, entity_slug, po_pk): - dealer = get_object_or_404(models.Dealer, slug=dealer_slug) + get_object_or_404(models.Dealer, slug=dealer_slug) po = PurchaseOrderModel.objects.get(pk=po_pk) - items = po.get_itemtxs_data()[0] - items_per_page = 30 - paginator = Paginator(items, items_per_page) + items = po.items.all() - page_number = request.GET.get("page") - try: - page_obj = paginator.get_page(page_number) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - page_obj = paginator.get_page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - page_obj = paginator.get_page(paginator.num_pages) - return render( - request, - "purchase_orders/po_upload_cars.html", - {"po": po, "items": items, "page_obj": page_obj}, - ) + return render(request,"purchase_orders/po_upload_cars.html",{"po": po, "items": items}) def upload_cars(request, dealer_slug, pk=None): item = None + po_item = None dealer = get_object_or_404(models.Dealer, slug=dealer_slug) response = redirect("upload_cars", dealer_slug=dealer_slug) if pk: item = get_object_or_404(ItemTransactionModel, pk=pk) + po_item = models.PoItemsUploaded.objects.get(dealer=dealer, item=item) response = redirect("upload_cars", dealer_slug=dealer_slug, pk=pk) - if item.item_model.additional_info.get("uploaded"): + if po_item.status == "uploaded": messages.add_message(request, messages.ERROR, "Item already uploaded.") return redirect( "view_items_inventory", @@ -9645,7 +9638,6 @@ def upload_cars(request, dealer_slug, pk=None): try: if item: - item = ItemTransactionModel.objects.get(pk=pk) data = [x.strip() for x in item.item_model.name.split("||")] make = models.CarMake.objects.filter(is_sa_import=True).get( name=data[0] @@ -9725,9 +9717,9 @@ def upload_cars(request, dealer_slug, pk=None): ) car.add_colors(exterior=exterior, interior=interior) cars_created += 1 - if item: - item.item_model.additional_info["uploaded"] = True - item.item_model.save() + if po_item: + po_item.status = "uploaded" + po_item.save() messages.success(request, f"Successfully imported {cars_created} cars") return response diff --git a/templates/purchase_orders/po_list.html b/templates/purchase_orders/po_list.html index e3b97737..2fa18613 100644 --- a/templates/purchase_orders/po_list.html +++ b/templates/purchase_orders/po_list.html @@ -66,7 +66,11 @@
diff --git a/templates/purchase_orders/po_upload_cars.html b/templates/purchase_orders/po_upload_cars.html index d0314b8d..957d587e 100644 --- a/templates/purchase_orders/po_upload_cars.html +++ b/templates/purchase_orders/po_upload_cars.html @@ -33,16 +33,16 @@ - {% for item in items %} + {% for i in items %}