Compare commits

..

No commits in common. "b31272511cc3fa16c6834854fe7e5f90ad0144c4" and "dab4fbd0a441131570ec1c3412ded2843602d631" have entirely different histories.

9 changed files with 44 additions and 70 deletions

View File

@ -7,7 +7,7 @@ from django.contrib.auth.models import UserManager as _UserManager, AbstractUser
from django.core.exceptions import ValidationError
from django.db import models
from django.db.models import Q, Count
from django.db.models import Q
from django.utils.translation import gettext_lazy as _
from phonenumber_field.modelfields import PhoneNumberField
from phonenumber_field.phonenumber import PhoneNumber
@ -173,12 +173,6 @@ class User(BonusProgramMixin, AbstractUser):
def invited_users(self):
return User.objects.filter(user_inviter__inviter=self.id)
@property
def invited_users_with_orders(self):
return (self.invited_users
.annotate(_orders_count=Count('customer_orders'))
.filter(_orders_count__gt=0))
@property
def inviter(self):
return User.objects.filter(user_invited__invited=self.id).first()

View File

@ -13,15 +13,10 @@ class UserSerializer(serializers.ModelSerializer):
name = serializers.CharField(source='first_name')
lastname = serializers.CharField(source='middle_name')
surname = serializers.CharField(source='last_name')
invited_with_orders_count = serializers.SerializerMethodField()
class Meta:
model = User
fields = ('id', 'email', 'phone', 'role', 'name', 'lastname', 'surname',
'balance', 'referral_code', 'is_draft_user', 'invited_with_orders_count')
def get_invited_with_orders_count(self, obj):
return obj.invited_users_with_orders.count()
fields = ('id', 'email', 'phone', 'role', 'name', 'lastname', 'surname', 'balance', 'referral_code', 'is_draft_user')
class BonusProgramTransactionSerializer(serializers.ModelSerializer):

View File

@ -1,23 +0,0 @@
from rest_framework import serializers
from core.models import GlobalSettings
from poizonstore.utils import PriceField
class GlobalSettingsSerializer(serializers.ModelSerializer):
yuan_rate = PriceField(source='full_yuan_rate', read_only=True)
yuan_rate_commission = PriceField()
chinadelivery = PriceField(source='delivery_price_CN')
commission = PriceField(source='commission_rub')
pickup = serializers.CharField(source='pickup_address')
class Meta:
model = GlobalSettings
fields = ('yuan_rate', 'yuan_rate_last_updated', 'yuan_rate_commission', 'commission', 'chinadelivery', 'pickup', 'time_to_buy')
read_only_fields = ('yuan_rate_last_updated',)
class AnonymousGlobalSettingsSerializer(GlobalSettingsSerializer):
class Meta:
model = GlobalSettingsSerializer.Meta.model
fields = tuple(set(GlobalSettingsSerializer.Meta.fields) - {'yuan_rate_commission', 'yuan_rate_last_updated'})

View File

@ -1,11 +0,0 @@
from django.urls import path
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
urlpatterns = [
path("settings/", views.GlobalSettingsAPI.as_view()),
] + router.urls

View File

@ -1,20 +1,3 @@
from rest_framework import generics
from django.shortcuts import render
from account.permissions import IsManager, ReadOnly
from core.models import GlobalSettings
from core.serializers import GlobalSettingsSerializer, AnonymousGlobalSettingsSerializer
class GlobalSettingsAPI(generics.RetrieveUpdateAPIView):
serializer_class = GlobalSettingsSerializer
permission_classes = [IsManager | ReadOnly]
def get_serializer_class(self):
if getattr(self.request.user, 'is_manager', False):
return GlobalSettingsSerializer
# Anonymous users can view only a certain set of fields
return AnonymousGlobalSettingsSerializer
def get_object(self):
return GlobalSettings.load()
# Create your views here.

View File

@ -26,7 +26,6 @@ urlpatterns = [
path('__debug__/', include('debug_toolbar.urls')),
path('', include('store.urls')),
path('', include('account.urls')),
path('', include('core.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \
+ static(settings.STATIC_URL)

View File

@ -6,6 +6,7 @@ from account.models.bonus import BonusProgram
from account.serializers import UserSerializer
from utils.exceptions import CRMException
from store.models import Checklist, Category, PaymentMethod, Promocode, Image, Gift
from core.models import GlobalSettings
from store.utils import get_primary_key_related_model
from poizonstore.utils import PriceField
@ -239,6 +240,25 @@ class ClientUpdateChecklistSerializer(ClientChecklistSerializerMixin, ChecklistS
read_only_fields = tuple(set(ChecklistSerializer.Meta.fields) - writable_fields)
class GlobalSettingsSerializer(serializers.ModelSerializer):
yuan_rate = PriceField(source='full_yuan_rate', read_only=True)
yuan_rate_commission = PriceField()
chinadelivery = PriceField(source='delivery_price_CN')
commission = PriceField(source='commission_rub')
pickup = serializers.CharField(source='pickup_address')
class Meta:
model = GlobalSettings
fields = ('yuan_rate', 'yuan_rate_last_updated', 'yuan_rate_commission', 'commission', 'chinadelivery', 'pickup', 'time_to_buy')
read_only_fields = ('yuan_rate_last_updated',)
class AnonymousGlobalSettingsSerializer(GlobalSettingsSerializer):
class Meta:
model = GlobalSettingsSerializer.Meta.model
fields = tuple(set(GlobalSettingsSerializer.Meta.fields) - {'yuan_rate_commission', 'yuan_rate_last_updated'})
class PaymentMethodSerializer(serializers.ModelSerializer):
class Meta:
model = PaymentMethod

View File

@ -16,5 +16,6 @@ router.register(r'category', views.CategoryAPI, basename='category')
router.register(r'settings/payment', views.PaymentMethodsAPI, basename='payment')
urlpatterns = [
path("settings/", views.GlobalSettingsAPI.as_view()),
] + router.urls

View File

@ -5,7 +5,7 @@ import requests
from django.conf import settings
from django.db.models import F, Count, Sum
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import permissions, mixins, status, viewsets
from rest_framework import generics, permissions, mixins, status, viewsets
from rest_framework.decorators import action
from rest_framework.exceptions import NotFound
from rest_framework.filters import SearchFilter
@ -19,8 +19,9 @@ from store.filters import GiftFilter, ChecklistFilter
from store.models import Checklist, Category, PaymentMethod, Promocode, Gift
from core.models import GlobalSettings
from store.serializers import (ChecklistSerializer, CategorySerializer, CategoryFullSerializer,
PaymentMethodSerializer, PromocodeSerializer, ClientUpdateChecklistSerializer,
GiftSerializer, ClientCreateChecklistSerializer)
PaymentMethodSerializer, AnonymousGlobalSettingsSerializer, GlobalSettingsSerializer,
PromocodeSerializer, ClientUpdateChecklistSerializer, GiftSerializer,
ClientCreateChecklistSerializer)
from account.permissions import ReadOnly, IsManager, IsAdmin
@ -124,6 +125,21 @@ class CategoryAPI(mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.Updat
return Response(CategoryFullSerializer(categories_qs, many=True).data)
class GlobalSettingsAPI(generics.RetrieveUpdateAPIView):
serializer_class = GlobalSettingsSerializer
permission_classes = [IsManager | ReadOnly]
def get_serializer_class(self):
if getattr(self.request.user, 'is_manager', False):
return GlobalSettingsSerializer
# Anonymous users can view only a certain set of fields
return AnonymousGlobalSettingsSerializer
def get_object(self):
return GlobalSettings.load()
class PaymentMethodsAPI(mixins.ListModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
serializer_class = PaymentMethodSerializer
permission_classes = [IsManager | ReadOnly]