emile 1 week ago
parent e66cb06c73
commit b65301bb2c

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

Binary file not shown.

@ -327,6 +327,70 @@
</div> </div>
{% endif %} {% endif %}
<!-- ORDERS -->
{% if customer_orders %}
<div class="mt-10 relative">
<div class=" bg-gray-200 rounded-t-md flex justify-between items-center text-white text-xl font-bold h-[50px]">
<div class="px-3">
<p class="text-secondosiblue uppercase font-bold">Payments</p>
</div>
<!-- <button
class="h-full rounded-tr-md px-4 bg-secondosiblue text-gray-200 text-[18px] outline-none border-none cursor-pointer flex justify-center items-center addPaymentButton">
<i class="fa fa-plus"></i>
</button> -->
</div>
<div class="overflow-x-auto border border-gray-300 rounded-b-md tableContainer">
<table class="min-w-full divide-y">
<!-- TABLE HEADER -->
<thead class="bg-gray-50">
<tr>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
Order ID
</th>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
Business
</th>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap ">
Date
</th>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
Total
</th>
{# <th scope="col" class="px-6 py-3 text-sm font-medium text-gray-500 uppercase whitespace-nowrap">#}
{# Actions#}
{# </th>#}
</tr>
</thead>
<!-- TABLE BODY -->
{% for order in customer_orders %}
<tbody class="bg-white divide-y divide-gray-200">
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-secondosiblue">{{order.order_id}}</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-secondosiblue">${{order.business.name}}</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-secondosiblue">{{order.date}}</p>
</td>
</tbody>
{% endfor %}
</table>
</div>
</div>
{% endif %}
<!-- PAYMENTS --> <!-- PAYMENTS -->
{% if customer_payments %} {% if customer_payments %}

@ -488,12 +488,14 @@ def customerdetails(request, customer_id):
customer_projects = Project.objects.filter(customer=customer).order_by('-id') customer_projects = Project.objects.filter(customer=customer).order_by('-id')
customer_payments = OrderPayment.objects.filter(order__customer=customer).order_by('-id') customer_payments = OrderPayment.objects.filter(order__customer=customer).order_by('-id')
customer_active_subscriptions = OrderItem.objects.filter(active=True, order__customer=customer) customer_active_subscriptions = OrderItem.objects.filter(active=True, order__customer=customer)
customer_orders = Order.objects.filter(customer=customer)
context = { context = {
'customer' : customer, 'customer': customer,
'customer_projects' : customer_projects, 'customer_projects': customer_projects,
'customer_payments': customer_payments, 'customer_payments': customer_payments,
'customer_active_subscriptions': customer_active_subscriptions, 'customer_active_subscriptions': customer_active_subscriptions,
'customer_orders': customer_orders,
} }
return render(request, 'details_templates/customer-details.html', context) return render(request, 'details_templates/customer-details.html', context)

Loading…
Cancel
Save