|
|
|
@ -3,7 +3,6 @@ from osinacore.models import *
|
|
|
|
|
import requests
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Create your models here.
|
|
|
|
|
class Item(models.Model):
|
|
|
|
|
TYPE = (
|
|
|
|
|
('Product', 'Product'),
|
|
|
|
@ -17,6 +16,7 @@ class Item(models.Model):
|
|
|
|
|
amount = models.FloatField(null=True)
|
|
|
|
|
recurring = models.BooleanField(default=False)
|
|
|
|
|
photo = models.ImageField(null=True, blank=True)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return self.title
|
|
|
|
|
|
|
|
|
@ -25,6 +25,7 @@ class RecurringCycle(models.Model):
|
|
|
|
|
item = models.ForeignKey(Item, on_delete=models.CASCADE, null=True)
|
|
|
|
|
months = models.IntegerField()
|
|
|
|
|
cycle_price = models.FloatField(null=True)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
if self.months > 1:
|
|
|
|
|
return f"{self.months} months - {self.item}"
|
|
|
|
@ -37,16 +38,19 @@ class Order(models.Model):
|
|
|
|
|
business = models.ForeignKey(Business, on_delete=models.SET_NULL, null=True, blank=True)
|
|
|
|
|
order_id = models.CharField(max_length=100, null=True, blank=True)
|
|
|
|
|
date = models.DateField(null=True, blank=True)
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def get_cart_total(self):
|
|
|
|
|
orderitems = self.orderitem_set.all()
|
|
|
|
|
total = sum([item.get_total for item in orderitems])
|
|
|
|
|
return total
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def get_paid_amount(self):
|
|
|
|
|
payments = self.orderpayment_set.filter(date_paid__isnull=False)
|
|
|
|
|
total_paid = sum([payment.amount for payment in payments])
|
|
|
|
|
return total_paid
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def remaining_balance(self):
|
|
|
|
|
return self.get_cart_total - self.get_paid_amount
|
|
|
|
@ -57,6 +61,7 @@ class Order(models.Model):
|
|
|
|
|
if first_orderitem:
|
|
|
|
|
return first_orderitem.purchased_at
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs):
|
|
|
|
|
if not self.order_id:
|
|
|
|
|
current_year_last_two_digits = timezone.now().strftime('%y')
|
|
|
|
@ -72,7 +77,6 @@ class Order(models.Model):
|
|
|
|
|
super(Order, self).save(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OrderStatus(models.Model):
|
|
|
|
|
STATUS = (
|
|
|
|
|
('Completed', 'Completed'),
|
|
|
|
@ -109,8 +113,10 @@ class Invoice(models.Model):
|
|
|
|
|
order = models.OneToOneField(Order, on_delete=models.SET_NULL, null=True)
|
|
|
|
|
date_created = models.DateField()
|
|
|
|
|
pdf = models.FileField(upload_to='generated_invoices', null=True, blank=True)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return self.invoice_number
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def status(self):
|
|
|
|
|
payments = OrderPayment.objects.filter(order=self.order)
|
|
|
|
@ -118,6 +124,7 @@ class Invoice(models.Model):
|
|
|
|
|
return "Completed"
|
|
|
|
|
else:
|
|
|
|
|
return "Not Completed"
|
|
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs):
|
|
|
|
|
if not self.invoice_number:
|
|
|
|
|
current_year = str(timezone.now().year)[-2:]
|
|
|
|
@ -135,6 +142,7 @@ class PaymentType(models.Model):
|
|
|
|
|
name = models.CharField(max_length=100)
|
|
|
|
|
description = models.TextField(null=True, blank=True)
|
|
|
|
|
image = models.ImageField(null=True, blank=True)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return self.name
|
|
|
|
|
|
|
|
|
@ -146,6 +154,7 @@ class OrderPayment(models.Model):
|
|
|
|
|
date_due = models.DateField(null=True, blank=True)
|
|
|
|
|
type = models.ManyToManyField(PaymentType, null=True)
|
|
|
|
|
comment = models.TextField(null=True, blank=True)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return f"Payment for {self.order}"
|
|
|
|
|
|
|
|
|
@ -154,5 +163,6 @@ 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
|