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