| @@ -26,13 +26,17 @@ class CitySerializer(serializers.ModelSerializer): | |||||
| fields = ['id', 'name', 'state'] | fields = ['id', 'name', 'state'] | ||||
| class ClientSerializer(serializers.ModelSerializer): | |||||
| class Meta: | |||||
| model = Client | |||||
| fields = ['id', 'name', 'address'] | |||||
| class AddressSerializer(serializers.ModelSerializer): | class AddressSerializer(serializers.ModelSerializer): | ||||
| tax_type = TaxTypeSerializer(read_only=True) | |||||
| class Meta: | class Meta: | ||||
| model = Address | model = Address | ||||
| fields = ['id', 'city', 'address_line1', 'address_line2', 'postal_code', 'tax_type', 'tax_id'] | fields = ['id', 'city', 'address_line1', 'address_line2', 'postal_code', 'tax_type', 'tax_id'] | ||||
| class ClientSerializer(serializers.ModelSerializer): | |||||
| address = AddressSerializer(read_only=True) | |||||
| class Meta: | |||||
| model = Client | |||||
| fields = ['id', 'name', 'address'] | |||||
| @@ -13,25 +13,13 @@ class Invoice(models.Model): | |||||
| is_archived = models.BooleanField(default=False) | is_archived = models.BooleanField(default=False) | ||||
| @property | @property | ||||
| def invoice_total(self): | |||||
| def invoice_total_without_tax(self): | |||||
| items = Item.objects.filter(invoice=self.pk) | items = Item.objects.filter(invoice=self.pk) | ||||
| total = 0 | total = 0 | ||||
| for item in items: | for item in items: | ||||
| total += item.item_total | total += item.item_total | ||||
| return total | return total | ||||
| @property | |||||
| def invoice_total_after_tax(self): | |||||
| items = Item.objects.filter(invoice=self.pk) | |||||
| project = Project.objects.get(client=self.project) | |||||
| client = Client.objects.get(pk=project.client) | |||||
| address = Address.objects.get(pk=client.address) | |||||
| tax_type = TaxType.objects.get(pk=address.tax_type) | |||||
| total = 0 | |||||
| for item in items: | |||||
| total += item.item_total | |||||
| return total | |||||
| def __str__(self): | def __str__(self): | ||||
| return self.invoice_id | return self.invoice_id | ||||
| @@ -1,6 +1,7 @@ | |||||
| from rest_framework import serializers | from rest_framework import serializers | ||||
| from drf_writable_nested.serializers import WritableNestedModelSerializer | from drf_writable_nested.serializers import WritableNestedModelSerializer | ||||
| from .models import Item, Invoice | from .models import Item, Invoice | ||||
| from project.serializers import ProjectSerializer | |||||
| class ItemSerializer(serializers.ModelSerializer): | class ItemSerializer(serializers.ModelSerializer): | ||||
| @@ -10,9 +11,10 @@ class ItemSerializer(serializers.ModelSerializer): | |||||
| class InvoiceSerializer(WritableNestedModelSerializer): | class InvoiceSerializer(WritableNestedModelSerializer): | ||||
| project = ProjectSerializer(read_only=True) | |||||
| items = ItemSerializer(many=True) | items = ItemSerializer(many=True) | ||||
| class Meta: | class Meta: | ||||
| model = Invoice | model = Invoice | ||||
| fields = ['id', 'title', 'project', 'invoice_id', 'raised_date', 'due_date', 'paid_date', 'is_archived', | fields = ['id', 'title', 'project', 'invoice_id', 'raised_date', 'due_date', 'paid_date', 'is_archived', | ||||
| 'invoice_total', 'items'] | |||||
| 'invoice_total_without_tax', 'items'] | |||||
| @@ -1,8 +1,11 @@ | |||||
| from rest_framework import serializers | from rest_framework import serializers | ||||
| from .models import Project | from .models import Project | ||||
| from client.serializers import ClientSerializer | |||||
| class ProjectSerializer(serializers.ModelSerializer): | class ProjectSerializer(serializers.ModelSerializer): | ||||
| client = ClientSerializer(read_only=True) | |||||
| class Meta: | class Meta: | ||||
| model = Project | model = Project | ||||
| fields = ['id', 'name', 'project_image', 'client', 'total_compensation', 'start_date', 'end_date'] | fields = ['id', 'name', 'project_image', 'client', 'total_compensation', 'start_date', 'end_date'] | ||||