Skip to content
This repository was archived by the owner on May 12, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions ecommerce/baskets/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from django.db.models import Q
from django_filters import rest_framework as filters
from django.utils.translation import gettext_lazy as _

from baskets.models import Basket, BasketItem


class BasketFilter(filters.FilterSet):
customer = filters.CharFilter(label=_("Customer"), method="filter_name")

class Meta:
model = Basket
fields = ("customer", "status")

@staticmethod
def filter_name(self, qs, name, value):
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static yapince self eklenmemesi tercih edilir.

return qs.filter(customer__first_name__icontains=value)


class BasketItemFilter(filters.FilterSet):
product = filters.CharFilter(label=_("Product"), method="filter_name")

class Meta:
model = BasketItem
fields = ("basket", "product", "quantity", "price")

17 changes: 17 additions & 0 deletions ecommerce/baskets/managers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from django.db import models


class BasketQuerySet(models.QuerySet):
def banner_products(self):
"""
BasketItem can not be less then 10 and quantity greater or equal to 100
"""
return self.filter(basketitem__quantity__gte=10, basketitem__quantity__lt=100)

def basket_status(self):
"""
Basket Status can not be submitted
"""
return self.filter.exclude(basket__status="submitted")


12 changes: 6 additions & 6 deletions ecommerce/baskets/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Generated by Django 3.2.9 on 2021-12-03 17:37
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

migration dosyalarinin iceriklerini ozel durumlar haricinde degistirmememiz gerekir.

# Generated by Django 3.2.9 on 2021-12-08 12:41

from django.conf import settings
from django.db import migrations, models
Expand All @@ -10,7 +10,7 @@ class Migration(migrations.Migration):
initial = True

dependencies = [
('products', '0003_auto_20211203_1919'),
('products', '__first__'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

Expand All @@ -21,8 +21,8 @@ class Migration(migrations.Migration):
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')),
('modified_at', models.DateTimeField(auto_now=True, verbose_name='Modified at')),
('status', models.CharField(choices=[('open', 'Open'), ('submitted', 'Submitted'), ('merged', 'Merged')], max_length=10, verbose_name='Basket Status')),
('customer', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Customer')),
('status', models.CharField(choices=[('open', 'Open'), ('submitted', 'Submitted'), ('merged', 'Merged')], default='open', max_length=10, verbose_name='Basket Status')),
('customer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Customer')),
],
options={
'verbose_name': 'Basket',
Expand All @@ -37,8 +37,8 @@ class Migration(migrations.Migration):
('modified_at', models.DateTimeField(auto_now=True, verbose_name='Modified at')),
('quantity', models.PositiveIntegerField(verbose_name='Quantity')),
('price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Price')),
('basket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='baskets.basket', verbose_name='Basket')),
('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='products.product', verbose_name='Product')),
('basket', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='baskets.basket', verbose_name='Basket')),
('product', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='products.product', verbose_name='Product')),
],
options={
'verbose_name': 'Basket item',
Expand Down
37 changes: 0 additions & 37 deletions ecommerce/baskets/migrations/0002_auto_20211205_0953.py

This file was deleted.

2 changes: 2 additions & 0 deletions ecommerce/baskets/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.db import models
from django.utils.translation import gettext_lazy as _

from baskets.managers import BasketQuerySet
from core.models import BaseAbstractModel
from customers.models import Customer
from baskets import enums
Expand All @@ -15,6 +16,7 @@ class Basket(BaseAbstractModel):
on_delete=models.PROTECT, null=True, blank=True)
status = models.CharField(choices=enums.BasketStatus.choices, max_length=10,
verbose_name=_("Basket Status"), default=enums.BasketStatus.OPEN)
objects = BasketQuerySet.as_manager()

class Meta:
verbose_name = _("Basket")
Expand Down
45 changes: 45 additions & 0 deletions ecommerce/baskets/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from rest_framework import serializers
from baskets.models import Basket, BasketItem
from customers.serializers import CustomerSerializer
from products.serializers import ProductSerializer


class BasketSerializer(serializers.ModelSerializer):
"""
Basket Serializer
"""
class Meta:
model = Basket
fields = ["customer", "status"]


class BasketItemSerializer(serializers.ModelSerializer):
"""
Basket Item Serializer
"""
class Meta:
model = BasketItem
fields = ["basket", "product", "quantity", "price"]


class BasketDetailedSerializer(serializers.ModelSerializer):
"""
Basket Detailed Serializer for Customer
"""
customer = CustomerSerializer() # TODO: Add Customer Serializer!

class Meta:
model = Basket
fields = ["customer", "status"]


class BasketItemDetailedSerializer(serializers.ModelSerializer):
"""
Basket Item Detailed Serializer for Product and Basket
"""
basket = BasketSerializer()
product = ProductSerializer()

class Meta:
model = BasketItem
fields = ["basket", "product", "quantity", "price"]
32 changes: 30 additions & 2 deletions ecommerce/baskets/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,31 @@
from django.shortcuts import render
from rest_framework import viewsets

# Create your views here.
from baskets.filters import BasketFilter
from core.mixins import DetailedViewSetMixin
from baskets.serializers import *


class BasketViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
"""
Detailed ViewSet for Basket
"""
queryset = Basket.objects.all()
serializer_class = BasketSerializer
filterset_class = BasketFilter # TODO: basket için filter ekle
serializer_action_classes = {
"detailed_list": BasketDetailedSerializer,
"detailed": BasketDetailedSerializer,
}


class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
"""
Detailed ViewSet for BasketItem
"""
queryset = BasketItem.objects.all()
serializer_class = BasketItemSerializer
filterset_class = BasketFilter # TODO: basketitem için filter ekle
serializer_action_classes = {
"detailed_list": BasketItemDetailedSerializer,
"detailed": BasketItemDetailedSerializer,
}
Empty file.
17 changes: 17 additions & 0 deletions ecommerce/customers/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from django.db.models import Q
from django_filters import rest_framework as filters
from django.utils.translation import gettext_lazy as _

from customers.models import Customer


class CustomerFilter(filters.FilterSet):
name = filters.CharFilter(label=_("First Name"), method="filter_name")

class Meta:
model = Customer
fields = ("first_name", "last_name", "email")

def filter_name(self, qs, name, value):
replaced_value = value.replace("Ş", "ş")
return qs.filter(Q(first_name__icontains=replaced_value) | Q(first_name__icontains=value))
Loading