Skip to content

Commit d8bf1c9

Browse files
committed
Added Edit Product Page
1 parent 4c81e5b commit d8bf1c9

27 files changed

+1461
-8
lines changed

DjangoEcommerceApp/AdminViews.py

Lines changed: 313 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.shortcuts import render
22
from django.contrib.auth.decorators import login_required
33
from django.views.generic import ListView,CreateView,UpdateView,DetailView,View
4-
from DjangoEcommerceApp.models import Categories,SubCategories,CustomUser,MerchantUser,Products,ProductAbout,ProductDetails,ProductMedia,ProductTransaction,ProductTags
4+
from DjangoEcommerceApp.models import Categories,SubCategories,CustomUser,MerchantUser,Products,ProductAbout,ProductDetails,ProductMedia,ProductTransaction,ProductTags,StaffUser,CustomerUser
55
from django.contrib.messages.views import SuccessMessageMixin
66
from django.core.files.storage import FileSystemStorage
77
from django.contrib.messages.views import messages
@@ -284,3 +284,315 @@ def get_context_data(self,**kwargs):
284284
context["orderby"]=self.request.GET.get("orderby","id")
285285
context["all_table_fields"]=Products._meta.get_fields()
286286
return context
287+
288+
289+
class ProductEdit(View):
290+
291+
def get(self,request,*args,**kwargs):
292+
product_id=kwargs["product_id"]
293+
product=Products.objects.get(id=product_id)
294+
product_details=ProductDetails.objects.filter(product_id=product_id)
295+
product_about=ProductAbout.objects.filter(product_id=product_id)
296+
product_tags=ProductTags.objects.filter(product_id=product_id)
297+
298+
categories=Categories.objects.filter(is_active=1)
299+
categories_list=[]
300+
for category in categories:
301+
sub_category=SubCategories.objects.filter(is_active=1,category_id=category.id)
302+
categories_list.append({"category":category,"sub_category":sub_category})
303+
304+
return render(request,"admin_templates/product_edit.html",{"categories":categories_list,"product":product,"product_details":product_details,"product_about":product_about,"product_tags":product_tags})
305+
306+
def post(self,request,*args,**kwargs):
307+
308+
product_name=request.POST.get("product_name")
309+
brand=request.POST.get("brand")
310+
url_slug=request.POST.get("url_slug")
311+
sub_category=request.POST.get("sub_category")
312+
product_max_price=request.POST.get("product_max_price")
313+
product_discount_price=request.POST.get("product_discount_price")
314+
product_description=request.POST.get("product_description")
315+
title_title_list=request.POST.getlist("title_title[]")
316+
details_ids=request.POST.getlist("details_id[]")
317+
title_details_list=request.POST.getlist("title_details[]")
318+
about_title_list=request.POST.getlist("about_title[]")
319+
about_ids=request.POST.getlist("about_id[]")
320+
product_tags=request.POST.get("product_tags")
321+
long_desc=request.POST.get("long_desc")
322+
subcat_obj=SubCategories.objects.get(id=sub_category)
323+
324+
product_id=kwargs["product_id"]
325+
product=Products.objects.get(id=product_id)
326+
product.product_name=product_name
327+
product.url_slug=url_slug
328+
product.brand=brand
329+
product.subcategories_id=subcat_obj
330+
product.product_description=product_description
331+
product.product_max_price=product_max_price
332+
product.product_discount_price=product_discount_price
333+
product.product_long_description=long_desc
334+
product.save()
335+
336+
337+
j=0
338+
for title_title in title_title_list:
339+
detail_id=details_ids[j]
340+
if detail_id == "blank" and title_title!="":
341+
product_details=ProductDetails(title=title_title,title_details=title_details_list[j],product_id=product)
342+
product_details.save()
343+
else:
344+
if title_title!="":
345+
product_details=ProductDetails.objects.get(id=detail_id)
346+
product_details.title=title_title
347+
product_details.title_details=title_details_list[j]
348+
product_details.product_id=product
349+
product_details.save()
350+
j=j+1
351+
352+
353+
k=0
354+
for about in about_title_list:
355+
about_id=about_ids[k]
356+
if about_id=="blank" and about!="":
357+
product_about=ProductAbout(title=about,product_id=product)
358+
product_about.save()
359+
else:
360+
if about!="":
361+
product_about=ProductAbout.objects.get(id=about_id)
362+
product_about.title=about
363+
product_about.product_id=product
364+
product_about.save()
365+
k=k+1
366+
367+
ProductTags.objects.filter(product_id=product_id).delete()
368+
369+
product_tags_list=product_tags.split(",")
370+
371+
for product_tag in product_tags_list:
372+
product_tag_obj=ProductTags(product_id=product,title=product_tag)
373+
product_tag_obj.save()
374+
375+
return HttpResponse("OK")
376+
377+
class ProductAddMedia(View):
378+
def get(self,request,*args,**kwargs):
379+
product_id=kwargs["product_id"]
380+
product=Products.objects.get(id=product_id)
381+
return render(request,"admin_templates/product_add_media.html",{"product":product})
382+
383+
def post(self,request,*args,**kwargs):
384+
product_id=kwargs["product_id"]
385+
product=Products.objects.get(id=product_id)
386+
media_type_list=request.POST.getlist("media_type[]")
387+
media_content_list=request.FILES.getlist("media_content[]")
388+
389+
i=0
390+
for media_content in media_content_list:
391+
fs=FileSystemStorage()
392+
filename=fs.save(media_content.name,media_content)
393+
media_url=fs.url(filename)
394+
product_media=ProductMedia(product_id=product,media_type=media_type_list[i],media_content=media_url)
395+
product_media.save()
396+
i=i+1
397+
398+
return HttpResponse("OK")
399+
400+
class ProductEditMedia(View):
401+
def get(self,request,*args,**kwargs):
402+
product_id=kwargs["product_id"]
403+
product=Products.objects.get(id=product_id)
404+
product_medias=ProductMedia.objects.filter(product_id=product_id)
405+
return render(request,"admin_templates/product_edit_media.html",{"product":product,"product_medias":product_medias})
406+
407+
class ProductMediaDelete(View):
408+
def get(self,request,*args,**kwargs):
409+
media_id=kwargs["id"]
410+
product_media=ProductMedia.objects.get(id=media_id)
411+
import os
412+
from DjangoEcommerce import settings
413+
414+
#It will work too Sometimes
415+
#product_media.media_content.delete()
416+
os.remove(settings.MEDIA_ROOT.replace("\media","")+str(product_media.media_content).replace("/","\\"))
417+
418+
product_id=product_media.product_id.id
419+
product_media.delete()
420+
return HttpResponseRedirect(reverse("product_edit_media",kwargs={"product_id":product_id}))
421+
422+
class ProductAddStocks(View):
423+
def get(self,request,*args,**kwargs):
424+
product_id=kwargs["product_id"]
425+
product=Products.objects.get(id=product_id)
426+
return render(request,"admin_templates/product_add_stocks.html",{"product":product})
427+
428+
def post(self,request,*args,**kwargs):
429+
product_id=kwargs["product_id"]
430+
new_instock=request.POST.get("add_stocks")
431+
product=Products.objects.get(id=product_id)
432+
old_stocks=product.in_stock_total
433+
new_stocks=int(new_instock)+int(old_stocks)
434+
product.in_stock_total=new_stocks
435+
product.save()
436+
437+
product_obj=Products.objects.get(id=product_id)
438+
product_transaction=ProductTransaction(product_id=product_obj,transaction_product_count=new_instock,transaction_description="New Product Added",transaction_type=1)
439+
product_transaction.save()
440+
return HttpResponseRedirect(reverse("product_add_stocks",kwargs={"product_id":product_id}))
441+
442+
443+
class StaffUserListView(ListView):
444+
model=StaffUser
445+
template_name="admin_templates/staff_list.html"
446+
paginate_by=3
447+
448+
def get_queryset(self):
449+
filter_val=self.request.GET.get("filter","")
450+
order_by=self.request.GET.get("orderby","id")
451+
if filter_val!="":
452+
cat=StaffUser.objects.filter(Q(auth_user_id__first_name__contains=filter_val) |Q(auth_user_id__last_name__contains=filter_val) | Q(auth_user_id__email__contains=filter_val) | Q(auth_user_id__username__contains=filter_val)).order_by(order_by)
453+
else:
454+
cat=StaffUser.objects.all().order_by(order_by)
455+
456+
return cat
457+
458+
def get_context_data(self,**kwargs):
459+
context=super(StaffUserListView,self).get_context_data(**kwargs)
460+
context["filter"]=self.request.GET.get("filter","")
461+
context["orderby"]=self.request.GET.get("orderby","id")
462+
context["all_table_fields"]=StaffUser._meta.get_fields()
463+
return context
464+
465+
466+
class StaffUserCreateView(SuccessMessageMixin,CreateView):
467+
template_name="admin_templates/staff_create.html"
468+
model=CustomUser
469+
fields=["first_name","last_name","email","username","password"]
470+
471+
def form_valid(self,form):
472+
473+
#Saving Custom User Object for Merchant User
474+
user=form.save(commit=False)
475+
user.is_active=True
476+
user.user_type=2
477+
user.set_password(form.cleaned_data["password"])
478+
user.save()
479+
480+
#Saving Merchant user
481+
profile_pic=self.request.FILES["profile_pic"]
482+
fs=FileSystemStorage()
483+
filename=fs.save(profile_pic.name,profile_pic)
484+
profile_pic_url=fs.url(filename)
485+
486+
user.staffuser.profile_pic=profile_pic_url
487+
user.save()
488+
messages.success(self.request,"Staff User Created")
489+
return HttpResponseRedirect(reverse("staff_list"))
490+
491+
class StaffUserUpdateView(SuccessMessageMixin,UpdateView):
492+
template_name="admin_templates/staff_update.html"
493+
model=CustomUser
494+
fields=["first_name","last_name","email","username"]
495+
496+
def get_context_data(self,**kwargs):
497+
context=super().get_context_data(**kwargs)
498+
staffuser=StaffUser.objects.get(auth_user_id=self.object.pk)
499+
context["staffuser"]=staffuser
500+
return context
501+
502+
def form_valid(self,form):
503+
504+
#Saving Custom User Object for Merchant User
505+
user=form.save(commit=False)
506+
user.save()
507+
508+
#Saving Merchant user
509+
staffuser=StaffUser.objects.get(auth_user_id=user.id)
510+
if self.request.FILES.get("profile_pic",False):
511+
profile_pic=self.request.FILES["profile_pic"]
512+
fs=FileSystemStorage()
513+
filename=fs.save(profile_pic.name,profile_pic)
514+
profile_pic_url=fs.url(filename)
515+
staffuser.profile_pic=profile_pic_url
516+
517+
staffuser.save()
518+
messages.success(self.request,"Staff User Updated")
519+
return HttpResponseRedirect(reverse("staff_list"))
520+
521+
522+
class CustomerUserListView(ListView):
523+
model=CustomerUser
524+
template_name="admin_templates/customer_list.html"
525+
paginate_by=3
526+
527+
def get_queryset(self):
528+
filter_val=self.request.GET.get("filter","")
529+
order_by=self.request.GET.get("orderby","id")
530+
if filter_val!="":
531+
cat=CustomerUser.objects.filter(Q(auth_user_id__first_name__contains=filter_val) |Q(auth_user_id__last_name__contains=filter_val) | Q(auth_user_id__email__contains=filter_val) | Q(auth_user_id__username__contains=filter_val)).order_by(order_by)
532+
else:
533+
cat=CustomerUser.objects.all().order_by(order_by)
534+
535+
return cat
536+
537+
def get_context_data(self,**kwargs):
538+
context=super(CustomerUserListView,self).get_context_data(**kwargs)
539+
context["filter"]=self.request.GET.get("filter","")
540+
context["orderby"]=self.request.GET.get("orderby","id")
541+
context["all_table_fields"]=CustomerUser._meta.get_fields()
542+
return context
543+
544+
545+
class CustomerUserCreateView(SuccessMessageMixin,CreateView):
546+
template_name="admin_templates/customer_create.html"
547+
model=CustomUser
548+
fields=["first_name","last_name","email","username","password"]
549+
550+
def form_valid(self,form):
551+
552+
#Saving Custom User Object for Merchant User
553+
user=form.save(commit=False)
554+
user.is_active=True
555+
user.user_type=4
556+
user.set_password(form.cleaned_data["password"])
557+
user.save()
558+
559+
#Saving Merchant user
560+
profile_pic=self.request.FILES["profile_pic"]
561+
fs=FileSystemStorage()
562+
filename=fs.save(profile_pic.name,profile_pic)
563+
profile_pic_url=fs.url(filename)
564+
565+
user.customeruser.profile_pic=profile_pic_url
566+
user.save()
567+
messages.success(self.request,"Customer User Created")
568+
return HttpResponseRedirect(reverse("customer_list"))
569+
570+
class CustomerUserUpdateView(SuccessMessageMixin,UpdateView):
571+
template_name="admin_templates/customer_update.html"
572+
model=CustomUser
573+
fields=["first_name","last_name","email","username"]
574+
575+
def get_context_data(self,**kwargs):
576+
context=super().get_context_data(**kwargs)
577+
customeruser=CustomerUser.objects.get(auth_user_id=self.object.pk)
578+
context["CustomerUser"]=customeruser
579+
return context
580+
581+
def form_valid(self,form):
582+
583+
#Saving Custom User Object for Merchant User
584+
user=form.save(commit=False)
585+
user.save()
586+
587+
#Saving Merchant user
588+
customeruser=CustomerUser.objects.get(auth_user_id=user.id)
589+
if self.request.FILES.get("profile_pic",False):
590+
profile_pic=self.request.FILES["profile_pic"]
591+
fs=FileSystemStorage()
592+
filename=fs.save(profile_pic.name,profile_pic)
593+
profile_pic_url=fs.url(filename)
594+
customeruser.profile_pic=profile_pic_url
595+
596+
customeruser.save()
597+
messages.success(self.request,"Customer User Updated")
598+
return HttpResponseRedirect(reverse("customer_list"))
Binary file not shown.
Binary file not shown.

DjangoEcommerceApp/adminurls.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,21 @@
5050
#Products
5151
path('product_create',AdminViews.ProductView.as_view(),name="product_view"),
5252
path('product_list',AdminViews.ProductListView.as_view(),name="product_list"),
53-
path('file_upload',AdminViews.file_upload,name="file_upload")
53+
path('product_edit/<str:product_id>',AdminViews.ProductEdit.as_view(),name="product_edit"),
54+
path('product_add_media/<str:product_id>',AdminViews.ProductAddMedia.as_view(),name="product_add_media"),
55+
path('product_edit_media/<str:product_id>',AdminViews.ProductEditMedia.as_view(),name="product_edit_media"),
56+
path('product_media_delete/<str:id>',AdminViews.ProductMediaDelete.as_view(),name="product_media_delete"),
57+
path('product_add_stocks/<str:product_id>',AdminViews.ProductAddStocks.as_view(),name="product_add_stocks"),
58+
path('file_upload',AdminViews.file_upload,name="file_upload"),
59+
60+
#Staff User
61+
path('staff_create',AdminViews.StaffUserCreateView.as_view(),name="staff_create"),
62+
path('staff_list',AdminViews.StaffUserListView.as_view(),name="staff_list"),
63+
path('staff_update/<slug:pk>',AdminViews.StaffUserUpdateView.as_view(),name="staff_update"),
64+
65+
#Customer User
66+
path('customer_create',AdminViews.CustomerUserCreateView.as_view(),name="customer_create"),
67+
path('customer_list',AdminViews.CustomerUserListView.as_view(),name="customer_list"),
68+
path('customer_update/<slug:pk>',AdminViews.CustomerUserUpdateView.as_view(),name="customer_update"),
69+
5470
]

0 commit comments

Comments
 (0)