From 464f8a967b4c3b288efd0eda0fdc44211a90f91f Mon Sep 17 00:00:00 2001 From: emile Date: Sun, 5 May 2024 16:23:05 +0300 Subject: [PATCH] new --- .../custom_context.cpython-310.pyc | Bin 1232 -> 1581 bytes .../__pycache__/decorators.cpython-310.pyc | Bin 761 -> 965 bytes .../__pycache__/views.cpython-310.pyc | Bin 12718 -> 12774 bytes osinaweb/customercore/custom_context.py | 17 ++++++++++++++++- osinaweb/customercore/decorators.py | 9 ++++++++- osinaweb/customercore/views.py | 11 +++++++++-- osinaweb/db.sqlite3 | Bin 1204224 -> 1204224 bytes .../__pycache__/decorators.cpython-310.pyc | Bin 744 -> 948 bytes .../__pycache__/urls.cpython-310.pyc | Bin 4060 -> 4061 bytes .../__pycache__/views.cpython-310.pyc | Bin 18194 -> 18275 bytes osinaweb/osinacore/decorators.py | 12 ++++++++++-- .../osinacore/templates/customer_main.html | 6 +++--- osinaweb/osinacore/templates/login.html | 2 +- osinaweb/osinacore/urls.py | 2 +- osinaweb/osinacore/views.py | 11 +++++++++-- 15 files changed, 57 insertions(+), 13 deletions(-) diff --git a/osinaweb/customercore/__pycache__/custom_context.cpython-310.pyc b/osinaweb/customercore/__pycache__/custom_context.cpython-310.pyc index 83f8fde556dd8c388f64b5ca197b42d104ab4f85..0a54222e49da294ddf68a60d74742eb3b46396a6 100644 GIT binary patch delta 858 zcmZ`%zi-n(6ux&ppB*Po(zFRx!_Wn!42X8>!oW`nI#iXYKng-8%9$!|iQDr93F%B2 zVF(g3Vq!=J1|$&tDJ(4hQy74EHbq4$w!Zi7ec$`;Jxl&p`CO~VzV8uy)?aQtepPu> ze>U~8au7EVNgoIiBn1RTSO|u&5gg%Y5|Iex2Sp<*Vx|%>!@A(@)K%Q@f@)V-Gn#^O zOs!nOggpby+~n&7bq95(*>ql6-~iiN+R5 zz2ifT#$d^q@$x2)XyJl2U6b#0En1FNP;KL>gZbR?BSB1EM66C0|C>QmZE0IOV(Gno zm-JdYJ;>Q43FTgo=6o>B-a>Z+Ii9G2nk2ci8;-?jypNPSoFpoK5=uP#u@s>Ug0d_7 z0&CfKxCM6BrI#M$-ILBBJ_^Ty8VwIZl?20hGFJKdf5jsiN8#{)>S+8l9u31k-rj1q zP48WBc1w?B_>bgvd98D&Y|Z&zF)sT=??XLf*7nrT9T^@^!bHgyI^?nmD;WBnvv-m0 zGsKfsWXIU67;;{InY?J2hGD9QgG2?BBQa3nM5W zS0@cTU~`ytbUFu0#)s_nPAzn&mSf;7U|Kna>pM^8^-tuFkIj!j#k4qf03)_oU1bl)FV?qGVN4_*0{+4b;Kd>Y;*M}UAeNMQg9hJb$+;-6H6 Zk8(|9+-`&~^401_j9LF5ZihnM`Uh4}Z@2&e diff --git a/osinaweb/customercore/__pycache__/decorators.cpython-310.pyc b/osinaweb/customercore/__pycache__/decorators.cpython-310.pyc index f0dbbd78f15f6502786fe07efb33cb49f7bc9b74..52f5f95378b0b1a81dbe319d3277eca5f0933baf 100644 GIT binary patch delta 452 zcmXw$PixyS7{(=AmhCJtr7)a-kR8UrE3~YaY!J3fDLVy5cM7GM6KR=?V`s7i%jVp6 z*kL;uA4?(oFgx$A53zf1edSTTybq7`qMshno%6>H@=m9PVBKxUA3xYtFvKsbqo+N@ zNb0QVjAFzbM!%z(%iIeTdDZ2p6JhPYQ(SD%lBKM^od+%e2=oZLSX6)eFP@cX@BBtP zTT*5*`xoAk(k=-j6I7DD3loPqrE`OBtsRwKNvnT@=X45Wq6#kFgK^hN#*36|lJPI{ zt9O#-t0X&l6ZyiepWyM4K3u3IW%GDZ-1-WKr`k85 z`6ga*-TrLygBS6-c-R$EB-u*)%|k#-YlVM2HpJopq-%Rt3wuy4Tzl4}--SalFw!#; z8tH@Runw#+bifwoHpKxZ9WewujlBA&_3EvD#IECPl^=hSa?^xv#{WSLt&xW2P1ZS6 RDSwR((EL^#wIM|t>K>5tZkYf8 delta 305 zcmX@g{*#q2pO=@50SMgp>8A-YP2`hd)S0NQ!poAv+QJaUn!*;$pvgWlLw@2Ew|Hit zG8Q0~2jXHgAW_4R#gN5V#8bkQ#hk?g;-xV5G8PMzu%<9IGX^ts09B+j)-Wz&3}VP+ zs9{>d*asBVWcJf!yv0&loLY2?y*M*HFTb=zldXttas{KgToK3uP3BwdMX80Qsl_F? zSQ3lUi*K=ImxJiZ%1j;HtRU;zfP@6|kuZo51QGloLTIuevy3>%EU-#8 zMm|Os_977=-%pcmvJ11N377-X0oDd4gn$ZeaoFVMrBt) diff --git a/osinaweb/customercore/__pycache__/views.cpython-310.pyc b/osinaweb/customercore/__pycache__/views.cpython-310.pyc index 409015a11ed04241f171af19bedf2aeacb5e84ce..cedb592bd1e6a9ed36af8022f1054bfeefd3be4c 100644 GIT binary patch delta 682 zcmYk&&ubGw6bJBmvzuR=WYcVZH%XhMZGLK!wt;|$ilA6LSfRI|i1fAMijAgQ53)H%YrDqc=D#Ae}V_WlgC~>_%b3mhc}=1eKX54Z?=AHsoh{uVYJ@g zZ|}U^c%)AHu3K711GXJOA1XsOfKHU`$AEB*97I((P7dLWaDp60O*l!8U{p9oj$vGQ zmYl$(a2iuMJ7k>3s}N3eQ<%Y z3RXq7h&4Px*%F?_I_*VlV3YO|oms{eai&aO#g=ddF{+Rjl@ z0XXk`Ons8!f%9bUfWwB9$QRx4)LARNnV)d&4YxaKQ VGF0tvjU)SU^OscTX?wU_{R6D#t_uJF delta 622 zcmXBRO=}ZD7zglqW_FV%O?J(Dnr)LNZIkAuOK! z&=v|p5E+jivL8SX&P7l}Ja`at@GB_z1&XLQpPkO(Kfn3U!(8Uq-rGIvaWoocv^G99 z?|<2PX?cVAqeMFaY(I%13?H*2Xs5`N7|~9XqiAVo$TptS&XQvo*PbFLFsYp*r!cMU zkTaOop2jK69kccfbq-GJE>E5rU|t^zbSU7g_AI%GCG8@44(GK?A`vG zs#w$A0@krXT^W~fnf3}cu|@kL&8*<6o~e@0~^Ma^d|I#q3_HgAB8-2a6z|W_pA+Ia43L1 zDfA{gVifV%DC)7k>2g=NCQiH-{Xoxh8HU`zk=SO{@Rr$Kr$3V8Sifv{1+jb0j~zcQ z`El8gT|XZBVaY-KsXZnhWGNz$gc7Jo;v$D1Y9nO>|HtIb^m7QxpXn2b$p@JeaMWqW z0BEVd*)YHrC30f}4%PSkA%{)1Q!EGIg?d(b&*7U|t5pGh%RBYY&`^cODu-QlWBD$? ax_sBX1$Ak+KEQSPwRI|%cuIa;sr?71f1ca` diff --git a/osinaweb/customercore/custom_context.py b/osinaweb/customercore/custom_context.py index ed6b7514..f6721e9d 100644 --- a/osinaweb/customercore/custom_context.py +++ b/osinaweb/customercore/custom_context.py @@ -6,12 +6,25 @@ from django.db.models import Count, Q def utilities(request): active_subscriptions = 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): customer = request.user.customerprofile 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( Q(status__in=['Open', 'Working On']) & Q(customer=request.user.customerprofile) ).order_by('-id') + customer_open_tickets_count = customer_open_tickets.count() for ticket in customer_open_tickets: unread_updates_count = 0 @@ -29,4 +42,6 @@ def utilities(request): 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} diff --git a/osinaweb/customercore/decorators.py b/osinaweb/customercore/decorators.py index e59d7b5b..d8c7c1fd 100644 --- a/osinaweb/customercore/decorators.py +++ b/osinaweb/customercore/decorators.py @@ -1,12 +1,19 @@ from functools import wraps from django.shortcuts import redirect from osinacore.models import * +from django.http import QueryDict def customer_login_required(view_func): @wraps(view_func) def _wrapped_view(request, *args, **kwargs): # 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): - 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) diff --git a/osinaweb/customercore/views.py b/osinaweb/customercore/views.py index 5d7ba863..a476edb3 100644 --- a/osinaweb/customercore/views.py +++ b/osinaweb/customercore/views.py @@ -11,7 +11,7 @@ import string from billing.add.views import * from .models import * from django.db.models import Q -from datetime import date +from django.http import Http404 # Create your views here. @@ -202,9 +202,17 @@ def customer_tickets(request, *args, **kwargs): # DETAILS + def customer_ticket_details(request, 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') + + # Mark updates as read for the current user 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(): TicketRead.objects.create(ticket_update=update, user=request.user, read=True) @@ -221,7 +229,6 @@ def customer_ticket_details(request, ticket_number): - # PRODUCTS @customer_login_required def osimenu_plans(request, *args, **kwargs): diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 71e4452b7d88573a057e83a043c394824e840428..c18ee909c54eb6b6f0f2329594f2cb30d994a324 100644 GIT binary patch delta 2324 zcmai#S!^3s6ozL!V>{EtzDZXlfi|UeK!uvQclH5P9H(iVHmkEZ0g=XQ9LFBVTO6}E z!9Z0ZpjAPGD3yxT^q~@~sf;KOMIas!Jg`UzP@okOQq>14AtcmN%C%FPRMhn0%%c0v z`R^H>^WXWiuKBaBLrsQV{fF;p!`FBBzrKUqbmZ!eYvkX>tM?WkTrccog%*fZK~Onl zM=Xm3w)p9!({z1>Q=y{r&<4P5r+wf z8AlBc2FIGxl2&{7CF&9SL*2Z;?p+gonf`(Pu-NeRUzFYysI$107Pz9SND3lOZ=oCp z#3CMVb|=K^P-S@)LAxZ&948R(-*TN*>%Yz1HBi`q?CjHWe zdU~5m{%xcf19{a%kp`9gt9)xGuPnb^uH5wbUFJti&t9>Gp>K}bc zx0Eg)vz{;*YM#Wu0Ma{ZIHEO{Lz!q)PS5$^w3JQzxlmU2PetOI5Q^p^N`yFF*3jc; z8d?rCFIsVcQuAW{g;Uge(65{O8n&5$4~&8SQbRqt6*QYS83~3Yn^p71%0rWC-cWgH zR7=z24X-{-xeY(*=Hm_ddyGFCi^k`TKH~$%b@WC06Z$Bfr1#R>s4LVr)G2C#@=*6v zX2VZ-v#cTCT6oGxG?I?q*mO7+Q2%YEa_g_Onk*@bt?(oUnd{(xxJti^B9vPTPgF~Y zXGv69JTW|CIoMiw+(_haNVl&}xiWPSiCk+TS3M;{DhKVdA|a@>7Urshcv=P4F7Qa? zk*$zjE+$_od$lxF@eE;5mSsf|ZH3uo@YWoX?L5bEJZmdts&lN0L_04k3NP3S>6^Ix z^5m9(Hx_19i0lI71O?g(shhyn9E&UA?5u!f4htu%bFvBryC4ZN#Q74p;_?+?R>Urc zcPJ>VWGl?v3jCKtl3i3F)va_rdmHj{!aY5=~pxN-njMOWja9-n({x{XZiQf#CoE delta 532 zcmZoT;Ms7%bAl9;-TR3$PC#;F!W=C|k;#9x{xiPX{8xLkjfjb^k)?v6sg<#rm7$rQ zrLm={nepZ$8P04V88Za~ODiK2D^mkK14{!76XVI!`Rk^OFB24CF)}eRXug}@em9>H zh?#(x8Hibcm=%cGfS4VKIe?fGh`F}k&F5DCz#PFUHJv?yXX9qUOGzx#cct*~wyUS| zY*$a^y;H@)@Sn4OJNpA(ZpP^b4|#V?|L~C4X1kyOVILbG?&kp(QERAwG*~0%;T$L0y;2~ zg$1N}dckf%g?8zsd_c^&R{5jLv0|b>pu5;qwo)a%P!-3hJjd?oz0>OHq z)>>9()#j|}4+D6Fw@WS)e9bAv%^c3ayP2n#%Yjpp?xzmBlEtxr+ zlp76MeVaoarzeYD{#77tW&G0*$P2P;U*azm GBLDzew6#D0 diff --git a/osinaweb/osinacore/__pycache__/decorators.cpython-310.pyc b/osinaweb/osinacore/__pycache__/decorators.cpython-310.pyc index b14221ca66d0960c71cf34700b52db4399549999..536e4f885731c8169f0846894c4f06e016b61c19 100644 GIT binary patch delta 513 zcmXw$-D(su6o7MPGJosrBBI#VN^hz#6kHI&3Po>JyeiasRm63+$&NG3&b0ZVDp?e? z;7x^PE=6d?NAPL#1U`l*Q%pD?Cpqxt9P&5#6OG#8a6oXqnLV8C`ODEdY%jMqR|yO1 zU>+WXKv>A4ujC+N@jl6tc->IYk&!kqShryvnbr zJ25x|dDoEh;DRiC6*7^8ZOHQ8tB5`iIa~ zcPDUq!x`mO#EKt#1Bh`Cpo_dm&sOnLtUIhZtT^04*y~c|v)Sa*Blxi{1!o~vq(cZJ zphIyR)7>oYPQCF9dxcebQ?&QqDRtD((3da0y}U;+k9X!R(=~q#PUyZmB`G$QLhAhk DpaFhF delta 283 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 v0Ve=o15N?lh&mI%#pU%BoQw2
-

2

+

{{customer_open_invoices_count}}

@@ -473,7 +473,7 @@
-

2

+

{{customer_open_projects_count}}

@@ -503,7 +503,7 @@
-

2

+

{{customer_open_tickets_count}}

diff --git a/osinaweb/osinacore/templates/login.html b/osinaweb/osinacore/templates/login.html index fd2a88fe..37744bb7 100644 --- a/osinaweb/osinacore/templates/login.html +++ b/osinaweb/osinacore/templates/login.html @@ -80,7 +80,7 @@ -
{% csrf_token %} diff --git a/osinaweb/osinacore/urls.py b/osinaweb/osinacore/urls.py index b4e91f06..d33f431b 100644 --- a/osinaweb/osinacore/urls.py +++ b/osinaweb/osinacore/urls.py @@ -22,7 +22,7 @@ from django.conf import settings urlpatterns = [ path('api/', include('osinacore.api.urls')), path('login///', 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('check-email-availability/', views.check_email_availability, name='check-email-availability'), path('activate///', views.activate, name='activate'), diff --git a/osinaweb/osinacore/views.py b/osinaweb/osinacore/views.py index f8833c3b..b01dfffd 100644 --- a/osinaweb/osinacore/views.py +++ b/osinaweb/osinacore/views.py @@ -37,10 +37,13 @@ def login_with_email(request, email, key): # Pages views def signin(request): + next_page = request.GET.get('next') + print(next_page) if request.user.is_authenticated: if StaffProfile.objects.filter(user=request.user) or CustomerProfile.objects.filter(user=request.user): return redirect('home') + if request.method == 'POST': form = CustomLoginForm(request.POST) if form.is_valid(): @@ -51,14 +54,18 @@ def signin(request): if user is not None: login(request, 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: messages.error(request, 'Invalid email or password. Please try again.') else: form = CustomLoginForm() - return render(request, 'login.html', {'form': form}) + return render(request, 'login.html', {'form': form, 'next_page': next_page})