From 012259cd36e6c357cec51880b72a2c55770432ed Mon Sep 17 00:00:00 2001 From: Faheed Date: Sun, 19 Oct 2025 18:38:33 +0300 Subject: [PATCH 1/6] ... --- templates/user/admin_settings.html | 273 ++++++++++++----------------- 1 file changed, 108 insertions(+), 165 deletions(-) diff --git a/templates/user/admin_settings.html b/templates/user/admin_settings.html index 30b6911..dd5098c 100644 --- a/templates/user/admin_settings.html +++ b/templates/user/admin_settings.html @@ -1,25 +1,25 @@ {% extends "base.html" %} {% load static %} {% load i18n %} +{% load humanize %} {% block title %}{% trans "Admin Settings" %} - KAAUH ATS{% endblock %} + {% block customCSS %} -{% block styles %} {% endblock %} {% block content %} -
+

@@ -88,177 +116,92 @@

- - {# --- User Management Section (Cards) --- #} - {# --- Paged User Table Section --- #}
-
-

{% trans "Staff User List" %}

+ +
+ +

{% trans "Staff User List" %}

+ + {# 1. Create User Button - Using the enhanced btn-main-action class #} + + {% trans "Create New User" %} + +
- {# Assumes 'page_obj' contains the paginated queryset from the view #} - - - - - - + + + + + + + {% for user in staffs %} - - - + + {# Column: Last Login Date #} + + + {% empty %} - + {% endfor %}
{% trans "ID" %}{% trans "Username" %}{% trans "Full Name" %}{% trans "Email" %}{% trans "Status" %}{% trans "Actions" %}{% trans "ID" %}{% trans "Full Name" %}{% trans "Email" %}{% trans "Status" %}{% trans "First Join" %}{% trans "Last Login" %}{% trans "Actions" %}
{{ user.pk }}{{ user.username }} {{ user.get_full_name|default:user.first_name }} {{ user.email }} + {% if user.is_active %} - {% trans "Active" %} + {% trans "Active" %} {% else %} - {% trans "Inactive" %} + {% trans "Inactive" %} {% endif %} - - {# 1. Edit Button (Pencil Icon) #} - - - + + {# Column: First Join Date #} + + {{ user.date_joined|date:"d M Y" }} + + {% if user.last_login %} + {{ user.last_login|naturaltime }} + {% else %} + {% trans "Never" %} + {% endif %} + +
+ {# 1. Edit Button (Pencil Icon) #} + + + - {# 2. Change Password Button (Key Icon) #} - {# NOTE: You must define a URL named 'user_password_change' that accepts the user ID #} - - - + {# 2. Change Password Button (Key Icon) #} + + + - {# 3. Delete Button (Trash Icon) #} - {# NOTE: You must define a URL named 'user_delete' that accepts the user ID #} - - - + {# 3. Delete Button (Trash Icon) #} + + + +
{% trans "No staff users found." %}{% trans "No staff users found." %}
- {# --- Pagination Controls --- #} - {% if page_obj.has_other_pages %} - - {% endif %} -
-
- - {# --- Permissions & Group Management Section --- #} -
From 2f02f10c16d6f2cb663cf9249998704a8c673811 Mon Sep 17 00:00:00 2001 From: Faheed Date: Mon, 20 Oct 2025 00:41:04 +0300 Subject: [PATCH 2/6] message on exceeding the applications --- .../__pycache__/settings.cpython-312.pyc | Bin 8243 -> 8301 bytes .../__pycache__/urls.cpython-312.pyc | Bin 2216 -> 2313 bytes NorahUniversity/settings.py | 22 +- recruitment/__pycache__/admin.cpython-312.pyc | Bin 11329 -> 11915 bytes recruitment/__pycache__/forms.cpython-312.pyc | Bin 26293 -> 26374 bytes .../__pycache__/models.cpython-312.pyc | Bin 47574 -> 58633 bytes recruitment/__pycache__/urls.cpython-312.pyc | Bin 10425 -> 11571 bytes recruitment/__pycache__/utils.cpython-312.pyc | Bin 20475 -> 20410 bytes recruitment/__pycache__/views.cpython-312.pyc | Bin 78367 -> 86075 bytes .../views_frontend.cpython-312.pyc | Bin 18647 -> 20692 bytes recruitment/migrations/0001_initial.py | 187 +++++++++----- ..._formtemplate_max_applications_and_more.py | 33 --- ...5_remove_formtemplate_close_at_and_more.py | 27 -- ..._formtemplate_max_applications_and_more.py | 22 -- ...emove_interviewschedule_breaks_and_more.py | 27 -- ...terviewschedule_break_end_time_and_more.py | 23 -- ...0019_alter_interviewschedule_candidates.py | 18 -- ...0020_alter_interviewschedule_created_at.py | 18 -- recruitment/migrations/0021_meetingcomment.py | 35 --- .../0022_candidate_resume_parsed_category.py | 18 -- .../0023_alter_jobposting_max_applications.py | 18 -- .../0024_alter_zoommeeting_status.py | 18 -- .../0025_candidate_recommendation.py | 18 -- ...ndidate_resume_parsed_category_and_more.py | 22 -- .../0027_alter_candidate_email_and_more.py | 159 ------------ .../0028_alter_candidate_interview_status.py | 18 -- ..._recruitment_job_id_766dbe_idx_and_more.py | 62 ----- .../0030_alter_candidate_options.py | 17 -- .../0031_alter_candidate_options.py | 17 -- .../__pycache__/form_filters.cpython-312.pyc | Bin 3043 -> 3433 bytes recruitment/views.py | 29 ++- templates/account/password_reset_done.html | 187 ++++++++++++++ .../account/password_reset_from_key.html | 237 ++++++++++++++++++ templates/base.html | 12 +- templates/forms/job_detail_candidate.html | 24 ++ .../forms/partials/candidate_facing_base.html | 83 ++++-- templates/includes/easy_logs.html | 2 +- templates/jobs/create_job.html | 75 +++--- templates/jobs/edit_job.html | 124 +++++---- templates/jobs/job_list.html | 86 ++++--- templates/recruitment/candidate_list.html | 100 ++++---- templates/user/admin_settings.html | 2 +- templates/user/create_staff.html | 4 +- templates/user/profile.html | 2 +- templates/user/staff_password_create.html | 2 +- 45 files changed, 882 insertions(+), 866 deletions(-) delete mode 100644 recruitment/migrations/0014_formtemplate_close_at_formtemplate_max_applications_and_more.py delete mode 100644 recruitment/migrations/0015_remove_formtemplate_close_at_and_more.py delete mode 100644 recruitment/migrations/0016_remove_formtemplate_max_applications_and_more.py delete mode 100644 recruitment/migrations/0017_remove_interviewschedule_breaks_and_more.py delete mode 100644 recruitment/migrations/0018_rename_break_end_interviewschedule_break_end_time_and_more.py delete mode 100644 recruitment/migrations/0019_alter_interviewschedule_candidates.py delete mode 100644 recruitment/migrations/0020_alter_interviewschedule_created_at.py delete mode 100644 recruitment/migrations/0021_meetingcomment.py delete mode 100644 recruitment/migrations/0022_candidate_resume_parsed_category.py delete mode 100644 recruitment/migrations/0023_alter_jobposting_max_applications.py delete mode 100644 recruitment/migrations/0024_alter_zoommeeting_status.py delete mode 100644 recruitment/migrations/0025_candidate_recommendation.py delete mode 100644 recruitment/migrations/0026_remove_candidate_resume_parsed_category_and_more.py delete mode 100644 recruitment/migrations/0027_alter_candidate_email_and_more.py delete mode 100644 recruitment/migrations/0028_alter_candidate_interview_status.py delete mode 100644 recruitment/migrations/0029_remove_candidate_recruitment_job_id_766dbe_idx_and_more.py delete mode 100644 recruitment/migrations/0030_alter_candidate_options.py delete mode 100644 recruitment/migrations/0031_alter_candidate_options.py create mode 100644 templates/account/password_reset_done.html create mode 100644 templates/account/password_reset_from_key.html diff --git a/NorahUniversity/__pycache__/settings.cpython-312.pyc b/NorahUniversity/__pycache__/settings.cpython-312.pyc index 8d89095cd5131ddbf3675cdb3562e6feb0d3316d..ddf3afbc8f013b532a4807c1ff6aa286fef33ff7 100644 GIT binary patch delta 1224 zcmX|9Nl+A581C0I%)qcS3kb-t=`bLo2m;D7tiv)2ngx9(fq}1Wnq_9}86lWNFd@;H zRJP7?>4P=qmO~D6@{~hz%Y~!qQ>t=GRji_t@|H^Fe~s8(@B9DvZ{Pd+buRKO68g2c z*dx*NyZiY{VVflVAvQ-(=?mwd@4pP010G%m4=+a{uRsxsRhfHL2_;#^eJJIAxOf0% zyb|T8fEPZMX$*c-))=os;49X?Q~85@I8bG9p^BQ1Wkpf7=~Nl7K@G2^=31oy$L|zM z66);c;|QXjs)A^+vC+mRjj2vvhi2*w(xek~jCwjk15WZr$h?XCW`xi}^d}JJC(#<= zA++)qqIRLplzAAZ&`v5^ahkUgX@?-Cai?&Gw^RFRS{*pc&!Cf^rTjVLFVsqEiBk}5pmltVcE8TV%wWgg;iaA3M=@Ji1DcO3ClNlSxElVVcac?^-a@HsK*GxvgKS)CR8gg zy^_>3;UdeKh;JyCdn>80DSFy+>&o)>^17lQwiy4F-D2~(RCyDdSQbN60V@LRttMvH z>q|!g%bmQPfs)8rE-fMKVHreT5pdJ^ts=^njRtR9^UGOQekO@zOiRBg7gP0Bd!~`{ zYAkM8-Y#k?^>M;gUoTrU9{axVeI`miCm`BXMoT8r`kE2-_p^0l&)*vOMr53unzE&T zD=NPeuwne-Z(#}JnZGx*C<^kljku~99k8Xv6|NESB2~ z{OIue`0VVZh57N3$=TVNh2goWg_-f|xz6e*%=0(3(gjKBA>(K+?H-)5xjtx zYFl(h-8$;bj-82*J~&QZ^r8L(eX!3NXMFJ0j?7qJ^u_ONrJkMh`+eVczUw*rAXQAo z?^RU=6kh+_d$@2np(wveWp7pgC;a*Kr*UUANHqvhEh;I5Dpcz#)#(cM6$FJ*LlO8W zidx!_5b6*{L>GoY)KLvV2eAJ$(YJNrTlG;wUBHKW4nA0rP7RJ%7u0}8YUJQ1tpd%P zK}A8#4Q@gUTG^`wZ7#OE*kK6WOU*dMkulEH$!)Z73$2J#8&qm%xdUBDaQQ>%rcU&v zD2^WL;?h3!Iw~d5hr>KYH~OiEiyo0hIbAP~QXhvO=G~7c=m?I{Q9d8Ae;0$n!M!2q zn4D?ou{wZZ8pH_qa=aiIPZR`Bx)Tf`Ny8YW5uBpq7^4$N(MjG(E-;F5I)&3ThBI6` zg$WwxeHv%!3?^v;Q*;(-n#43_a1Q6W^(UDt@D!fL1&A#?<9P5ap2PFF$kGdZ^rEBU zCEhPPL7D>L5?*2LRm{448FMaYkac+;a9P6@$-0ly(6PV+81ixWniVX%11<4D%UEF_ z1*@*bENls^xrVC+p{2DnEJxjAT#yhV3F5biY zxGrVg%dh)^Q-%+@l>BZu9=65b}|D(Q34Z-nN{5^{^GgosoD(oBa>Um zni&iI-+bjSx4+-_qwv~GHF5ikn(2Ww|8~|4LqaWim(5kZRF+#Xt$ZR_@~&o9w32__ zw3ak0SMpoh{KovUW~J@=+N@7HiHm*guCNHLf`;^?3=f zABLtx#!lAtbUcnNmFG>E=Z#$c|18$RqZ~VRhPZ71RX4yv-C<(99v%_1_D|tY!XHVO zj~PmSb1iR}t2xWCvyr4&wC_Z^qqaQpUNf|H>$dd#T*8w5Yotpo+vU-b_^fm&GgdOX zRw~P9vOM9OGzHcyb4|1IhL%fstQ)o-9Tw+`ccR~Uia7X#2>iiLeA`NH$nI>s&=w1+ z+ts_1LJ3xG`*(dxwEeykVve=lR~jVu+Fv%_7L~=mCPUax^CkQ5=CSgo`YLt1VmDbF Lk97&}15WoZGMPu| diff --git a/NorahUniversity/__pycache__/urls.cpython-312.pyc b/NorahUniversity/__pycache__/urls.cpython-312.pyc index e44eaccaa56ac471fd4ad2dc0ae8f291207afcbf..df79ce761314b4191b32d5bc38616df503fb4f47 100644 GIT binary patch delta 354 zcmZ1>*eRrbnwOW00SJoNzGhglGcY^`abQ3I%J`hNQN5ihiHRYVIYmB|FUt(3070iH ztPxqw4B@BqM9HMe09A8=btnQ!mK3Gcj1bw?Oi&uiui|B3fU0Mk{EtaYCzT`124OIa zwMH4H5k-RovzQi8g9A(%f=1U+siLX6Ig9x{qhb|LVnL>Ud1_Kdetx$8Ey1e%{M>jb zH@+-0wS00Ut2(3N=0;XgMy4W>$&=aIxO9OAgB)BuVY4#36r;>d7LE?N8LZbO^e;;2 cUoiE!!s7WsS%{yhf%}8TWH*jD7Hyzn05MuYhyVZp delta 251 zcmeAaS|O-@nwOW00SJCx`jYX1je+4Yhyw%sP{wDwjq2@8V(Hvb(y7u+45?f|%$y<* zBw11vCcj~lm4%42rE+9hz%(Q1$pXw`VQUmuGeLx^co`U=27xr#AQZw_Kv6pw8$qL+ zP^qM;ym=Dyd&bF&Sk)O7HlJb@Wt{wkt(i*)sD}}Vi)%L*vP&^?eoz$TXKLX7pf-6q KM;wb5PzC^HYAOr> diff --git a/NorahUniversity/settings.py b/NorahUniversity/settings.py index 605ed40..c87beef 100644 --- a/NorahUniversity/settings.py +++ b/NorahUniversity/settings.py @@ -132,16 +132,24 @@ WSGI_APPLICATION = 'NorahUniversity.wsgi.application' # Database # https://docs.djangoproject.com/en/5.2/ref/settings/#databases +# DATABASES = { +# 'default': { +# 'ENGINE': 'django.db.backends.postgresql_psycopg2', +# 'NAME': 'norahuniversity', +# 'USER': 'norahuniversity', +# 'PASSWORD': 'norahuniversity', +# 'HOST': '127.0.0.1', +# 'PORT': '5432', +# } +# } + DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'norahuniversity', - 'USER': 'norahuniversity', - 'PASSWORD': 'norahuniversity', - 'HOST': '127.0.0.1', - 'PORT': '5432', + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', } -} +} + # Password validation # https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators diff --git a/recruitment/__pycache__/admin.cpython-312.pyc b/recruitment/__pycache__/admin.cpython-312.pyc index 07aeb8c3655b4d2949ec099d391a612fdf888099..0b0a860ce53c120f77f595c875d38c38198f10a5 100644 GIT binary patch delta 3310 zcmaJ^du&_f75B9r$M4vAICh?PUe2{iNJgfqX}5w%%d)mfNy7@E;M~}^&29bSyVqNj zZAz+Dq^KZ>&M2j*+V)Q?9u*Z~gFiN@Oh~+;6@O5!Kq_d`Ht~uC<&O!$&iSrgCuu!P z{`tG-ea?5z_g%ko_woC@Z+SdU6MmTO>g=)DvNtG9FGqhXQLsU$xeiiAipZZ{F7YjqqK4aC z)Ub3EDbpnid}TIlyvQkGi($iVDQR>Y8bLYqtUx)KjDSNJTNB2{1F`fJ&F-_*IGT~u za*Y!$a?T^C6*+AsPN)}G6NbgLcyKdVt&xTsbA~H&@)bE}Dsn!uMt*WbKWpPL)^f0v zyvc+2lMgV7q!YiAnMzvR;*Usa0RH1RE%d{Z^L`r-XcK(qyi4eU+gy)g z>t1p-hkimmG#F_g<8|&)wx(QwDh0JuPg4FWiky!=$+(;TX|k(B?U7 zBpl-j|I_o-U>|WPP0`Bkr1c(x-PfoV-L2*dEGZ`vSt%p42{`Xwv#k(tDjvvV7(Gfv{; zuv&B2sLnXA&XO-H#Nk_Ce3D$SBmu3&D&7%nng|lX41!*j&1tf#I}3SomP$w(yM>rM z;p(Rt?CEt4PFXZj78|2Z5G?_9wZ*6tE6cT;1zvg#F-P1y zg6{owjvdOUCEP-7E-$a$Tb3cIEI}GUwD6yDEbB5T%W~U{w73KN&Rmjju4vIcu%mvf zFbK!%Pshom?o2Y7*JEa`Y*%-UmgfV5-3@yh_6iTcvkm{Yk;(ZEc(*awl`qVs6?Ill z^|MOj@E{C^8sYQ6tvC{WjZX>3;f=%6w%{I=oC=<_9Vb8S0#ZHoqCkcv9 zPP9a7tqiW&=blc$t1U+w1l=bo2?;IDsfwDwhL+eYEVee=C@LnypIc80kHgls%B4O7 zzilhltrL9V7P#7WSa=$;?Y$LCeHNZ?zZZAM6&_f3v|(-g%e6g25%AicrPYSAE)#7T zmcv_x5x5k-2`Bjb@IIr&%Q)5#ZQ^bGI}+o$a3Gpqoy=iVW;I4rxTf>X#+00cj*fV| ztZ2+CQ%HD25YG|qIXK)g@8s7DJtvp_4dCzm({Aq2MiPAWBCY;HKnCY)ig#srMAjrF zt(MNqve;iq_9X&tBoE(pp6cPI{!c_JB))IsjgKxWxjX?rkdrQ6mT&NvfuqwiS z^M1=zb;>nmpL2^Iy>9)*eOoG{WJRl9oiXln-6j>Z*&Hi(ARZt*l7Eo9R}heJ4u5oS zQ6-Vka(N|*?Zq_{iGnIKx>rQYLfH&Eg*x*k@7Fi8ncHUMWxl5PRuR74*ga7&JUS

puC)ghS=&x<2LgQQ zclAZ-sh8jv1bomo^z&=PAovCz=}8;I^cp6y;(CWTZxOr=e~<;-zbX&WBR?PbeDaaFKs25ndBX!$K_lz4*X>&}{#>e% zmVd@RL?Hpc>hIxGu~)dd;)-cPhxdJ<{Tnm>>p0o{K~wBfQ|xOKK74I4nZv6@UhRQG J{BRBk7*QlfO_V_b8ZwcX_<@lRjfp1yAU84LCy77&z>rAH^t|VGbn75lX(&ID|rzMC8KMn zZ`YJm3#yP))(mB?$a03sxD$)(-9y~eB^%=$70?wP^cI9Uy zHDtICGu*L!jC4P%=xovzxPZk!YClhOMkMXxNmozLRf+_gGhy!;yahGf;m$Z*KE9T~ z;yCy;+5>xx-fhczma1vV{LBPvv+O9iVf3zA-ZQtN=i!2t#*7wt47E}nyjt)GDTV6= zx8btsN0W=^#$524xz5z6o1d72fog6Bq(bIKsurOR!H(cTs7LT3U;xb=PbK0hs;~y6 zM4%?Ld;*}~;?tx1;E?5BOFOci2&)nN2yGlRTZAfM79UgN=@j$BJB9vcww=2*ON}@w7P5}ViykbL!b2wXMeK}n?y3*&~MvK8ezuv zI#~xjMK!MVsN2XvF>Y@#w;v^h%xl6_%0;IE>+YrDBZb11Pi zQ$q_=@8NuIDJ0}1n6!VSmqOyDaKZNC(|sN2!6NXb>_mGPLhl3CpcN_UaTcbbP)bfx z*2g`XoidhYp(IrlIZCA>T`z|BL3fE{6G4I)qyrKqUgC#iC9d>CoRCZl#i-aVWC%kX zG~*^&m8E<(fXpB==3P`7PpDYzY}{wijd^bo7?7+B3xv+i;3#$bwBm@Y(oif;naskm z1G$yK7H0t%Dt$q(OaR_(_Cu=C0(Qqv(gwqh_MqsIk@*Rw0?{ulgv4G1nS)l4N~=`S ztm9)iVI(B0Y%My)qL&VVUmRXC0{=Q%8p9|Pb40im49qNPeOyZIs+{&7#$m&7uq>1L z@TI@Y))6}f;wh%kn})|LDt7duDQE*rpq)h6$3ZfPzwG3TQqF2cu>CkH4ewX%Bx~Sq z#hG@DpjpF=iuH~h$cE8uTT?2HG8xYjPo@_>Uo}X^puF-9Ny9&ttt&SFVR*D^kROvb zs!o$5(B*7eQ8@`IXFpe7b)GUE;h9W$fK)lX;Y3=Yk=1Oa(>28>sDh7OkMW^@xSC6I zE}6~Xt!|JG<5IUHOd?DnI(iW88oAk7>{PE20yr~t1`XvCdyAC=xUgAd+i2x0vQnspsV(!Jx0xzl+|!7q=eIq zYK4l*Xez44coRNP<$e4{RCq&{@jFeWEG~z_F&f^Nh;vz#N8wCT{YKISPHzVpfX&`L`c@nlm)lp~u^!REFQOE8 zLkHwEb2!Z#G^H{;aSNJ0Uq2uhA>Pp5o*k&4OBO?MP9hhOy8vG{Oz4wefQ^k;wu$LX z=n~eaXkA9YNE0PHC{^RB==@t`{*K7XK11yl1QR^f^tMk#`JXIiQ928j<{r`yPc#qe zxy(Ye<>f=-C6--_c=ZVoL4_CJZn>o}>bIP5iP1PlvjpQwif>zfLoY~5vMsrNG2|8w z;3~CsidS(9Qd<$8M#w4TRpbzE!+Wg>eF0aYT)Jetfu3s!*Wo9rvrL>4gU;MU`UaG? z)wW+p^E(c~z_L5_E&37u%!8q}ks|S-fX@M`6|S|NtJLg4d1O2xv#sKLLVR2>9~^D3 z9uV(O@v0EF?kI*5Ehx5MRA1ze;rOw}1Gjj2nq_@59T`v14eV#G!4E%W@I*%|xqC_K NPzl`Z{KAL{{Rg^kQIY@v diff --git a/recruitment/__pycache__/forms.cpython-312.pyc b/recruitment/__pycache__/forms.cpython-312.pyc index bba0bac7017df0f4be1b5d51a2d9669c0ab20e98..3f269ca58dc20bc4ef1ad547e6d056f84ab7ab89 100644 GIT binary patch delta 8055 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 Z$w70nSjU&m$OO$vEB#JSxekxz{{W|gTqFPh delta 7806 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 diff --git a/recruitment/__pycache__/models.cpython-312.pyc b/recruitment/__pycache__/models.cpython-312.pyc index fa577345e98644ac5a4d29ffbec3c1e1fbc58621..3cb77d19c95163fb8a5b3a8519edb788cf9b4a19 100644 GIT binary patch delta 24014 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 ^DLVH zr_804jR3x6NFJ_~+QOgRL<9X8EmRy!bqC4Kv#ID|o#P&8=8m!AkeGa?9^mUnk|+3`kjb3hEItVKW2 z8w}m|idNVKx>u@9In>Ty37DbfmD$Q%0e&f3;kH+{R7G4|dU7MrzLrk2_z994_U?>TB5pLQop7{jPE9^DW;g4-o{k1#Rv z>%D?JSs4=`jst-T8$W8?DT`*@UT z5($z&whGk$S-wEzl)|hZ9pkqibQ-8 zS=n6R0AEbmr1i@4;znIV^FsbC<7ef|DfJr~wQjq2Q;_bt_>yY|@%cfJk!Oc5b>+wI ztc!?oDN7B!RmlaN*t4ZHm0a|adfG$<1pcf7 z)nqen@~5B82K(yL>3AwMzwI=o z#qwGhdfN$AZyQrH#?7&ymks9KXoJ_@&dnUpj3H4QAmc^!(kj=4ui&E%7K->2lb)iH zY*!8#r>?k$pAuXGKXis8*97$JgI^PbNjvjbAmNlN0&EM)Ip#)!j4y37&L!?jzFz!l zA&5JQ+ibpjNH@aor<%-MNpk#o>;-#EfMc7iu=1TN^8bJ&Y?#0Wq5vRk6!&ta6ujb~F}g(>V++X(id1$) zrpVitw3|pegX|3a`E>b0J#pm`Q`v%3_F|&fN~{Pd)Trj_VD*_|2%NELr_3Ah+7&V; zXTvLJR^+7??%r@ZwQw@E@Su3C?BzATyy5Nk^;4-Ec6Pv}?{<|L;ogS;bKmGrz(sEy0>qc$ZT2|s?s%8!iKNb^%QoJ<~o@9rr_cYM^R&{EIh&O`RYy86y+>-YkYf?nI5zG){GTEmT(>W$~4~Q5u$Heac z5QBaP)`~r{>{Iru#nka^4E8Pf{exC zJed3d??BJ$gl72D+4&KP&ih{^noF;p*l!^D;hTk@J+{)ImJ;BC)k3M5fU^$DlJH7t znOz!%lt^lT{-S0aYM^(7+-Y0I;F&q>>@v&Ncu+nY1=5i zJ8EVkP9$XgD2!dTx= z{CjzoE9$Y%8kMkUOg*ij@APJEhLATFnpWUvx?&Ed%cd3hnZ8CS7M2TRwbKgvPPf6p zC-%I2ptIzx)FbPG1fM%z|ZtHIQ&U_VZP9?4;kZUy0Ju9CG5-klY+i{7XAkW CqnL#N diff --git a/recruitment/__pycache__/urls.cpython-312.pyc b/recruitment/__pycache__/urls.cpython-312.pyc index b4efb3c48cebf0c4433a225f3f3038e92c4ac648..66d82628c22c4fc8b78543fca2e095804a892c05 100644 GIT binary patch delta 3047 zcmb7_TTC0-8Gt?GA($j4E5ME^*yd(q5@2F;OGqH*;tkn=AvOk<0LI_}%mQX@gBP-i zccoRuLsdb}Ug+K*Divw_;0meAzN}E6Dz#nBQKlNz>Pq|4r%K%uX{&u`EA`CzA&`bv zDuUzxKi_x$ne)#X^X1+B@xtF3jc0ZACvoQQ3mcA|LJR+s!e6=W^M%5qOPfFZL4V+* zTs>ON6H!F}4NOm}0Cvnlxe>2fnhQDxn^z(u`PQU+k z!B_eW^S7zLeM;q>7b-uZ=A%=HQznOeD66kquuWNRDJ&x^@HbB&D^Et?kVQa zUNAqT=7*=4A3bk2(xM+z_2X02Pfn`igBzdLeTE(xyZM}M|6Air{MClV_)Jo~kz87v zZ`X!SaW=j(7fUQRBxe_-=-QIh5L-z}iS?M2PKvpTLmEc^EVt}`ccF)OY!)m_QYyAG zPqA?+mQ00@@=eQ8BqCo?#aYL3I#<+qw&pl}uc-b+y8oM^IL|pzwxp~&J~t;N!rIlv zT*+)?B^rxHQd0PMdUFPSYpEP(8#v~$m950Rx^h_vw0g5H?)ZkZRn&!?xneSVmX|SZAKDNb`la^jdf{5H~N>Y8F}sX6$!tV z4{F1ZHr&;QfHnlRVHm~ifop3tW!p8WrFFQpE_+_%=hDbsQO2dwK!v58Sw+;6 z3(9vT)z*k@joArB=qAN!^fuEzsVHk>nnf%2qivsB;>0D+J-;GcC#8(oSb>JUHC6Os z(I@v$DMFao)95=^;ap{zk9kh!UCBCB&k*(u$)ih(uuN(hb1`=Hu|sX2#_iKYr(57& z;lJ1E^6v1Yjw$u1uhN>|z~V-S$qZU(Adpl5BfEYn^@dT=S$D8D#Gieg-x_- z6D~FZTe`|F>f9?-UAM67mh7Kagb2CDU`NBc>toM#yCLtj_fGq-{JIeLw)vTaE>7}VqlzGr7_3+XTqW1Es5Sk# zre6-erU*;qHNXk9Q)9{`AxVLIc`u|k+{6tx4^|W*MAiVVvzxSRx2VPSxVTQjW< zBn|KlSXudbi(1`*t2^Z0aYeXCHh{hfv?aTywuNw8NS;_%gfw{o^dXmFkA(I54))xU z1M`ZoKr(>6Jfr`)xQmAa0@R)DRGUU{6K#7^5mKZFXfM!ZIsV`WooJ@b?N zIy>`eo)~36f1DJI#js zki3ch<}?>PfTUZGjJ4Lr9zA;qy?XYDf^ukF4Q=4i25nClA7Sm8;fW8dm(f_Q({Kxt zKJ?>SXX9;1`eFT$92ivt>o~AZ*FWT@*!nO}2Eg*8T&*)R2+6RvWXrC7-(JF{m$F7h z=p-RvBT&whrOzRNn*#C}>+~qlF}AXNTlyfr6W_b82yNt5AmfabZHH7-9X8b+zJ~Vz zPB3W8XfLUVEu!4Q&i^FPDY#_qUY_dmVwYEbnVtVI&?r#$t=)&kK6#M6p%TzJpf?Xp zYS%s7bx)poLlHK}JkSN8T?Z{{PZ;+!h2^=2ijW~Oz)OHzALpr8gZL^vRj(^Tf-E!o L_PIoo{#W}qy4R_| delta 2074 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 xn~R4m@>pi~$8qD);Y|3_}#bIc^7nwFi%J)54 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 H1vUTxhh%-v delta 96 zcmaDU^;n$mG%qg~0}w23f1NRvb0VJv8&5r~T$CZFV~ + + + + + {% trans "Password Reset Sent" %} - KAAUH ATS + + + + {% get_current_language as LANGUAGE_CODE %} + + + + + +

+ +
+
+

+ +
+
{% trans "جامعة الأميرة نورة بنت عبدالرحمن الأكاديمية" %}
+
{% trans "ومستشفى الملك عبدالله بن عبدالعزيز التخصصي" %}
+
{% trans "Princess Nourah bint Abdulrahman University" %}
+
{% trans "King Abdullah bin Abdulaziz University Hospital" %}
+
+
+

+ Powered By TENHAL | تنحل +
+
+ +
+ +
+ +

{% trans "Password Reset Sent" %}

+ +
+ +
+ +
+ +

+ {% blocktrans %} + We've **sent an email** to the address you provided with instructions on how to reset your password. + {% endblocktrans %} +

+ + + + {# Button to return to the login page #} + +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/templates/account/password_reset_from_key.html b/templates/account/password_reset_from_key.html new file mode 100644 index 0000000..2a208a9 --- /dev/null +++ b/templates/account/password_reset_from_key.html @@ -0,0 +1,237 @@ +{% load static i18n %} + + + + + + {% trans "Set New Password" %} - KAAUH ATS + + + + {% get_current_language as LANGUAGE_CODE %} + + + + + +
+ +
+
+

+ +
+
{% trans "جامعة الأميرة نورة بنت عبدالرحمن الأكاديمية" %}
+
{% trans "ومستشفى الملك عبدالله بن عبدالعزيز التخصصي" %}
+
{% trans "Princess Nourah bint Abdulrahman University" %}
+
{% trans "King Abdullah bin Abdulaziz University Hospital" %}
+
+
+

+ Powered By TENHAL | تنحل +
+
+ +
+ +
+ +

{% trans "Set New Password" %}

+ +
+ + {% if form %} +

+ {% trans 'Please enter your new password below. You can then log in.' %} +

+ +
+ {% csrf_token %} + + {# Display any general form errors #} + {% if form.non_field_errors %} + + {% endif %} + + {# Password 1 Field #} +
+ + + {% if form.password.errors %} +
+ {{ form.password.errors }} +
+ {% endif %} + + +
+ + {# Password 2 Field #} +
+ + + {% if form.password2.errors %} +
+ {{ form.password2.errors }} +
+ {% endif %} + + +
+ + {# Hidden fields, if any (like uidb64, token/key) #} + {{ form.uid }} + {{ form.token }} + + {# Submit Button #} + +
+ + {% else %} + {# Message when the reset key is invalid or expired #} +

{% trans "Password Reset Failed" %}

+

+ {% trans "The password reset link is invalid or has expired." %} +

+ + {% endif %} + + +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index a3a4293..fb30362 100644 --- a/templates/base.html +++ b/templates/base.html @@ -56,7 +56,7 @@ {% trans 'kaauh logo green bg' %} - + {% trans 'kaauh logo green bg' %} @@ -179,7 +179,7 @@ class="dropdown-item py-2 px-4 text-danger d-flex align-items-center border-0 bg-transparent text-start" aria-label="{% trans 'Sign out' %}" > - + {% trans "Sign Out" %} @@ -221,7 +221,7 @@ - - {% endcomment %} + {% comment %}
  • {% trans "All Candidates" %}
  • {% trans "New Candidates" %}
  • - + {% endcomment %}
    diff --git a/templates/forms/job_detail_candidate.html b/templates/forms/job_detail_candidate.html index 7bb8472..0ecccf1 100644 --- a/templates/forms/job_detail_candidate.html +++ b/templates/forms/job_detail_candidate.html @@ -8,6 +8,28 @@ + + {# ================================================= #} + {# DJANGO MESSAGE BLOCK - Placed directly below the main navbar #} + {# ================================================= #} + {% if messages %} +
    +
    + {# Using responsive columns to center the message content, similar to your form structure #} +
    + {% for message in messages %} + {# Use 'alert-{{ message.tags }}' to apply Bootstrap styling based on Django's tag (success, error/danger, info, warning) #} + + {% endfor %} +
    +
    +
    + {% endif %} + {# ================================================= #} +
    @@ -85,4 +107,6 @@ {% endif %}
    + + {% endblock content%} \ No newline at end of file diff --git a/templates/forms/partials/candidate_facing_base.html b/templates/forms/partials/candidate_facing_base.html index c171571..65b328b 100644 --- a/templates/forms/partials/candidate_facing_base.html +++ b/templates/forms/partials/candidate_facing_base.html @@ -9,7 +9,7 @@ {% translate "Application Form" %} - + {% comment %} Load the correct Bootstrap CSS file for RTL/LTR {% endcomment %} {% if LANGUAGE_CODE == 'ar' %} @@ -27,13 +27,13 @@ --kaauh-teal-dark: #004a53; --success: #198754; --danger: #dc3545; - --light-bg: #f8f9fa; + --light-bg: #f8f9fa; --gray-text: #6c757d; --kaauh-border: #eaeff3; /* Added for dropdown styling */ - + /* CALCULATED STICKY HEIGHTS */ - --navbar-height: 56px; - --navbar-gap: 16px; + --navbar-height: 56px; + --navbar-gap: 16px; --sticky-navbar-total-height: 128px; } @@ -42,7 +42,7 @@ background-color: #f0f0f5; /* Light gray background for contrast */ padding-top: 0; } - + .btn-main-action { background-color: var(--kaauh-teal); color: white; @@ -60,7 +60,38 @@ .bg-kaauh-teal-dark { background-color: var(--kaauh-teal-dark) !important; } - + + /* ---------------------------------------------------------------------- */ + /* NEW: MESSAGES STYLING */ + /* ---------------------------------------------------------------------- */ + .message-container { + /* Position right below the sticky navbar (56px) with a small top margin */ + margin-top: calc(var(--navbar-height) + 10px); + } + .alert { + padding: 0.75rem 1.25rem; + border-radius: 0.5rem; + font-weight: 500; + box-shadow: 0 4px 8px rgba(0,0,0,0.08); + margin-bottom: 0; /* Handled by container margin */ + border-left: 5px solid; /* Feature highlight */ + } + .alert-success { + color: var(--success); + background-color: #d1e7dd; + border-color: var(--success); + } + .alert-error, .alert-danger { + color: var(--danger); + background-color: #f8d7da; + border-color: var(--danger); + } + .alert-info { + color: var(--kaauh-teal-dark); + background-color: #cff4fc; + border-color: var(--kaauh-teal); + } + /* ---------------------------------------------------------------------- */ /* LANGUAGE TOGGLE STYLES (COPIED FROM MAIN LAYOUT) */ /* ---------------------------------------------------------------------- */ @@ -111,18 +142,18 @@ #topNavbar { z-index: 1040; /* Higher than the bottom bar */ } - + /* 1. Position the dark navbar below the white navbar + gap */ #bottomNavbar { /* 56px (white nav) + 16px (mb-3) = 72px */ - top: calc(var(--navbar-height) + var(--navbar-gap)); + top: calc(var(--navbar-height) + var(--navbar-gap)); z-index: 1030; } /* 2. Pushes the main content down so it's not hidden under the navbars */ .main-content-area { /* Total Sticky Height (128px) + Extra Margin (12px) = 140px */ - margin-top: calc(var(--sticky-navbar-total-height) + 12px); + margin-top: calc(var(--sticky-navbar-total-height) + 12px); } /* 3. Positions the sticky sidebar correctly */ @@ -137,23 +168,29 @@ html[dir="rtl"] { text-align: right; } - + /* Flip Margin Utilities (m-end and m-start) */ html[dir="rtl"] .ms-auto { margin-right: auto !important; margin-left: 0 !important; } html[dir="rtl"] .me-auto { margin-left: auto !important; margin-right: 0 !important; } html[dir="rtl"] .ms-2 { margin-right: 0.5rem !important; margin-left: 0 !important; } html[dir="rtl"] .me-2 { margin-left: 0.5rem !important; margin-right: 0 !important; } html[dir="rtl"] .me-1 { margin-left: 0.25rem !important; margin-right: 0 !important; } /* For the globe icon */ - + /* Flip alignment for text-end/text-start */ html[dir="rtl"] .text-end { text-align: left !important; } html[dir="rtl"] .text-start { text-align: right !important; } + /* Flip border-left for RTL alerts */ + html[dir="rtl"] .alert { + border-right: 5px solid; + border-left: none; + } + /* ---------------------------------------------------------------------- */ /* MOBILE RESPONSIVE STYLES (Below 992px) */ /* ---------------------------------------------------------------------- */ @media (max-width: 991.98px) { - + /* Ensures dropdown items in mobile menu align correctly */ html[dir="rtl"] .navbar-collapse .dropdown-menu { text-align: right; @@ -165,12 +202,12 @@ #bottomNavbar { top: calc(var(--navbar-height) + var(--navbar-gap)); } - + .main-content-area { /* Reduced margin-top for smaller screens */ - margin-top: calc(var(--sticky-navbar-total-height) / 2); + margin-top: calc(var(--sticky-navbar-total-height) / 2); } - + /* Mobile Fixed Footer Bar for Application */ .mobile-fixed-apply-bar { position: fixed; @@ -199,7 +236,7 @@ - + + + {% block content %} {% endblock content %} diff --git a/templates/includes/easy_logs.html b/templates/includes/easy_logs.html index 284b600..babac0b 100644 --- a/templates/includes/easy_logs.html +++ b/templates/includes/easy_logs.html @@ -225,7 +225,7 @@ {% if active_tab == 'crud' %} {{ log.datetime|date:"Y-m-d H:i:s" }} - {{ log.user.get_full_name|default:log.user.username|default:"N/A" }} + {{ log.user.email|default:"N/A" }}
    @@ -193,14 +194,7 @@ {% if form.salary_range.errors %}
    {{ form.salary_range.errors }}
    {% endif %}
    - {% comment %}
    -
    - - {{ form.application_url }} - {% if form.application_url.errors %}
    {{ form.application_url.errors }}
    {% endif %} -
    {% trans "Full URL where candidates will apply" %}
    -
    -
    {% endcomment %} + {% comment %} (application_url comment removed for brevity) {% endcomment %}
    @@ -261,16 +255,16 @@
    - - {{ form.start_date }} - {% if form.start_date.errors %}
    {{ form.start_date.errors }}
    {% endif %} + + {{ form.application_start_date }} + {% if form.application_start_date.errors %}
    {{ form.application_start_date.errors }}
    {% endif %}
    - - {{ form.status }} - {% if form.status.errors %}
    {{ form.status.errors }}
    {% endif %} + + {{ form.joining_date }} + {% if form.joining_date.errors %}
    {{ form.joining_date.errors }}
    {% endif %}
    @@ -300,14 +294,21 @@ {% if form.reporting_to.errors %}
    {{ form.reporting_to.errors }}
    {% endif %} -
    +
    {{ form.open_positions }} {% if form.open_positions.errors %}
    {{ form.open_positions.errors }}
    {% endif %}
    -
    +
    +
    + + {{ form.max_applications }} + {% if form.max_applications.errors %}
    {{ form.max_applications.errors }}
    {% endif %} +
    +
    +
    {{ form.created_by }} @@ -340,7 +341,11 @@
    -{# 💡 2. Add Summernote JS Media at the end of the body #} -{{ form.media.js }} -{% endblock %} \ No newline at end of file + +{% endblock %} + +{% block customJS %} + +{{ form.media.js }} +{% endblock%} \ No newline at end of file diff --git a/templates/jobs/edit_job.html b/templates/jobs/edit_job.html index cfade4d..5e3fa74 100644 --- a/templates/jobs/edit_job.html +++ b/templates/jobs/edit_job.html @@ -1,11 +1,9 @@ {% extends "base.html" %} {% load static i18n %} -{% block title %}Edit {{ job.title }} - University ATS{% endblock %} +{% block title %}Create New Job Post - {{ block.super }}{% endblock %} {% block customCSS %} -{# 💡 1. Add Summernote CSS Media in the head #} -{{ form.media.css }} +{{form.media.css}} {% endblock %} {% block content %} -
    +

    - {# UPDATED TITLE FOR EDIT CONTEXT #} - {% trans "Edit Job Posting" %} - {% if job.title %} - {{ job.title }} {% endif %} + {% if form.instance.pk %} {% trans "Edit Job Posting" %} {% else %} {% trans "Create New Job Posting" %} {% endif %}

    @@ -151,26 +146,12 @@ {% if form.workplace_type.errors %}
    {{ form.workplace_type.errors }}
    {% endif %}
    -
    -
    - - {{ form.application_deadline }} - {% if form.application_deadline.errors %}
    {{ form.application_deadline.errors }}
    {% endif %} -
    -
    -
    -
    - - {{ form.max_applications }} - {% if form.max_applications.errors %}
    {{ form.max_applications.errors }}
    {% endif %} -
    -
    {# ================================================= #} - {# SECTION 2: JOB CONTENT (All Summernote Fields) #} + {# SECTION 2: JOB CONTENT (CKEDITOR 5 Fields) #} {# ================================================= #}
    @@ -181,7 +162,7 @@
    - {{ form.description }} + {{ form.description}} {% if form.description.errors %}
    {{ form.description.errors }}
    {% endif %}
    @@ -189,7 +170,7 @@
    - {{ form.qualifications }} + {{ form.qualifications}} {% if form.qualifications.errors %}
    {{ form.qualifications.errors }}
    {% endif %}
    @@ -213,14 +194,7 @@ {% if form.salary_range.errors %}
    {{ form.salary_range.errors }}
    {% endif %}
    - {% comment %}
    -
    - - {{ form.application_url }} - {% if form.application_url.errors %}
    {{ form.application_url.errors }}
    {% endif %} -
    {% trans "Full URL where candidates will apply" %}
    -
    -
    {% endcomment %} + {% comment %} (application_url comment removed for brevity) {% endcomment %}
    @@ -271,11 +245,26 @@ {% if form.location_country.errors %}
    {{ form.location_country.errors }}
    {% endif %}
    +
    - - {{ form.start_date }} - {% if form.start_date.errors %}
    {{ form.start_date.errors }}
    {% endif %} + + {{ form.application_deadline }} + {% if form.application_deadline.errors %}
    {{ form.application_deadline.errors }}
    {% endif %} +
    +
    +
    +
    + + {{ form.application_start_date }} + {% if form.application_start_date.errors %}
    {{ form.application_start_date.errors }}
    {% endif %} +
    +
    +
    +
    + + {{ form.joining_date }} + {% if form.joining_date.errors %}
    {{ form.joining_date.errors }}
    {% endif %}
    @@ -305,14 +294,21 @@ {% if form.reporting_to.errors %}
    {{ form.reporting_to.errors }}
    {% endif %} -
    +
    {{ form.open_positions }} {% if form.open_positions.errors %}
    {{ form.open_positions.errors }}
    {% endif %}
    -
    +
    +
    + + {{ form.max_applications }} + {% if form.max_applications.errors %}
    {{ form.max_applications.errors }}
    {% endif %} +
    +
    +
    {{ form.created_by }} @@ -335,19 +331,21 @@ {# ACTION BUTTONS #} {# ================================================= #}
    - {# UPDATED CANCEL URL for Job Detail #} - + {% trans "Cancel" %}
    -{# 💡 2. Add Summernote JS Media at the end of the body #} -{{ form.media.js }} -{% endblock %} \ No newline at end of file + +{% endblock %} + +{% block customJS %} + +{{ form.media.js }} +{% endblock%} \ No newline at end of file diff --git a/templates/jobs/job_list.html b/templates/jobs/job_list.html index 115565c..fbd0d64 100644 --- a/templates/jobs/job_list.html +++ b/templates/jobs/job_list.html @@ -81,7 +81,7 @@ /* --- TABLE ALIGNMENT AND SIZING FIXES --- */ .table { - table-layout: fixed; + table-layout: fixed; /* Ensures width calculations are respected */ width: 100%; border-collapse: collapse; } @@ -97,14 +97,28 @@ background-color: #f3f7f9; } - /* Optimized Main Table Column Widths (Total must be 100%) */ - .table th:nth-child(1) { width: 22%; } - .table th:nth-child(2) { width: 12%; } - .table th:nth-child(3) { width: 8%; } - .table th:nth-child(4) { width: 8%; } - .table th:nth-child(5) { width: 50%; } + /* + * OPTIMIZED MAIN TABLE COLUMN WIDTHS (Total must be 100%) + * -------------------------------------------------------- + * 1. Job Title/ID: 25% (Needs the most space) + * 2. Source: 10% + * 3. Max Apps: 7% + * 4. Deadline: 10% + * 5. Actions: 8% + * 6. Manage Forms: 10% + * 7. Applicants Metrics: 30% (Colspan 5) + * TOTAL: 25 + 10 + 7 + 10 + 8 + 10 + 30 = 100% + */ + .table th:nth-child(1) { width: 20%; } /* Job Title */ + .table th:nth-child(2) { width: 10%; } /* Source */ + .table th:nth-child(3) { width: 7%; } /* Max Apps */ + .table th:nth-child(4) { width: 10%; } /* Deadline */ + .table th:nth-child(5) { width: 8%; } /* Actions */ + .table th:nth-child(6) { width: 10%; } /* Manage Forms */ + /* The 7th column (Metrics) is 30% and is handled by its colspan */ - /* Candidate Management Header Row (The one with P/F) */ + + /* Candidate Management Header Row (The one with the stage names) */ .nested-metrics-row th { font-weight: 500; color: #6c757d; @@ -114,23 +128,13 @@ text-align: center; border-left: 1px solid var(--kaauh-border); } - + + /* Metrics Sub-Column Widths (7 total sub-columns, total 30%) */ + /* We have 5 main metrics: Applied, Screened, Exam, Interview, Offer. + * Let's allocate the 30% evenly: 30% / 5 = 6% per metric column. + */ .nested-metrics-row th { - width: calc(50% / 7); - } - .nested-metrics-row th[colspan="2"] { - width: calc(50% / 7 * 2); - position: relative; - } - - /* Inner P/F Headers */ - .nested-stage-metrics { - display: flex; - justify-content: space-around; - padding-top: 5px; - font-weight: 600; - color: var(--kaauh-teal-dark); - font-size: 0.7rem; + width: 6%; /* 30% / 5 metrics = 6% per metric column */ } /* Main TH for Candidate Management Header Title */ @@ -143,7 +147,7 @@ color: var(--kaauh-teal-dark); } - /* Candidate Management Data Cells (7 columns total) */ + /* Candidate Management Data Cells (5 columns total for metrics) */ .candidate-data-cell { text-align: center; vertical-align: middle; @@ -154,7 +158,8 @@ .table tbody td.candidate-data-cell:not(:first-child) { border-left: 1px solid var(--kaauh-border); } - .table tbody tr td:nth-child(5) { + /* Adds a distinctive vertical line before the metrics group (7th column) */ + .table tbody tr td:nth-child(7) { border-left: 2px solid var(--kaauh-teal); } @@ -170,7 +175,7 @@ font-size: 0.75rem; } - /* Additional CSS for Card View layout */ + /* Additional CSS for Card View layout (rest of your styles...) */ .card-view .card { height: 100%; } @@ -193,6 +198,7 @@ {% block content %}
    + {# ... (Rest of the header and filter content) ... #}

    {% trans "Job Postings" %} @@ -202,6 +208,7 @@

    + {# ... (Filter card) ... #}
    @@ -248,7 +255,6 @@ {# --- START OF JOB LIST CONTAINER --- #}
    - {# View Switcher (Contains the Card/Table buttons and JS/CSS logic) #} {% include "includes/_list_view_switcher.html" with list_id="job-list" %} {# 1. TABLE VIEW (Default Active) #} @@ -260,12 +266,12 @@ {# --- Corrected Multi-Row Header Structure --- #} - {% trans "Job Title / ID" %} - {% trans "Source" %} - {% trans "Number Of Applicants" %} - {% trans "Application Deadline" %} - {% trans "Actions" %} - {% trans "Manage Forms" %} + {% trans "Job Title / ID" %} + {% trans "Source" %} + {% trans "Max Apps" %} + {% trans "Deadline" %} + {% trans "Actions" %} + {% trans "Manage Forms" %} {% trans "Applicants Metrics" %} @@ -273,11 +279,11 @@ - {% trans "Applied" %} - {% trans "Screened" %} - {% trans "Exam" %} - {% trans "Interview" %} - {% trans "Offer" %} + {% trans "Applied" %} + {% trans "Screened" %} + {% trans "Exam" %} + {% trans "Interview" %} + {% trans "Offer" %} @@ -333,7 +339,7 @@
    - {# 2. CARD VIEW (Previously Missing) - Added Bootstrap row/col structure for layout #} + {# ... (Card View and Paginator content) ... #}
    {% for job in jobs %}
    diff --git a/templates/recruitment/candidate_list.html b/templates/recruitment/candidate_list.html index 7790d9d..b1ebf7c 100644 --- a/templates/recruitment/candidate_list.html +++ b/templates/recruitment/candidate_list.html @@ -149,59 +149,63 @@
    -
    -
    -
    - -
    -
    - {% include 'includes/search_form.html' %} -
    -
    -
    -
    - {% url 'candidate_list' as candidate_list_url %} - -
    - {% if search_query %}{% endif %} - -
    -
    - -
    - - -
    -
    - -
    -
    - - {% if job_filter or search_query %} - - {% trans "Clear" %} - - {% endif %} -
    -
    +
    +
    +
    + +
    + + {% include 'includes/search_form.html' %}
    + +
    + {% url 'candidate_list' as candidate_list_url %} + +
    + {% if search_query %}{% endif %} + + {# Filter Group #} +
    + + +
    + +
    + + +
    + + {# Buttons Group (pushed to the right/bottom) #} +
    +
    + + {% if job_filter or stage_filter or search_query %} + + {% trans "Clear" %} + + {% endif %} +
    +
    +
    +
    +
    {% if candidates %}
    {# View Switcher - list_id must match the container ID #} diff --git a/templates/user/admin_settings.html b/templates/user/admin_settings.html index dd5098c..11036ee 100644 --- a/templates/user/admin_settings.html +++ b/templates/user/admin_settings.html @@ -108,7 +108,7 @@ {% block content %} -
    +

    diff --git a/templates/user/create_staff.html b/templates/user/create_staff.html index b1ba2c9..9078193 100644 --- a/templates/user/create_staff.html +++ b/templates/user/create_staff.html @@ -29,7 +29,7 @@ {% endblock %} {% block content %} -
    +
    @@ -70,7 +70,7 @@ -
    +

    {% trans "Back to Settings" %} diff --git a/templates/user/profile.html b/templates/user/profile.html index eb057e3..b6ed26c 100644 --- a/templates/user/profile.html +++ b/templates/user/profile.html @@ -122,7 +122,7 @@

    {% trans "Personal Information" %}
    -
    + {% csrf_token %}
    diff --git a/templates/user/staff_password_create.html b/templates/user/staff_password_create.html index 11eedae..351e604 100644 --- a/templates/user/staff_password_create.html +++ b/templates/user/staff_password_create.html @@ -8,7 +8,7 @@ {% block content %} -
    +
    From 7ae8c16db2496b9410c8c116ab8e1f9b015d1c9b Mon Sep 17 00:00:00 2001 From: Faheed Date: Mon, 20 Oct 2025 17:30:08 +0300 Subject: [PATCH 3/6] password reset --- .../__pycache__/settings.cpython-312.pyc | Bin 8301 -> 8478 bytes NorahUniversity/settings.py | 33 ++-- recruitment/__pycache__/forms.cpython-312.pyc | Bin 26374 -> 26564 bytes .../__pycache__/models.cpython-312.pyc | Bin 58633 -> 60414 bytes recruitment/__pycache__/urls.cpython-312.pyc | Bin 11571 -> 11703 bytes recruitment/__pycache__/views.cpython-312.pyc | Bin 86075 -> 87400 bytes recruitment/forms.py | 4 + recruitment/models.py | 23 +++ recruitment/urls.py | 5 + recruitment/views.py | 79 ++++++--- templates/account/account_inactive.html | 155 ++++++++++++++++++ templates/account/email.html | 125 ++++++++++++++ .../email/password_reset_key_message.html | 39 +++++ templates/account/email_confirm.html | 71 ++++++++ templates/account/logout.html | 80 +++++++++ templates/account/password_change.html | 2 +- .../account/password_reset_from_key.html | 144 ++++------------ .../account/password_reset_from_key_done.html | 87 ++++++++++ templates/base.html | 6 +- templates/includes/easy_logs.html | 2 +- templates/jobs/job_list.html | 10 +- templates/user/admin_settings.html | 51 +++++- templates/user/profile.html | 56 ++++++- 23 files changed, 806 insertions(+), 166 deletions(-) create mode 100644 templates/account/account_inactive.html create mode 100644 templates/account/email.html create mode 100644 templates/account/email/password_reset_key_message.html create mode 100644 templates/account/email_confirm.html create mode 100644 templates/account/logout.html create mode 100644 templates/account/password_reset_from_key_done.html diff --git a/NorahUniversity/__pycache__/settings.cpython-312.pyc b/NorahUniversity/__pycache__/settings.cpython-312.pyc index ddf3afbc8f013b532a4807c1ff6aa286fef33ff7..9e1dff922b71352517ba92f971267004060c9fdf 100644 GIT binary patch delta 1200 zcmYLGT~HfU6yDv0lu*)1A*9XJP$(1#6euB-pVF290a75)B(!>4jS1hfSqMqkO{w5d z>QAc{t+hL&&KS!~W_%>_I6zxJE z{F1=VptqlOi*^LI4|5!)?!f@-r8H+r`f!f^vseC??qjgxE!rOH^wNQ!I#SHjWwU zVgg|{NfN?kHicO>jX5@hc@{7$dmBO;A0nyYekW8J1Z0c348CtTjS!A$IV`R&`Oov#`94k*_Z9t(r z9Mp2r2o%V5({yZ>d2v>p#jTQXpz#tlw1sWFj92g~@z+qqZM=>*N>;pyw{Qn{P5w6C z!MnI;aLGz*-zin$Jt}3K_e&P?+%H+!96n(4TY~RFGQe|OP30#`ZFR8?tI4dC>p`j~ zm0VsEvrv2TIkg}uqPmeu9&<*S`@KeGiB;Af8T)Op{?rH zfk40CXVYz=$aFXo(yfu;JmFF-6xFL2gR$7Ph3KSiomq&*b?f3nG_JH&PSpO$d-P)} z6;6ojNjZ~P&Sh6*Wj$GtbJ@zTj!y;czB6izQUN8d{p{>Mpq`@}e4?^*w1sb8GlDq- z@&=gZ1~FfgvT8cC@9P?zraNQU>jq@C-|MFNHEp!MtM%zyy}FP?ZcbJU|7TH@e{<~A z(>Ap~>I3ws)5QqyxQ6(&_Om%dJ#{~MJT;AwhRa7n2Fv=IS-G)y0XGX-jDT}w1 zN5;)v18!44!cruj2+aq>bBSo^%2GHQ(tbF8*HwQIiU#AM#9Vkj9FJA5dcGBE{-!## zd``VyX?w=Tx7Ko1NA~JQ_M9j7oX7WEO(t>w<~ZcE?OW^);kJF>uZ6ugYW6rI8 e?j3g0o5oKH`xfDt@R+OLcUGQw?+MnwDC<9_{c0xw delta 1024 zcmX|8OHfm16u$q>0|~?d!6=R(?+`HfAPOkTLqiN=T1%_-h)UqQUamqCZsLnRBG&q# z9bb3U&h(Cpj5}AIEW7TeE;^lVoUFQNcXbAJ-1q!f@cwhY^Zn<2?*DA$^^pIi-|tiS z`@8J@Y{f%=op}CBFf8&~IqDZH6a@{oY6z;wHZ&T7vB|+^2U`rGyQu-Kx}a^kg0_O7 zMtG?S?bHmFT9~&Yhz_pMh7h%*lY%TA@bc-hRSID{!n#VG=%z02xkL8kYE9d*lfs_eV4t(dUhJn{ z3{W2qP(KdRJ`B=+4AB6~0q%7W!!(Ey8p0tSV;F~Ngyj&TbQq%)MT|yqgkp$e3`a4J za$e*ZvvMTz_ynKgI6kvon84@w0w6PSJDxj#w5=0?JUkYdJ0KLPh-Z> zfad7)(52SB6vr$KUgJVR7<`yrbk>^VwdRrH7zODGeOW?mB)%>wVRPcZ`WSZY8S2Yjml4L7XhUt8NjaGt#L`n3dpM4Q8Q6b9&8C zDobC=K}+RIULz&-hcHOLCgHp_SrZd8*7KUK){nJH>vCzN$Bpc2xU6bkaB5obY7CLI z&eTRY=}|2)zOL;PQ&#)N2etQP$bANGo5>mJRMxy`{l0NP%voiD&cI{oabGsHE9Mg! z`BcKZ6$^BTl$8ne1*c?y$Cyv*TFH}3PS0u1CM93SOlLGRXK2}w%Urhp2=t2aV%esM zYE9JLEdE#bo9cVZx%}Ui>|pWNtzJ>zta#SH+R*)~YV%J6e^v$GcwAN96_>}aUN2wS XYW-V3X~i1)#fIX8hGo^g!ioO_$%QMM diff --git a/NorahUniversity/settings.py b/NorahUniversity/settings.py index c87beef..6be985e 100644 --- a/NorahUniversity/settings.py +++ b/NorahUniversity/settings.py @@ -132,23 +132,23 @@ WSGI_APPLICATION = 'NorahUniversity.wsgi.application' # Database # https://docs.djangoproject.com/en/5.2/ref/settings/#databases -# DATABASES = { -# 'default': { -# 'ENGINE': 'django.db.backends.postgresql_psycopg2', -# 'NAME': 'norahuniversity', -# 'USER': 'norahuniversity', -# 'PASSWORD': 'norahuniversity', -# 'HOST': '127.0.0.1', -# 'PORT': '5432', -# } -# } - DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': 'haikal_db', + 'USER': 'faheed', + 'PASSWORD': 'Faheed@215', + 'HOST': '127.0.0.1', + 'PORT': '5432', } -} +} + +# DATABASES = { +# 'default': { +# 'ENGINE': 'django.db.backends.sqlite3', +# 'NAME': BASE_DIR / 'db.sqlite3', +# } +# } # Password validation # https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators @@ -178,6 +178,7 @@ ACCOUNT_SIGNUP_FIELDS = ['email*', 'password1*', 'password2*'] ACCOUNT_UNIQUE_EMAIL = True ACCOUNT_EMAIL_VERIFICATION = 'none' ACCOUNT_USER_MODEL_USERNAME_FIELD = None +ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True @@ -197,6 +198,10 @@ CRISPY_BS5 = { 'use_css_helpers': True, } +ACCOUNT_RATE_LIMITS = { + 'send_email_confirmation': None, # Disables the limit +} + # Internationalization # https://docs.djangoproject.com/en/5.2/topics/i18n/ diff --git a/recruitment/__pycache__/forms.cpython-312.pyc b/recruitment/__pycache__/forms.cpython-312.pyc index 3f269ca58dc20bc4ef1ad547e6d056f84ab7ab89..9725eb3dbdf5f2ae28daf02c5c52b51aac2fc152 100644 GIT binary patch delta 233 zcmZoW$9UvCBkyTmUM>b8Ftq%ZVKtFglJU((^~213ObqS}DJCrpDW<86SqYOHwS_0w zGjg!nR2piUZGOkx9`BV5(gg#IP{wB-AY(d1Dnk@w3PTiAC8H+OEy0ld^z@um$K>Sv z(!3J4{GwbxP39sapu!?!5MeU;psBEOB+!T=5V3=afuWccDAB@jgN38W4x|Jmu4%iu zJoz;vW8~zxR9UVJpa>8#6nAZIO)Y1X{=%TjDDowUk&%&e2J3vTnOt8PfK0G%0KBU< AhyVZp delta 78 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 H?Am_-SWwat delta 8148 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 diff --git a/recruitment/__pycache__/urls.cpython-312.pyc b/recruitment/__pycache__/urls.cpython-312.pyc index 66d82628c22c4fc8b78543fca2e095804a892c05..0baf2e898c605d8ffde1d5b9049dcc7058d40272 100644 GIT binary patch delta 1320 zcmZ{kUuauZ9LIB$Q!r~&r)xAZO)}G)`M2r{=94Jdd=!TBQWT?XgCfdj(!uvcG>3JQwgy}#og1id6*lHcd| z=X>rw=kDk46+Az9JO>=sWyXJ7eZ1%KOW)p&-|Rf%bd;r)TV-_VmJR=Xt$hCVQ(w76 zY){HhU%Rc|+5fJy{oqh&sZ^?NZ`Oe^=gl`HEfe)Rq)zaBCE z3Wbcvp+BY9_aBABF6UOx_#-m&;*K>#vc9!n-3|wLNs{!?(G8zN4;^8SbmMZ*^OA0S z&=VQdrKg=gA8@p}KMFOy%&!u^YIaa`oVNq%un2Z*rkC}NlfH3$c9Ehb?$M1$J-#8x zcos6cn`IVCkxUB}UGA|o5S1;>fR;f&2K^=~i!MX|IPGN0I8mM~b67Wc)SlK6v+Mg}F-zw_8=zl+ zJ^=a){PxG~oD66s9vlXb^OC*HV6%<+6yj5`c9NnDzaRlzupxFIz8(ECbth%spy(7Y zT0Opx#~YAvQ6$8$GR%}SL^*@ctx#0v6;Z$XKX^^xO9Dr*oM!SAk*DzNIz=0NUEnQ& z{mnEBBuOA?T906i*90_5iqCSQE8UiUsst^)rv#6Ks~e&aZu}(apTsj2idK0;RA!v8 zsI1^kuWmj?R*!vp8R)sLpeC=LB?4*lwpl*C6s?;;lj6YydcOtkic$^c~#<7pX>+$7XXHuZ4Ktrh)=`m35rhhqM(anWZXVg8KPwH zsXRpmz9i_fplU115?PYS;>l%-O1vcKrl4@DCWtnHUxS@g74(XrC+~aNNP&zL@Jq{Y sQ*@2LCGeKOBlpv6tVqU+_@cE}8@wjyj&U&goaZY1d9Qt|ZoPi~2LHygasU7T delta 1083 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 delta 17011 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 diff --git a/recruitment/forms.py b/recruitment/forms.py index ec2186b..1794f3f 100644 --- a/recruitment/forms.py +++ b/recruitment/forms.py @@ -693,3 +693,7 @@ class StaffUserCreationForm(UserCreationForm): +class ToggleAccountForm(forms.Form): + pass + + diff --git a/recruitment/models.py b/recruitment/models.py index 4ebd9d8..0939404 100644 --- a/recruitment/models.py +++ b/recruitment/models.py @@ -29,6 +29,9 @@ class Profile(models.Model): profile_image = models.ImageField(null=True, blank=True, upload_to="profile_pic/") user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile") + def __str__(self): + return f"image for user {self.user}" + class JobPosting(Base): # Basic Job Information JOB_TYPES = [ @@ -301,6 +304,26 @@ class JobPosting(Base): @property def offer_candidates(self): return self.all_candidates.filter(stage="Offer") + + + #counts + @property + def all_candidates_count(self): + return self.candidates.annotate(sortable_score=Cast('ai_analysis_data__match_score',output_field=CharField())).order_by('-sortable_score').count() + @property + def screening_candidates_count(self): + return self.all_candidates.filter(stage="Applied").count() + + @property + def exam_candidates_count(self): + return self.all_candidates.filter(stage="Exam").count() + @property + def interview_candidates_count(self): + return self.all_candidates.filter(stage="Interview").count() + + @property + def offer_candidates_count(self): + return self.all_candidates.filter(stage="Offer").count() class JobPostingImage(models.Model): job=models.OneToOneField('JobPosting',on_delete=models.CASCADE,related_name='post_images') diff --git a/recruitment/urls.py b/recruitment/urls.py index c755962..8d3a50f 100644 --- a/recruitment/urls.py +++ b/recruitment/urls.py @@ -108,6 +108,7 @@ urlpatterns = [ path('jobs//candidates//schedule-meeting-page/', views.schedule_meeting_for_candidate, name='schedule_meeting_for_candidate'), path('jobs//candidates//delete_meeting_for_candidate//', views.delete_meeting_for_candidate, name='delete_meeting_for_candidate'), + # users urls path('user/',views.user_detail,name='user_detail'), path('user/user_profile_image_update/',views.user_profile_image_update,name='user_profile_image_update'), @@ -115,6 +116,10 @@ urlpatterns = [ path('settings/',views.admin_settings,name='admin_settings'), path('staff/create',views.create_staff_user,name='create_staff_user'), path('set_staff_password//',views.set_staff_password,name='set_staff_password'), + path('account_toggle_status/',views.account_toggle_status,name='account_toggle_status'), + + + # Meeting Comments URLs path('meetings//comments/add/', views.add_meeting_comment, name='add_meeting_comment'), diff --git a/recruitment/views.py b/recruitment/views.py index bdfb538..dbede05 100644 --- a/recruitment/views.py +++ b/recruitment/views.py @@ -26,8 +26,10 @@ from .forms import ( BreakTimeFormSet, JobPostingImageForm, ProfileImageUploadForm, - StaffUserCreationForm - ,MeetingCommentForm + StaffUserCreationForm, + MeetingCommentForm, + ToggleAccountForm, + ) from easyaudit.models import CRUDEvent, LoginEvent, RequestEvent from rest_framework import viewsets @@ -1940,37 +1942,51 @@ def schedule_meeting_for_candidate(request, slug, candidate_pk): from django.core.exceptions import ObjectDoesNotExist def user_profile_image_update(request, pk): + user = get_object_or_404(User, pk=pk) + + # 2. Ensure Profile exists and get the instance try: - instance =user.profile - - except ObjectDoesNotExist as e: - Profile.objects.create(user=user) - + + profile_instance = user.profile + except ObjectDoesNotExist: + + profile_instance = Profile.objects.create(user=user) + if request.method == 'POST': - profile_form = ProfileImageUploadForm(request.POST, request.FILES, instance=user.profile) + + profile_form = ProfileImageUploadForm( + request.POST, + request.FILES, + instance=profile_instance # <--- USE profile_instance HERE + ) + if profile_form.is_valid(): profile_form.save() - messages.success(request, 'Image uploaded successfully') - return redirect('user_detail', pk=user.pk) + messages.success(request, 'Image uploaded successfully.') + return redirect('user_detail', pk=user.pk) else: - messages.error(request, 'An error occurred while uploading the image') + messages.error(request, 'An error occurred while uploading the image. Please check the errors below.') else: - profile_form = ProfileImageUploadForm(instance=user.profile) - + # + profile_form = ProfileImageUploadForm(instance=profile_instance) context = { 'profile_form': profile_form, 'user': user, } return render(request, 'user/profile.html', context) - - def user_detail(request, pk): user = get_object_or_404(User, pk=pk) + + + try: + profile_instance = user.profile + profile_form = ProfileImageUploadForm(instance=profile_instance) + except: + profile_form = ProfileImageUploadForm() - profile_form = ProfileImageUploadForm() if request.method == 'POST': first_name=request.POST.get('first_name') last_name=request.POST.get('last_name') @@ -2068,15 +2084,17 @@ def create_staff_user(request): @user_passes_test(is_superuser_check) def admin_settings(request): staffs=User.objects.filter(is_superuser=False) + form = ToggleAccountForm() context={ - 'staffs':staffs + 'staffs':staffs, + 'form':form } return render(request,'user/admin_settings.html',context) from django.contrib.auth.forms import SetPasswordForm - +@user_passes_test(is_superuser_check) def set_staff_password(request,pk): user=get_object_or_404(User,pk=pk) print(request.POST) @@ -2085,10 +2103,11 @@ def set_staff_password(request,pk): if form.is_valid(): form.save() messages.success(request,f'Password successfully changed') + return redirect('admin_settings') else: form=SetPasswordForm(user=user) messages.error(request,f'Password does not match please try again.') - return redirect('set_staff_password',user=user) + return redirect('admin_settings') else: form=SetPasswordForm(user=user) @@ -2096,6 +2115,28 @@ def set_staff_password(request,pk): +@user_passes_test(is_superuser_check) +def account_toggle_status(request,pk): + user=get_object_or_404(User,pk=pk) + if request.method=='POST': + print(user.is_active) + form=ToggleAccountForm(request.POST) + if form.is_valid(): + if user.is_active: + user.is_active=False + user.save() + messages.success(request,f'Staff with email: {user.email} deactivated successfully') + return redirect('admin_settings') + else: + user.is_active=True + user.save() + messages.success(request,f'Staff with email: {user.email} activated successfully') + return redirect('admin_settings') + else: + messages.error(f'Please correct the error below') + + + # @login_required # def user_detail(requests,pk): diff --git a/templates/account/account_inactive.html b/templates/account/account_inactive.html new file mode 100644 index 0000000..c64e2ad --- /dev/null +++ b/templates/account/account_inactive.html @@ -0,0 +1,155 @@ +{% load static i18n %} + + + + + + {% translate "Account Inactive" %} - KAAUH ATS + + + {# Include Font Awesome for icons #} + + + + + + +
    + +
    +
    +

    + +
    +
    {% translate "جامعة الأميرة نورة بنت عبدالرحمن الأكاديمية" %}
    +
    {% translate "ومستشفى الملك عبدالله بن عبدالعزيز التخصصي" %}
    +
    {% translate "Princess Nourah bint Abdulrahman University" %}
    +
    {% translate "King Abdullah bin Abdulaziz University Hospital" %}
    +
    +
    +

    + Powered By TENHAL | تنحل +
    +
    + +
    + +
    + + + +

    {% translate "Account Inactive" %}

    + +
    +

    + {% translate "Access denied. This account has been marked as inactive by an administrator." %} +

    +

    + {% translate "If you believe this is an error, please contact the system administrator for assistance." %} +

    + + + +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/templates/account/email.html b/templates/account/email.html new file mode 100644 index 0000000..5e62859 --- /dev/null +++ b/templates/account/email.html @@ -0,0 +1,125 @@ +{% extends "base.html" %} +{% load i18n %} +{% load account %} +{% load crispy_forms_tags %} + +{% block title %}{% translate "Email Addresses" %}{% endblock %} + +{% block content %} +
    + +
    +
    +

    {% translate "Account Settings" %}

    +

    {% translate "Manage your personal details and security." %}

    +
    +
    + +
    + + {# ------------------- LEFT COLUMN: ACCOUNT MENU (New Card Style) ------------------- #} +
    +
    +
    +
    + {# Assuming a main 'Profile' or 'Personal Information' page exists #} + + {% translate "Personal Information" %} + + + {# Highlight the current page (Email) as active #} + + {% translate "Email Addresses" %} + + + {% translate "Change Password" %} + + + + {% translate "Sign Out" %} + +
    +
    +
    +
    + + {# ------------------- RIGHT COLUMN: EMAIL MANAGEMENT ------------------- #} +
    +
    +
    + +
    {% translate "Email Addresses" %}
    +

    {% translate "These email addresses are linked to your account. You can set the primary address, resend verification, or remove an address." %}

    + + {% if emailaddresses %} + {% for emailaddress in emailaddresses %} +
    + +

    + {{ emailaddress.email }} + + {# Status Badges: Using rounded-pill and appropriate colors #} + {% if emailaddress.primary %} + {% translate "Primary" %} + {% endif %} + {% if emailaddress.verified %} + {% translate "Verified" %} + {% else %} + {% translate "Unverified" %} + {% endif %} +

    + +
    + + {# 1. MAKE PRIMARY ACTION #} + {% if not emailaddress.primary %} + + {% csrf_token %} + + + + + {% endif %} + + {# 2. RESEND VERIFICATION ACTION #} + {% if not emailaddress.verified %} +
    + {% csrf_token %} + + + +
    + {% endif %} + + {# 3. REMOVE ACTION #} + {% if not emailaddress.primary %} +
    + {% csrf_token %} + + + +
    + {% endif %} +
    +
    + {% endfor %} + {% else %} +

    {% translate "No email addresses found." %}

    + {% endif %} + +
    + + {# ------------------- ADD EMAIL FORM ------------------- #} +
    {% translate "Add Email Address" %}
    +
    + {% csrf_token %} + {{ form|crispy }} + {# Teal/Dark Green button consistent with "Save Changes" #} + +
    +
    +
    +
    +
    +
    +{% endblock content %} \ No newline at end of file diff --git a/templates/account/email/password_reset_key_message.html b/templates/account/email/password_reset_key_message.html new file mode 100644 index 0000000..74b722d --- /dev/null +++ b/templates/account/email/password_reset_key_message.html @@ -0,0 +1,39 @@ +{% load i18n %} +{% load static %} +{% autoescape off %} + +
    + +
    +

    {% trans "Password Reset Request" %}

    +
    + +
    +

    {% trans "Hello," %}

    + +

    {% trans "You are receiving this email because you or someone else has requested a password reset for your account at" %} {{ current_site.name }}.

    + +

    + + {% trans "Click Here to Reset Your Password" %} + +

    + +

    {% trans "This link is only valid for a limited time." %}

    + +

    {% trans "If you did not request a password reset, please ignore this email. Your password will remain unchanged." %}

    + +

    + {% trans "Thank you," %}
    + {% trans "KAAUH ATS Team" %} +

    +
    + +
    + {% trans "If the button above does not work, copy and paste the following link into your browser:" %}
    + {{ password_reset_url }} +
    +
    + +{% endautoescape %} \ No newline at end of file diff --git a/templates/account/email_confirm.html b/templates/account/email_confirm.html new file mode 100644 index 0000000..3b802d6 --- /dev/null +++ b/templates/account/email_confirm.html @@ -0,0 +1,71 @@ +{% extends "base.html" %} +{% load i18n %} +{% load account %} + +{% block title %}{% translate "Confirm Email Address" %}{% endblock %} + +{% block content %} +
    + +
    +
    +

    {% translate "Account Verification" %}

    +

    {% translate "Verify your email to secure your account and unlock full features." %}

    +
    +
    + +
    +
    +
    +
    + + {% with emailaddress.email as email %} + + {% if confirmation %} + + {# ------------------- CONFIRMATION REQUEST (GET) ------------------- #} + {% user_display confirmation.email_address.user as user_display %} + + +

    {% translate "Confirm Your Email Address" %}

    + +

    + {% blocktrans with email as email %}Please confirm that **{{ email }}** is an email address for user **{{ user_display }}**.{% endblocktrans %} +

    + + {# Confirmation Form #} +
    + {% csrf_token %} + + {# Teal/Dark Green button consistent with the UI theme #} + +
    + + {% else %} + + {# ------------------- CONFIRMATION FAILED (Error) ------------------- #} + +

    {% translate "Invalid Link" %}

    + +

    + {% translate "The email confirmation link has expired or is invalid." %} +

    +

    + {% translate "Please request a new verification email from your account settings page." %} +

    + + + {% translate "Go to Settings" %} + + + {% endif %} + + {% endwith %} +
    +
    +
    +
    +
    +{% endblock content %} \ No newline at end of file diff --git a/templates/account/logout.html b/templates/account/logout.html new file mode 100644 index 0000000..4af2a35 --- /dev/null +++ b/templates/account/logout.html @@ -0,0 +1,80 @@ +{% extends "base.html" %} +{% load i18n %} +{% load account %} + +{% block title %}{% translate "Sign Out" %}{% endblock %} + +{% block content %} +
    + +
    +
    +

    {% translate "Account Settings" %}

    +

    {% translate "Manage your personal details and security." %}

    +
    +
    + +
    + + {# ------------------- LEFT COLUMN: ACCOUNT MENU (New Card Style) ------------------- #} +
    +
    +
    +
    + {# Assuming a main 'Profile' or 'Personal Information' page exists #} + + {% translate "Personal Information" %} + + + {% translate "Email Addresses" %} + + + {% translate "Change Password" %} + + + {# Highlight the current page (Sign Out) as active #} + + {% translate "Sign Out" %} + +
    +
    +
    +
    + + {# ------------------- RIGHT COLUMN: LOGOUT CONFIRMATION ------------------- #} +
    +
    +
    + + +

    {% translate "Confirm Sign Out" %}

    + +

    {% translate "Are you sure you want to sign out of your account?" %}

    + +
    + {% csrf_token %} + + {% if redirect_field_value %} + + {% endif %} + +
    + {# Sign Out button in danger color #} + + + {# Cancel/Go Back button with outline #} + + {% translate "Cancel" %} + +
    +
    +
    +
    +
    +
    +
    +{% endblock content %} \ No newline at end of file diff --git a/templates/account/password_change.html b/templates/account/password_change.html index b05d6df..2e5a12f 100644 --- a/templates/account/password_change.html +++ b/templates/account/password_change.html @@ -7,7 +7,7 @@ {% endblock %} {% block content %} -
    +
    diff --git a/templates/account/password_reset_from_key.html b/templates/account/password_reset_from_key.html index 2a208a9..a873279 100644 --- a/templates/account/password_reset_from_key.html +++ b/templates/account/password_reset_from_key.html @@ -7,120 +7,39 @@ {% trans "Set New Password" %} - KAAUH ATS + {% get_current_language as LANGUAGE_CODE %} @@ -153,14 +72,17 @@
    {% if form %} +

    + {% trans 'Please enter your new password below.' %} +

    - {% trans 'Please enter your new password below. You can then log in.' %} + {% trans 'You can then log in.' %}

    -
    + {% csrf_token %} - {# Display any general form errors #} + {# Non-Field Errors (General errors like tokens or passwords not matching) #} {% if form.non_field_errors %}
    - + +