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