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})'