- Split monolithic models.py into models/ package (customers, products, sales, payments, admin) - Removed forms.py, all HTML templates, and associated template-based views - Added api/ package with CatalogSaleView placeholder - Updated all imports across project to use new model paths - Removed obsolete tests (form, export, purchase, summary tests) - Removed template-based URL patterns, kept only API endpoints - Standardized string quotes (single to double) and reformatted code
122 lines
3.1 KiB
Python
122 lines
3.1 KiB
Python
from rest_framework import serializers
|
|
|
|
from .models.sales import Sale, SaleLine
|
|
from .models.customers import Customer
|
|
from .models.sales import Sale, SaleLine, 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 ProductSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Product
|
|
fields = [
|
|
"id",
|
|
"name",
|
|
"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"]
|