104 lines
2.7 KiB
Python
104 lines
2.7 KiB
Python
from rest_framework import serializers
|
|
|
|
from .models import Sale, SaleLine, Product, Customer, 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']
|
|
|
|
|
|
class ProductSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Product
|
|
fields = ['id', 'name', 'price', 'measuring_unit', 'categories']
|
|
|
|
|
|
class CustomerSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Customer
|
|
fields = ['id', 'name', 'address', 'email', 'phone']
|
|
|
|
|
|
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']
|