from rest_framework import serializers from .models.sales import Sale, SaleLine from .models.customers import Customer from .models.sales import ( Sale, SaleLine, CatalogSale, CatalogSaleLine, Payment, ) from .models.products import Product, ProductCategory from .models.payments import ReconciliationJar class SaleLineSerializer(serializers.ModelSerializer): class Meta: model = SaleLine fields = ["id", "sale", "product", "unit_price", "quantity"] class SaleSerializer(serializers.ModelSerializer): total = serializers.ReadOnlyField(source="get_total") class Meta: model = Sale fields = [ "id", "customer", "date", "saleline_set", "total", "payment_method", "external_id", ] class CatalogSaleLineSerializer(serializers.ModelSerializer): class Meta: model = CatalogSaleLine read_only_fields = ["catalog_sale"] fields = [ "id", "catalog_sale", "product", "unit_price", "quantity", ] class CatalogSaleSerializer(serializers.ModelSerializer): catalogsaleline_set = CatalogSaleLineSerializer( many=True, required=False ) total = serializers.ReadOnlyField(source="get_total") class Meta: model = CatalogSale fields = [ "id", "customer", "date", "catalogsaleline_set", "total", ] def create(self, validated_data): lines_data = validated_data.pop("catalogsaleline_set", []) catalog_sale = CatalogSale.objects.create(**validated_data) for line_data in lines_data: CatalogSaleLine.objects.create( catalog_sale=catalog_sale, **line_data ) return catalog_sale class ProductSerializer(serializers.ModelSerializer): class Meta: model = Product fields = [ "id", "name", "active", "price", "measuring_unit", "categories", "external_id", ] class CustomerSerializer(serializers.ModelSerializer): class Meta: model = Customer fields = ["id", "name", "address", "email", "phone", "external_id"] class ReconciliationJarSerializer(serializers.ModelSerializer): Sales = SaleSerializer(many=True, read_only=True) class Meta: model = ReconciliationJar fields = [ "id", "date_time", "reconcilier", "cash_taken", "cash_discrepancy", "total_cash_purchases", "Sales", ] class PaymentMethodSerializer(serializers.Serializer): text = serializers.CharField() value = serializers.CharField() def to_representation(self, instance): return { "text": instance[1], "value": instance[0], } class SaleForRenconciliationSerializer(serializers.Serializer): id = serializers.IntegerField() date = serializers.DateTimeField() payment_method = serializers.CharField() customer = serializers.SerializerMethodField() total = serializers.SerializerMethodField() def get_customer(self, sale): return { "id": sale.customer.id, "name": sale.customer.name, } def get_total(self, sale): return sale.get_total() class ListCustomerSerializer(serializers.ModelSerializer): class Meta: model = Customer fields = ["id", "name"] class ListProductSerializer(serializers.ModelSerializer): class Meta: model = Product fields = ["id", "name"] class SummarySaleLineSerializer(serializers.ModelSerializer): product = ListProductSerializer() class Meta: model = SaleLine fields = ["product", "quantity", "unit_price", "description"] class SaleSummarySerializer(serializers.ModelSerializer): customer = ListCustomerSerializer() lines = SummarySaleLineSerializer(many=True, source="saleline_set") class Meta: model = Sale fields = ["id", "date", "customer", "payment_method", "lines"]