from django.db import models from osinacore.models import * # Create your models here. class RecurringCycle(models.Model): months = models.IntegerField() def __str__(self): return f"{self.months} months" class Item(models.Model): TYPE = ( ('Product', 'Product'), ('Service', 'Service'), ) title = models.CharField(max_length=200) description = models.TextField(blank=True) project = models.ForeignKey(Project, blank=True, on_delete=models.CASCADE) type = models.ForeignKey(ProjectType, on_delete=models.CASCADE, blank=True) amount = models.FloatField(null=True) recurring = models.BooleanField(default=False) active = models.BooleanField(default=True, null=True) def __str__(self): return self.title class Order(models.Model): STATUS = ( ('Completed', 'Completed'), ('Failed', 'Failed'), ('Cancelled', 'Cancelled'), ('None', 'None'), ) customer = models.ForeignKey(CustomerProfile, on_delete=models.CASCADE) status = models.CharField(max_length=200, choices=STATUS, default='None') order_id = models.CharField(max_length=100, null=True, blank=True) due_date = models.DateField(null=True) paid = models.BooleanField(null=True, default=False) def save(self, *args, **kwargs): if not self.order_id: order_count = Order.objects.filter(customer=self.customer).count() order_count_str = str(order_count).zfill(4) self.order_id = f"{self.customer.customer_id}-{order_count_str}" super(Order, self).save(*args, **kwargs) class OrderItem(models.Model): order = models.ForeignKey(Order, on_delete=models.CASCADE) item = models.ForeignKey(Item, on_delete=models.CASCADE) purchased_at = models.DateField(null=True, blank=True) due_at = models.DateField(blank=True, null=True) recurring_cycle = models.ForeignKey(RecurringCycle, on_delete=models.SET_NULL, null=True, blank=True) class Invoice(models.Model): invoice_number = models.CharField(max_length=100) order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True) date_created = models.DateField() def __str__(self): return self.invoice_number class PaymentType(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class OrderPayment(models.Model): order = models.ManyToManyField(Order, null=True) amount = models.DecimalField(decimal_places=3, max_digits = 5) date_paid = models.DateField() type = models.ForeignKey(PaymentType, null=True, on_delete=models.SET_NULL) comment = models.TextField(null=True, blank=True) def __str__(self): return f"Payment for {self.order}" class Receipt(models.Model): receipt_number = models.CharField(max_length=100) payment = models.ManyToManyField(OrderPayment) date_generated = models.DateField() def __str__(self): return self.receipt_number