@@ -15,3 +15,29 @@ class Employee(models.Model): | |||||
def __str__(self): | def __str__(self): | ||||
return self.employee_id | 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) |
@@ -0,0 +1,3 @@ | |||||
from django.contrib import admin | |||||
# Register your models here. |
@@ -0,0 +1,6 @@ | |||||
from django.apps import AppConfig | |||||
class ExpenseConfig(AppConfig): | |||||
default_auto_field = 'django.db.models.BigAutoField' | |||||
name = 'expense' |
@@ -0,0 +1,54 @@ | |||||
from django.db import models | |||||
from employee.models import Employee | |||||
class CompanyBankAccount(models.Model): | |||||
name = models.CharField(max_length=50) | |||||
logo = models.ImageField(upload_to='banks', null=True, blank=True) | |||||
def __str__(self): | |||||
return self.name | |||||
class Category(models.Model): | |||||
name = models.CharField(max_length=30) | |||||
def __str__(self): | |||||
return self.name | |||||
class Expense(models.Model): | |||||
PAYMENT_MODE = ( | |||||
("REIMBURSE", "REIMBURSE"), | |||||
("PERK", "PERK") | |||||
) | |||||
title = models.CharField(max_length=50) | |||||
category = models.ForeignKey(Category, 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) | |||||
repayment_mode = models.CharField(max_length=10, choices=PAYMENT_MODE, default="REIMBURSE") | |||||
@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) | |||||
attachment = models.ImageField(upload_to='expense_item') | |||||
@property | |||||
def item_total(self): | |||||
return self.amount * self.quantity | |||||
def __str__(self): | |||||
return self.name |
@@ -0,0 +1,3 @@ | |||||
from django.test import TestCase | |||||
# Create your tests here. |
@@ -0,0 +1,3 @@ | |||||
from django.shortcuts import render | |||||
# Create your views here. |
@@ -29,7 +29,8 @@ INSTALLED_APPS = [ | |||||
'employee', | 'employee', | ||||
'invoice', | 'invoice', | ||||
'project', | 'project', | ||||
'representative' | |||||
'representative', | |||||
'expense' | |||||
] | ] | ||||
PASSWORDLESS_AUTH = { | PASSWORDLESS_AUTH = { | ||||