From 5509f7889cce02fb1469dc3c419d15b2f1c1d36d Mon Sep 17 00:00:00 2001 From: Faheed Date: Thu, 9 Oct 2025 14:14:16 +0300 Subject: [PATCH 1/7] application success page --- .../__pycache__/models.cpython-312.pyc | Bin 41361 -> 41361 bytes recruitment/__pycache__/urls.cpython-312.pyc | Bin 6604 -> 6767 bytes recruitment/urls.py | 2 + templates/jobs/application_success.html | 201 ++++++++++++++++++ 4 files changed, 203 insertions(+) create mode 100644 templates/jobs/application_success.html diff --git a/recruitment/__pycache__/models.cpython-312.pyc b/recruitment/__pycache__/models.cpython-312.pyc index 0cf83a988237810584897575fe7151e5b6cbd49d..85469724e6504e1a5c0874d36a2e424d8fd2a563 100644 GIT binary patch delta 20 acmbPum}%l+CeG8myj%=Gz_yXIV<7-Q{soQz delta 20 acmbPum}%l+CeG8myj%=Gz_O9EV<7-Q^aYFn diff --git a/recruitment/__pycache__/urls.cpython-312.pyc b/recruitment/__pycache__/urls.cpython-312.pyc index 76969dcb63bee8d0206d34a79d355c26d4df0efb..68d94c0c109627b39f27f77333b04b6dfe47750f 100644 GIT binary patch delta 1476 zcmZ{jOH3O_7{^(AYz(O>5APb|7Z?Kz@q>rmJixKR7(#*##hCCCU~Gp#08<-ElQtwd z)ko-DI7F(`LqpZ3a*HZ)q_;|~lpV3^s9bvJp;9m1^wLAshj)f3QKhW3-+ur3{l9NV z-|YU-^}9#=y;fUZQoIIozux+0PitWEU$y+hRDczmyn1%Q5k-<|h5@A;{-XE`K2Vt9 z&&udw1UMO`a^*4sPgN9rrskM_c&u(^s^M?ymc4&D7%XiiHEX4}7}ZCbmS8vqRw6H& zzkDVmUuZs8QoYA0N>WU6=#RM*L=@o=`9W11Xt z?v#T|4(?(&t-P7etj%vP-;HOI^Y1RFw&9~1gCg@5{JLhWe4^-Jig)%$SfS$#VdhQ6 zPe7A1?e1W`2kAXW-69y2lws)8*_bd~&>6h4=lL5YsxqOhF&}#}_jvBeA)B-WR1#p? zPhpD-SzLu#5%ft_VfdxaXd?z4Fs|5b=XTWI+URsf#cVVXi_2ZjYh%m@vC3f-Q*-vZu&$#@%(yc@gKu zoDXrn6V88JoXUjcBjs1%HfPcJNgiO}BhFIR%MjJaz;BBxNL4>knh;gjpjK~oU#DW2 zAzP^14`I^;+quP1iKg8hmn0)h~5^#sm;4FE%=n(OHOy zASk6}s8l@PfFIYg_urw`jBL%-?s{>J1JyW$uB###lCl(T(moA&FK+aqMxW46=CDQS zdzA7AO}H(9+5*S-L=cniPWyXs?|9^s>xwZfR delta 1292 zcmZ{jO>7%Q6vw;v*y|)sngn}o$MHu}Ct1hejxA9f=L!<|nx#e8F3}8=Z`) z%o%S-9&Grkoo77;t|Rn)W3)ui`Zjl}dmrqF4(hdgb-mhC-2=~t-nv-7r0GE|48fJ* z&y99Xj&yz-7PyRG(*Z36wGdLn+2H&8_1((R_9xZ)X60~u>!=>lSX2u!EzD>ku7w0l zm{)pNRmrLEy(jRoS+M81OS)fx>16cLF}B8$HU2cIfCZw@!>)PUq0#f+3x=K(SJQ&+ zK4kYv7Zs2qeR=rYY#XI~P~~#ZXmbm@LdX@8$_mJlp*)OQ91Uu)QA4nOfWz}BJTDj4 z6;L7c=<^ZE+${?pOQ5lYJX=t}5@83AQa0Y2$KE9JCgog70k?>g?&+Z{B2D1fGKwwB zYc&Pzk}=A>Dm!sD2e1wPVKE0L=;9|>|R9f#Zz})UfEQ@7MY?Z5#AN- zFe4avAI+y>L2&VYssk!>>4JG!6TDTr5}{j8wg<4dfW!s4xS@b5iBcA$EF=x!NC`zs za{0aj4#*5;uWJ1{9_?WvfrJDWQb zVaw)eyu*y^FVB$0D_C4Y|F%$Jc;kO?mEm_89+$ld>@6T~L4Na&0&3(vhIbgYHxt+q zM2?_TRKOg$qd|}EyvC@%UBbaM3Z}bz3Mi3XR=Ni(c1vTQB_A>8SSx`qr_kk;e3cI3 zE~EDu726YdI)kP&-G|yf2MiuE7?vzJnnTgt4^9QFks}5_W-#5g;OsieuFG5Mpc>=> zqn~mvdQG(bIC8}0B8nH~5}nE% MrJwcHSJXfMA8jIy6#xJL diff --git a/recruitment/urls.py b/recruitment/urls.py index 4f24bbb..b981ed8 100644 --- a/recruitment/urls.py +++ b/recruitment/urls.py @@ -13,6 +13,7 @@ urlpatterns = [ # path('jobs//delete/', views., name='job_delete'), path('jobs//', views.job_detail, name='job_detail'), path('jobs//candidate/', views.job_detail_candidate, name='job_detail_candidate'), + path('jobs//candidate/application/success', views.application_sucess, name='application_success'), # LinkedIn Integration URLs path('jobs//post-to-linkedin/', views.post_to_linkedin, name='post_to_linkedin'), @@ -29,6 +30,7 @@ urlpatterns = [ path('candidates//delete/', views_frontend.CandidateDeleteView.as_view(), name='candidate_delete'), path('candidate//view/', views_frontend.candidate_detail, name='candidate_detail'), path('candidate//update-stage/', views_frontend.candidate_update_stage, name='candidate_update_stage'), + # Training URLs path('training/', views_frontend.TrainingListView.as_view(), name='training_list'), diff --git a/templates/jobs/application_success.html b/templates/jobs/application_success.html new file mode 100644 index 0000000..c58696c --- /dev/null +++ b/templates/jobs/application_success.html @@ -0,0 +1,201 @@ +{% load static i18n %} + + + + + + {% translate "Application Submitted - Thank You" %} + + + + + + + + + + +
+
+ +
+
+
+ + {# SUCCESS ICON #} +
+ + + +
+ +

{% translate "Thank You!" %}

+

{% translate "Your application has been submitted successfully" %}

+ + {# JOB INFO BLOCK #} +
+

{% translate "Position" %}: {{ job.title }}

+

{% translate "Job ID" %}: {{ job.internal_job_id }}

+

{% translate "Department" %}: {{ job.department|default:"Not specified" }}

+ {% if job.application_deadline %} +

{% translate "Application Deadline" %}: {{ job.application_deadline|date:"F j, Y" }}

+ {% endif %} +
+ +

+ {% translate "We appreciate your interest in joining our team. Our hiring team will review your application and contact you if there's a potential match for this position." %} +

+ +
+ + {% translate "Return to Job Listings" %} + + {# You can add a link to view the saved application here if applicable #} + {% comment %} View Job Details {% endcomment %} +
+
+
+
+ +
+
+ + + + \ No newline at end of file -- 2.39.5 From e0b88f8b22da3a2fdd0a210cdb862f15ba17da7e Mon Sep 17 00:00:00 2001 From: Faheed Date: Thu, 9 Oct 2025 16:59:09 +0300 Subject: [PATCH 2/7] modal for job status update --- db.sqlite3 | Bin 761856 -> 761856 bytes recruitment/__pycache__/forms.cpython-312.pyc | Bin 21056 -> 21457 bytes recruitment/__pycache__/urls.cpython-312.pyc | Bin 6767 -> 6754 bytes recruitment/__pycache__/views.cpython-312.pyc | Bin 32433 -> 33407 bytes .../views_frontend.cpython-312.pyc | Bin 19177 -> 18864 bytes recruitment/forms.py | 10 ++- recruitment/urls.py | 3 +- recruitment/views.py | 32 ++++++- recruitment/views_frontend.py | 14 +-- templates/forms/form_wizard.html | 4 +- templates/jobs/application_success.html | 12 +-- templates/jobs/job_detail.html | 80 +++++++++++++----- templates/jobs/job_detail_candidate.html | 4 +- templates/jobs/partials/job_status_form.html | 0 14 files changed, 120 insertions(+), 39 deletions(-) create mode 100644 templates/jobs/partials/job_status_form.html diff --git a/db.sqlite3 b/db.sqlite3 index feeaaa27f46162ece01545369ffeb01f7e9a9579..f69db19633eafb190e79f455029aa4c7acdbb3f7 100644 GIT binary patch delta 201 zcmV;)05<=Cz%GEmE|41mh>;va0f>QMg3;1BGA&g+z*#Q)(OA2>D&tN0hf?r3o*Cp@(S$?FF7DFGdeRiIx#XX zHZe6fG&EskZE0>qQb9&kb687EVQy4;Q(<*vX&^yzVPa`vr!hbZaJJA21R%FHKnna1 zmS6@21qIRo1=6!YAjky_v?B*16Ad3587t*om+asQ8K?XO3ksJY<_ZM_0001{rVtB| D!udnr delta 185 zcmV;q07n0Sz%GEmE|41mhLIdY0fvEKg3;1BGA&gKnfcHt+xSS3jc4n5MT<~AGXj61R$3o0}8~q>D&tN0hf?r3o*Afun8sz zw+dSd#{`$RUkVQ;I5A;lZE0?ESW8S{Zd7?wVRd9_AVG3rVrgLw000011=j!t*Rw$& n%>@p$9tR>54IdjBE9G4c4VPik3KysM1q%uU00026rVtB|@9R7S diff --git a/recruitment/__pycache__/forms.cpython-312.pyc b/recruitment/__pycache__/forms.cpython-312.pyc index 3921c265924bba91a46c69d844d6dc8badcaa13d..676af2be137b65a61a8817c5bbc328ea835d66d6 100644 GIT binary patch delta 387 zcmX@Ggz@5XM!wU$yj%=G(7OD2hL!h3J_*J<8`U>6axpQuGo(ngFr-LMp1>&2s$40h zDZTj~W2N8Ziz;Hw3JeUBUogqnS2Am|+!FT6PYNzcEGaDxEl5c$Np;IF%1s8D2?LB! z#%D1gV>&}BLlk2QLljdga}-MoV>)9LYbBE=^DhZ3#_0K`mLwJ}2Ws=vWGm7J(nUHT zLKj2`F-&gI<(*vQB~s4?wBi~N7YhR=S{QEdNp!G&U}NAF{lLs5z}3lCWDe3`2_*b9 zS69bTdC|ma;iEK#q}# wgK=_2pbVD?P#B09idRpb7dS)u3xhGE(U&YnHb$-)s`K?{>VIVbGQlPQ01S6lt^fc4 delta 79 zcmcb(obkXCM!wU$yj%=G@H6^Z#(J-bd=iYCHmYxCWT}+Ul-$h0RO!d;r>VU8YM>(H gf6491K`Mdm;O0N245EC2ui diff --git a/recruitment/__pycache__/urls.cpython-312.pyc b/recruitment/__pycache__/urls.cpython-312.pyc index 68d94c0c109627b39f27f77333b04b6dfe47750f..f89276b91bb555853b864ac0e197b3ec9ba5bbfa 100644 GIT binary patch delta 1076 zcmZ|POH30%90qV(rdmJ{vE5QiyF6O5JlgWu)sR~IvQ(t32vib4PyrtiQ4lmyp)v7* zH_2RjtS6gzS>r*DJ(_r#31dbt9=v#TxNG8ehIlZs$tLsd@0;zv)22Vw?`qwry1JSp z=4nF_kez-AVt;v}yi+Mf#0(TvfTeqCBeg*cOmRH-<95xHp)Ns#^-n)EC0OkTFLKY}I~L?Q1hbOQ8rI>i*o z23&AE^P3_(63w=vMmwUoBZ|)RgLo|TiBP2!pxtrY9WQTHp7T`TGl5~lN&AzyKl#y1 zz%<(uxGgYNcGAQ=PRyfa^Puu9FEnZO@~?@HuVRmiBI5*HW+^NGEu4o9&5}JW!Y~Xq gOFbD8E?D`#0V7RS9jiLZ@k1Hm`n-01()=g*1C_&8D*ylh delta 1093 zcmXBU&rcgi6bEqIj1?f=wDFI%!R#(j<1Pd*gm{%8$F1m61^7uTX7gXY;{&ZSTSM)@pr!eWPCg<8sIeOfPvkzjxQ)27Nx! z<@fvF`v%|>e(y5`a{V6%-l6X1z~KRpWoRt(D$CHE=yLJ%$Z(>g|MmKUJx#q8<$a^H zZ?ydpLpgEQ#s5a)cfddKob(K|Hn?t4-D=-us3^_@g@97WL2eeQStO-ZhSo$FECM$D z%I4V$%~r_rHbXli3f7NTqtO-l^8=7Gj-q_Xrb9NlI?s?RG|1^-!$;S6GE0+LQmitx zBn+@&u*voapDNR-GP%9U&?E6FSPK6c)y6-A+Jv0eI^c#w4Tl>gYLrfmo8+te3~h)} z2#w*ms-L+4^*GLXbsB05|EB7J2^W8(CTsA`6pTw9pX25nHRs5}8bdX42`mFr zKZzM#GkzDBV=1}F8~)C`P_xRF6jf4Ov8ZC5DwFL-=Xh_*=jQQiZ-^_K1^mHlzLZTF zt8t_2mN)TyJklUHmKjfePM&rq{Uq^ci4*N8zgVOf zi?20?Zi`CU-u2#}YtLLJ(R&Om5dH@oVcu2e?@sa^aJO;?J+8M-(nO$*b7K~WD z*rhgc65IGXHBD@s&rKasyI<{Y8@p}32ItG?HsNam1si1=w-CE=(>kef-9MVvanCuU zl@^8cOZS7H?wot>x#ym9?m1`XwNHi5&RKJ=W@l$w;P=e8KRBvixR6sUj9zH`gSc8M zmI@ZhBIPJ$YPncWW4BVFR*IE0&Q+>ZujqxbOUhHK)f%ye#`#LES|`@2^oSDz>U^VjDbLq#`BWu6BqW>T+?pxMCnm`#a?x_xLRE!u2I*DYt?n)I$Be#*wj9;kH&)1 zFZNq4a{uHbc;0(|@`jfMlOk@kS_UndQpq`sR4SKGp63r&74R%;PDU9}%9E6M+8p}; zvP%^(S1EVCoTLsCwF;{E`dW8fv0~ADG`JzB-uvJWbc}D|y8{Qn0HU?dr>7i%$bo=0`Zp?-Vq2 zs5r!xMz-G{R05h7loiGA_X*|}c)$Bi`4X~9yt{Cvd0dINIZOB#3dg&D^B%b5L4-x7 ziy>x-&PSuv6oEZQWT;WI@wLSN!)kzp-gk8FbgzBHENEu?PbZx(yveK_2Nuo+SHqv)vN|I1T3z`z0s zWXi)h8b`QaP{wg0&TGorOv}dk)uNKbRN3P~oKCUGL})#ECb_hUo0MOyRR@Tc;SCk2lCZ4TG*z(uIgpnC! zGFfZ<6btc#HP05IC4EJPLzVTT5sA6sk)7wx+6G}KZ>z0{KaK>v8ipOV4^1toXV~?S zuE>-R7%AvbA`=skEl_X6L1{x{weSGfikyp^8EKP|aZ^_tJfg1Tr=)Ivoc=1zyafNX z#MRnI?QQ2_cv&!Pni8GxS;_J2^FSM5cq&FZ(*6DdK7Ns(^;HN@@Jqfj;Yt3NzS1~_ z%U58|=V4DF3)#O4N9KWXbOGUM1dc$V`wWi0j4*Ep_IvnPh(Jzy7Dw|=Vi)m|97hMY z=Keu14g=#tL}|c!zoK4olgI?#P2M9MaXmlJC^GInB{l2mGRHoYk04xoOf?8 zDoX47Aw` zG3VqG9`LReGWZML5_@LMI#~tXL}~t4EmGF=_Lt`t2^PJY|3E2r=_PZ!S|)4w_3EP4 z*$XT&Yb-5hi`iq2SbEGUuCPS}J^2aQaJC>2`9Y!EO@GHxzh3ENCmUYGj)2ry| zX_r|iy-;Ahjng@e-nl#O)g$oiZuDx=U{KbyBT+>;Rc&NK#P}sy4}_HIjsZYfLQZp$ zSEHKim7+2dPXv?@WD2NOUNb&hed*{IUf#MrZe*FveynWMg&xn1K@NSjgur_5+th@njL@+^c9 z?Ry#J{t*JUMeG%XKSnqSpk)H!)iQr(BK!uhWGMsH>=KfBTT zk&}Dc9*Mu7Uq7SW%wKVK+eZ$I)BV^(4?lF#^Y`gh?|XbRjepW|x#dd1P0!}@S+}!1 zx3a3PXI0(Is-AT%x#cRq?kd0Os{F)Z$u2UVF7BOiy*l#x{@3=uy6ugJ{x*1PSh_we z-55S{ZO6p5i4)fvPTq7q2>gZR7q`#oHw#u?bFCbr^-m6ee)!_5Yjt~Xy7qmPX~`{^ z^>}B?TV_idX3Lh&E~%OIRNr+w-Hx+^pX6Iy`A;=oE9-c5)s3vx*KDh)#|c{b-LXP` zyKO5(SaW+_JKny_X({f*3kn3vO!LOo@Wz4FAbG~yOC1S#$`kkt?Mo@Wn?e)swXe5< z)cVdI#}mK+2~+Cala3i^7@8p^f(X&xNzANz%Pv*E&E4Mg>${wPyO zcjyyn=kM|ddOhx5U}CQ)VGGxLS3n2$;aExH&E6raX{v8>_u3~q<{Pe*@=vy)eR63Z zy5gYJF*(e>#ecBYyNir~m4?m_y#Vcf6$#%(_zuGTQfprFT>c=m*yDlVG4?~?-J9rJ z_n46V=P-n-LLo4~Z}im_W2ms#5dIV(B_!ParS|JU3iHGyb_`Md`yV0r!y%OO1m2tYSA%0Sv%$ch4K0R|?)}zL7O>%{IV#_`&`=1z47h zEL~P1apqpF9=X|1e!>mo1<^MBK)=aYA1_m(YEc~I0X=F|@S(1;0!m=~~ zUBHiUVwP_h>=Hu!)Zm8ZuOs1~0gTKeAz6|9`l%_I{R>imhVYLF|AcUd|8#J3HH83e zg&pT*t6767S8hVC&3yY%X?zNYi%dW|(Y5+9&UPZ4Ls$u5ILyWfu1YuxMgm*1Vx(t= zv``rGb2um)HYEft5SBlNT^2*5n%5C;qR&m?XxOAc8FZqDfkgFWLe|XQl(hcQ(_1Qp zuk*?+6$6-s*}oxth(K|RB^`~Q@-zLAuLVxXRG0ioPqF_7=4j&KEt{=EB=I-ferb)9 z`7=z#eu_fTvMJW2Eq{Wv_YmF%0H@G7$UI13w*f|nq0yYD8(EU91)=%Fx{0rT{y~a3mNQdJ^ly`)`J5pDQoBGm>jHDkl!%na4Oyp&w4Tly|+Y(%Z(Pg#-7jTq;fZYNs z0x+DI>81kEH0L6XI?~%X>O#N*<#U=@&ILNMEPiRUp;*MZlK`3%AQ>u9uzoyRV$TD< zclj?z?+QJM56AvY@SO)9vrnFO55Q&iCiV8#urHw`ywvc9(t55gkg9m;Q*!9eeWmsS(DFZdWZxw)c+URs7uoQ14utuj zW1sS$@2`>}tl-=*1OB~_K@A6Vbnsciypf*(GlU|A0j|-kKuD&t0=&NWULlPY1D8FG z9~TdSCO;IvDZI@eJrK=ihQ zR~&S-U-7&{mAhz-1y7YK|0^KXaEIWF0}BTfd=XNJ>Ia`u7@Rt;b{%!CZ~e20g| z>xu*<+R5C&T!(yuz+W6+@xZ*bjBG7Bu7;?Q0o4cC&ta>D?*+-`nf#cBQ)LKrMegE= zf^CY|1-%YRv!#4%urf||+lTX%XXo1C1yi6ZhSSs*>{XACZpctku;DxvwPy_olxXkM zA49fA<;@Ub@Qv3}2|8;3p7z z2fhk}GEhJ!WIvO&sYn?5JfCZEP>~&QfsqRZ^N6emj{-ZEbji#XBqv9MF9bn-e&#r; zKpIhuWI*7r0}<&|v%wOLcwD-I_bS9z;sho}4fByV`GXX)KU86dFV>b3emZm=qG-qD zp>)UdxX*e1>hY2678rsVFj65i=CVz~H~1K<6=wJ;)+FraFS3zVnuJf=76#w6Evz45 zH!fI@qYVff5jG)g=C#`4eJ{W?R!$wNtR7Nj%&);fSi*NTnGGQ0Ab>BE{nm1E%^Lm> zT2q{^l~W5Im8B?rulRpS=*II_neL+O{1hG}4}pU9TR56RC`1@Vpj23nBZ}-eh4uw} zu0$ZO&A!lKOJordih^REA3+-SxelB z*4okzvtRJ^>ANlT9&F@5bBot4^2IQdP{I zZ`YHrF&7DWt!yC%b+>5^R8qPIfBM9`56--0>jB>X1p%$2DF6Tf delta 6408 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 OZ=aEW_wn!ZJ@G$_xAa&5 diff --git a/recruitment/__pycache__/views_frontend.cpython-312.pyc b/recruitment/__pycache__/views_frontend.cpython-312.pyc index 6d78c620d625688338cce9d3cc9630d9b8faff0c..1b05fc2c5d67f80a35da76e105456569195b8592 100644 GIT binary patch delta 4309 zcmbVPeQZ!?j6B zv|>={#w1p$9H8n{wVhP0P}G&m|7@xzbyY=$HpY-P6+LOIm^MxQqf@0#>ZEGg&bcqK zN#vAmNc?i%IrpA(?z!jw?)7I^*iB&GUwOSQ3IE-F@2^LXzvK-S4p}7WWl50~rb#-J znQoCSx>dF^(pfZ{UL{uv*{a!fhwMPvrc`Owx>I%vy&xZkOtMHjBxTuoNvTuo)y5k(TC*g{D}=rt z^$n=^tHHvJsyS1;F!|9G5T;Pck`R_gv;>7ET(WcsO9(CD1!0mx--P<+1^P~*Z$W)T zcnaPq%!gkoOi?t&gsB{Um9Vs;rA=7M;a96ZC4OGIVXi=uyOibUCAnK!fw)G@YR6fL z1u3i*`VQ15$y-JZmR8dvOr2<2xhREo!m29A{ZLhF*9pK?=dJY3a#{>r&FrlhEx946h=~YJx5TYVzwg-h+P(`|;^CpU4@G z@$6(?J)P(4QJbTdh{a-O`34mDCWP7Mk?a^0{2`Wtx14*}M)=a%$(+#U8n$PY>1LRHy9`www!iqVt3NV9}$y$ev@Dq zff<~n-2{6O3?F$KJ;k+AQ98aTtGzUkfad1bBAl1*L&DPtZ+U}el6yq~{^*@%JK=yY zdg$9YXm`^6h}0_N!uR3K#R=>u9lAY$3p8^J~S@wY0&*E8HZQ=2cD*uy6&l1{v+g8bfYN$Hu~I7VD>yo zI|zmmau4ZBx?!Gg{a ziB9LJc%}Je_AE6rmkFpr=bFNBV*`w4CNud=TH~U97q)bAjszX^V`y@vdd$GZ$a3~$ zcrUV>ZM+n{cf1rYSzXDoQJtC0<&m=rg+}@{ZqG7l%)ub&){HAu`0Ln6j=yzcBh($R zC;k|lh70i(UrVaxB>r1ceV(Ec{0yp=uQ8)OPjm_&uDHsg@KpQSgT$0Z?UOu>-84C| z3)zuV-_h|itZ7XX$Bz@yB`qdZeGlavzA=&c1o0W({M_tOEtAXhAE4HWm|! zBtu5r+i}27f%p-4rz7Dmkt^PopLRqC1Tl!_yhww7Nbn*;j-FD;uk(Rw$LAS*R6&x= zXdH0B-C}?8a+N(nvt;tlAN_@T z_$U=)4~lP2 zT_l|n+~{p(tKm-XPmmt-o36$=&CC&0x_D4O+Y0aY`r)GAQ|M!Cu_#-Yr*ln`GyF#B$5~R>|=# za!hatTDG>EYq}*kZEWk?J1bFrc`d@TpB$8)sEc2Ox5-NI3>+NlG~M48Z^1W)PFM

~O><>*Dx*&G-{Tk+-rW8rR`}H&&FeUEm*G>6;g6bZ z7yVA*nK5oBrF%|!G@n1g9jGyBzzO$uMBFa=7B^u8whT9bZ`jQ|5FT!2Ug#T+F&{iV z9A`CfZa7@1rLoHh>Imuy8W2hm@V%eoRA!@gE~YZprDqit)%5Z*>hL+7#yg*no|x$} zhww&n6C`+zAVknaFha1GU_Ze@k*ZGO6eOS6lv?@UNT)P)GyfBg!LuyoWW+D5 djImFpfqT-xAEY>3dg6}di#C`TIb)+E_#gS1Yjpqs delta 4486 zcmbVPYiv}<6~42(-q&5*i@gu8AM5pVy#~LqAu+~a4A>?FJJcy9H$t1mcVmq2wPAK0 zz&KgAaoR*}qRs-!Ya(wV|^ zlVW1jH)&?wqFAtPRxMhdZdI&8o~PM#yJ8n|E6N>;L&$BKQf+F@h@xYgr)>Fffa7*g}fByWh>-iAumUHg|L)$-yk%>Ib46G zP-WdmgeruSs)Q!%zEQ27la%#wS*@9qE*cAwlnrVvN}JR=#AY$K9_NNv1kxhp4JePS z3?!iI0@-STR z23R{>a}2Rf;CD7M8}vE{tPNriyz2CpirEbNJ;u}ksR;b=j&rkhljy>kssMQ8H!8cS zyNzHwfsLStU zp^mAsWISz~JbW}hl1%U>(yl5r56PMdT4Sky zJ#dIhYTlJI{VJIi)hNwpUPZLnKm(F@N z+qn)oIhhV-HWn$jZkpU)dyst~eDEF;oCpSNcEb7%cVS=b6V`|~dN zrMI*3R-y030^>}Nk69h(?S zj>R-Cs&-{1N0zwHmKj5nbLHd&Tng5*@55qn5YrHZ%)Qo2fiHsqFF)6+*-=4WB91L%W$4rqRxJpta%uNc%!E73+Xc(#D7blUnQ>uKY_a1)+$Q7 z=#H4MmHE+4MU3_N*ChCJVUvxi?2_rC85}M3aJAN+de)qjGh=7)4LD<(!FS;6IK+?+ zOA$Ozwb+T61PSwcY)^ZThZ8LbQ5BhMOlv-p)HNI->T`xhTUV2^1Eof8$u!m%@kGk7 zxjZeyeFnXzommh3c^v)@{v|pQW~JNCve)}=mNzYyH(lO!wd{A!eX~1n%kG)eIgIuundY5JVN{@e(B8AtAs%+S;5|R zj?KV@w%5YhxM;oi?Iu-f+N#HsMY)_+y|ew z`mFp4w*Ro zOhBxedBf1TG%gR?(d9?;X*keb&HCU}_r`j$kiwkYon43n7Q0Kk*JQ}GiTWx9K(HMe zw)Gf1c@=r`B;47iej!EQ=bUW(ieSwEa#8fJX$HYwcx(F>-0Z(>KRak#3XTUXH@k1S z48KQ)2_A=!d+Lofy(hTev*XRZxh}!%T7>0dGO+w;U;RdYpR@!DIC>im^Y4q-@t1m! znNl`V_Yeq<${U%Snn-dwq5MUJbY5~Ssl_?H;nH~=m1^3Yn9>aja~Kr%A&tIHP)Z=U z_#/delete/', views., name='job_delete'), path('jobs//', views.job_detail, name='job_detail'), path('jobs//candidate/', views.job_detail_candidate, name='job_detail_candidate'), - path('jobs//candidate/application/success', views.application_sucess, name='application_success'), + path('jobs//candidate/application/success', views.application_success, name='application_success'), + # LinkedIn Integration URLs path('jobs//post-to-linkedin/', views.post_to_linkedin, name='post_to_linkedin'), diff --git a/recruitment/views.py b/recruitment/views.py index 95a2b40..78dc2d7 100644 --- a/recruitment/views.py +++ b/recruitment/views.py @@ -10,7 +10,7 @@ from django.db.models import Q from django.urls import reverse from django.conf import settings from django.utils import timezone -from .forms import ZoomMeetingForm,JobPostingForm,FormTemplateForm,InterviewScheduleForm +from .forms import ZoomMeetingForm,JobPostingForm,FormTemplateForm,InterviewScheduleForm,JobStatusUpdateForm from rest_framework import viewsets from django.contrib import messages from django.core.paginator import Paginator @@ -225,6 +225,7 @@ def edit_job(request,slug): def job_detail(request, slug): """View details of a specific job""" job = get_object_or_404(JobPosting, slug=slug) + # Get all candidates for this job, ordered by most recent candidates = job.candidates.all().order_by('-created_at') @@ -235,6 +236,27 @@ def job_detail(request, slug): interview_count = candidates.filter(stage='Interview').count() offer_count = candidates.filter(stage='Offer').count() + status_form = JobStatusUpdateForm(instance=job) + + # 2. Check for POST request (Status Update Submission) + if request.method == 'POST': + + status_form = JobStatusUpdateForm(request.POST, instance=job) + + if status_form.is_valid(): + status_form.save() + + # Add a success message + messages.success(request, f"Status for '{job.title}' updated to '{job.get_status_display()}' successfully!") + + + return redirect('job_detail', slug=slug) + else: + + messages.error(request, "Failed to update status due to validation errors.") + + + context = { 'job': job, 'candidates': candidates, @@ -242,6 +264,7 @@ def job_detail(request, slug): 'applied_count': applied_count, 'interview_count': interview_count, 'offer_count': offer_count, + 'status_form':status_form } return render(request, 'jobs/job_detail.html', context) @@ -345,6 +368,13 @@ def applicant_job_detail(request,slug): job=get_object_or_404(JobPosting,slug=slug,status='ACTIVE') return render(request,'jobs/applicant_job_detail.html',{'job':job}) +def application_success(request,slug): + job=get_object_or_404(JobPosting,slug=slug) + return render(request,'jobs/application_success.html',{'job':job}) + + + + # Form Preview Views # from django.http import JsonResponse diff --git a/recruitment/views_frontend.py b/recruitment/views_frontend.py index f323882..54a79d2 100644 --- a/recruitment/views_frontend.py +++ b/recruitment/views_frontend.py @@ -1,4 +1,5 @@ -from django.shortcuts import render, get_object_or_404 +from django.shortcuts import render, get_object_or_404,redirect +from django.contrib import messages from django.http import JsonResponse from . import models from django.utils.translation import get_language @@ -188,10 +189,13 @@ class CandidateDeleteView(LoginRequiredMixin, SuccessMessageMixin, DeleteView): slug_url_kwarg = 'slug' -def job_detail(request, slug): - job = get_object_or_404(models.JobPosting, slug=slug, status='Published') - form = forms.CandidateForm() - return render(request, 'jobs/job_detail.html', {'job': job, 'form': form}) +# def job_detail(request, slug): +# job = get_object_or_404(models.JobPosting, slug=slug, status='Published') +# form = forms.CandidateForm() + +# return render(request, 'jobs/job_detail.html', {'job': job, 'form': form}) + + @login_required diff --git a/templates/forms/form_wizard.html b/templates/forms/form_wizard.html index 8aedf54..01f99c4 100644 --- a/templates/forms/form_wizard.html +++ b/templates/forms/form_wizard.html @@ -460,9 +460,9 @@

-
+
@@ -168,7 +168,7 @@

{% translate "Thank You!" %}

{% translate "Your application has been submitted successfully" %}

- {# JOB INFO BLOCK #} + {% comment %} {# JOB INFO BLOCK #}

{% translate "Position" %}: {{ job.title }}

{% translate "Job ID" %}: {{ job.internal_job_id }}

@@ -176,14 +176,14 @@ {% if job.application_deadline %}

{% translate "Application Deadline" %}: {{ job.application_deadline|date:"F j, Y" }}

{% endif %} -
+
{% endcomment %}

{% translate "We appreciate your interest in joining our team. Our hiring team will review your application and contact you if there's a potential match for this position." %}

- + {% translate "Return to Job Listings" %} {# You can add a link to view the saved application here if applicable #} diff --git a/templates/jobs/job_detail.html b/templates/jobs/job_detail.html index 7acfd11..56f7a5f 100644 --- a/templates/jobs/job_detail.html +++ b/templates/jobs/job_detail.html @@ -36,6 +36,8 @@ font-weight: 700; text-transform: uppercase; letter-spacing: 0.7px; + display: inline-flex; + align-items: center; } /* Mapped color classes for status badges */ @@ -109,7 +111,6 @@ /* ==================================== */ .right-column-tabs { - /* Use the .card wrapper for the main structure */ padding: 0; margin-bottom: 0; border-bottom: 1px solid var(--kaauh-border); @@ -119,41 +120,38 @@ margin-bottom: 0; border-bottom: none; background-color: transparent; - display: flex; /* Ensure the nav-items take up equal space */ + display: flex; } .right-column-tabs .nav-item { flex-grow: 1; text-align: center; } .right-column-tabs .nav-link { - /* Base style for all right column tabs */ - padding: 0.9rem 1rem; /* Slightly larger padding for better spacing */ + padding: 0.9rem 1rem; font-size: 0.95rem; font-weight: 600; color: var(--kaauh-primary-text); border-radius: 0; border-right: 1px solid var(--kaauh-border); - border-bottom: 1px solid var(--kaauh-border); /* Separator line */ - background-color: #f8f9fa; /* Subtle background for non-active tabs */ + border-bottom: 1px solid var(--kaauh-border); + background-color: #f8f9fa; } .right-column-tabs .nav-item:last-child .nav-link { border-right: none; } - /* Active Tab */ .right-column-tabs .nav-link.active { - background-color: white; /* Lift the active tab */ + background-color: white; color: var(--kaauh-teal-dark); - border-bottom: 3px solid var(--kaauh-teal); /* Strong accent */ - border-right-color: transparent; /* Clean up border next to it */ - margin-bottom: -1px; /* Overlap the border for a cleaner look */ + border-bottom: 3px solid var(--kaauh-teal); + border-right-color: transparent; + margin-bottom: -1px; } - /* Hover state for non-active tabs */ .right-column-tabs .nav-link:not(.active):hover { - background-color: #f0f4f7; /* Darken slightly on hover */ + background-color: #f0f4f7; color: var(--kaauh-teal); } .right-column-tabs .tab-content { - padding: 1.5rem 1.25rem; /* Increased padding inside the content for breathing room */ + padding: 1.5rem 1.25rem; background-color: white; } @@ -229,13 +227,11 @@ /* Table styling for the Applicant preview */ .table-applicants tbody tr:hover { - background-color: #f3f9f9; /* Light teal hover for rows */ + background-color: #f3f9f9; } .table-applicants td { border-top: 1px solid var(--kaauh-border); } - - {% endblock %} @@ -249,10 +245,19 @@ {# HEADER SECTION #}
-

{{job}}

- - {{ job.get_status_display }} - +
+

{{ job.title }}

+ {{ job.internal_job_id }} +
+ +
+ + {{ job.get_status_display }} + + +
{# LEFT TABS NAVIGATION #} @@ -566,4 +571,37 @@
{% include "jobs/partials/image_upload.html" %} + + + + {% endblock %} \ No newline at end of file diff --git a/templates/jobs/job_detail_candidate.html b/templates/jobs/job_detail_candidate.html index ae369e4..5d752fc 100644 --- a/templates/jobs/job_detail_candidate.html +++ b/templates/jobs/job_detail_candidate.html @@ -135,9 +135,9 @@
- -
- - - {% for candidate in candidates|slice:":5" %} - - - - - - {% endfor %} - -
- {{ candidate.first_name }} {{ candidate.last_name }} - - - {{ candidate.stage }} - - - - - -
-
- - {% if candidates|length > 5 %} -
- + - {% endif %} - {% else %} -
- -
{% trans "No applicants yet" %}
-

{% trans "Candidates will appear here once they apply for this position." %}

-
+ {% endif %} + +
{# TAB 2: MANAGEMENT (LinkedIn & Forms) CONTENT #}
{# LinkedIn Integration (Content from old card) #} + + + {# Applicant Form Management (Content from old card) #} +
{% trans "Form Management" %}
+
+

+ {% trans "Manage the custom application forms associated with this job posting." %} +

+ + {% if not job.form_template %} + + {% trans "Create New Form Template" %} + + {% else %} + + {% trans "View Form Template" %} + + {% endif %} + + +
+
+ + {# TAB 3: INTERNAL INFO CONTENT #} +
{% trans "LinkedIn Integration" %}
{% if job.posted_to_linkedin %} @@ -523,40 +538,6 @@
{% endif %}
- - {# Applicant Form Management (Content from old card) #} -
{% trans "Form Management" %}
-
-

- {% trans "Manage the custom application forms associated with this job posting." %} -

- - - {% trans "Create New Form" %} - - - - {% trans "View All Existing Forms" %} - - - - {% trans "Create Candidate" %} - -
-
- - {# TAB 3: INTERNAL INFO CONTENT #} -
-
{% trans "Internal Information" %}
-
-

{% trans "Internal Job ID:" %} {{ job.internal_job_id }}

-

{% trans "Created:" %} {{ job.created_at|date:"M d, Y" }}

-

{% trans "Last Updated:" %} {{ job.updated_at|date:"M d, Y" }}

- {% if job.reporting_to %} -

{% trans "Reports To:" %} {{ job.reporting_to }}

- {% endif %} -
-
{% trans "Back to Jobs" %} -- 2.39.5 From ff42e3585567ccba51386d73cd7e7a616c2b0e42 Mon Sep 17 00:00:00 2001 From: Faheed Date: Thu, 9 Oct 2025 19:51:53 +0300 Subject: [PATCH 4/7] new list page addded" --- .../__pycache__/settings.cpython-312.pyc | Bin 5216 -> 5223 bytes .../__pycache__/urls.cpython-312.pyc | Bin 1538 -> 2215 bytes db.sqlite3 | Bin 831488 -> 831488 bytes .../__pycache__/models.cpython-312.pyc | Bin 44779 -> 45421 bytes recruitment/__pycache__/urls.cpython-312.pyc | Bin 6895 -> 6135 bytes recruitment/__pycache__/views.cpython-312.pyc | Bin 37118 -> 37546 bytes recruitment/models.py | 8 + templates/forms/form_templates_list.html | 295 +++++------ templates/includes/_list_view_switcher.html | 47 +- templates/jobs/job_detail.html | 17 +- templates/jobs/job_list.html | 2 +- templates/jobs/partials/image_upload.html | 4 +- templates/meetings/list_meetings.html | 494 ++++++++---------- templates/recruitment/candidate_detail.html | 8 +- templates/recruitment/candidate_list.html | 428 ++++++++------- templates/recruitment/training_list.html | 427 +++++++-------- 16 files changed, 839 insertions(+), 891 deletions(-) diff --git a/NorahUniversity/__pycache__/settings.cpython-312.pyc b/NorahUniversity/__pycache__/settings.cpython-312.pyc index 648d4bf64fce83e591654199544df15820566a14..c27f862ffd80d49f9878906292cef52fc94177b2 100644 GIT binary patch delta 456 zcmXv~J4*v$5d8K$qq*eF(`eL-F~0IJF~%gmAB9C)D`8PV7&&91NCZhN1i{{LZK||3 zLVku;mR5Ea7WxasO~4OkVTYO7;rmE_Ce0VqG?cufx6iYKrWvK<=KRAR25e%ltuWXo zHsR(W81UE{`-Jlf=ZDDwxHyO*4#5XM0tnhvC4^d9l{k#B^F!IY;U}$|u9Qu1AtLUP zc2_mp(&fSkqC6_@u~Rq38y=-F(Q`*(Atovdlf4=5&8aHcI*%d24`wQZgZ!Mv7;U=2;PBoM$RImS#BLl)KCRSL7seoWi1%%(qGA zQkzid6-r~7Gbr)`N}NTRb6DX;L0*!Vu*wCj@iNxsXb~G+5|pvYE7;;yZ1Wm+c)hNr zc2A0=l(Bbya$#S_Yp2)O)eF1R((bA6ozk6{{@PE&&X@bfWyy~f9Rj0i!0n XSXJ%N`3+R`K=`r0QwfGO{YuC`J=bxd delta 456 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 delta 1168 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 delta 2962 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 I8X}+YZ)T5?$N&HU diff --git a/recruitment/__pycache__/views.cpython-312.pyc b/recruitment/__pycache__/views.cpython-312.pyc index 23664e6a06dd37301c92f03c0a499379999bc6b2..382f068cbc3eea9d1a19775a6b9590427e856b66 100644 GIT binary patch delta 7307 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 USwAUuOV&^8CB-ONSv3v*ZwI2e-T(jq delta 7134 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 /* ================================================= */ - /* UI Variables (Matching Job List) */ + /* UI Variables (Matching Standard Theme) */ /* ================================================= */ :root { --kaauh-teal: #00636e; @@ -20,23 +20,22 @@ /* --- Typography and Color Overrides --- */ .text-primary { color: var(--kaauh-teal) !important; } - /* --- Button Base Styles (Matching Job List) --- */ + /* --- Button Base Styles (Consistent) --- */ .btn-main-action { background-color: var(--kaauh-teal); border-color: var(--kaauh-teal); color: white; font-weight: 600; - padding: 0.375rem 0.75rem; - border-radius: 0.5rem; transition: all 0.2s ease; display: inline-flex; align-items: center; - gap: 0.5rem; + gap: 0.4rem; + padding: 0.5rem 1rem; } .btn-main-action:hover { background-color: var(--kaauh-teal-dark); border-color: var(--kaauh-teal-dark); - transform: translateY(-1px); + transform: none; /* Removed translate to match other lists */ box-shadow: 0 4px 8px rgba(0,0,0,0.15); color: white; } @@ -51,18 +50,17 @@ color: white; border-color: var(--kaauh-teal-dark); } - - /* Size Utilities (matching Bootstrap convention) */ - .btn-lg { - padding: 0.75rem 1.5rem; - font-size: 1.1rem; + /* Primary Outline for View/Preview */ + .btn-outline-primary { + color: var(--kaauh-teal); + border-color: var(--kaauh-teal); } - .btn-sm { - font-size: 0.8rem; - padding: 0.3rem 0.6rem; + .btn-outline-primary:hover { + background-color: var(--kaauh-teal); + color: white; } - /* --- Card and Layout Styles (Matching Job List) --- */ + /* --- Card and Layout Styles (Consistent) --- */ .card { border: 1px solid var(--kaauh-border); border-radius: 0.75rem; @@ -70,42 +68,24 @@ background-color: white; transition: transform 0.2s, box-shadow 0.2s; } - - /* Template Card Hover Effect (Consistent with job list card hover) */ - .template-card { - height: 100%; - } - .template-card:hover { + .card:not(.no-hover):hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0,0,0,0.1) !important; } - - /* Card Header Theming */ + .card.no-hover:hover { + transform: none; + box-shadow: 0 4px 12px rgba(0,0,0,0.06); + } + + /* Card Header (For Search/Filter Card) */ .card-header { - /* FIX: Use !important to override default white/light backgrounds from Bootstrap */ - background-color: var(--kaauh-teal-dark) !important; - border-bottom: 1px solid var(--kaauh-border); - color: white !important; /* Base color for header text */ font-weight: 600; - padding: 1rem 1.25rem; - border-radius: 0.75rem 0.75rem 0 0; - } - - /* Ensure all elements within the header are visible */ - .card-header h3 { - color: white !important; - font-weight: 700; - } - .card-header .fas { - color: white !important; - } - .card-header .small { - color: rgba(255, 255, 255, 0.7) !important; + padding: 1.25rem; + border-bottom: 1px solid var(--kaauh-border); + background-color: var(--kaauh-gray-light); } /* Stats Theming */ - - /* --- Content Styles (Stats, Description) --- */ .stat-value { font-size: 1.5rem; font-weight: 800; @@ -116,58 +96,28 @@ color: var(--kaauh-primary-text); font-weight: 500; } - .card-description { - min-height: 60px; - color: var(--kaauh-primary-text); - } - /* Search Input Theming */ - .form-control { - border-radius: 0.5rem 0 0 0.5rem; + /* Table Styling (Consistent) */ + .table-view .table thead th { + background-color: var(--kaauh-teal-dark); + color: white; + font-weight: 600; border-color: var(--kaauh-border); - border-radius: 0 0.5rem 0.5rem 0; + text-transform: uppercase; + font-size: 0.8rem; + letter-spacing: 0.5px; + padding: 1rem; } - .form-control-search:focus { - border-color: var(--kaauh-teal); - box-shadow: 0 0 0 0.1rem rgba(0, 99, 110, 0.25); - } - .input-group-search .input-group-text { - background-color: white; - border-right: none; + .table-view .table tbody td { + vertical-align: middle; + padding: 1rem; border-color: var(--kaauh-border); - border-radius: 0.5rem 0 0 0.5rem; } - .input-group-search .form-control { - border-left: none; - } - - /* --- Danger Outline (Delete) --- */ - .btn-outline-danger { - --bs-btn-color: #dc3545; - --bs-btn-border-color: #dc3545; - --bs-btn-hover-bg: #dc3545; - --bs-btn-hover-color: white; - } - - /* Empty State Theming */ - .empty-state { - text-align: center; - padding: 3rem 1rem; - color: var(--kaauh-primary-text); - border: 2px dashed var(--kaauh-border); - border-radius: 0.75rem; + .table-view .table tbody tr:hover { background-color: var(--kaauh-gray-light); } - .empty-state i { - font-size: 3.5rem; - margin-bottom: 1rem; - color: var(--kaauh-teal-dark); - } - .empty-state .btn-main-action .fas { - color: white !important; - } - /* --- Pagination Styling (Matching Job List) --- */ + /* Pagination Styling (Consistent) */ .pagination .page-item .page-link { color: var(--kaauh-teal-dark); border-color: var(--kaauh-border); @@ -180,30 +130,40 @@ .pagination .page-item:hover .page-link:not(.active) { background-color: #e9ecef; } - + /* Empty State Icon Color */ + .empty-state i, .text-center i.fa-3x { + color: var(--kaauh-teal-dark) !important; + } + + /* Filter Buttons Container */ + .filter-buttons { + display: flex; + gap: 0.5rem; + } + + {% endblock %} {% block content %} -
-
-

+
+
+

{% trans "Form Templates" %}

- {# Search/Filter Area - Matching Job List Structure #} + {# Search/Filter Area - Matching Standard Structure #}
-
Search Templates
- -