Files
shoppy/shop/api/v1/serializers.py
T
2024-05-17 02:14:08 +02:00

240 lines
5.2 KiB
Python

from django.utils import timezone
from rest_framework import serializers
from files.api.v1.serializers import FileUploadSerializer, NoIDFileUploadSerializer
from shop.models import (
Product,
ProductPrice,
Customer,
Tax,
OrderLine,
Order,
ProductBatch,
Provider,
Tag,
)
class TaxSerializer(serializers.ModelSerializer):
class Meta:
model = Tax
fields = (
"id",
"code",
"value",
)
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = (
"id",
"name",
)
class ProductPriceSerializer(serializers.ModelSerializer):
tax = TaxSerializer()
class Meta:
model = ProductPrice
fields = (
"price",
"date",
"tax",
"price_with_tax",
)
class CreateProductPriceSerializer(serializers.ModelSerializer):
class Meta:
model = ProductPrice
fields = (
"id",
"price",
"tax",
)
class ProductSerializer(serializers.ModelSerializer):
images = FileUploadSerializer(many=True, read_only=True)
price = ProductPriceSerializer()
class Meta:
model = Product
fields = (
"id",
"name",
"description",
"stock",
"is_digital_asset",
"images",
"price",
"tags",
)
class ListProductSerializer(serializers.ModelSerializer):
price = ProductPriceSerializer()
tags = TagSerializer(many=True)
images = NoIDFileUploadSerializer(many=True, read_only=True)
class Meta:
model = Product
fields = (
"id",
"name",
"description",
"stock",
"is_digital_asset",
"price",
"tags",
"images",
)
class CreateProductSerializer(serializers.ModelSerializer):
price = serializers.DecimalField(
max_digits=13, decimal_places=4, required=False, write_only=True
)
tax = serializers.PrimaryKeyRelatedField(
queryset=Tax.objects.all(), write_only=True
)
def create(self, validated_data):
instance = Product.objects.create(
name=validated_data.get("name"),
description=validated_data.get("description"),
stock=validated_data.get("stock"),
is_digital_asset=validated_data.get("is_digital_asset"),
url=validated_data.get("url"),
)
tags = validated_data.get('tags')
for tag in tags:
instance.tags.add(tag)
ProductPrice.objects.create(
product=instance,
date=timezone.now(),
price=validated_data.get("price"),
tax=validated_data.get("tax"),
)
return instance
class Meta:
model = Product
fields = (
"id",
"name",
"description",
"stock",
"is_digital_asset",
"url",
"price",
"tax",
"tags",
"images",
)
class ProductBatchSerializer(serializers.ModelSerializer):
class Meta:
model = ProductBatch
fields = (
"id",
"code",
"product",
"quantity",
"creation_date",
"expiration_date",
)
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = (
"id",
"vat_id",
"first_name",
"last_name",
"email",
"address",
"city",
"state",
"country",
"zip",
)
class ProviderSerializer(serializers.ModelSerializer):
class Meta:
model = Provider
fields = (
"id",
"vat_id",
"name",
"email",
"phone",
"address",
"city",
"state",
"country",
"zip",
)
class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = (
"uuid",
"creation_date",
"last_modification_date",
"base_total",
"total",
"customer",
"billing_address",
"billing_city",
"billing_state",
"billing_country",
"billing_zip",
"shipping_address",
"shipping_city",
"shipping_state",
"shipping_country",
"shipping_zip",
"contact_phone",
)
read_only_fields = (
"uuid",
"base_total",
"total",
)
class OrderLineSerializer(serializers.ModelSerializer):
class Meta:
model = OrderLine
fields = (
"id",
"product",
"quantity",
"price",
"base_total",
"total",
"taxes",
"tax_value",
)
read_only_fields = (
"price",
"base_total",
"total",
"taxes",
"tax_value",
)