From eb79173e26ca9318ee3e6aa831fbaaf8211e0a2a Mon Sep 17 00:00:00 2001 From: ismail Date: Mon, 10 Nov 2025 16:21:29 +0300 Subject: [PATCH] pre person model change --- .../__pycache__/urls.cpython-313.pyc | Bin 2919 -> 3029 bytes NorahUniversity/settings.py | 2 +- NorahUniversity/urls.py | 1 + recruitment/__pycache__/admin.cpython-313.pyc | Bin 12375 -> 12375 bytes recruitment/__pycache__/forms.cpython-313.pyc | Bin 65367 -> 73626 bytes .../__pycache__/models.cpython-313.pyc | Bin 86623 -> 96088 bytes .../__pycache__/signals.cpython-313.pyc | Bin 5962 -> 8036 bytes recruitment/__pycache__/views.cpython-313.pyc | Bin 142714 -> 155744 bytes .../views_frontend.cpython-313.pyc | Bin 47336 -> 47336 bytes recruitment/forms.py | 185 +++++++++ recruitment/migrations/0001_initial.py | 125 ++++-- ...0002_alter_jobposting_job_type_and_more.py | 23 - recruitment/migrations/0002_document.py | 37 ++ .../migrations/0003_auto_20251105_1616.py | 38 -- .../0004_alter_candidate_ai_analysis_data.py | 18 - recruitment/migrations/0005_customuser.py | 44 -- .../__pycache__/0001_initial.cpython-313.pyc | Bin 43839 -> 49966 bytes recruitment/models.py | 207 +++++++++ recruitment/signals.py | 40 +- recruitment/templatetags/file_filters.py | 27 ++ recruitment/urls.py | 14 + recruitment/views.py | 392 ++++++++++++++++-- recruitment/views_frontend.py | 2 +- templates/base.html | 22 + templates/includes/document_list.html | 149 +++++++ templates/messages/message_detail.html | 179 ++++++++ templates/messages/message_form.html | 237 +++++++++++ templates/messages/message_list.html | 230 ++++++++++ templates/recruitment/candidate_detail.html | 27 +- templates/recruitment/candidate_list.html | 6 +- templates/recruitment/candidate_signup.html | 0 31 files changed, 1808 insertions(+), 197 deletions(-) delete mode 100644 recruitment/migrations/0002_alter_jobposting_job_type_and_more.py create mode 100644 recruitment/migrations/0002_document.py delete mode 100644 recruitment/migrations/0003_auto_20251105_1616.py delete mode 100644 recruitment/migrations/0004_alter_candidate_ai_analysis_data.py delete mode 100644 recruitment/migrations/0005_customuser.py create mode 100644 recruitment/templatetags/file_filters.py create mode 100644 templates/includes/document_list.html create mode 100644 templates/messages/message_detail.html create mode 100644 templates/messages/message_form.html create mode 100644 templates/messages/message_list.html create mode 100644 templates/recruitment/candidate_signup.html diff --git a/NorahUniversity/__pycache__/urls.cpython-313.pyc b/NorahUniversity/__pycache__/urls.cpython-313.pyc index 2aebbd2def23fa0d757ac8269b4f0f2c9b0e67a2..3a0fc54dd607c36082168d8cd6912695667e29cd 100644 GIT binary patch delta 343 zcmaDZc2!*CGcPX}0}vGc70A5F$-wX!#DM{EDC08^%SMg+OpJ_^Ihb7;-6s1nOIXBk zC@}=<#4rW9!BivYVBKI*OJ;qcB9$1G7=9%Nuv)zsPM{9`$u-Qf+#qpopg2pA*W?Gx zqDnppy)ag=fhChJF9QSE3~r^#ADP8ffa(Ka@(3ECGTl(qXtNm0CPpLq#DapH%;dz9 z%=|oko8p|(bSn^Hr(c|zo>y9+e@h@aF)t-EC9xzm9wM~)IO|D9M$OF=*&P{~ilir> z=ji7)1zN%g#Kqi9lQTJ=^J}eey{_YQQOD_mXY@sun91H;n>Y-m_?a5GKUhp=<&I-9 H1}X*smLf^- delta 237 zcmcaA{#;DsGcPX}0}#|`{L853WMFs<;=q6yl=1l$^G1#POpHvEIhb7;T_*c6ONi+U z7AeOl$M7pL#BeAv1nb0b0!iJ;^O$92K;qm$ah4ztm`QMY@C)nGkKCS6_z2CxYb zl|FD4FvjG+%;J0qmFfDL2AeHdHZg9NWjn#hsImDOyCdUd9nKzZ6QB-8ATIvSIQcN= b^U3?T)^g}e@-sDXe=wU|%pJ#K1e62-C`>J^ diff --git a/NorahUniversity/settings.py b/NorahUniversity/settings.py index fb2b574..486c536 100644 --- a/NorahUniversity/settings.py +++ b/NorahUniversity/settings.py @@ -193,7 +193,7 @@ EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" # Crispy Forms Configuration CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" -CRISPY_TEMPLATE_PACK = "bootstrapconsole5" +CRISPY_TEMPLATE_PACK = "bootstrap5" # Bootstrap 5 Configuration CRISPY_BS5 = { diff --git a/NorahUniversity/urls.py b/NorahUniversity/urls.py index bf381ce..93b02be 100644 --- a/NorahUniversity/urls.py +++ b/NorahUniversity/urls.py @@ -26,6 +26,7 @@ urlpatterns = [ path('application//', views.application_submit_form, name='application_submit_form'), path('application//submit/', views.application_submit, name='application_submit'), path('application//apply/', views.application_detail, name='application_detail'), + path('application//signup/', views.candidate_signup, name='candidate_signup'), path('application//success/', views.application_success, name='application_success'), path('api/templates/', views.list_form_templates, name='list_form_templates'), diff --git a/recruitment/__pycache__/admin.cpython-313.pyc b/recruitment/__pycache__/admin.cpython-313.pyc index dc7eec901aba395f7b670873db3e42cd03005424..d507901d5b2756360863f2f0e1dc726e68c73f53 100644 GIT binary patch delta 20 acmcbfa6N(hGcPX}0}vQ36WGY@V*mh0fd#Pu delta 20 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 Udu4UdOhTeN+&@V0m(B4108nHMsQ>@~ delta 12112 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 XPhR~0Cu@sg9z{UF&t9D&P164#A92iA diff --git a/recruitment/__pycache__/signals.cpython-313.pyc b/recruitment/__pycache__/signals.cpython-313.pyc index 4c2eb87bd8af6440f14b11323e7c6c11c510ff82..f8ef1b1b46c9de7b9dff60cb03e35396342dfb95 100644 GIT binary patch delta 2619 zcmb7FTWlLu5WQ=!?cLaGJMr7i!+A7~Q<6St)0RgKCV8dQkNQnjiCLj6GP7lleR<)=kLD&hmhv{J&hQ9-JZ_)D8F_<_0CcH&t4aAnWV zoilg#?%XqTf9ieIZ(ow6I)dY)NA>AD&z`gU^QSpN&XX94aS;NgCkGtP4H1KE1Y?NW zj1gWofr;sS#4KCD!gNzakVO!gZbo|@)G^%>vC1~EFSJhq71|bS2oh*7 z<9>#_s_>5LSH|2`h-qz#3wyLZT!yn~H@Lka-L@wU=}c;8O35TohB@7yQgZQ0Re|_K zc0?Kf#*j1yn(!-iA)}ng#bGj|TR=IYByuYFwbQ1f-d2k8YT}rpn{kDbQ^F>2Yew_? zrl%2dUO#Kz#&O?iKUmt$37L=~PMa0o+Cz)f&X?0iqLzxb@{DmqTvX5;LaW1CvBnI{ zHXt->2Zb}DSvP~CPEIJ=BcZjs6TN^23iIHmdM_0lsMv@?rEd%2fX&(lv9bACoIXeG zub?Q9-z<&~@*m_co|tRdjz29aZZwB>6!Ng;`USDs$oaKzZBcVS`oe%_m%a?{r0R=Q zyhO#zRFvVLr7Z*PblyRQ4FydJ)mLvxmy+2`E|JW|)m$Q_s3vrwJEU9OXGT|c%JUHk4@2WR;~pxNq5()3h@85K&wrPnd!c`{_^ zDkF)@n%vN;4LLVymz?&^2bUA}UrCBem3S*p?TFLMBc<)yfZ*Sr;fMHW{R&#q4!SB@ zrQcN293r^FqkYadIuGm|UoI1jNR6#|)8MH!gUa#HC@b<1aty0HlmskaW#pOA-^Nf+ zNH>?vVI#!xJwVGr7g-C)ojjt1ZLq>UR$_kYB~n2-u3JmtSkoviwyD@d=vm~K4+EZ} zt~`x;^*>7iPM|||0Z@NWY2WeE2IJ*@!zskh)6;zql>+(0Vt*jmr>#@gS?{K6T{qT$ zz5ZI$O!9WuoqW&tJ-1tC-LKsfq7NLd>C;oE=N#*bj&<{%rVEG89hz?lUg$m7JMV2? zv=C?4BH^8NXZXcBB1&^YpeO|H1vlRfZn-CHofmA=;*@ySI`3~hE6oeeX=zIO$g$`l zf`c(;6=7&{=wY~)cGWWGQZ-}b|IZjo7K~gou%|kWZZCojH3&{CBy%Ild@gf_uc1ny zLKPpSN)pR4J%apLp$VuMMHiQmu$eJMuX`&EYA&8hOenfIo+zt~1F##Hz$A*WRLdVq zuoeEmF&doDtK*X?c!xsoQo+_!PB7-cNz`iDQNO&QWo8u6?J{KsRaP^j=gR0;V^_zn z9GYpL8NHRcnVEfl->iG^p0J-WBVS7mU(1}YyXfmia?E+Vir%gYSt^`qU6dGSEQ~Ww z5@@O>hOa`5aHnn=&!$q?@n8aXrHdnPCo-vQ@5o`GO-6UHx%Q!FrV;4r>8`Q^y&E8X zxHmDG8wHm(;0@$iCDL0J=NIR2j7f9~{S&zntBsoWtMUq5IU|w|2iNRmQ;Kl8C z#g2mccZ=t)#aG~e)n>if-HV0*x0id;XW;g8kIlqTcP4!C)gl*uY_M|vB_lC(FH-HX UzXa_qa-EM2wi2|CX>7;;0-9Gm5C8xG delta 904 zcmZXSOKTHR6vywKnM`IfnY^0BCQb9GsSv9nE%rrg)rCT5Krv&xF%m*EjVUp)CyBUg zQ5S+6>!s39pcD!&f?vR8H@+5ulwd_&xbv|s=)Kbj0T07}{`dUuIrlO1bzwj4`mL%C zMC0llU;Z++_GV1%}jfefr8U~f*x8V6jQd0yu=0R+nnx=j;7w7gBXYZ6G77inGw z+46SXp(&tPUecYK3aaI0-KDv~O})cVbdTl*ujT`vHUL|@Ds7oV+4R=Cz{cPt-34n1mPa>Tg25zhI(YcBJMsC$sic+(V#^=eKcCaDergMpX}i^ zERqx4Vr!FI;X^|-*O98`{YD;|)s7v^yJn$Lhafq!tp{U_3iZN0vm+MGirFwzHt>;$ z;v?HQMedf;zVT-j$gznyZCorID{U3MI1+*C@N(3b_9W$`q@eW^#kX{Ns3uT=!q`{MYfN ze=Kfw^jB+*@@jdd&?wic`Q!FQDAESa)-V4l?4F=D73hP4j+ zBEW9N+5y~Rj+O2rU}a#fAkE*Y6`K`v0oG}b{fhNHDnEFP@d0vmQKE~IU3Bsr)6p(U vchMM4enQJ_w0tOg+H&}V9NwAvC?_|?&sct(+R@&V*U{U`PcDQPv9;7+!o9x- diff --git a/recruitment/__pycache__/views.cpython-313.pyc b/recruitment/__pycache__/views.cpython-313.pyc index bc381351171250b8f6a2970c282ef72a2dcbd82f..719d7d9758416af49394678535c06fcc1eb26a6f 100644 GIT binary patch delta 38637 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 coGIcWsiHE3$r7TljsO4v delta 29464 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 G{r>|=t{6@L delta 14799 zcmc&a3tU^(`MEcQ5JE@-gb)aC%A>T<2c=+Zh4SiympOr!77HOsX($A|&Y%-RyE!ukBf$RRVcEQ1CW}5;s6xIK!tLoDdihE zkyCU?PTE%W-h?>3ORiAskiL`$PB8&cEQ+HbL#vi7EZ&mAL=1jgX5e<-pjV)H#3Lh0 zC{+Lt6G+n-XVfI3BxI&6k^wR{!>CC?sVI#?(gD(bnK4y?G8m*#i84_ZN-pHki~>2z zE|p8d=lnkiuT6pl<)XY&IV@-zON}%oF?bVdDz$ z9)(d|M0aQb^yiR%dNEo^DN0&RAvL;yXjEGY(_coXT0|+q1d` zrPq^5TLyxbqovd`nO2ONLR5h&gVmy~0<3BgtA?p6X&JzlGgx5+T7eXExU;r>Wyt0H z7Y$Tji--($sGdsSK;<%0Xd}9kD&I1-Z5o8EsENXw0nekRZlhfV^s7+|r4M+MY7O1< zwQQmKRz#F^6oLOx5TjKU-3$~UeYyhOf^KEf7sjEL z=(dp7yF27|2bB6>4N>2ri!o}-(Cwn7?qSQ*&VvQqf%a0hLZqFFk1B+zLEi~z5Xsd0 z#K`+y#z?yn-6b;GFKX7H{+@_)H{gICG(5To9iUw94Vvse(Jk&5u@q=n#5yQJ9uOgi z7(}Z;hegPPFk1;p5bB4}!_+>GP~J(&M`5>l^ay&C>|UWhgo8bHDK-9mDwa|611Tvy zP9gDeV4Wjiolk(gPtp~P(gBm^DM0-pg**)qqCo|EM$8|9jB@Pki~_oOR)jo9b+bni zAKjXao<}cGRxgUok4wy70tiV?W9Vg(@Pstok3`6i8IJZ9^gklxRbalDCh$~}9dV-> zB7!Ea$g(szKe9GDiC#mmlj#d}=qKonkXi1hmvT466s`T4v>Q^SQ~z8{P*cH2fjr`x zy>!j(`UJl9tVJh;T=aM=Ep5!`7bN09i2o&e6a6Yg-kP|SE1#r3y;rSNouaPj6Yb$G z$sT?U5XkK@;5~0cet(CCg5ONL^vV$XeVQ#jiY*cj80F5`7d@RDFCYmHr7;G6}bT5ToQDCCHydh*(lZgUTz=r_@(jQDuaf z>=%((F|J%z}hcCsFFBql^inj0L2T zqBu-Q<0Mi;fHWSEjnbqEL8K%`Opzu^q)7p&)+|9G977s{&%i%qf z<~lR_7~1*p%qrl6O3L^s0L_M-lulJ(4C1M(kwbw}1C&fpLjVkvn;P*v1i*`*hzw_) zh#JYth<(GUNS_4lLQ)@6=o|_)X_v8c1BEfOkH>qG6sCDpEA!DjpeiCxK{4PoL9CKu z6jO|a=U|kC;9D93b{XT;0qhr1%ch46SfiyiH{|gIg$Q?6R_IXCE}xE$9&30c@`w4B z(5VwSw>{0@8$K~MEw3GobE70iXC9NPa z1;$s>?W>gps$-;P7^+7}t+PX|0+%fTr^-}l8YHqtMn-)4%Cl5TvO86j7P0J3mu&@f z2$FgQ;5SLjZe~p40JsXy7^2wFTRoLJwSi4+0mgIa1w{b1W(rSFmbO;1+SUN$tIlG) zE-=s*P!!O%!vK_Kv9Cbe#)=RsIGmOMo@BBE+(8xSlytD3N(43$+Xw=9Sz7G;VlUnCT^9nNsylVJNSLQGum>qW*q(0%!wM zXsMe3z8Rh^@N7K`XAp1}lgSiA#Fm4LN-@yoYy*Pr@a!OAj?RA#^mc|Qs^TMIU{@f} z1zjHn!rXs$qKZ8$#KCmrfG9eV<~nv<0_gPtsP+a4`Yl*&3D%j6>KnyF5+uiIZna2a z7jLzI-%SjUCbVx$`G*`e;ZBS~Z;_z40(5Lfybj22W79xuHw7AFNs{`Gl!|ic4wWS& z#oi9^J@DK?EQmXZa9Y~s(m7T z`}v0qkzW7ZDSD~06KU_d=-ft z9g=e~!~g@?uVHu&N`=J()MZJ~)*NC98-@=vASpH;gziJ|P)89kxVq};A?1VSjVT40Z!o{12~{*>_RfAUZ!rz z60S)@?(f(&DJz;xu|YSDAO@V|Ez?UX|B>jjqOgjfJ98@Rj|0M9iU|4&v$j~0kHvci zXuS$+pjk+Ml8GA)z}M&ji5x6LEU!3JbV9!aG8&i)mC$+}o}a*TPKiwN#v7M*)jx$* zi^Z(*XHXB3QupWZc*qjr%gQK|z6{#q?EW2Ezo1m6SWGV5JaypTLhpCeIq-Xzc4x#ROAcA+`|Pw0t>0guERG|^?gvbH z(E1Q`Ld#CgM-uE~&>kGuN%V~U1aSTU&mXBZvs?@Jb?1~n@s<#GEX)L2Kn?^Bp#Qqgf_OJj3tqWHi6j=<-fc!Vg`TYC5Db{}n zoPV%8ENJ}`utNkJ5!vt+pnNR`QuVok^qYX{gE9|~WWW=yU>b}XxCx=_<;DAy_>>wR z?o)VjpMnZNWjrEbktSy82sPHAFoi?n=8^KO#7%!BrC0Zh6nYg5ld#6hfI#_sp2pQo zYSh^98pwXf^^JE7@?M`B-5De^e%x>eLsRx-@uBSh{0+;i5 zqIx2<|*(mU=IebB?ez87RN#LaN1kVDZV_>#{IKMuvkoa&hJn-AN1kIz+l3=L9knE(;QU)y~5#q9fu;5!h zV(5!P?o`0{|Ffg-*|&Qz-C~fr1gd^xEDyiVlg(Q~ix(bU0h%S*4)hHL4E$6s!j}R? zh@d`m8bwwBX{8wCc~ljec+LfgtHsD10gP(kSte>ZK}XfO96&*;PhCo(D;N|mw0X2L z@JAVzF0yHgTE;?QFileII))AJdiIwmB3=Wd%(Sf2;E_BG<_hz^O8GTi6pzi@90HH%Z`G7ul19-Hs^irc#l#|J z%f&EFhpCKfE{I3g!q&X@JiKnQ$FZvb-a3~!=T&FzDcsnBE{4lZrZ$>>+s~tCHp1}8 zJO(O{Z5q4|Nf%Qqv|kJ}nH+aNr+RZ-6qjCzP+aFUxa8W9?r!oCz=)u@ofpP!FfL>} zyy0v-VIlNg0tBwkuH22hOy*P7xjF^gfUDR2kp`}#t@s0rlhfilv=-h+Q7*j4QAxNK z#)KHGvvzaoc!#waz`wN4*cn5>vGDRKd;18JeqYowm*8@DmUlYc_Q4@F`=-^~dYpN3 zf&878kV;;Jp)cCr>mIP#2ip3aLO)3GT>uV6S1@2&BLxDLnGjG?N~Li2*j(KoeJzt^ z%kucZs87+iq1WyFD2}jJZgF<>y9S(joM6Vv&io})nCW!X-n+>?APjy4Dv$-w;0tqa z>hAU_Z4QUv?C+l~SY13m(!9(N7^5;U1gu!~o;r(2 zA#(X*)f(M7m|DDU_0ie2fCSQmY`^t$ZMeu1)K>%*lj12Lb=}4dIlZ7IUqSFvW;Ve7ZF?nNCVkDN>LIfE<_FYK^l9pAvWh&jR@P z6ph4G@ZGk1)KprgdtBBrBS`HTxUZv^%f+WV7BMJgpFWyxkLS2pe7Peh#up_xyKMtb zN1Gcg+{X{}VzsS#2afJ^ z2#-O}rvR(zbb`@PWzvbMuGs82%9R=OIHeNqg%5i@j>}yMiRTzh(B9#G*W8jP*<9h( z;9xM>D0GL^M9Q=6l+7DV{A<@x%rQnBVR3dj?XX9}vv@<-o!Gc>$-*&lh_2CX>lR*S zfN&PCgcHye2-1*-#j`Z(tN6gi;*z{@7IV(sTS7wPL8P>2B!Cc*kPR>V&c^tiL`Gkv z!`WvO26~+C0bfK{ZwCzrdEu}Fs_LfN+BWO*x~d^nHAJG>11<=h0BriZD_f* zYDn4Oo=t-;?+dq7)iqeF;Op$^g)j_|Wi3lB+U1qd80-*S4&hCrlize#FxSq&xjh5S z9H=W0?fN1&+q#MI_X_>^@g5WBz_0bp4Nrz4A!Dz*imSoZ?n>kPMAESHY!4rFiw?$o zi%`9bmA%`!EPO-n7Ut5_R*P_W-G&996SU0x>>laR7err$6A;REYc=^g7=R=Jwf>P(xj@ECR$0R*_18iNZes4vO;i@sF~I=2=WIUX*Ur{i$C3dU+N#BNo>>J+tb(WB;K3I z!Qe`GLDoyakL`Gw+lt-SIL#y|0A_^Xgp3ZQhYuW{wS+bJ(`)X}QVCAGtItKeP2=tz zaIJUQX~om;Q(2})@PVBl>X=~>8CVh;y>nL+7f$LMsC_=YwpuOuvXFzzuB#5p6-D@t z>#~>$(dE#!9>A|$_e2oUE`06v#oRrk$FASYElMNH(URrx0*(0EO>WoKo1ix6?Su^J z6nv4eb7XH|P2h-E6EO_r_3EhMMmfioV$)4at`NciT$m(9f2^O}}Ip_;_blKdUy}k&C6E+TtLZ7mt z995K8R{0`Om9?!NLYyxG_~EphuToGO#5-=D6REAUxd*Mi@W#5E37?FJ z!IAs&@%SzIe3c4+bITd>`RvvMW;7P(vD&<*4v)@0sZSp+p2(a(o;m+m*2(#vz4sV* zdJ}6rx@D94g#FnQi8IF&XO6^;Wq1>-Ji6*hed7M=`y1|V7|HUQ7kYFhXJL8DJG_Z@ zkIn&T9`mdT^L(#){)D;AYc3lb@T_j}v^zZJGLPBm(XFSPCd{+O&9g>|jyb&M3XiVR zZ_>m?r}2oG?N+y#t_b)r63^PQZNjIn>{R_yl{O#Q6m$xc8m5rm_GJaICyGd>+ zhtTRpm_Nxf-* z@kCPocvAjI*U7Ekq}3i>%cMSYxOrkm$@q+tF@vYc;hn+uA@4}>ME;WT{3T7tAfP(OeQPpAj<0Dujc)ux7>R> z7w_=a?}UXn@HVpkY&xvB`5+|NM7JgUNDhd=}oRYS>$P6<4LacB(L@8 zTK%bcc*g@Bz~l4-CV2n-0dt;bw$(Fxqes{6pFwzJ%VIKzt0%IG#mRA+xX(uSJ*wtZb_TUZ;-io4 zQ8h&}){%JQ<2%B=X+$&liQ5vnQ&=@pr*g94t&zBGZ@z!$-8)CDuSI!r;Zp;#Y?35BOtLbH61(xbk(r~XpL&K<^)g7k1`j{o z&V7ctXXe6t{xe%)y2qY5ZfMX@imjT^Vm9i5~Sn>*rK!qbWhPcJ%e;^r5#R2x|j3Y_a-%vANW-jEhQ4!v!xw^WDUf?kD=(yh>8^=oO&XWJBcqlk<2}dSD#4dM)1%HGxr9*>%^ROhX^Ce z?G&_p5sQ0z9h 'resume.pdf' + """ + if not value: + return '' + + # Convert to string and split by path separators + import os + return os.path.basename(str(value)) + +@register.filter +def split(value, delimiter): + """ + Split a string by a delimiter and return a list. + This is a custom implementation of the split functionality. + """ + if not value: + return [] + + return str(value).split(delimiter) diff --git a/recruitment/urls.py b/recruitment/urls.py index 90e379e..b1a0ccd 100644 --- a/recruitment/urls.py +++ b/recruitment/urls.py @@ -560,4 +560,18 @@ urlpatterns = [ views.compose_candidate_email, name="compose_candidate_email", ), + # Message URLs + path("messages/", views.message_list, name="message_list"), + path("messages/create/", views.message_create, name="message_create"), + path("messages//", views.message_detail, name="message_detail"), + path("messages//reply/", views.message_reply, name="message_reply"), + path("messages//mark-read/", views.message_mark_read, name="message_mark_read"), + path("messages//mark-unread/", views.message_mark_unread, name="message_mark_unread"), + path("messages//delete/", views.message_delete, name="message_delete"), + path("api/unread-count/", views.api_unread_count, name="api_unread_count"), + + # Documents + path("documents/upload//", views.document_upload, name="document_upload"), + path("documents//delete/", views.document_delete, name="document_delete"), + path("documents//download/", views.document_download, name="document_download"), ] diff --git a/recruitment/views.py b/recruitment/views.py index 4e3ef39..e333af2 100644 --- a/recruitment/views.py +++ b/recruitment/views.py @@ -1,13 +1,12 @@ import json +from rich import print from django.utils.translation import gettext as _ from django.contrib.auth import get_user_model, authenticate, login, logout from django.contrib.auth.decorators import login_required from django.contrib.admin.views.decorators import staff_member_required from django.contrib.auth.mixins import LoginRequiredMixin - -from rich import print - +from .forms import StaffUserCreationForm,ToggleAccountForm, JobPostingStatusForm,LinkedPostContentForm,CandidateEmailForm from django.views.decorators.csrf import csrf_exempt from django.views.decorators.http import require_http_methods from django.http import HttpResponse, JsonResponse @@ -46,6 +45,7 @@ from .forms import ( AgencyCandidateSubmissionForm, AgencyLoginForm, PortalLoginForm, + MessageForm, ) from easyaudit.models import CRUDEvent, LoginEvent, RequestEvent from rest_framework import viewsets @@ -87,6 +87,8 @@ from .models import ( AgencyAccessLink, Notification, Source, + Message, + Document, ) import logging from datastar_py.django import ( @@ -102,6 +104,7 @@ from django.db.models import FloatField logger = logging.getLogger(__name__) +User = get_user_model() class JobPostingViewSet(viewsets.ModelViewSet): queryset = JobPosting.objects.all() @@ -3480,38 +3483,39 @@ def portal_login(request): user = authenticate(request, username=email, password=password) if user is not None: # Check if user type matches + print(user.user_type) if hasattr(user, "user_type") and user.user_type == user_type: login(request, user) - if user_type == "agency": - # Check if user has agency profile - if hasattr(user, "agency_profile") and user.agency_profile: - messages.success( - request, f"Welcome, {user.agency_profile.name}!" - ) - return redirect("agency_portal_dashboard") - else: - messages.error( - request, "No agency profile found for this user." - ) - logout(request) + # if user_type == "agency": + # # Check if user has agency profile + # if hasattr(user, "agency_profile") and user.agency_profile: + # messages.success( + # request, f"Welcome, {user.agency_profile.name}!" + # ) + # return redirect("agency_portal_dashboard") + # else: + # messages.error( + # request, "No agency profile found for this user." + # ) + # logout(request) - elif user_type == "candidate": - # Check if user has candidate profile - if ( - hasattr(user, "candidate_profile") - and user.candidate_profile - ): - messages.success( - request, - f"Welcome, {user.candidate_profile.first_name}!", - ) - return redirect("candidate_portal_dashboard") - else: - messages.error( - request, "No candidate profile found for this user." - ) - logout(request) + # elif user_type == "candidate": + # # Check if user has candidate profile + # if ( + # hasattr(user, "candidate_profile") + # and user.candidate_profile + # ): + # messages.success( + # request, + # f"Welcome, {user.candidate_profile.first_name}!", + # ) + # return redirect("candidate_portal_dashboard") + # else: + # messages.error( + # request, "No candidate profile found for this user." + # ) + # logout(request) else: messages.error(request, "Invalid user type selected.") else: @@ -3949,6 +3953,316 @@ def agency_portal_delete_candidate(request, candidate_id): return JsonResponse({"success": False, "error": "Method not allowed"}) +# Message Views +@login_required +def message_list(request): + """List all messages for the current user""" + # Get filter parameters + status_filter = request.GET.get("status", "") + message_type_filter = request.GET.get("type", "") + search_query = request.GET.get("q", "") + + # Base queryset - get messages where user is either sender or recipient + message_list = Message.objects.filter( + Q(sender=request.user) | Q(recipient=request.user) + ).select_related("sender", "recipient", "job").order_by("-created_at") + + # Apply filters + if status_filter: + if status_filter == "read": + message_list = message_list.filter(is_read=True) + elif status_filter == "unread": + message_list = message_list.filter(is_read=False) + + if message_type_filter: + message_list = message_list.filter(message_type=message_type_filter) + + if search_query: + message_list = message_list.filter( + Q(subject__icontains=search_query) | + Q(content__icontains=search_query) + ) + + # Pagination + paginator = Paginator(message_list, 20) # Show 20 messages per page + page_number = request.GET.get("page") + page_obj = paginator.get_page(page_number) + + # Statistics + total_messages = message_list.count() + unread_messages = message_list.filter(is_read=False).count() + + context = { + "page_obj": page_obj, + "total_messages": total_messages, + "unread_messages": unread_messages, + "status_filter": status_filter, + "type_filter": message_type_filter, + "search_query": search_query, + } + return render(request, "messages/message_list.html", context) + + +@login_required +def message_detail(request, message_id): + """View details of a specific message""" + message = get_object_or_404( + Message.objects.select_related("sender", "recipient", "job"), + id=message_id + ) + + # Check if user has permission to view this message + if message.sender != request.user and message.recipient != request.user: + messages.error(request, "You don't have permission to view this message.") + return redirect("message_list") + + # Mark as read if it was unread and user is the recipient + if not message.is_read and message.recipient == request.user: + message.is_read = True + message.read_at = timezone.now() + message.save(update_fields=["is_read", "read_at"]) + + context = { + "message": message, + } + return render(request, "messages/message_detail.html", context) + + +@login_required +def message_create(request): + """Create a new message""" + if request.method == "POST": + form = MessageForm(request.user, request.POST) + if form.is_valid(): + message = form.save(commit=False) + message.sender = request.user + message.save() + + messages.success(request, "Message sent successfully!") + return redirect("message_list") + else: + messages.error(request, "Please correct the errors below.") + else: + form = MessageForm(request.user) + + context = { + "form": form, + } + return render(request, "messages/message_form.html", context) + + +@login_required +def message_reply(request, message_id): + """Reply to a message""" + parent_message = get_object_or_404( + Message.objects.select_related("sender", "recipient", "job"), + id=message_id + ) + + # Check if user has permission to reply to this message + if parent_message.recipient != request.user and parent_message.sender != request.user: + messages.error(request, "You don't have permission to reply to this message.") + return redirect("message_list") + + if request.method == "POST": + form = MessageForm(request.user, request.POST) + if form.is_valid(): + message = form.save(commit=False) + message.sender = request.user + message.parent_message = parent_message + # Set recipient as the original sender + message.recipient = parent_message.sender + message.save() + + messages.success(request, "Reply sent successfully!") + return redirect("message_detail", message_id=parent_message.id) + else: + messages.error(request, "Please correct the errors below.") + else: + # Pre-fill form with reply context + form = MessageForm(request.user) + form.initial["subject"] = f"Re: {parent_message.subject}" + form.initial["recipient"] = parent_message.sender + if parent_message.job: + form.initial["job"] = parent_message.job + form.initial["message_type"] = Message.MessageType.JOB_RELATED + + context = { + "form": form, + "parent_message": parent_message, + } + return render(request, "messages/message_form.html", context) + + +@login_required +def message_mark_read(request, message_id): + """Mark a message as read""" + message = get_object_or_404( + Message.objects.select_related("sender", "recipient"), + id=message_id + ) + + # Check if user has permission to mark this message as read + if message.recipient != request.user: + messages.error(request, "You can only mark messages you received as read.") + return redirect("message_list") + + # Mark as read + message.is_read = True + message.read_at = timezone.now() + message.save(update_fields=["is_read", "read_at"]) + + messages.success(request, "Message marked as read.") + + # Handle HTMX requests + if "HX-Request" in request.headers: + return HttpResponse(status=200) # HTMX success response + + return redirect("message_list") + + +@login_required +def message_mark_unread(request, message_id): + """Mark a message as unread""" + message = get_object_or_404( + Message.objects.select_related("sender", "recipient"), + id=message_id + ) + + # Check if user has permission to mark this message as unread + if message.recipient != request.user: + messages.error(request, "You can only mark messages you received as unread.") + return redirect("message_list") + + # Mark as unread + message.is_read = False + message.read_at = None + message.save(update_fields=["is_read", "read_at"]) + + messages.success(request, "Message marked as unread.") + + # Handle HTMX requests + if "HX-Request" in request.headers: + return HttpResponse(status=200) # HTMX success response + + return redirect("message_list") + + +@login_required +def message_delete(request, message_id): + """Delete a message""" + message = get_object_or_404( + Message.objects.select_related("sender", "recipient"), + id=message_id + ) + + # Check if user has permission to delete this message + if message.sender != request.user and message.recipient != request.user: + messages.error(request, "You don't have permission to delete this message.") + return redirect("message_list") + + if request.method == "POST": + message.delete() + messages.success(request, "Message deleted successfully.") + + # Handle HTMX requests + if "HX-Request" in request.headers: + return HttpResponse(status=200) # HTMX success response + + return redirect("message_list") + + # For GET requests, show confirmation page + context = { + "message": message, + "title": "Delete Message", + "message": f'Are you sure you want to delete this message from {message.sender.get_full_name() or message.sender.username}?', + "cancel_url": reverse("message_detail", kwargs={"message_id": message_id}), + } + return render(request, "messages/message_confirm_delete.html", context) + + +@login_required +def api_unread_count(request): + """API endpoint to get unread message count""" + unread_count = Message.objects.filter( + recipient=request.user, + is_read=False + ).count() + + return JsonResponse({"unread_count": unread_count}) + + +# Document Views +@login_required +def document_upload(request, candidate_id): + """Upload a document for a candidate""" + candidate = get_object_or_404(Candidate, pk=candidate_id) + + if request.method == "POST": + if request.FILES.get('file'): + document = Document.objects.create( + candidate=candidate, + file=request.FILES['file'], + document_type=request.POST.get('document_type', 'other'), + description=request.POST.get('description', ''), + uploaded_by=request.user, + ) + messages.success(request, f'Document "{document.get_document_type_display()}" uploaded successfully!') + + # Handle AJAX requests + # if request.headers.get('X-Requested-With') == 'XMLHttpRequest': + # return JsonResponse({ + # 'success': True, + # 'message': 'Document uploaded successfully!', + # 'document_id': document.id, + # 'file_name': document.file.name, + # 'file_size': document.file_size, + # }) + return redirect('candidate_detail', slug=candidate.job.slug) + + +@login_required +def document_delete(request, document_id): + """Delete a document""" + document = get_object_or_404(Document, id=document_id) + + # Check permission + if document.candidate.job.assigned_to != request.user and not request.user.is_superuser: + messages.error(request, "You don't have permission to delete this document.") + return JsonResponse({'success': False, 'error': 'Permission denied'}) + + if request.method == "POST": + file_name = document.file.name if document.file else "Unknown" + document.delete() + messages.success(request, f'Document "{file_name}" deleted successfully!') + + # Handle AJAX requests + if request.headers.get('X-Requested-With') == 'XMLHttpRequest': + return JsonResponse({'success': True, 'message': 'Document deleted successfully!'}) + else: + return redirect('candidate_detail', slug=document.candidate.job.slug) + + return JsonResponse({'success': False, 'error': 'Method not allowed'}) + + +@login_required +def document_download(request, document_id): + """Download a document""" + document = get_object_or_404(Document, id=document_id) + + # Check permission + if document.candidate.job.assigned_to != request.user and not request.user.is_superuser: + messages.error(request, "You don't have permission to download this document.") + return JsonResponse({'success': False, 'error': 'Permission denied'}) + + if document.file: + response = HttpResponse(document.file.read(), content_type='application/octet-stream') + response['Content-Disposition'] = f'attachment; filename="{document.file.name}"' + return response + + return JsonResponse({'success': False, 'error': 'File not found'}) + + def portal_logout(request): """Logout from portal""" logout(request) @@ -4384,3 +4698,19 @@ def source_toggle_status(request, slug): # For GET requests, return error return JsonResponse({"success": False, "error": "Method not allowed"}) + + +def candidate_signup(request,slug): + from .forms import CandidateSignupForm + + job = get_object_or_404(JobPosting, slug=slug) + if request.method == "POST": + form = CandidateSignupForm(request.POST) + if form.is_valid(): + candidate = form.save(commit=False) + candidate.job = job + candidate.save() + return redirect("application_submit_form",template_slug=job.form_template.slug) + + form = CandidateSignupForm() + return render(request, "recruitment/candidate_signup.html", {"form": form, "job": job}) \ No newline at end of file diff --git a/recruitment/views_frontend.py b/recruitment/views_frontend.py index 59fc981..569a3fe 100644 --- a/recruitment/views_frontend.py +++ b/recruitment/views_frontend.py @@ -1071,4 +1071,4 @@ class ParticipantsDeleteView(LoginRequiredMixin, SuccessMessageMixin, DeleteView success_url = reverse_lazy('participants_list') # Redirect to the participants list after success success_message = 'Participant deleted successfully.' - slug_url_kwarg = 'slug' \ No newline at end of file + slug_url_kwarg = 'slug' diff --git a/templates/base.html b/templates/base.html index 8977d6b..98ac233 100644 --- a/templates/base.html +++ b/templates/base.html @@ -122,6 +122,11 @@ {% endif %} {% endcomment %} + + +
@@ -417,7 +423,7 @@
{% endif %} - + {% if candidate.get_interview_date %}
@@ -440,13 +446,13 @@

{% trans "Offer" %}

{{ candidate.offer_date|date:"M d, Y" }} - +
{% endif %} - + {% if candidate.hired_date %}
@@ -454,7 +460,7 @@

{% trans "Offer" %}

{{ candidate.hired_date|date:"M d, Y" }} - +
@@ -466,7 +472,14 @@ - {# TAB 4 CONTENT: PARSED SUMMARY #} + {# TAB 4 CONTENT: DOCUMENTS #} +
+ {% with documents=candidate.documents.all %} + {% include 'includes/document_list.html' %} + {% endwith %} +
+ + {# TAB 5 CONTENT: PARSED SUMMARY #} {% if candidate.parsed_summary %}
{% trans "AI Generated Summary" %}
@@ -666,7 +679,7 @@
{% trans "Time to Hire:" %} - + {% with days=candidate.time_to_hire_days %} {% if days > 0 %} {{ days }} day{{ days|pluralize }} @@ -712,4 +725,4 @@ {% if user.is_staff %} {% include "recruitment/partials/stage_update_modal.html" with candidate=candidate form=stage_form %} {% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/recruitment/candidate_list.html b/templates/recruitment/candidate_list.html index 270c7f9..e04b599 100644 --- a/templates/recruitment/candidate_list.html +++ b/templates/recruitment/candidate_list.html @@ -307,14 +307,14 @@ - {% if candidate.hiring_agency %} + {% if candidate.hiring_agency and candidate.hiring_source == 'Agency' %} - + {{ candidate.hiring_agency.name }} {% else %} - - + {{ candidate.hiring_source }} {% endif %} {{ candidate.created_at|date:"d-m-Y" }} diff --git a/templates/recruitment/candidate_signup.html b/templates/recruitment/candidate_signup.html new file mode 100644 index 0000000..e69de29