diff --git a/client/models.py b/client/models.py index 85eafbd..c8c6b76 100644 --- a/client/models.py +++ b/client/models.py @@ -1,8 +1,45 @@ from django.db import models +class TaxType(models.Model): + name = models.CharField(max_length=15) + percentage = models.DecimalField() + + def __str__(self): + return self.name + + +class Country(models.Model): + name = models.CharField(max_length=30) + + def __str__(self): + return self.name + + +class State(models.Model): + name = models.CharField(max_length=30) + country = models.OneToOneField(Country, on_delete=models.CASCADE) + + def __str__(self): + return self.name + + +class City(models.Model): + name = models.CharField(max_length=30) + state = models.OneToOneField(State, on_delete=models.CASCADE) + + def __str__(self): + return self.name + + class Client(models.Model): name = models.CharField(max_length=30) + profile_picture = models.ImageField(upload_to='client_images', null=True, blank=True) + city = models.ForeignKey(City, on_delete=models.CASCADE) + address_line1 = models.CharField(max_length=50) + address_line2 = models.CharField(max_length=50) + postal_code = models.CharField(max_length=15) + tax_type = models.ForeignKey(TaxType, on_delete=models.CASCADE) tax_id = models.CharField(max_length=30) def __str__(self): diff --git a/employee/models.py b/employee/models.py index 405a8b7..817bd9e 100644 --- a/employee/models.py +++ b/employee/models.py @@ -1,16 +1,17 @@ from django.contrib.auth.models import User from django.db import models +from phonenumber_field.modelfields import PhoneNumberField from project.models import Project class Employee(models.Model): - user = models.ForeignKey(User) - phone = models.CharField(max_length=15) - salary = models.FloatField() - emp_id = models.CharField(max_length=15) + user = models.OneToOneField(User, on_delete=models.CASCADE) + employee_id = models.CharField(max_length=15) + phone = PhoneNumberField() + salary = models.DecimalField() start_date = models.DateField() end_date = models.DateField(null=True, blank=True) projects = models.ManyToManyField(Project) def __str__(self): - return self.name + return self.user.name diff --git a/invoice/models.py b/invoice/models.py index a3624c1..103ffca 100644 --- a/invoice/models.py +++ b/invoice/models.py @@ -3,11 +3,22 @@ from project.models import Project class Invoice(models.Model): - project = models.ForeignKey(Project) + project = models.ForeignKey(Project, on_delete=models.CASCADE) invoice_id = models.CharField(max_length=15) raised_date = models.DateField() due_date = models.DateField() - is_paid = models.BooleanField() + paid_date = models.DateField(null=True, blank=True) + is_archived = models.BooleanField() def __str__(self): return self.invoice_id + + +class Item(models.Model): + name = models.TextField(blank=False, null=False) + amount = models.DecimalField() + quantity = models.IntegerField() + invoice = models.OneToOneField(Invoice, on_delete=models.CASCADE) + + def __str__(self): + return self.name diff --git a/project/models.py b/project/models.py index d1996a3..fab9b28 100644 --- a/project/models.py +++ b/project/models.py @@ -4,8 +4,11 @@ from client.models import Client class Project(models.Model): name = models.CharField(max_length=30) - price = models.FloatField() - client = models.ForeignKey(Client) + project_image = models.ImageField(upload_to='project_images', null=True, blank=True) + client = models.ForeignKey(Client, on_delete=models.CASCADE) + total_cost = models.DecimalField() + start_date = models.DateField() + end_date = models.DateField() def __str__(self): return self.name diff --git a/representative/models.py b/representative/models.py index 1fc98f1..f288a0f 100644 --- a/representative/models.py +++ b/representative/models.py @@ -1,15 +1,23 @@ from django.contrib.auth.models import User from django.db import models +from phonenumber_field.modelfields import PhoneNumberField from project.models import Project from client.models import Client +class Role(models.Model): + name = models.CharField(max_length=30) + + def __str__(self): + return self.name + + class Representative(models.Model): - user = models.ForeignKey(User) - phone = models.CharField(max_length=15) - role = models.CharField(max_length=15) + user = models.OneToOneField(User, on_delete=models.CASCADE) + phone = PhoneNumberField() + role = models.ForeignKey(Role, on_delete=models.CASCADE) projects = models.ManyToManyField(Project) - clients = models.ManyToManyField(Client) + clients = models.ForeignKey(Client, on_delete=models.CASCADE) def __str__(self): return self.user.name diff --git a/workx_backend/settings/base.py b/workx_backend/settings/base.py index b56f11a..74f05a5 100644 --- a/workx_backend/settings/base.py +++ b/workx_backend/settings/base.py @@ -24,6 +24,7 @@ INSTALLED_APPS = [ 'rest_framework.authtoken', 'drfpasswordless', 'drf_yasg', + 'phonenumber_field', 'client', 'employee', 'invoice',