271 lines
5.8 KiB
Python
271 lines
5.8 KiB
Python
from django.utils import timezone
|
|
from rest_framework import serializers
|
|
|
|
from files.api.v1.serializers import FileUploadSerializer, NoIDFileUploadSerializer
|
|
from shop.models import (
|
|
Brand,
|
|
Customer,
|
|
Order,
|
|
OrderLine,
|
|
Product,
|
|
ProductBatch,
|
|
ProductPrice,
|
|
Provider,
|
|
Tag,
|
|
Tax,
|
|
)
|
|
|
|
|
|
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",
|
|
"current",
|
|
"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",
|
|
"sku",
|
|
"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",
|
|
"sku",
|
|
"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(
|
|
sku=validated_data.get("sku"),
|
|
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"),
|
|
current=True,
|
|
)
|
|
|
|
return instance
|
|
|
|
class Meta:
|
|
model = Product
|
|
fields = (
|
|
"id",
|
|
"sku",
|
|
"name",
|
|
"description",
|
|
"stock",
|
|
"is_digital_asset",
|
|
"url",
|
|
"price",
|
|
"tax",
|
|
"tags",
|
|
"images",
|
|
)
|
|
|
|
|
|
class UpdateProductSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Product
|
|
fields = (
|
|
"id",
|
|
"sku",
|
|
"name",
|
|
"description",
|
|
"stock",
|
|
"is_digital_asset",
|
|
"url",
|
|
"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 BrandSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Brand
|
|
fields = (
|
|
"id",
|
|
"name",
|
|
)
|
|
|
|
|
|
class OrderSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Order
|
|
fields = (
|
|
"uuid",
|
|
"creation_date",
|
|
"last_modification_date",
|
|
"base_total",
|
|
"total",
|
|
"user",
|
|
"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",
|
|
)
|