payments card and separated /support url
This commit is contained in:
@@ -2,7 +2,9 @@ from rest_framework import serializers
|
||||
from routes.models import Route, City, Country
|
||||
from django.conf import settings
|
||||
from routes.constants.routeChoices import cargo_type_choices, type_transport_choices, owner_type_choices
|
||||
from routes.constants.account_types import account_types
|
||||
from api.models import UserProfile
|
||||
from sitemanagement.models import Pricing
|
||||
from django.shortcuts import get_object_or_404
|
||||
import pytz
|
||||
|
||||
@@ -204,4 +206,62 @@ class CreateRouteSerializer(serializers.ModelSerializer):
|
||||
return route
|
||||
except Exception as e:
|
||||
raise
|
||||
|
||||
|
||||
class PricingSerializer(serializers.ModelSerializer):
|
||||
isPopular = serializers.BooleanField(source='is_popular')
|
||||
plan = serializers.CharField()
|
||||
features = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Pricing
|
||||
fields = ['plan', 'price', 'features', 'isPopular']
|
||||
|
||||
def get_features(self, obj):
|
||||
return list(obj.membershipfeatures_set.values_list('feature', flat=True))
|
||||
|
||||
def to_representation(self, instance):
|
||||
# преобразуем данные перед отправкой на фронтенд
|
||||
data = super().to_representation(instance)
|
||||
data['plan'] = data['plan'].lower() # приводим к нижнему регистру
|
||||
return data
|
||||
|
||||
|
||||
class PlanChangeSerializer(serializers.Serializer):
|
||||
account_type = serializers.CharField()
|
||||
|
||||
def validate_account_type(self, value):
|
||||
"""
|
||||
Проверяем, что тип тарифа соответствует допустимым значениям
|
||||
"""
|
||||
valid_types = [t[0] for t in account_types]
|
||||
if value not in valid_types:
|
||||
raise serializers.ValidationError(
|
||||
f"Недопустимый тип тарифа. Допустимые значения: {', '.join(valid_types)}"
|
||||
)
|
||||
return value
|
||||
|
||||
def validate(self, data):
|
||||
"""
|
||||
Проверка возможности перехода с одного тарифа на другой
|
||||
"""
|
||||
if not self.instance:
|
||||
raise serializers.ValidationError("Пользователь не найден")
|
||||
|
||||
current_type = getattr(self.instance, 'account_type', None)
|
||||
if not current_type:
|
||||
raise serializers.ValidationError("У пользователя не установлен текущий тариф")
|
||||
|
||||
new_type = data['account_type']
|
||||
|
||||
if current_type == new_type:
|
||||
raise serializers.ValidationError("Этот тариф уже активен")
|
||||
|
||||
return data
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
"""
|
||||
Обновляем тип тарифа пользователя
|
||||
"""
|
||||
instance.account_type = validated_data['account_type']
|
||||
instance.save()
|
||||
return instance
|
||||
Reference in New Issue
Block a user