from django.db import models from employee.models import Employee from client.models import Address class CompanyBankAccount(models.Model): name = models.CharField(max_length=50) logo = models.ImageField(upload_to='banks', null=True, blank=True) account_number = models.CharField(max_length=30) ifsc_code = models.CharField(max_length=30) address = models.ForeignKey(Address, on_delete=models.CASCADE) def __str__(self): return self.name class Category(models.Model): name = models.CharField(max_length=30) def __str__(self): return self.name class SubCategory(models.Model): name = models.CharField(max_length=30) parent_category = models.ForeignKey(Category, on_delete=models.CASCADE) def __str__(self): return self.name class Expense(models.Model): title = models.CharField(max_length=50) sub_category = models.ForeignKey(SubCategory, on_delete=models.CASCADE) expense_id = models.CharField(max_length=15) date_of_creation = models.DateField() team_member = models.ForeignKey(Employee, on_delete=models.CASCADE) company_bank_account = models.ForeignKey(CompanyBankAccount, on_delete=models.CASCADE) is_reimbursement = models.BooleanField(default=False) is_perk = models.BooleanField(default=False) is_approved = models.BooleanField(default=False) @property def expense_total(self): items = self.items.all() total = 0 for item in items: total += item.item_total return total class Item(models.Model): name = models.CharField(max_length=100) rate = models.DecimalField(max_digits=15, decimal_places=2) quantity = models.IntegerField() expense = models.ForeignKey(Expense, on_delete=models.CASCADE, related_name='items') attachment = models.ImageField(upload_to='expense_item') @property def item_total(self): return self.amount * self.quantity def __str__(self): return self.name