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']
 |