emile 1 year ago
parent 040fc88d40
commit 48b30a4cf0

BIN
.DS_Store vendored

Binary file not shown.

BIN
osinaweb/.DS_Store vendored

Binary file not shown.

@ -0,0 +1,18 @@
# Generated by Django 4.2.5 on 2024-04-23 18:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('billing', '0040_rename_due_at_orderitem_end_at_and_more'),
]
operations = [
migrations.AddField(
model_name='orderitem',
name='active',
field=models.BooleanField(default=False, null=True),
),
]

@ -57,6 +57,7 @@ class Order(models.Model):
class OrderItem(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
active = models.BooleanField(default=False, null=True)
purchased_at = models.DateField(null=True, blank=True)
end_at = models.DateField(blank=True, null=True)
terminated_at = models.DateField(blank=True, null=True)

@ -0,0 +1,12 @@
from billing.models import *
from osinacore.models import *
def utilities(request):
active_subscriptions = None
if request.user.is_authenticated and CustomerProfile.objects.filter(user=request.user):
customer = request.user.customerprofile
active_subscriptions = OrderItem.objects.filter(active=True, order__customer=customer)
return {'active_subscriptions': active_subscriptions,}

@ -10,6 +10,15 @@ import random
import string
# Create your views here.
@customer_login_required
def redirect_osina(request):
user_email = request.user.email
key = 'pbkdf2_sha256600000'
url = f"https://osimenu.com/login/{user_email}/{key}/"
return redirect(url)
@customer_login_required
def customer_invoices(request, *args, **kwargs):
@ -223,7 +232,6 @@ def check_order_status(request, merchant_id, order_id):
recurring_cycle = 30
due_date = order_item.purchased_at + timedelta(days=recurring_cycle)
order_item.due_at = due_date
order_item.save()
if order_item.item.item_type.name == 'OSIMENU':
api_url = 'https://osimenu.com/api/create-subscription/'
random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=10))
@ -243,6 +251,12 @@ def check_order_status(request, merchant_id, order_id):
}
}
response = requests.post(api_url, json=api_data)
order_item.active = True
old_order_items = OrderItem.objects.exclude(order__id=order_id).filter(item__item_type__name='OSIMENU')
for item in old_order_items:
item.active = False
item.save()
order_item.save()
return redirect('orders')
error_message = 'Failed to retrieve order details: ' + response.text
return JsonResponse({'error': error_message}, status=500)
@ -281,8 +295,14 @@ def buy_free_osimenu(request):
order = order,
item = get_object_or_404(Item, title='OSIMENU BASIC'),
purchased_at = datetime.now(),
active = True,
)
old_order_items = OrderItem.objects.exclude(order__id=order.id).filter(item__item_type__name='OSIMENU')
for item in old_order_items:
item.active = False
item.save()
response = requests.post(api_url, json=api_data)
print(response)
return redirect('customerorders')
@ -318,8 +338,14 @@ def buy_free_osicard(request):
order = order,
item = get_object_or_404(Item, title='OSICARD BASIC'),
purchased_at = datetime.now(),
active = True,
)
old_order_items = OrderItem.objects.exclude(order__id=order.id).filter(item__item_type__name='OSICARD')
for item in old_order_items:
item.active = False
item.save()
response = requests.post(api_url, json=api_data)
print(response)
return redirect('customerorders')

Binary file not shown.

@ -8,31 +8,26 @@
<div class="w-full h-fit bg-white rounded-md shadow-md p-5">
<h1 class="text-secondosiblue text-[25px]">Subscriptions</h1>
<div class="w-full grid grid-cols-1 md:grid-cols-2 l:grid-cols-3 xxlg1:grid-cols-4 gap-5 mt-3">
<div class="flex flex-col justify-center items-center shadow-md rounded-md cursor-pointer hover:scale-105 transition-transform duration-300">
<div class="w-full py-8 px-3 bg-gray-50 flex justify-center items-center rounded-t-md">
<img src="{% static 'images/ositcom_logos/osicardblue.png' %}" class="w-[80%] h-auto">
</div>
<div class="w-full h-fit rounded-b-md p-5 relative bg-gray-100">
<div class="w-full flex justify-between items-start">
<p class="text-secondosiblue text-[17px]">Expires in: <span class="font-semibold">2 months</span>
</p>
</div>
</div>
</div>
{% for subscription in active_subscriptions %}
<div class="flex flex-col justify-center items-center shadow-md rounded-md cursor-pointer hover:scale-105 transition-transform duration-300">
<div class="w-full py-8 px-3 bg-gray-50 flex justify-center items-center rounded-t-md">
{% if subscription.item.item_type.name == 'OSIMENU' %}
<img src="{% static 'images/ositcom_logos/osimenublue.png' %}" class="w-[80%] h-auto">
{% elif subscription.item.item_type.name == 'OSICARD' %}
<img src="{% static 'images/ositcom_logos/osimenublue.png' %}" class="w-[80%] h-auto">
{% endif %}
</div>
<div class="w-full h-fit rounded-b-md p-5 relative bg-gray-100">
<div class="w-full flex justify-between items-start">
<p class="text-secondosiblue text-[17px]">Expires in: <span class="font-semibold">2 months</span>
<p class="text-secondosiblue text-[17px]">Expires: <span class="font-semibold">{{subscription.end_at}}</span>
</p>
</div>
</div>
</div>
{% endfor %}
<a href="{% url 'products' %}" class="w-full h-full">
<div class="w-full h-full bg-gray-50 rounded-md flex justify-center items-center py-10 px-5 shadow-md border border-gray-100 cursor-pointer hover:bg-secondosiblue duration-300 group zoom">

@ -78,6 +78,7 @@ TEMPLATES = [
'context_processors': [
'osinacore.custom_context.utilities',
'customercore.custom_context.utilities',
'osinacore.custom_context.last_status',
'django.template.context_processors.debug',
'django.template.context_processors.request',

Loading…
Cancel
Save