@@ -1,8 +1,45 @@ | |||||
from django.db import models | 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): | class Client(models.Model): | ||||
name = models.CharField(max_length=30) | 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) | tax_id = models.CharField(max_length=30) | ||||
def __str__(self): | def __str__(self): | ||||
@@ -1,16 +1,17 @@ | |||||
from django.contrib.auth.models import User | from django.contrib.auth.models import User | ||||
from django.db import models | from django.db import models | ||||
from phonenumber_field.modelfields import PhoneNumberField | |||||
from project.models import Project | from project.models import Project | ||||
class Employee(models.Model): | 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() | start_date = models.DateField() | ||||
end_date = models.DateField(null=True, blank=True) | end_date = models.DateField(null=True, blank=True) | ||||
projects = models.ManyToManyField(Project) | projects = models.ManyToManyField(Project) | ||||
def __str__(self): | def __str__(self): | ||||
return self.name | |||||
return self.user.name |
@@ -3,11 +3,22 @@ from project.models import Project | |||||
class Invoice(models.Model): | class Invoice(models.Model): | ||||
project = models.ForeignKey(Project) | |||||
project = models.ForeignKey(Project, on_delete=models.CASCADE) | |||||
invoice_id = models.CharField(max_length=15) | invoice_id = models.CharField(max_length=15) | ||||
raised_date = models.DateField() | raised_date = models.DateField() | ||||
due_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): | def __str__(self): | ||||
return self.invoice_id | 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 |
@@ -4,8 +4,11 @@ from client.models import Client | |||||
class Project(models.Model): | class Project(models.Model): | ||||
name = models.CharField(max_length=30) | 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): | def __str__(self): | ||||
return self.name | return self.name |
@@ -1,15 +1,23 @@ | |||||
from django.contrib.auth.models import User | from django.contrib.auth.models import User | ||||
from django.db import models | from django.db import models | ||||
from phonenumber_field.modelfields import PhoneNumberField | |||||
from project.models import Project | from project.models import Project | ||||
from client.models import Client | 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): | 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) | projects = models.ManyToManyField(Project) | ||||
clients = models.ManyToManyField(Client) | |||||
clients = models.ForeignKey(Client, on_delete=models.CASCADE) | |||||
def __str__(self): | def __str__(self): | ||||
return self.user.name | return self.user.name |
@@ -24,6 +24,7 @@ INSTALLED_APPS = [ | |||||
'rest_framework.authtoken', | 'rest_framework.authtoken', | ||||
'drfpasswordless', | 'drfpasswordless', | ||||
'drf_yasg', | 'drf_yasg', | ||||
'phonenumber_field', | |||||
'client', | 'client', | ||||
'employee', | 'employee', | ||||
'invoice', | 'invoice', | ||||