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.OneToOneField(User, on_delete=models.CASCADE) employee_id = models.CharField(max_length=15) phone = PhoneNumberField() salary = models.DecimalField(max_digits=15, decimal_places=2) start_date = models.DateField() end_date = models.DateField(null=True, blank=True) projects = models.ManyToManyField(Project) def __str__(self): return self.employee_id class Perk(models.Model): employee = models.OneToOneField(Employee, on_delete=models.CASCADE) perk_per_month = models.DecimalField(max_digits=15, decimal_places=2) @property def total_perk(self): perks = self.perk_transactions.all() total = 0 for perk in perks: if perk.type == 'INCOME': total += perk.amount else: total -= perk.amount return total class PerkTransaction(models.Model): TRANSACTION_TYPE = ( ("INCOME", "INCOME"), ("EXPENSE", "EXPENSE") ) type = models.CharField(choices=TRANSACTION_TYPE, default="INCOME", max_length=10) amount = models.DecimalField(max_digits=15, decimal_places=2) perk = models.ForeignKey(Perk, on_delete=models.CASCADE)