From 4c7d45ea1f213f391980737418f69570fa0974c9 Mon Sep 17 00:00:00 2001 From: nataly Date: Wed, 29 May 2024 15:14:22 +0300 Subject: [PATCH] New changes. --- .../add/__pycache__/urls.cpython-312.pyc | Bin 1070 -> 1070 bytes .../add/__pycache__/views.cpython-312.pyc | Bin 12211 -> 8335 bytes osinaweb/billing/add/urls.py | 4 +- osinaweb/billing/add/views.py | 111 +---------- .../__pycache__/urls.cpython-312.pyc | Bin 2244 -> 2675 bytes .../__pycache__/views.cpython-312.pyc | Bin 11194 -> 13609 bytes .../payment/__pycache__/views.cpython-312.pyc | Bin 14939 -> 15126 bytes .../listing_pages/customer-invoices.html | 3 +- .../user_profile_pages/user-profile.html | 91 +++++++++ .../user_profile_pages/user-settings.html | 90 +++++++++ osinaweb/customercore/urls.py | 8 + osinaweb/customercore/views.py | 61 ++++++ osinaweb/db.sqlite3 | Bin 1355776 -> 1359872 bytes .../__pycache__/admin.cpython-312.pyc | Bin 3451 -> 3538 bytes .../__pycache__/models.cpython-312.pyc | Bin 23840 -> 25897 bytes .../__pycache__/views.cpython-312.pyc | Bin 40555 -> 41311 bytes .../edit/__pycache__/urls.cpython-312.pyc | Bin 2998 -> 3121 bytes .../edit/__pycache__/views.cpython-312.pyc | Bin 26794 -> 27579 bytes .../0082_pinnedproject.cpython-312.pyc | Bin 0 -> 1499 bytes .../osinacore/templates/customer_main.html | 24 ++- .../details_templates/customer-details.html | 7 + osinaweb/osinacore/templates/main.html | 2 +- .../templates/projects-by-status.html | 23 +-- osinaweb/static/dist/output.css | 175 ++++++------------ .../ositcom_logos/full-logo-blue-bg.png | Bin 0 -> 28648 bytes .../js/customer_dashboard/change-password.js | 93 ++++++++++ 26 files changed, 445 insertions(+), 247 deletions(-) create mode 100644 osinaweb/customercore/templates/user_profile_pages/user-profile.html create mode 100644 osinaweb/customercore/templates/user_profile_pages/user-settings.html create mode 100644 osinaweb/osinacore/migrations/__pycache__/0082_pinnedproject.cpython-312.pyc create mode 100644 osinaweb/static/images/ositcom_logos/full-logo-blue-bg.png create mode 100644 osinaweb/static/js/customer_dashboard/change-password.js diff --git a/osinaweb/billing/add/__pycache__/urls.cpython-312.pyc b/osinaweb/billing/add/__pycache__/urls.cpython-312.pyc index fa3eb0f8b4da098a68da1717de5879e1f409666d..1928ca12f0db0556dc7a2a94ddf10971a6d03023 100644 GIT binary patch delta 33 mcmZ3-v5tfHG%qg~0}vei6P7l6Bd<6M7cW0kBX^NFPz(T-i3gJa delta 33 mcmZ3-v5tfHG%qg~0}vdP3Q3!@kyo6Bi;thFk-JD7Cz)1D`|&>}PVkOlZ4xPgC~-^@>_K!T{@%!xyk;~qF8j*&Q{7UBXz;(|cpgg8*I#xb*Iq@wNukX<1=6S61C z&W7wMvU4GO`XFKEf5TN~R41gPu8H2@JMmSdlqa7o0LB3&Kv}&PYl@uuDYjmnhT}L$ zr(NG^TmHemW4Vo?l#Teu!W=w~M`9wYz8@>sbHka*de8H_ZAZ!pY=mwjQ;*(p3hbCd=a28PT(8q>wYUPEe7onl9mn%@tYQ0(84Z#zP?o%? z{>p8Nn!21{Uwe)mI(hvlm?hE)Qp2YnaP4Vi3@fAK+pph*TG6S{R)`lmd$~22prRZVf&x*pTGs@j21w0eJx@ zT>-2Sm`12)H{jg>aND_sn=o$@=$L2UcY>CJznKVH`U(QLAaIhG0Iw2w34#UwB-1LY zez7FB)tAK%5sH;w6N@}JS!Cd)=(yXq??Lxtmwa9M<@&9YT5i6)wQ)xqx9x+r)A4uc z)yP{oB?(|%M^DaM_{g)B1yNO-m3gtNoXQtsSskXQ1{0I%Xr3kFSmstzt24D{xF&wV zZ{mVIz+J!_1oU3s!WuyzoKX+UGyQJEZmqoIw_9dDP?v?>LDcYjIx!^jB?{4Lo|L27 zg1RucI!bK~RhS7XWaXJ4vjEGq4AE4z+2sqY-x6(k8G@iGM;P>`fRWh`espV#}_G0@&OS(KvvcM{3%gapU+nl%j7a=)F-tc_KKcwH=9E{257z I9l;6z0@@rrmH+?% delta 5036 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/', views.add_order, name='addorder'), - path('invoice-pdf//', views.add_invoice_pdf, name='addinvoice'), - path('payment-pdf//', views.add_payment_pdf, name='addpayment'), + path('service///', views.add_service_in_order, name='addserviceinorder'), @@ -16,5 +15,4 @@ urlpatterns = [ path('payment//', views.add_payment_modal, name='add_payment_modal'), path('payment_comment/', views.add_payment_comment_modal, name='add_payment_comment_modal'), - ] diff --git a/osinaweb/billing/add/views.py b/osinaweb/billing/add/views.py index c1b41a70..1c79925c 100644 --- a/osinaweb/billing/add/views.py +++ b/osinaweb/billing/add/views.py @@ -8,7 +8,7 @@ import os from osinacore.decorators import * from django.core.files.base import ContentFile from django.db.models import Q -from weasyprint import HTML, CSS + @staff_login_required @@ -211,116 +211,7 @@ def add_payment_comment_modal(request): -def add_invoice_pdf(request, order_id): - order = get_object_or_404(Order, id=order_id) - - current_year = str(timezone.now().year)[-2:] - last_invoice = Invoice.objects.all().last() - if last_invoice: - last_invoice_number = int(last_invoice.invoice_number.split('-')[1].split('+')[0]) - new_invoice_number = f"$0{current_year}-{last_invoice_number + 1}" - else: - new_invoice_number = f"$0{current_year}-1425" - - - - invoice = Invoice.objects.create( - invoice_number = new_invoice_number, - order=order, - date_created=datetime.now(), - ) - - template = get_template('details_templates/invoice-details.html') - context = {'order': order} - html_string = template.render(context) - - # Define the CSS string with Poppins font - css_string = ''' - @font-face { - font-family: 'Poppins'; - src: url('path_to_poppins_font_file.ttf') format('truetype'); /* Update the path to the font file */ - } - - body { - font-family: 'Poppins', sans-serif; /* Use Poppins font for the entire document */ - } - - /* Your existing CSS styles */ - /* Add or modify styles as needed */ - ''' - - # Generate PDF - pdf = HTML(string=html_string).write_pdf( - stylesheets=[ - CSS(string=css_string), - CSS(string='@page { margin: 30px; }') - ], - presentational_hints=True - ) - - filename = f'invoice_{invoice.invoice_number}.pdf' - pdf_content = ContentFile(pdf) - invoice.pdf.save(filename, pdf_content, save=True) - - - # Return PDF - response = HttpResponse(pdf, content_type='application/pdf') - response['Content-Disposition'] = 'attachment; filename="my_pdf.pdf"' - return response - - - - - - - -def add_payment_pdf(request, order_id): - order = get_object_or_404(Order, id=order_id) - payments = OrderPayment.objects.filter(order = order) - paid_amount = OrderPayment.objects.filter(order=order, date_paid__isnull=False).aggregate(total_paid=Sum('amount'))['total_paid'] or 0 - cart_total = order.get_cart_total - remaining_amount = cart_total - paid_amount - - - invoice = order.invoice - - # Render both invoice and payment details templates to HTML - invoice_template = get_template('details_templates/invoice-details.html') - payment_template = get_template('details_templates/payment-details.html') - invoice_html = invoice_template.render({'order': order}) - payment_html = payment_template.render({'order': order, 'payments':payments, 'remaining_amount':remaining_amount,}) - - # Combine the HTML content of both templates - combined_html = f"{invoice_html}
{payment_html}" - - # Define CSS - css_string = ''' - @font-face { - font-family: 'Poppins'; - src: url('path_to_poppins_font_file.ttf') format('truetype'); /* Update the path to the font file */ - } - - body { - font-family: 'Poppins', sans-serif; /* Use Poppins font for the entire document */ - } - - /* Your existing CSS styles */ - /* Add or modify styles as needed */ - ''' - - # Generate PDF - pdf = HTML(string=combined_html).write_pdf( - stylesheets=[ - CSS(string=css_string), - CSS(string='@page { margin: 30px; }') - ], - presentational_hints=True - ) - # Return PDF - response = HttpResponse(pdf, content_type='application/pdf') - response['Content-Disposition'] = 'attachment; filename="my_pdf.pdf"' - return response diff --git a/osinaweb/customercore/__pycache__/urls.cpython-312.pyc b/osinaweb/customercore/__pycache__/urls.cpython-312.pyc index 4199a25274cf65b920b16292adb51dcd8cfefd86..bd22ffbe16b3cf9dcc5c84e6b750c63683602a0e 100644 GIT binary patch delta 538 zcmX>i_*q2bG%qg~0}z}S4Np^KXJB{?;=q6;l<_%)d85V#rg|oZRK^tbRF*6amA++Wbczm|I^9%FmMlGl0vIbr51}w!G)kgU zU(;ao1E#f1^;Nv3#i>QQ1x5L3nK`NYx41!ED6fhSELWUbQj(dMUaWtM2gHYQtN4>M z67$ki3lfWq%kzs;^l$N@3RHgeIiZSLR2Lmf-hx`oH>ry%w zrF1sfUSV;($-;4gQ*wssb!oke(s~=>uCTZ~1PMvaaJ?>Lcu~gif`!Kw7EiD;r3J3n cRU9s=I9za#zrvF6!Ie>&pQ(|%$Pj1;04>0flmGw# delta 105 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 delta 2012 zcmZuyT}&KR6yDiC7T8~4ciCkJ7D{24B31rOnhO5#07#)xT9jJHVQ0{RWtX0rwUQXO z(Q2zrqj=l;K#b8hG(PCs2Q?;Y;*+K!@xf$6Vjt886OE01u~FkWcVL;W-DEz_ckcPS z=iYnRT>5Oz|EDUVok)u04vST&x{&2)*n(?_I(myXAen z72M5oz69D{@O4b_f(FnO1_?&U$!}Jzp_im7I*gLiQ|ZF}WXS8S zMTwVdmdyV0C0ygEd$1JuOG4$`m>mwWRB-e}l02y~Q0bZ37*};;Cdr8BaG}I=n0ICG zbg`Z#yfZpXp~W2gI!LD*2z}D?F!}O+JI%1uq?jS#5%(@1`z_S!I*JP!7Hqf|n>gO^ zgIzepl3@d{+U4+*ok{Y#z2dS*&gJrkY^Y_&5&1dnW;8M)jIra9p?b^lvMZ4>_dL0u zVAmtD`xZ%jjDQzG4}x!N7j~XP<-`pwv#jFovS@g!G#p*VewN;AZg;lxApGXgRVaHv zl{1Ex&jGb6Ex;1{DbW!>M#OGrq;Ai`9BCZ5oD@%XJb{FtLOH1El3XyJQFE9QcclQ2 z-ND`w+k#0l4k+;1r^pnr$u*RRl(F?kU8&<2c_Fv6Rm2Eq^O3hWp#J~O*inA5xnpl0Vx8 zksaK3wfGQ4OcL-1=~~o4H{bzMRNcY4>O1%{8NEVqj^I4Os|2qR@G7YZyH)N!S|1Lv z6*X6oR{I4TsGaHo&4(=?crZ>2^vZ$WDt{6D(0Ob5R)MwvR0~j!O*1%uQnx&ZS8#l1)e(3X rmjwLuV~Bq^1VQ-GHoR?%ZQBytwl?Hx)x6oJI#)q>KSRoNc1GA3^3el)ik)%i<~)f@jEwc09i`-W8Bc6ZP(R4ds5x0l|2OMtpl-I!N(P@;`Dz$e zGXi-)5X_({I$6nVK3L5pky`>qsVSL7smUer`Nf&ZiA5B&s8;Q{IrP2mNSVkvw;QhejDTa1i+o3AqYFtUmQ%_yEM z&8j)spXE5C{A6*~FO1rodDz(47!x)N^XM_Ln}Sp{GENSZvfA9lcZ-QJcXOll1uojgyEf3mLGJf5OeK(V5e zAmY^Izxt~D$%#cNMdyKhQ%0cq`!_E$-@!Qfr6E6)ro`kt%Z|xhR!)p(Ci_~+b6p22 Y0;*vso;tbAN^|let2{QfB4MBa0Q#R&=l}o! diff --git a/osinaweb/customercore/templates/listing_pages/customer-invoices.html b/osinaweb/customercore/templates/listing_pages/customer-invoices.html index b7702622..7ea4ce9c 100644 --- a/osinaweb/customercore/templates/listing_pages/customer-invoices.html +++ b/osinaweb/customercore/templates/listing_pages/customer-invoices.html @@ -51,7 +51,8 @@ {{invoice.order.orderpayment_set.all.last.date_due}} {% else %} - - {% endif %}

+ {% endif %} +

diff --git a/osinaweb/customercore/templates/user_profile_pages/user-profile.html b/osinaweb/customercore/templates/user_profile_pages/user-profile.html new file mode 100644 index 00000000..fe40a080 --- /dev/null +++ b/osinaweb/customercore/templates/user_profile_pages/user-profile.html @@ -0,0 +1,91 @@ +{% extends "customer_main.html" %} +{%load static%} +{% block content %} + +
+
+
+
+ +
+ +
+

{{request.user.first_name}} {{request.user.last_name}}

+

{{request.user.email}}

+
+
+ + +
+ +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/osinaweb/customercore/templates/user_profile_pages/user-settings.html b/osinaweb/customercore/templates/user_profile_pages/user-settings.html new file mode 100644 index 00000000..5bb372f7 --- /dev/null +++ b/osinaweb/customercore/templates/user_profile_pages/user-settings.html @@ -0,0 +1,90 @@ +{% extends "customer_main.html" %} +{%load static%} +{% block content %} + +
+
+
+
+ +
+ +
+

{{request.user.first_name}} {{request.user.last_name}}

+

{{request.user.email}}

+
+
+ + +
+ +
+

Change Password

+ +
+ {% csrf_token %} + + + +

+ + + + + +

+ + +
+
+
+ + + + + + + +{% endblock %} \ No newline at end of file diff --git a/osinaweb/customercore/urls.py b/osinaweb/customercore/urls.py index 290267c5..fef96de9 100644 --- a/osinaweb/customercore/urls.py +++ b/osinaweb/customercore/urls.py @@ -29,4 +29,12 @@ urlpatterns = [ path('shared-hosting-plans/', views.shared_hosting_plans, name='sharedhostingplans'), path('cloud-vps-hosting-plans/', views.cloud_vps_hosting_plans, name='cloudvpshostingplans'), path('dedicated-servers-plans/', views.dedicated_servers_plans, name='dedicatedserversplans'), + + + # USER PROFILE + path('user-profile/', views.user_profile, name='userprofile'), + path('user-settings/', views.user_settings, name='usersettings'), + + path('changepassword/', views.change_password, name="changepassword"), + path('check_current_password/', views.check_current_password, name='check_current_password'), ] diff --git a/osinaweb/customercore/views.py b/osinaweb/customercore/views.py index 90978f35..1fcf363e 100644 --- a/osinaweb/customercore/views.py +++ b/osinaweb/customercore/views.py @@ -7,6 +7,9 @@ from django.db.models import Q from django.http import Http404 from django.db.models import OuterRef, Subquery from customercore.views import * +from django.contrib.auth.hashers import check_password +from django.contrib.auth import update_session_auth_hash, logout +import json @@ -264,3 +267,61 @@ def dedicated_servers_plans(request, *args, **kwargs): +# USER PROFILE +@customer_login_required +def user_profile(request, *args, **kwargs): + + context = { + + } + + return render(request, 'user_profile_pages/user-profile.html', context) + + + +@customer_login_required +def user_settings(request, *args, **kwargs): + + context = { + + } + + return render(request, 'user_profile_pages/user-settings.html', context) + + + + +def change_password(request): + if request.method == 'POST': + current_password = request.POST['current_password'] + new_password = request.POST['new_password'] + confirm_password = request.POST['confirm_password'] + + if check_password(current_password, request.user.password): + if new_password == confirm_password: + request.user.set_password(new_password) + request.user.save() + update_session_auth_hash(request, request.user) + logout(request) + return redirect('home') + + return render(request, 'accounts/change_password.html') + + + +def check_current_password(request): + if request.method == 'POST': + try: + data = json.loads(request.body.decode('utf-8')) + current_password = data.get('current_password') + except json.JSONDecodeError: + return JsonResponse({'is_current_password_correct': False}) + + user = request.user + + if check_password(current_password, request.user.password): + return JsonResponse({'is_current_password_correct': True}) + else: + return JsonResponse({'is_current_password_correct': False}) + + return JsonResponse({'error': 'Invalid request method'}, status=400) \ No newline at end of file diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 9e91a1175d139f5004045589ca3fa44e06578384..bb6f86a79532224bc109e1c5e570b3f2f3c89c31 100644 GIT binary patch delta 2198 zcmah}TWlO>6`q~hOYQaU_!a?5QSBzS>V|dZep#sxv%B7l_kQ0sRqUCaz0Th6vw(bw zArh#qlS(WPRg+MGL?4ilO9oLMETr;)K&dJ&rBHCF3Kc{I)IilpRhV@EJG|tVz8UF1 z|2gOXzw@25br{*&ite2@Z3BSD_W*$A@>8^K8(8js^?Tws&S?_+pPZY9G}rbg&;OYg zX$(=<*-(q~mNN(&5M@V<3sqcb7wySsg+iQ+)X|c#8V{WFCj|@(_K2p~p@J^PS#bAJ zL`)&)If;<{&tM2fSP;^Jv2!S5#VIRFFOww7qQw5^^UoUon~BKS{c@v7lMTUL4GtR3 zLN{M8oE6wq%~y}avq3J(d4!b#ANC=gI)093YoTF z{=MlV(;Ldhb=_<3sp1{Jt`I zF!oE>pocWz5^(L(?VDpN#+BPQji27rTo~#$CSKRWTkrMttA-M4b#DNbkNm)>A4m~D@WoQJr_5b$c5>Yro0fztp%$@XC?f8gTio|FV1O9O7 zpf;f#)J%>#B`d-EuYXVfJ9T^Sk0w(4;=$Y6&sxER4jKc& z_~=PiF!taVJ=%*XfB%zd_B+tC;FY0a&-{!TyaN5$c-{C#W73F%KNtq~%vDgkw$Huw zs%CQm@`F4(ph`5`$TdovoSuE9aq#zM>aZnXR;MV9AnG*y?Xy*EIq0i(xgA!6} zAp*e<1fraiDD{z}Q&bs~aDvX2dc9s#YIiz(u8nqt3e}_-dQkaKtW1H&n~ipxQT}?x z{96kuK69)zW(RBZ)-0?7eHp*F*dK7 zhVuych2hH^GXn*BYIa_uu)@rHdL3ZU`FE5vOS5M+%9YQ}KB*bod2)M2=f4=`hW~iQ zJg4kQGws(Np8yeP+-82)q)a?-EE+x>dtCoh-M6$`P#Q#3Mkc|{orP^)bxU)Ps@`&T zwVxu#}*)clnUStl8mwj*>p*`ED?(7fI=1yz)fO%}O$BxG^6qt37$?PogOj37IE*?1|@j<*{LMr7NPOdu68nengt zlU%kP?XgYS?MX|%mNy&>VaZacQy(Fu&8?>Zaqas85nYWv1SC6fH-J z#CfY_H4t=Hyq=gZ=1HI=Q;((#-4tG<>|Nhd%1y|{Djjx3^Q|!JKS}$MA~9;2rCEd^ F{|)0NuFU`d delta 836 zcmYL`O=uHA6vt(GoqVNNFopiV>|75gho<kgln+tae%-9i?_?tW)RX&~6PF)z>)gL~U_NTN!?T~lS zACIJ3wDi9E{XHGQ)~2T3{X=oJrz@!R_Jxw6eIaLaXE<@-OyGZv?ohlwx9(HjE=AY2 z%6ef33oQ%0gq8J|iVSX)sxv$HRa1Rl@6G_A@}hY=GsKSRHx zW*;s^%>k1E062`UEK=Q={Z6fh*{Qf0PsN4Z3E0anV6G_KpwR92LJ8mgAgG3XBg%wMf6y;;xG^}u}H z)WYOJXM>}&CzfK4$z zXt>4{;Bk68wUV6wJI>VFzp&*VB&WK+{0}(ojWpiri@aPSj;EqvOJ#b#i-4wu-T3E z7Yn1}WJj*!e7pgfd3mWR0Y&*)smUdi*}407$@8C3Qa!81H)?p D;vFEy delta 89 zcmca4{acFnG%qg~0}yygg``cL$ScXHu~GddGfOJxYNp8nOva2-lN}gMC+D&}-rUCe lfrU|Fayi%W$-dluT#i6Zj6hs`dGk|lF2>2Kyh2dC764Zm7>@t| diff --git a/osinaweb/osinacore/__pycache__/models.cpython-312.pyc b/osinaweb/osinacore/__pycache__/models.cpython-312.pyc index a959616eca5ba262d28b5eba539e23a602ab1914..9f2d29f675e33eafaf3282051a549933fe1eecb5 100644 GIT binary patch delta 3317 zcmZWr3v5%@8NTPncH&3kBscGO2uUz0!A(LMLI?$tKuAbJUJzc!jc=HPW1DktI*6P> zE7Y-xtz>5s(!`{8(*y|AhI(pY&;p&dsVf`4gwBzng03ACNF9Vmlvb_S{~rek^vd`1 zIsfbY=YO1Y-}n9{1ecaxjLGd6(elir zgZ~(KzuE?HNKo0^=G?i1dYC-(1V}(QL5|Pp4#u*v>pLAGJQ?NMbKG03~zimDtFX&R8Zs)AMv3TQgY8QqG*&(%kgW(<@+ zCjA~Hlv04b!ZmA7bJ#jpv(61$%QS1*c*-d?WG$PpHiWG$nzd!Zx;7NImS%zQQ#;1J z@g0{C+_8&{iUGpL^eH0EVy~}F69@IUH_=;+Gj_2#1^MfWQ?gEo$3X?3(U?F?gRli0 z8Px@JgJvF#&0uv@KWZ3_4Tu4~D`o^%3K(2E{2u|OKrG@&JV=QLY&szzf(-0@RL@5S zK>%5t8(^**fjM}l58zCHI0iy(XrmY?8;O{misIf55q7A)TZsvRaH~#m11Bb;|B-K) zDv{VBw|7{TVW7zUKCer$86p;lqB884>97K6h*O=)4u>MEkr=1PLyv*sh(%GI0|Sso zNR=G1sy@}}ad0`+JtW)WW-`V;ZOAkuS&8WIkCil*?1`k$h=U}U<%@D%B@Rp%%skN) zC(RQ5v5)SMT_c%~QvCzgA3$CCE5Kf1GB+<2mo-^h7A~#1Tv~HbcPM@=KAc#nB^K_v zl2~-gb#CbNP`JKRtM3ds`oj*t=J1E=J16RQ?$_T)$-F0sMoRWKOtyA}TeoSg+a_9H z(k#s(OHL@y9;#@bwB&_~D#u+~QEh11x=?qowyam1vp%$Or#5G&W`SScT|Jt(8z>>DvdpCOs%4z2gxaa2a3XE2th1RQ> zUH-6B&GQm?zs(ffppi|LOYCruS&UYjrAv5PTo(|~P-}|igzj;dKC6Wdt8cRrdIXk< z7*=|GitK{vR+vH?BbB~|<5>Dfl+blUdU^Xs3nW(F)$bX0$q{|OZ`iBS_fX+Dz*8NZ z==00oXzm?cZX{zSyL-x?Wxb2a6acbowua3)m(4lXr1V2|V|8JvM3YL6sv)UlLaGW& zb(&OnesxHyn~>Iqr7lhCnvi-zmYy%37C)a7Uf!uK@8oJ-VQG^lZ3^}82uYhJq!dqB zqMAe}BsFAFd1h?+?6Vj0n62!$<`cM^a|nN7*PAlg)v^Ra*i=R)i+S#oylGvWzVco& z(YKL%x&Qa5%HFK}HM!1xX|Fm!$Q^cVQ8l@ZTI2{Tt*$olMG$VY?bSYVlZW7L^*_mf*|`^X zfDlB~`Xw4f_zGU7i=EHOU~)|Z`I1Zjx#nLW{hP&Gqtd1+lt%c5rPXdDQ|wM+X7FI` zVq!s`;V6}Nsq_kat1mYh?TQ}5RK#U=DZ z;NJQc1u?eW^rwJOEH~iqnE0(}Jsh`g@AiUrFZ~`!^xp`J5IzsSwCt=%9oWd5DFj_ohaTw8jfCsFjCN)^F%1R&z_SF~3*X;Y% z>2oDq@;i`*CN^|9;RMoR(vq&{F>yKBsCKDw>7z>f&FLA=@wqq4{#|Slsp{qa(Cc}?}GRI8Jrr?uR7!o;oNy8?y@L=0UFdS_8N87BJ&UibXWGcDkF+C_|H&cUWbtz)gz0t~0KM6!}RBH(!1!d~2b F6huV8QTeg_NL@pApX^)ReC&h!9*$H~ zO@AadHRYU|{;(|n@DG|w;pzB0vz)O>$7#$`pN{6#)Q}_k2iAm=opV>q9o~m~&-tGF z&O7(qJNO;@O!$hl+xBd;dcJBJ&ITVILcZr3FP0SmHMi z&D_JB1JYKuF0W1UyUqThvq><`=6Vk}<{zK659fn6D|MOH-J>do65+$7n2Yd}S&nxps)}Y4Zq2VvwNiSx z_JY!7Kv`+Ab1z8=dmvu=9NTNM1+Ou72wpEQa~vh#AbeTw%iK@HX@t)RpTlUm$9a&3 zgki{B*vk$ATi`W!E}X`mIz%29!f(UO?9Dw&oS(!gP8`crO~+)ufh&uG>GYswbz3G#<;~1i1*u;7Y}N>;z_@KvmuB;l z6($<;p}05)e2sIVx%lZB`Xto(9{zYPPAr$98L}EOFvE}$>sFw*F^8qWK;wCb*o_kq zZkqDy0ZN8~`3k~sgsliGnd%@v+(WWH)k4 z1ch89C-!DQ?xWuPhipTHM3HH<4Z>@@W}tJ4BaXhFxtQxA=-6En=s#^HI^8_h}hI z9)2*KnW(jANU843<`rAv!Pba-j)Mz$D!S^Gx0NQzSBcL<3#pv6*Y zf%MuwE*mi|ULRA`Na9su3o~GM(Cc)Nknk*=3U)IGeB9|ZSFQ6fb_pWSZ(*0|a>&kT zGi0MrFAjxtgNH(m6y(Kw!uP0Tb2?_YCzDmwjXHbHbHy ztz#~8gKPZ*VrPldOFBXeG<3EyFD5cNgBpfsk%!Kt<&MZPwVx|J8pi`<$k8aD0{cRF z^@)um@sk7}A(z5JG@}0IqCg_W=`c4SI( zG^)np3NIujbz?g}1)JpgjP8~KI3l~8K5`Lc_(2Y)(5T5@1SK0z*6gL193;>snK)YF zjuTfG-A0L`iER|yAxb9dA#(FUMOT5-k4xg8q<;z^y8r+H diff --git a/osinaweb/osinacore/__pycache__/views.cpython-312.pyc b/osinaweb/osinacore/__pycache__/views.cpython-312.pyc index 2e27dc4a458d4fd7506970802fd603f868df9f4a..fd84b9448734fe0d316781232b580bba29574a17 100644 GIT binary patch delta 4264 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 Pvv*7)aV!kaA2|Gf9_T~8 delta 3844 zcmZ`+dvH|c72j`n@7>M5vVrWzgv2I+ENtYBnh-Go2M9mQ2kK6zGial`B@Aug7Crxc^S*1T0=r6R-bwK>~8{vUu7?$7fk$V}h)!Yy- z&4>P?8;su+jkVvZJ9MWmCA|9_X<5sm_4Lzi37;+>c3514Eonn-uEp7G3IAbc(P@`9 zW=IP4^Kx=z-FDb+Nrr41Y|#KTmE2wsb(m7BQ&Uva%avv&rNxLdB`vPDsW2u|%mPpu zsZ%&@%d-jm2vIkW;vdr)=dG$Kx2>kXdDE{)926 zw9C$(g6$LA*)I5YVhj5{te8|Q9Yy6S!aW>075 zp=tIU>ECErV;r2_BeOSQZ1vXLL>%PCWOJLMjqGQ-<0&jsEGb?<2cf)}K}}ex;@e{? z+7Ev}f0wNGz_-<9tRJQ=D3h(TL2AL=Dc_RrJMth~9{3sI4jr|$#1cwZoNFC;Ew~*c z!M}kE3rZz71;q$1tZ+mgq~#(KA}u1OKdTcDoT?9bxraOuJZtpU3^2AE*4Kt3S0t8l zYE`S#Dl*|R0I$|Yq#&++$@si>Dr1)*x326eWqHXev`gfP;H0s+ZU)O4*+^W5!5YrS zvz16;^!$IwSfuMnbk{teL-yhi>tNgP~;_wT-Q?f1x-KC7ng=t@u(jpR?Hu77AHXXJD} zvDKHYYPjrviBP(%OidtbagHcbrrd3LFD0>fWL)S34)zAJtxCh{(&EW>l}|>CamHKA zUSm0bq|JoW!Sqk1)zdKjIpNHvZZ(-wRCQ?Gbkvo@JIfC-Kk(Qs^7UlvC)?3Jk*OiW z8&EOF_$=mQ{xzbFVi!it1a7Z$>8WXx0BgWHn2N{9>ofn-0t;f%(dO4+H7f$ZeLjp7j79% z=PlGdN8H2Pc@wU*PxqoBzCdZe?q68~S@n5qmtow}fplg%sQdIlBBKXeoSvER(BB@6 zogO6Y!DgQJZI3!_x({t|N=OF;CF4Zl5qu`{o*v|Jn}F_#jmBl-r)MIUJ{tn32<2+N2=^G0bE^O-KGcucOSWr!R;aAo!AiW){Ak;0*#%B{J_r z+LV;8WV34e2YaU&T2%fTsoYrl*#8ujOPGAq3PKvHb2|lC>oZ;0tT#Zq4WrdE}0u}05>0TsH7)`3qaA^5d3kCadt?B8+ zNh4+rk3VYp>}|;FE+`m&VunVrkzlN3(AYgiYC~@y8C$wzEJx_>qK%#)kCK+u+7-SO ze!6essAVX|hk`~=E1*kZ*6M4eP85G`#8y{1f<7dB+$9SuN^UDG>Eg%X4?Vf;47}4b zH*|eJD%Bvc25vM>}v#r{;dcb$^?Vw}ZtSQ}(cZ%q$0v}Q zrZ(&G6Ww2&w2EZA34#Qt2z&$!2@Vp758MS8HcrmjgkDV#zOyNuEU{JdXUJeZL^j>* z-9S6ir|=_?+LXsO!q!c-(sq=NHa^*O$Syxhx+d7Rd4jY9rE`sAn>RYxPMEb#!8&+y z+jI#~+-Q8fE$&3|O}#OB5BYou4)m5tk09A*yxUtV&v=O(y-e^bfw<`6Qol*;W&&}& z|3cIo1jk{~!ysJ@9HBVRfBaE#iCwfue_8nd+#i1A1>Kytl#^xb1nTBg&!q&p5R4- zV+1r>a~gL!&63t+NYkB|*EmgMVzlBkMOibG7=>uw5z_*v*3YS}bL!5VS}vzv$LRs! zbfNjZtPYVb7N`5csWdrdnNw2vP6Em!r-X4j^&xalXPSucoqJYCXQI1ZspQY23jf*E sMd01PIWx?vE;(%W;D8;efg6n{_cMFeb*z?=G(2D@a$p6#aNzL&0C0@Tg#Z8m diff --git a/osinaweb/osinacore/edit/__pycache__/urls.cpython-312.pyc b/osinaweb/osinacore/edit/__pycache__/urls.cpython-312.pyc index 618e110f7d87a65414e1a8ae9b21ac59f2afb482..09f93300706fdcbefd5b05f78a3baf69f9774e81 100644 GIT binary patch delta 232 zcmdlczEMK`G%qg~0}vSe2}^s-!NBks#DM`RDC6^ljq0h)222d8j4Ar5%vnY-1qeFD zU=7=9W(YrBEJ~`7uS|Z&S<0`! jLG-$z=S4%$3jrxtSW-8~arrWGn@aODHF6gj0+j&(|8_d1 delta 121 zcmdleu}xh4G%qg~0}yygg{0MRFfcp@abQ3a%J`hIQ9YHJBV9B~vQl5uVDcX3x0@fc ztY&7En%vKkJDHJlBa1jt>Ew-^l9SJK)^HgCIgCJDd|+}YSLx<^TpoWNyFzXl-#x@aD&}OucSr{w1EfNsy zhA4?48oU8xLKK40At)?wL=>XnFXV?p-Jn=zKphT$&!CA8BHnL1_sSx;KYV|D-nr-8 zbMHGp?tQPv$bmSq9=BLb0)ISL=Pf=qbCY#AIoOi_2FX$^0mph_7fk$l$h9iRovWTD zpSzf6a;ENC!cGo-AY+ZN#KdAgyG6HKw@a6rN{d+Zj>&x{bDD`Ao}8;|7|-oac1>sR zn=>+P4iO?lQws?KU*5)u&CXiyu}1^?K*m3N>>{Zt_X%#Xl4kRPTSsO7qK|MS29?j9 zTji_qmU(NuH9cga+e{5GE`rfg6>Mlw0#!7$MDa(c0|o_%12uT3hCOLJn?+XT!yCkf&;c&2y7r_?^LD|Gw3kt-I+~rU8V!>cNS;KyxIL(0N zR=e4@Nm*>RCx>icOFa_|sg2mno)YmnZXc(1dTc~wT)bPoGHD+nTUg7KQR0hSF;hJ| zWsHt1uH9K~+sqaGW0QU0=Q4ePJy@8}jZKB)3|pbt%vuUZi!X6;zIv`O2uJVK%Ih3w zU+*}AbxpMywx^u0P0bf~aIsDuUv#gIyvkM&8+0wZKINVvi8$)pz zNH)X!kUjvCE$|^E?cjWb;X&YIAOsu%N@eg9AlVvyt>ey2bp>xhmAZsm3SOFc7xtKNbD69VO0-lZ(MpeU*Zs#S8t{}^b(9tlNi>-$RM ziv*V`TJ#lZZ7k!fwCMYFz~GyA08OxU3oD1Da)5xC892d~`b)%Lxmcp^^|up}$DUG7L|4PM5x}2-;vYb9?^E32bO+E3 z;O3>cZ7D8FihG3Ogi&-NMG+|0-YL+rkjHTJNX5%Sffe=2G}^<5{MHe|S2?@&gpdv) g_q{>tZ#JAO+wwovmv5yd zd>c>?Oa($f1MmUxA&>(oKoHOo%toF&KF|cKS*$P2X4^$`;q(mb88N#3eqZfoug4Xr zbNM_xBsvP`E1%KSLwUV$vX%wJ!-dQA2yQToEz2{+O3T|UEZmj?z51Od@twt??4bE9 z8L>=Z%9mumE1xVn%Gg(;y(mZ7O#@5iV9~rJ8hEzYIb|0O(9!ht;?=;{qQaU-lO^`4 z;tT6^{kIt0CEBfXl|5vZ$|0){!AouB{|H_kA3S2q)PElherC&4TF9)DbBf$%pSSDVzsUeBA%z17MR|5 z2mM~p1QkDH{V{?$Ga&(DT4h=Ibw@T~qh3Hgv3j-?xXA=_+MACZF>G}E11@)Uz_-;G z2=P7ysuy?`);WSdjX-rkj~K1YR{kLOnq+IwYr_Lrqvq)%tXPU-*_n}$I7G*?a|!Ms za2fa=7y{ztuTWEF!b~slA2T+L7-TFRsh;#ivw^xGc&&QkEi(A32opRftrR_$REW zW?0vN2yh*^0o(*efm^^|z-=IQKe5~=RM_E@2u~pScd#yjON#xnhJU*s>?pQ)(^;Qz z*Emw|lfRJk`_HQVsK2J0v0Tx(;bIuwpQEF5^m2~=&C!Q>3(y9jd#b&WqpflD0FGaU zqpmpan`8e28lDduP4#)QZBv~mxY4_ekC98AP~*Q#e5_@R-Oyy;(l~}Rj++{*81S{o IrjPCHC8g1`GXMYp diff --git a/osinaweb/osinacore/migrations/__pycache__/0082_pinnedproject.cpython-312.pyc b/osinaweb/osinacore/migrations/__pycache__/0082_pinnedproject.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23d9c4fec2cd017ff43c419b70c442057d71d0c3 GIT binary patch literal 1499 zcmcgs&2Jk;6rcU@de?DMy9%{jSs|d5#740Lk|iH1RFgOaXiUEnDI1B=+B31%wRhc} zbtCr#QV$$^qklqCa)1-%#1SMeyCTv?!vQ2t+$^QNR2-Pu^(K*$GjFBY_kQ!{eaw4r zew&_70Y)qTZtvZc0Qj2=F(oF<$vwt=3lKm;5A+3H5I8UP#J;3UeOZ@7S?VQpMFgJ! zBtHcxfu-(DZ0PKNz^O#N+7_Wo-$uAcnr*HZ zQy4E3PF@H+DhzZ10bLXU^Qgv3XMddNrq869J78xyA)zDc$?$9@Le8&9L=xN6y0hoe zh(|K}5=c2r9>@{0Cn7b}zIIU?r@PlLqTQ>PV1-Mtxr-Rm4pRqWgfq`m|DWf}Z}faL z9qBL~$JP<_%xJneL$%Ggu&m0OO-##Z+YY9gm6h5Dkhq3BB+xa;LppuOv@DG7ICdAe zT`HRB!8#Q`T`S5oZ46x-wjFG^7}2SLWA+Va1RvrN)d+S>qh~(BH2oMmEt_Cy8GTHX zgUHa6?5Wf81PUXuAZs%0Vk){em50m>gXQq3vS;ERBF$o!sxY($Ax%NZ`f}LAj88-O zXlV4fGK3Cq1UgIhjlsZZv3-OG*h1K9j~w3j^h$l}!3NyA-?#@izgTPBrs-1+6B9bM z8s@dho8IBWN7EmhojS{SorghF>+HVFj`caqRzY3E>ey67Evkm`vx%X})%yL_`dWjg z>;axk(Rbj4cgY*Ovc*y(6?O@3+wND^?DnvaEtgc9hHLaje8V!9BfAv~?}ze44EcTB zij;WWDra+AVHNxk4#J{MF19=vIZ5U81SZf~P~za*lGu%ecqc z>t12``Fc=T_6y4|m7lerw4k=(*EWLMUB7lWsO|W*9q-FWM+L{rkmGF5%a@*C3-TpD zU;2Lg$DJQ`f@;IBHiBx?uQr3~wqM=$cH6-&@ps8l-t{uWaZ;Y0d6h_Nsj;M8Rlfer zc`weasM4wEhRSW*+KZ~JO%T)y8zQP?{uC@nk6Jk{nlm3;b8c`hG``5VH|ou(&pvYA rXCi;G$h&MAOM)Q0R)Fx%pJ3?^F#k%)2+FfmkXi6E3$FnaLL2`9 @@ -384,13 +394,23 @@ style="display: none;" id="userProfileDropdown">
+ class="w-full py-3 flex items-center gap-2 text-white hover:text-osiblue duration-300 cursor-pointer border-b border-white border-opacity-10">

Logout

+ +
+ + + + +

User Profile

+
+
diff --git a/osinaweb/osinacore/templates/details_templates/customer-details.html b/osinaweb/osinacore/templates/details_templates/customer-details.html index 1f5cad7b..8d442925 100644 --- a/osinaweb/osinacore/templates/details_templates/customer-details.html +++ b/osinaweb/osinacore/templates/details_templates/customer-details.html @@ -71,6 +71,13 @@

Email: {{customer.user.email}}

+ +
+

Mobile Number: {{customer.mobile_number}}

+
+ + {% if customer.personal_website %}

Personal Website: {% if user_offline %} -

+

You are Currently Offline

diff --git a/osinaweb/osinacore/templates/projects-by-status.html b/osinaweb/osinacore/templates/projects-by-status.html index 45154c65..36e2f7a9 100644 --- a/osinaweb/osinacore/templates/projects-by-status.html +++ b/osinaweb/osinacore/templates/projects-by-status.html @@ -74,6 +74,14 @@ {% if project.open_user_tasks_count == 1 %} Task {% else %} Tasks {% endif %}

+
+ + + + +

{{project.ticket_set.all.count}} Open {% if project.ticket_set.all.count == 1 %} Ticket {% else %} Tickets {% endif %}

+

+
- - -
- View - - Edit - - -
@@ -109,7 +106,7 @@ {% if project.note_set.exists %} {% with last_note=project.note_set.last %}
-

{{ last_note.text }}

+

{{ last_note.text }}

:not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-right: calc(-1px * var(--tw-space-x-reverse)); @@ -1897,6 +1905,11 @@ video { border-bottom-left-radius: 0.375rem; } +.rounded-e-lg { + border-start-end-radius: 0.5rem; + border-end-end-radius: 0.5rem; +} + .rounded-e-md { border-start-end-radius: 0.375rem; border-end-end-radius: 0.375rem; @@ -1917,6 +1930,11 @@ video { border-bottom-right-radius: 0.375rem; } +.rounded-s-lg { + border-start-start-radius: 0.5rem; + border-end-start-radius: 0.5rem; +} + .rounded-t-md { border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem; @@ -1927,16 +1945,6 @@ video { border-top-right-radius: 0px; } -.rounded-e-lg { - border-start-end-radius: 0.5rem; - border-end-end-radius: 0.5rem; -} - -.rounded-s-lg { - border-start-start-radius: 0.5rem; - border-end-start-radius: 0.5rem; -} - .rounded-bl-lg { border-bottom-left-radius: 0.5rem; } @@ -2011,6 +2019,10 @@ video { border-bottom-width: 2px; } +.border-e-0 { + border-inline-end-width: 0px; +} + .border-l { border-left-width: 1px; } @@ -2027,10 +2039,6 @@ video { border-top-width: 1px; } -.border-e-0 { - border-inline-end-width: 0px; -} - .border-none { border-style: none; } @@ -2040,6 +2048,11 @@ video { border-color: rgb(0 0 0 / var(--tw-border-opacity)); } +.border-blue-300 { + --tw-border-opacity: 1; + border-color: rgb(147 197 253 / var(--tw-border-opacity)); +} + .border-blue-400 { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity)); @@ -2090,6 +2103,11 @@ video { border-color: rgb(107 114 128 / var(--tw-border-opacity)); } +.border-gray-700 { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity)); +} + .border-green-700 { --tw-border-opacity: 1; border-color: rgb(21 128 61 / var(--tw-border-opacity)); @@ -2175,16 +2193,6 @@ video { border-color: rgb(202 138 4 / var(--tw-border-opacity)); } -.border-blue-300 { - --tw-border-opacity: 1; - border-color: rgb(147 197 253 / var(--tw-border-opacity)); -} - -.border-gray-700 { - --tw-border-opacity: 1; - border-color: rgb(55 65 81 / var(--tw-border-opacity)); -} - .border-r-transparent { border-right-color: transparent; } @@ -2217,6 +2225,11 @@ video { background-color: rgb(96 165 250 / var(--tw-bg-opacity)); } +.bg-blue-50 { + --tw-bg-opacity: 1; + background-color: rgb(239 246 255 / var(--tw-bg-opacity)); +} + .bg-blue-500 { --tw-bg-opacity: 1; background-color: rgb(59 130 246 / var(--tw-bg-opacity)); @@ -2446,11 +2459,6 @@ video { background-color: rgb(202 138 4 / var(--tw-bg-opacity)); } -.bg-blue-50 { - --tw-bg-opacity: 1; - background-color: rgb(239 246 255 / var(--tw-bg-opacity)); -} - .bg-opacity-10 { --tw-bg-opacity: 0.1; } @@ -3621,11 +3629,6 @@ video { background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } -.hover\:bg-blue-100:hover { - --tw-bg-opacity: 1; - background-color: rgb(219 234 254 / var(--tw-bg-opacity)); -} - .hover\:bg-opacity-100:hover { --tw-bg-opacity: 1; } @@ -3638,10 +3641,6 @@ video { --tw-bg-opacity: 0.6; } -.hover\:bg-opacity-40:hover { - --tw-bg-opacity: 0.4; -} - .hover\:p-2:hover { padding: 0.5rem; } @@ -3701,16 +3700,6 @@ video { color: rgb(255 255 255 / var(--tw-text-opacity)); } -.hover\:text-blue-700:hover { - --tw-text-opacity: 1; - color: rgb(29 78 216 / var(--tw-text-opacity)); -} - -.hover\:text-gray-700:hover { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); -} - .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; @@ -3726,51 +3715,11 @@ video { color: rgb(255 255 255 / var(--tw-text-opacity)); } -:is([dir="rtl"] .rtl\:rotate-180) { - --tw-rotate: 180deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - @media (prefers-color-scheme: dark) { - .dark\:border-gray-700 { - --tw-border-opacity: 1; - border-color: rgb(55 65 81 / var(--tw-border-opacity)); - } - - .dark\:bg-gray-700 { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity)); - } - - .dark\:bg-gray-800 { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity)); - } - .dark\:text-gray-600 { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity)); } - - .dark\:text-gray-400 { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); - } - - .dark\:text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); - } - - .dark\:hover\:bg-gray-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity)); - } - - .dark\:hover\:text-white:hover { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); - } } @media (min-width: 650px) { @@ -3879,10 +3828,6 @@ video { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .s\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - .s\:flex-row { flex-direction: row; } @@ -3895,14 +3840,6 @@ video { gap: 0px; } - .s\:border-b-0 { - border-bottom-width: 0px; - } - - .s\:border-r { - border-right-width: 1px; - } - .s\:p-9 { padding: 2.25rem; } @@ -4065,10 +4002,6 @@ video { border-top-right-radius: 0px; } - .l\:border-b-0 { - border-bottom-width: 0px; - } - .l\:border-l { border-left-width: 1px; } @@ -4121,6 +4054,10 @@ video { width: 300px; } + .xlg1\:w-\[70\%\] { + width: 70%; + } + .xlg1\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } @@ -4159,6 +4096,10 @@ video { } @media (min-width: 1350px) { + .xxlg1\:col-span-2 { + grid-column: span 2 / span 2; + } + .xxlg1\:block { display: block; } diff --git a/osinaweb/static/images/ositcom_logos/full-logo-blue-bg.png b/osinaweb/static/images/ositcom_logos/full-logo-blue-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d04229e49b38198db3f5cbfbea78da8ad98dc011 GIT binary patch literal 28648 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 response.json()) + .then(data => { + if (data.is_current_password_correct) { + // Current password is correct, now validate the new passwords. + validatePasswords(); + + // Check if there are any error messages. + if (!oldPasswordMatchError.textContent && !passwordMatchError.textContent) { + // Password checks passed, submit the form. + passwordForm.submit(); + } + } else { + // Password is incorrect. Display an error message. + oldPasswordMatchError.textContent = 'Incorrect password'; + } + }) + .catch(error => { + console.error('Error:', error); + }); + } + }); +});