74 lines
2.8 KiB
Python
74 lines
2.8 KiB
Python
from django.db import models
|
|
|
|
class Account(models.Model):
|
|
ACCOUNT_TYPE_CHOICES = (
|
|
('ASSET', 'Asset'),
|
|
('LIABILITY', 'Liability'),
|
|
('EQUITY', 'Equity'),
|
|
('REVENUE', 'Revenue'),
|
|
('EXPENSE', 'Expense'),
|
|
)
|
|
|
|
name = models.CharField(max_length=100)
|
|
number = models.CharField(max_length=20, unique=True)
|
|
type = models.CharField(max_length=10, choices=ACCOUNT_TYPE_CHOICES)
|
|
balance = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
|
|
|
def __str__(self):
|
|
return f'{self.number} - {self.name}'
|
|
|
|
class JournalEntry(models.Model):
|
|
date = models.DateField()
|
|
description = models.CharField(max_length=255)
|
|
|
|
def __str__(self):
|
|
return f'{self.date} - {self.description}'
|
|
|
|
class Ledger(models.Model):
|
|
journal_entry = models.ForeignKey(JournalEntry, on_delete=models.CASCADE)
|
|
account = models.ForeignKey(Account, on_delete=models.CASCADE)
|
|
debit = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
|
credit = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
|
|
|
def __str__(self):
|
|
return f'{self.journal_entry} - {self.account}'
|
|
|
|
class Invoice(models.Model):
|
|
customer_name = models.CharField(max_length=255)
|
|
invoice_date = models.DateField()
|
|
due_date = models.DateField()
|
|
total_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
|
paid = models.BooleanField(default=False)
|
|
|
|
def __str__(self):
|
|
return f'Invoice #{self.id} - {self.customer_name}'
|
|
|
|
class InvoiceItem(models.Model):
|
|
invoice = models.ForeignKey(Invoice, related_name='items', on_delete=models.CASCADE)
|
|
description = models.CharField(max_length=255)
|
|
quantity = models.PositiveIntegerField(default=1)
|
|
unit_price = models.DecimalField(max_digits=15, decimal_places=2)
|
|
total = models.DecimalField(max_digits=15, decimal_places=2)
|
|
|
|
def __str__(self):
|
|
return f'{self.description} ({self.quantity} @ {self.unit_price})'
|
|
|
|
class Bill(models.Model):
|
|
vendor_name = models.CharField(max_length=255)
|
|
bill_date = models.DateField()
|
|
due_date = models.DateField()
|
|
total_amount = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
|
|
paid = models.BooleanField(default=False)
|
|
|
|
def __str__(self):
|
|
return f'Bill #{self.id} - {self.vendor_name}'
|
|
|
|
class BillItem(models.Model):
|
|
bill = models.ForeignKey(Bill, related_name='items', on_delete=models.CASCADE)
|
|
description = models.CharField(max_length=255)
|
|
quantity = models.PositiveIntegerField(default=1)
|
|
unit_price = models.DecimalField(max_digits=15, decimal_places=2)
|
|
total = models.DecimalField(max_digits=15, decimal_places=2)
|
|
|
|
def __str__(self):
|
|
return f'{self.description} ({self.quantity} @ {self.unit_price})' |