emile 1 year ago
parent 473d4035f8
commit 464f8a967b

@ -6,12 +6,25 @@ from django.db.models import Count, Q
def utilities(request): def utilities(request):
active_subscriptions = None active_subscriptions = None
customer_open_tickets = None customer_open_tickets = None
customer_open_tickets_count = None
customer_open_projects = None
customer_open_projects_count = None
customer_open_invoices = None
customer_open_invoices_count = None
if request.user.is_authenticated and CustomerProfile.objects.filter(user=request.user): if request.user.is_authenticated and CustomerProfile.objects.filter(user=request.user):
customer = request.user.customerprofile customer = request.user.customerprofile
active_subscriptions = OrderItem.objects.filter(active=True, order__customer=customer) active_subscriptions = OrderItem.objects.filter(active=True, order__customer=customer)
customer_open_projects = Project.objects.filter(Q(status='Open') | Q(status='Pending'), customer=customer)
customer_open_projects_count = customer_open_projects.count()
customer_open_invoices = Invoice.objects.filter(order__status='Open')
customer_open_invoices_count = customer_open_invoices.count()
customer_open_tickets = Ticket.objects.filter( customer_open_tickets = Ticket.objects.filter(
Q(status__in=['Open', 'Working On']) & Q(customer=request.user.customerprofile) Q(status__in=['Open', 'Working On']) & Q(customer=request.user.customerprofile)
).order_by('-id') ).order_by('-id')
customer_open_tickets_count = customer_open_tickets.count()
for ticket in customer_open_tickets: for ticket in customer_open_tickets:
unread_updates_count = 0 unread_updates_count = 0
@ -29,4 +42,6 @@ def utilities(request):
ticket.last_update_date_added = None ticket.last_update_date_added = None
return {'active_subscriptions': active_subscriptions, 'customer_open_tickets': customer_open_tickets} customer_open_invoices_count = customer_open_invoices.count()
customer_open_invoices_count = customer_open_invoices.count()
return {'active_subscriptions': active_subscriptions, 'customer_open_tickets': customer_open_tickets, 'customer_open_tickets_count':customer_open_tickets_count, 'customer_open_projects_count': customer_open_projects_count, 'customer_open_invoices_count': customer_open_invoices_count}

@ -1,12 +1,19 @@
from functools import wraps from functools import wraps
from django.shortcuts import redirect from django.shortcuts import redirect
from osinacore.models import * from osinacore.models import *
from django.http import QueryDict
def customer_login_required(view_func): def customer_login_required(view_func):
@wraps(view_func) @wraps(view_func)
def _wrapped_view(request, *args, **kwargs): def _wrapped_view(request, *args, **kwargs):
# Check if the user is logged in and is a staff member # Check if the user is logged in and is a staff member
if not request.user.is_authenticated or not CustomerProfile.objects.filter(user=request.user): if not request.user.is_authenticated or not CustomerProfile.objects.filter(user=request.user):
return redirect('signout') # Redirect to login URL if not staff # Capture the 'next' page
next_page = request.build_absolute_uri()
query_params = QueryDict(mutable=True)
query_params['next'] = next_page
query_string = query_params.urlencode()
login_url = f"/login/?{query_string}" # Change the login URL as per your project setup
return redirect(login_url)
return view_func(request, *args, **kwargs) return view_func(request, *args, **kwargs)

@ -11,7 +11,7 @@ import string
from billing.add.views import * from billing.add.views import *
from .models import * from .models import *
from django.db.models import Q from django.db.models import Q
from datetime import date from django.http import Http404
# Create your views here. # Create your views here.
@ -202,9 +202,17 @@ def customer_tickets(request, *args, **kwargs):
# DETAILS # DETAILS
def customer_ticket_details(request, ticket_number): def customer_ticket_details(request, ticket_number):
ticket = get_object_or_404(Ticket, ticket_number=ticket_number) ticket = get_object_or_404(Ticket, ticket_number=ticket_number)
# Check if the logged-in user is the customer associated with the ticket
if ticket.customer != request.user.customerprofile:
raise Http404("Page not found.")
ticket_updates = TicketUpdate.objects.filter(ticket=ticket).order_by('id') ticket_updates = TicketUpdate.objects.filter(ticket=ticket).order_by('id')
# Mark updates as read for the current user
for update in TicketUpdate.objects.filter(ticket=ticket).exclude(added_by=request.user).order_by('id'): for update in TicketUpdate.objects.filter(ticket=ticket).exclude(added_by=request.user).order_by('id'):
if not TicketRead.objects.filter(ticket_update=update, user=request.user).exists(): if not TicketRead.objects.filter(ticket_update=update, user=request.user).exists():
TicketRead.objects.create(ticket_update=update, user=request.user, read=True) TicketRead.objects.create(ticket_update=update, user=request.user, read=True)
@ -221,7 +229,6 @@ def customer_ticket_details(request, ticket_number):
# PRODUCTS # PRODUCTS
@customer_login_required @customer_login_required
def osimenu_plans(request, *args, **kwargs): def osimenu_plans(request, *args, **kwargs):

Binary file not shown.

@ -1,13 +1,21 @@
from functools import wraps from functools import wraps
from django.shortcuts import redirect from django.shortcuts import redirect
from .models import * from .models import *
from django.http import QueryDict
def staff_login_required(view_func): def staff_login_required(view_func):
@wraps(view_func) @wraps(view_func)
def _wrapped_view(request, *args, **kwargs): def _wrapped_view(request, *args, **kwargs):
# Check if the user is logged in and is a staff member # Check if the user is logged in and is a staff member
if not request.user.is_authenticated or not StaffProfile.objects.filter(user=request.user): if not request.user.is_authenticated or not StaffProfile.objects.filter(user=request.user):
return redirect('signout') # Redirect to login URL if not staff # Capture the 'next' page
next_page = request.build_absolute_uri()
query_params = QueryDict(mutable=True)
query_params['next'] = next_page
query_string = query_params.urlencode()
login_url = f"/login/?{query_string}" # Change the login URL as per your project setup
return redirect(login_url)
return view_func(request, *args, **kwargs) return view_func(request, *args, **kwargs)
return _wrapped_view return _wrapped_view

@ -436,7 +436,7 @@
</div> </div>
<div <div
class="w-[60px] h-[60px] bg-white border-2 rounded-full border-secondosiblue flex justify-center items-center"> class="w-[60px] h-[60px] bg-white border-2 rounded-full border-secondosiblue flex justify-center items-center">
<p class="text-secondosiblue text-xl font-semibold">2</p> <p class="text-secondosiblue text-xl font-semibold">{{customer_open_invoices_count}}</p>
</div> </div>
</div> </div>
</div> </div>
@ -473,7 +473,7 @@
</div> </div>
<div <div
class="w-[60px] h-[60px] bg-white border-2 rounded-full border-secondosiblue flex justify-center items-center"> class="w-[60px] h-[60px] bg-white border-2 rounded-full border-secondosiblue flex justify-center items-center">
<p class="text-secondosiblue text-xl font-semibold">2</p> <p class="text-secondosiblue text-xl font-semibold">{{customer_open_projects_count}}</p>
</div> </div>
</div> </div>
</div> </div>
@ -503,7 +503,7 @@
</div> </div>
<div <div
class="w-[60px] h-[60px] bg-white border-2 rounded-full border-secondosiblue flex justify-center items-center"> class="w-[60px] h-[60px] bg-white border-2 rounded-full border-secondosiblue flex justify-center items-center">
<p class="text-secondosiblue text-xl font-semibold">2</p> <p class="text-secondosiblue text-xl font-semibold">{{customer_open_tickets_count}}</p>
</div> </div>
</div> </div>
</div> </div>

@ -80,7 +80,7 @@
<!-- LOGIN FORM --> <!-- LOGIN FORM -->
<form id="loginForm" method="POST" action="{% url 'signin' %}" <form id="loginForm" method="POST"href="{% url 'signin' %}?next={{ next_page }}"
class="w-full s:w-fit flex flex-col gap-5 justify-center items-center relative"> class="w-full s:w-fit flex flex-col gap-5 justify-center items-center relative">
{% csrf_token %} {% csrf_token %}

@ -22,7 +22,7 @@ from django.conf import settings
urlpatterns = [ urlpatterns = [
path('api/', include('osinacore.api.urls')), path('api/', include('osinacore.api.urls')),
path('login/<str:email>/<str:key>/', views.login_with_email, name='login_with_email'), path('login/<str:email>/<str:key>/', views.login_with_email, name='login_with_email'),
path('login', views.signin, name='signin'), path('login/', views.signin, name='signin'),
path('signup', views.signup, name='signup'), path('signup', views.signup, name='signup'),
path('check-email-availability/', views.check_email_availability, name='check-email-availability'), path('check-email-availability/', views.check_email_availability, name='check-email-availability'),
path('activate/<uidb64>/<token>/', views.activate, name='activate'), path('activate/<uidb64>/<token>/', views.activate, name='activate'),

@ -37,10 +37,13 @@ def login_with_email(request, email, key):
# Pages views # Pages views
def signin(request): def signin(request):
next_page = request.GET.get('next')
print(next_page)
if request.user.is_authenticated: if request.user.is_authenticated:
if StaffProfile.objects.filter(user=request.user) or CustomerProfile.objects.filter(user=request.user): if StaffProfile.objects.filter(user=request.user) or CustomerProfile.objects.filter(user=request.user):
return redirect('home') return redirect('home')
if request.method == 'POST': if request.method == 'POST':
form = CustomLoginForm(request.POST) form = CustomLoginForm(request.POST)
if form.is_valid(): if form.is_valid():
@ -51,14 +54,18 @@ def signin(request):
if user is not None: if user is not None:
login(request, user) login(request, user)
Connection.objects.create(status='Online', date=datetime.now(), user=user) Connection.objects.create(status='Online', date=datetime.now(), user=user)
return redirect('home') if next_page:
return redirect(next_page)
else:
return redirect('home')
else: else:
messages.error(request, 'Invalid email or password. Please try again.') messages.error(request, 'Invalid email or password. Please try again.')
else: else:
form = CustomLoginForm() form = CustomLoginForm()
return render(request, 'login.html', {'form': form}) return render(request, 'login.html', {'form': form, 'next_page': next_page})

Loading…
Cancel
Save