emile 1 week ago
parent e66cb06c73
commit b65301bb2c

@ -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

Binary file not shown.

@ -327,6 +327,70 @@
</div>
{% 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 -->
{% if customer_payments %}

@ -488,12 +488,14 @@ def customerdetails(request, customer_id):
customer_projects = Project.objects.filter(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_orders = Order.objects.filter(customer=customer)
context = {
'customer' : customer,
'customer_projects' : customer_projects,
'customer': customer,
'customer_projects': customer_projects,
'customer_payments': customer_payments,
'customer_active_subscriptions': customer_active_subscriptions,
'customer_orders': customer_orders,
}
return render(request, 'details_templates/customer-details.html', context)

Loading…
Cancel
Save