Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
dimkoug committed Jan 22, 2023
1 parent 9fb8534 commit d55b45c
Show file tree
Hide file tree
Showing 92 changed files with 15,976 additions and 16,969 deletions.
15 changes: 14 additions & 1 deletion core/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,17 @@ def get_sb_data(request):
"id": d.pk,
"text": d.__str__()
})
return JsonResponse({"results": d_objects}, safe=False)
return JsonResponse({"results": d_objects}, safe=False)


def delete_model(request):
model_str = request.GET.get('model')
app_str = request.GET.get('app')
id = request.GET.get('id')
model = apps.get_model(app_label=app_str, model_name=model_str)
try:
data = model.objects.get(id=id)
data.delete()
except model.DoesNotExist:
pass
return JsonResponse({}, safe=False)
9 changes: 8 additions & 1 deletion core/templatetags/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,11 @@ def get_formset_img(obj, value):
def is_active(request , url):
if resolve(request.path).url_name == url:
return 'active'
return ''
return ''


@register.simple_tag
def get_selected_attr(pk, items):
if pk in items:
return True
return False
7 changes: 5 additions & 2 deletions shop/cms/hero.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.shortcuts import render, redirect
from django.urls import reverse
from django.http import HttpResponseRedirect, JsonResponse, HttpResponse
from django.template.loader import render_to_string
from django.contrib.auth.mixins import LoginRequiredMixin
Expand Down Expand Up @@ -50,7 +51,8 @@ def get_context_data(self, **kwargs):
context['formsets'] = [
{
'title': 'Items',
'formset': HeroItemFormSet(self.request.POST or None)
'formset': HeroItemFormSet(self.request.POST or None),
"sb_url": reverse("shop:get_products_for_sb")
},
]
return context
Expand Down Expand Up @@ -83,7 +85,8 @@ def get_context_data(self, **kwargs):
{
'title': 'Items',
'formset': HeroItemFormSet(self.request.POST or None,
instance=self.get_object())
instance=self.get_object()),
"sb_url": reverse("shop:get_products_for_sb")
},
]
return context
Expand Down
114 changes: 52 additions & 62 deletions shop/cms/product.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.shortcuts import render, redirect
from django.urls import reverse
from django.http import HttpResponseRedirect, JsonResponse, HttpResponse
from django.template.loader import render_to_string
from django.contrib.auth.mixins import LoginRequiredMixin
Expand All @@ -22,7 +23,7 @@


from shop.models import (
Product, ProductTag, ProductAttribute, ProductCategory, ProductRelated, Media, Logo, Stock
Product, ProductTag, ProductAttribute, ProductCategory, ProductRelated, Media, Logo, Stock,Category

)

Expand Down Expand Up @@ -58,40 +59,24 @@ def get_context_data(self, **kwargs):
'formset': ProductTagFormSet(
self.request.POST or None,
queryset=ProductTag.objects.select_related(
'product', 'tag'))
},
{
'title': 'Product Attributes',
'formset': ProductAttributeFormSet(
self.request.POST or None,
queryset=ProductAttribute.objects.select_related(
'product', 'attribute'))
'product', 'tag')),
"sb_url": reverse("shop:get_tags_for_sb")
},
{
'title': 'Product Categories',
'formset': ProductCategoryFormSet(
self.request.POST or None,
queryset=ProductCategory.objects.select_related(
'product', 'category'))
'product', 'category')),
"sb_url": reverse("shop:get_categories_for_sb")
},
{
'title': 'Related Products',
'formset': ProductRelatedFormSet(
self.request.POST or None,
queryset=ProductRelated.objects.select_related(
'source', 'target'))
},
{
'title': 'Media',
'formset': MediaFormSet(
self.request.POST or None, self.request.FILES or None,
queryset=Media.objects.select_related('product'))
},
{
'title': 'Logo',
'formset': LogoFormSet(
self.request.POST or None, self.request.FILES or None,
queryset=Logo.objects.select_related('product'))
'source', 'target')),
"sb_url": reverse("shop:get_products_for_sb")
},
{
'title': 'Stock',
Expand All @@ -107,18 +92,19 @@ def form_valid(self, form):
if form.is_valid():
obj = form.save(commit=False)
formsets = [
ProductAttributeFormSet(self.request.POST, instance=obj),
ProductCategoryFormSet(self.request.POST, instance=obj),
ProductTagFormSet(self.request.POST, instance=obj),
ProductRelatedFormSet(self.request.POST, instance=obj),
MediaFormSet(self.request.POST, self.request.FILES,
instance=obj),
LogoFormSet(self.request.POST, self.request.FILES,
instance=obj),
StockFormSet(self.request.POST, self.request.FILES,
instance=obj),
]
for formset in formsets:
for f in formset:
print(f.fields)
for field in f.fields:
if 'category' == field:
print("category queryset")
f['category'].queryset = Category.objects.all()
if formset.is_valid():
obj.save()
formset.save()
Expand All @@ -133,86 +119,90 @@ class ProductUpdateView(LoginRequiredMixin, FormMixin,
SuccessUrlMixin, BaseUpdateView):
model = Product
form_class = ProductForm
queryset = Product.objects.select_related('brand').prefetch_related('categories__featurecategories', 'attributes','tags','relatedproducts')

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['formsets'] = [
{
'title': 'Product Tags',
'formset': ProductTagFormSet(
self.request.POST or None, instance=self.get_object(),
self.request.POST or None,instance=self.get_object(),
queryset=ProductTag.objects.select_related(
'product', 'tag'))
},
{
'title': 'Product Attributes',
'formset': ProductAttributeFormSet(
self.request.POST or None, instance=self.get_object(),
queryset=ProductAttribute.objects.select_related(
'product', 'attribute'))
'product', 'tag')),
"sb_url": reverse("shop:get_tags_for_sb")
},
{
'title': 'Product Categories',
'formset': ProductCategoryFormSet(
self.request.POST or None, instance=self.get_object(),
self.request.POST or None,instance=self.get_object(),
queryset=ProductCategory.objects.select_related(
'product', 'category'))
'product', 'category')),
"sb_url": reverse("shop:get_categories_for_sb")
},
{
'title': 'Related Products',
'formset': ProductRelatedFormSet(
self.request.POST or None, instance=self.get_object(),
self.request.POST or None,instance=self.get_object(),
queryset=ProductRelated.objects.select_related(
'source', 'target'))
},
{
'title': 'Media',
'formset': MediaFormSet(
self.request.POST or None, self.request.FILES or None,
instance=self.get_object(),
queryset=Media.objects.select_related('product'))
},
{
'title': 'Logo',
'formset': LogoFormSet(
self.request.POST or None, self.request.FILES or None,
instance=self.get_object(),
queryset=Logo.objects.select_related('product'))
'source', 'target')),
"sb_url": reverse("shop:get_products_for_sb")
},
{
'title': 'Stock',
'formset': StockFormSet(
self.request.POST or None, self.request.FILES or None,
instance=self.get_object(),
self.request.POST or None, self.request.FILES or None,instance=self.get_object(),
queryset=Stock.objects.select_related(
'product', 'warehouse'))
},
]
features = []
for category in self.get_object().categories.all():
for feature in category.featurecategories.all():
features.append(feature.feature)
context['features'] = set(features)
return context

def form_valid(self, form):
if form.is_valid():
obj = form.save(commit=False)
formsets = [
ProductAttributeFormSet(self.request.POST, instance=obj),
ProductCategoryFormSet(self.request.POST, instance=obj),
ProductTagFormSet(self.request.POST, instance=obj),
ProductRelatedFormSet(self.request.POST, instance=obj),
MediaFormSet(self.request.POST, self.request.FILES,
instance=obj),
LogoFormSet(self.request.POST, self.request.FILES,
instance=obj),
StockFormSet(self.request.POST, self.request.FILES,
instance=obj),
]
for formset in formsets:
for f in formset:
print(f.fields)
for field in f.fields:
if 'category' == field:
print("category queryset")
f['category'].queryset = Category.objects.all()
if formset.is_valid():
obj.save()
formset.save()
else:
print(formset.non_form_errors())
print("formset errors:", formset.errors)
return super().form_invalid(form)
logos = self.request.FILES.getlist('logos')
if logos:
for f in logos:
l = Logo()
l.product = self.get_object()
l.image = f
l.save()
print("logo saved")
media = self.request.FILES.getlist('media')
if media:
for m in media:
l = Media()
l.product = self.get_object()
l.image = m
l.save()
print("media saved")
return super().form_valid(form)


Expand Down
5 changes: 2 additions & 3 deletions shop/context_processors.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ def get_context_data(request):
heroes = Hero.objects.prefetch_related(
Prefetch('heroitems',
queryset=HeroItem.objects.select_related(
'product', 'hero').filter(
is_published=True), to_attr='item_list'
'product', 'hero'), to_attr='item_list'
)
).filter(is_published=True)
if shopping_cart_id:
Expand Down Expand Up @@ -53,7 +52,7 @@ def get_context_data(request):
return {
'categories': categories,
'tags': Tag.objects.filter(is_published=True),
'brands': Brand.objects.filter(is_published=True),
'brands': Brand.objects.prefetch_related('products').filter(is_published=True,products__isnull=False,products__is_published=True).distinct(),
'donottrack': request.META.get('HTTP_DNT') == '1',
'basket_count': basket_count,
'heroes': heroes
Expand Down
9 changes: 5 additions & 4 deletions shop/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,11 @@ def __init__(self, *args, **kwargs):
class ProductCategoryForm(BootstrapForm, forms.ModelForm):
class Meta:
model = ProductCategory
fields = ('product', 'category',)
fields = ('category',)

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['category'].queryset = Category.objects.none()
self.fields['category'].queryset = Category.objects.all()
# self.fields['category'].widget=forms.Select(attrs={'class': 'form-control'})

if 'category' in self.data:
Expand Down Expand Up @@ -200,7 +200,8 @@ def __init__(self, *args, **kwargs):
form=ProductRelatedForm,
formset=BootstrapFormSet,
can_delete=True,
fk_name='source')
fk_name='source'
)


class MediaForm(BootstrapForm, forms.ModelForm):
Expand Down Expand Up @@ -287,7 +288,7 @@ class Meta:
class HeroItemForm(BootstrapForm, forms.ModelForm):
class Meta:
model = HeroItem
fields = ('hero', 'product', 'is_published', 'order')
fields = ('hero', 'product')


HeroItemFormSet = inlineformset_factory(Hero, HeroItem,
Expand Down
41 changes: 39 additions & 2 deletions shop/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
from django.db.models import Q
from django.shortcuts import redirect
from django.http import JsonResponse
from django.core import serializers
from django.template.loader import render_to_string

from core.functions import is_ajax

from .models import ShoppingCart, Product,Category, Attribute, Brand, Tag
from .models import ShoppingCart, Product,Category, Attribute, Brand, Tag, ProductAttribute


def ajax_basket(request):
Expand Down Expand Up @@ -178,4 +179,40 @@ def get_tags_for_sb(request):
results.append({'id':d['id'], "text": d['name']})
# j_data = serializers.serialize("json", data, fields=('erp_code', 'title'))
# return JsonResponse(j_data, safe=False)
return JsonResponse({"results": results}, safe=False)
return JsonResponse({"results": results}, safe=False)


def get_attributes(request):
id = request.GET.get('id')
if id:
data = Attribute.objects.filter(feature_id=id)
sdata = serializers.serialize("json", data)
return JsonResponse(sdata, safe=False)
return JsonResponse({})


def set_attribute(request):
try:
product_id = request.POST['product']
attribute_id = request.POST['attribute']
product_attribute = ProductAttribute.objects.create(product_id=product_id,attribute_id=attribute_id)
return JsonResponse({
'feature': product_attribute.attribute.feature.name,
'name': product_attribute.attribute.name,
"product_id": product_attribute.product.id,
"attribute_id": product_attribute.attribute.id
})
except Exception as e:
print(e)
raise
return JsonResponse({})

def delete_attribute(request):
try:
product_id = request.POST['product']
attribute_id = request.POST['attribute']
product_attribute = ProductAttribute.objects.get(product_id=product_id,attribute_id=attribute_id)
product_attribute.delete()
except:
pass
return JsonResponse({})
Loading

0 comments on commit d55b45c

Please sign in to comment.