From 06436a3b9e8a0ef166348969c0ed8482f17146dd Mon Sep 17 00:00:00 2001 From: Faheed Date: Mon, 17 Nov 2025 09:33:47 +0300 Subject: [PATCH] changes to interview --- .env | 6 +- .../__pycache__/settings.cpython-312.pyc | Bin 8593 -> 8849 bytes .../__pycache__/urls.cpython-312.pyc | Bin 3113 -> 3229 bytes NorahUniversity/settings.py | 3 + recruitment/__pycache__/admin.cpython-312.pyc | Bin 12213 -> 9926 bytes recruitment/__pycache__/forms.cpython-312.pyc | Bin 67515 -> 78644 bytes .../__pycache__/models.cpython-312.pyc | Bin 86367 -> 106984 bytes .../__pycache__/serializers.cpython-312.pyc | Bin 1230 -> 1236 bytes .../__pycache__/signals.cpython-312.pyc | Bin 6701 -> 8114 bytes recruitment/__pycache__/urls.cpython-312.pyc | Bin 18302 -> 21994 bytes recruitment/__pycache__/utils.cpython-312.pyc | Bin 20441 -> 20458 bytes recruitment/__pycache__/views.cpython-312.pyc | Bin 149254 -> 185031 bytes .../views_frontend.cpython-312.pyc | Bin 46551 -> 47019 bytes recruitment/admin.py | 42 +- recruitment/decorators.py | 1 + recruitment/email_service.py | 16 +- recruitment/forms.py | 521 ++++++---- recruitment/hooks.py | 4 +- recruitment/migrations/0001_initial.py | 237 ++--- .../0002_zoommeetingdetails_host_email.py | 18 + recruitment/models.py | 639 ++++++++----- recruitment/score_utils.py | 36 + recruitment/tasks.py | 24 +- recruitment/urls.py | 31 +- recruitment/utils.py | 2 +- recruitment/views.py | 894 +++++++++++++----- recruitment/views_frontend.py | 26 +- temp_file.py | 4 +- templates/interviews/interview_list.html | 1 + ...on_form.html => onsite_location_form.html} | 2 +- templates/interviews/preview_schedule.html | 62 +- templates/interviews/schedule_interviews.html | 4 +- templates/meetings/create_remote_meeting.html | 136 +++ templates/meetings/delete_onsite_meeting.html | 0 templates/meetings/list_meetings.html | 272 +++--- .../meetings/reschedule_onsite_meeting.html | 111 +++ .../schedule_onsite_meeting_form.html | 98 ++ .../recruitment/candidate_interview_view.html | 55 +- 38 files changed, 2233 insertions(+), 1012 deletions(-) create mode 100644 recruitment/migrations/0002_zoommeetingdetails_host_email.py create mode 100644 recruitment/score_utils.py rename templates/interviews/{schedule_interview_location_form.html => onsite_location_form.html} (88%) create mode 100644 templates/meetings/create_remote_meeting.html create mode 100644 templates/meetings/delete_onsite_meeting.html create mode 100644 templates/meetings/reschedule_onsite_meeting.html create mode 100644 templates/meetings/schedule_onsite_meeting_form.html diff --git a/.env b/.env index b9e2bf0..6bccdbe 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ -DB_NAME=norahuniversity -DB_USER=norahuniversity -DB_PASSWORD=norahuniversity \ No newline at end of file +DB_NAME=haikal_db +DB_USER=faheed +DB_PASSWORD=Faheed@215 diff --git a/NorahUniversity/__pycache__/settings.cpython-312.pyc b/NorahUniversity/__pycache__/settings.cpython-312.pyc index a700acdec960c44910858b405abb0b4a1f41e64c..741dbde2ba80d3bcafbd3231b3d0a7c1e09f0779 100644 GIT binary patch delta 2154 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 diff --git a/NorahUniversity/__pycache__/urls.cpython-312.pyc b/NorahUniversity/__pycache__/urls.cpython-312.pyc index 29d9d50f1b873d1ec480c2e0c08380f316e19d6d..f543051cd4d7e84f457108a7b06de5f25fb25b7d 100644 GIT binary patch delta 381 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 B*x>*G delta 23118 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 J6yg{B{{zyVO2z;H diff --git a/recruitment/__pycache__/models.cpython-312.pyc b/recruitment/__pycache__/models.cpython-312.pyc index a99202ca6862ba3a17c5b3feb01ed9d9707a6b91..04323b6df0f7320edd8dda27d302c9bbb0f374de 100644 GIT binary patch literal 106984 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 M{)L17@-FfJ0dDol(*OVf delta 33008 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 DwN@qi diff --git a/recruitment/__pycache__/signals.cpython-312.pyc b/recruitment/__pycache__/signals.cpython-312.pyc index cd9491638ec98b6e8248d6baef84f1903d7b5a2c..63303976132fc3dc171d97d38e31e758a14a92fd 100644 GIT binary patch delta 2611 zcmah~VQkw(6h1pnV#l$QwrSEN4NbeQZ91*6v9*OkVKB;ITNwi+WQ3wDFAfDmDor@dMPde;^^=UE((DesGdM zzq|MD`TXAZ-hIB~tB2$tB*}wde0sexdu!K}+*JOWL1-FfP=?WvQh75919Mhm^Q^+= z9g2e?>kf^}I~6CDIn9-KD{d+~H9jvW0+n5wCod`@mEExJRlHQ@H7PGEGL;3*m-j1v zDtk0Td`C>-ZX5M3;aD?OVUlw0bj~PikTCm($9Z^$; zj-%#^^Oayb(QCA7S&J_P8>3iy2{R8P}R@;&jRWs3G3GW; zphMqfaJDk%wx#uVh5-k>S>S@^JG|%mT#&=2d=Na9J*_>Z5tpd`f8TPJk5_ z01_My5qTSd?F8-x(8(9$Fz`Xww!)7fki2xI^oflJxptf42$3@(5Zos=u&2+(Q*)~YyVsL6_t%ADf9J>^oYa9H&ZK2`7yf`$=4PhE4 z5*B-qFo{TlI6Vt4fxImK#JuD`XvXSfuff}9Igj~<*uY2-tbmF6fC5}3x!o{mw5sk; za3wBRx4{6WMuWX(_ZvH|41yhv=H*~>eTgeE$u;W3$H;PP**WxDbVxlKKSB#To}!f< zPh+T5HFJObZ%2G<+;UZx6ApYBzJ&JzSOP6~}#<>*_5~M{wJjaI@BHQO9I~MqzOT2edm=I2h zOHIw={3&UP_fJX_(!0KuM#TH>qzNHHg(iD!ntb>_G+}cxVGEn{S6=ltcX}b6(8V_n z${j*S7=$|;2oSaj5FiAo^z!x0<5yvqC8VL;vKb&l!bOvBd0xt5-AEQvdDRlMR8^#D z#ZST(d<-BVZKMR@%sM6TapIiQwbAl09wVwZ2+;i`&6Etd1k%QY%Omv8S<5s@@W&+6 zZ-Q`prn^7u|6E{WY1+tfxBEvKZ=~3w1-X7lU1M z!7e-bHV0Z)B+3Cd<$xcBW49+dWG6b2u-sa4co^Ci9)WY2;ig~94Vhf3FkI|O7YoqP z4)>%+jUzY+T1$Z2b3d4?*y58kvdLs6e&i;^a;AS?XdiRkbT`hsLu1^}=5)AK-nYPXt+H;$bIXC)gn2bQxcjeO tmU)Uo;b6Afk~{gBGW_+x>ty_+Eh^uE-;%`S#L$vP9^#e{{h&lUk?BP delta 1564 zcmZuwOKclO7@k?L?e(sob?nBj6UWV?F{$#Xk`zdw4TVT;qY8n9V3AlY-l^GiAL;D6 zX-L31a0r5enmJSz2au2uDB%FP^uUQLmxM%0SQ@qEao~WIs8jnhi7SMnO4Ir~$&VVMAp~=Y{Wb1$tFnO8x zId25bkR0-P&aT4)1$1z#{(5sXrCk3>{sKt#Ai9E&c&mIiNspZ|K=Wdg72? zZ0MOodeYZN{1S494&+k9)OyI2I#lF%L(i?o$Rf-HJLh0IP42^$i;;7xrRkdLB2TS|46X9_xvd4Lj!XmgYrMIQ7pQSD` zArA7BlC3J>*@L7_Kf0ciM(Q^!5WbhJ$hP)mhR=U}`he4bI`*Ow~ z@6d}?Y|B+EuHv|A6*)m_VGTDr&QvhnPNZn)vRX5mCj2UOO|DfEfAi9_tmYVl*U6hL zL+}l9qh&JrYyoJQ|Fwrh%Z*(T*&F}=?0AFTgC~#dNaM&F z9WV=aXpLpMk2gmKf>Y6f~9 zFH)V2gR@RyF90F@6~ym>-d#}I1zo$K^G}A|yP$s;^wH!!0nBfM`AslS9<-;)KkcRX r`7PM9&xN7*FaWp{q^~$x+8+g+xKv(0*1rV@_PG#jVcMY2{5Jjtb5?W< diff --git a/recruitment/__pycache__/urls.cpython-312.pyc b/recruitment/__pycache__/urls.cpython-312.pyc index c68f7e674c18b4975b44a14f7b2720a8c18f00f0..1c54c1d44c76b7795a4b4276eb3ac8275544ed22 100644 GIT binary patch literal 21994 zcmb`O34B{geaG!YPM(vfVdLMh#H)z4OuqOz0%r9deau%(nz=zr!v^A68gS@UT= z`x(DC|L^?f`p@~aUvxT`Wx>DaPn8FfgIQVMA}{>k687+uo0ULh`Lq1lV_D$^83a_UKK$We6$~I8hBdYkf3*-(UJ0;{!f!qaTw}jj+kb8jKFCq5| zWG9dZMKYr=bqOlnpwhEIm3@NBeo#5QK$Qc6%0W;$x)#W1IWW|D-?;0(ogJ2kW#)ATL2}ha{v| zActNt=>yU)(ew+NDv-kxa#$cofE<;OqXHQK^0I`yERa`#9Fve^0yz$3P(lU;G6ds2 zEFr@J`4o^52^kT{D3CD;8576}Ag@Zus{(lq$msYyspAa6h`-IS0w1@dVi zZ%N2o0(l$AS4qfM3FNDRd`3b(BapuV3K)wyg=OpBF0{M0z-ytF2 zA&}1lc~3Ug5N@|_a$odWqgK)y>tzDpo~7sz)@$af3m?*VyVLf#k1_W=1`3He@u z{CyzbCn4V_kbeN=`z7T21@Z$xK9G)oNFYC~F1h>>k<7UMeMC_CLs0qX z0#!aLsQeMAOf67lN>KS@Q2E#bRX!%D{0XRhe1R$-7gYWfR6Zf9_&*_#e+J}33HeYU z{~X9qO2|(NT1LS8Vi(&UyzVr5XdhA`6UVYC4u}hkYACIUlGW^2Xb0MP79kcZ{9QM~g7s-sP=>G^RzW|kAEKuct1(jcd$}bnF@~gQjceDLj z>f*cEmqnqhOtpe^*%GZqRBMqa_86_j5-o@7fO0uREyz1Z!Y`rx5-Gn_!YhR}A3cI|lH1QeOC80X%%M0DhH}7rsmY58oz$FOc%W zHwfU1C|@MyizV#?-y1-`M9P;+c=+l7{Awv*CgI`R1MuZizCyyo7YN{Ax&N%8e5F*s zN}|7(@>Np4TEf>*zFOonjSatWGYCBcUpJs;>qI56312uM4!&^!zd_0i-#LJXFCD|)H56j1!HQ^4>3731|IU! z6ad3W#2X8Qf)Kd^Bcq{-h)+#rrE>k==;%<$8zD&@LGQS#DPc7d4F#j_)N*|Cj0K`G zZ6%NPMO1H0b*G%nitkzxx9^IMO^oay!5$Oxt1)k2OskMV6Jfti5Z~pjUma7end7^b zb2&5w1ymUab=;6+_V;#oO2z_Z(0#)DkrWt(c5O9P zv?s)JQ*~D8e1S?)Gpm1b1a*YLoS5$u>2x=tC6AM9;V3bxwQ}I{#SZIWBc|5{HBeYUG<@1h>4S9W6 z+^Kv6!f?RP|4csV?Gq5$bR5R3VS`n6a8mNb3s)hXavu7pH9+)y(SQR*RO0 z1(x$qHTDIW8$`BLz4VM)P;Mum~7&Fe{ffrl7I5A)DEBgTeD)ab;x z>WZl_Jm_F8GdK_0Jlv+OH%vAOtbr>UgK_3gl^Bo*4IXOHHW=}?#1SYjT*;VlW4iKV-B~ zXq9DcbE}cCJGBx*IxDahPpg=VU_+6a2U?BLtmPm=gjpk)FsnF$OXn(&s@}2KD0udq zGI-FS<-tTT9(4~*1jhVo1nNTGJ?vFmZ?|IA`H=G9YN{}fYi))7-h zz3v@n0)>*;j3qFZ8?gj-lUA3Z9--l3HNq5%%p#c48B>o2BC20ZZAROA1B$`=TfH6* zMPe`vVv!wmcHHCkMX$P3#b~fDClIdH z03+<@N*Qetq3N_HY39+%pwC6?=`vElyjD!&Jy?G;UTeT@DHH;_W(U4_0{%U2SkGfF zaK@nOBl}nwVc^$gT7;a1 zmZEOVnmJXO$*i>tYC{uaSNKY4l+)s4o+uVekfSHPS2egtO00BqI*Ugo8h z^H@A2z1D~-mVLg7N7WdX3irmAh1zDxsA2a=>tb)SXstNo(Jtom9qr-h#L##k8Ucj-LUh`;C_n~JhBPH=xjDnjdu_6 zDL%H0O+c!gN0}2AA9z|1S?B*>a;X9(^JHL_iEmOa{2IBKqu!_ubvCo%NR3mKCMT)l zlfPyaP0@^*SCe|1tfT-3EH%e*V6@IF>OohS?%1o0Zsb!V_^p|p_T&Pyv2O<-I|Wx} z;x*?)6!uiKbD&F7%gHPE;(BVMG2uvPI54IfCwn?c8L7(VWwd3gH#$j<$1nxt8qZoT zOloYep6B(C2ZA0Rp{;VwAsFYS$FLtfrQ;6%#LXcr+FbP8)nZrDq8(pWC^gUv%unq)_lD&oyWFTGf+ zX;nNcGCX~u@FclA@r?z-^fnA~B5~yM#E8?@F~_$rD!$P8IBb%mZm-`D7ab7t+0DaD z+UCp&X#+EsPQ`fGDWaQhKG?X{mIZ3@mM)nyez;zfRF8O{ku%>Vkd2!xUdx3EBIpZ{ zTbJeZ5rzu6GhAiF8$QO&_zuTBp3r*MOF0?E&)ZVU@HGZAU#pbDycJAka*wE0OJU3O zn967BW}H@tQ7#y?fsr8geX4|UW+XO2xdi5ov06;S+NDmC%GyFqL0kJ6E+xr=HR|KC z;LR&hU@h%_Oy=r!awQEn4_-eUE8)(kMyxL~FjFI=Rd7w8PmM|U}JLD4lJ5*F{ZlIarl}=uA%YW(rDD8!5wZi z3VsCbwSqljQ>`)#d=bdwb~g2w8wBklZl%`{2FqJ#em0_p$0or!d3yRzZfaS%1o3fi zAK1g>^F$;L&K6$3R`-~M6G2Q`XiJK*TFv~4d3RW9Mi=IM;;on*E`DIo3*Rb; zcVZN5tRPCO^M`!!Rf4!Bex$?wvo{2I^%%pCjQUIo^?q|twDb=zk$KLW{y*>(v(0^ zTjHW9tjw0A=(R;gnyA~@6>3MVDUI0yo7#A#EeF>vaEs(N52Fb2eI#|^GSliop6@fY zerOuolwha}Qz$uhW3RYS#C}A!<+vWfIl0--o7(Pq^PXE#>m7%i)i_maoQ>^uvgdNV z@$ISQ{>$FrNT_8ZG8T=H|K&H5OM)B{kYCnBmXd({W(Gc(@Ne_W!jd6&m)z5R9qR#A5c-ukO~Ee)_H58nd5%QKvD>4~K>f^<~VzpkX59e>zSn zba^7L#iWSjXDE?U5|AI5M9N4&emas`ZM22yPPCj6^2?7@VV5~Pjm(NIk(O$dK!Ge4 zDQ>BeRmH4UWIf5&{BSz=dnJ~wmOurzkBO{t&#*6wM(zbX#!^xv&eG&YoTZ3HoLRn9 z;Xo)fehfeQ8JQGYA}#rpSfVkjDD65cZpqFXZOO6Vz^T4o^LHUsq0s&@3@c9~C#cWR zuWnbt?;=~EsUllRu#E)UNw9+iJ4vvM1iMMFhXi{`&`E+W5_FSb9|`u8-~b5@lHd>t zdPvYqg2N;@LV}|Zr0B;syqe_qoLInO!^hZm1$*-ZN!dq&lO#Arg3}~8LxO%1oF&0I z5}YT&1riL9;35R6ywmiu!03)u_-^S57Gvpe7Gr6CgCT1gZRHZ-{sQY!CcC3RQ;Bd9 zfpzqg!m1<~Ccy{^MoADL0r|OMtW zPJ&4iXe78nf}13Gngq8+Tty(YKu3$ zI&z2P|2h)9o&;|o!5c~NCK9}v1aBe1T@pM?g13_3Z6tV(1aF5RwQ|l#jJ$)Go+rUQ zVqXq3H~az%zLo@|AI$m*L}mSar+YLsuDXZ4qpIq6_eDaN;X@T%2*skFApFb%f4Bp0 zur&H26M-1nv$)9$&=Q_ZDZ9o)3@YUWvzWF zt32(9=B`}y$f4XRxHFh=Zq%I{rz+x(-RZ?7{zpr)a&qsK-|bHnH|oWWiQ+cBxNWw$ z{h=%F=t(c7hyuuTZuz|fiONlS<)%dC4!v^6Y~`*O_QoBj)47ycMwzwuixV|l^_s1T zn!S3>-r1V27gxp|=hMq6vw|{p4{{O>d-R4qiH3uE!@=2xo)>S&9iFt4GI<%9m6Ry} z=1%F|mPA3bUeKH<*sK?9o-Nq&aDWuKkRn9{sk&F3C~MTq8mCr}`W91530RU!OHy$r zlqy}RN;=oRyws7iBwb3))inS0_xnFE_@2Rs&2h(}bPY9ZpoYqOYNDz|uWFfkBJSu; z*HTj*H8noyNHlfnO_r1dTQGUHfY`hiK05asP4h>xMOF!iCS90l2n?-g0xZd z4k}6;v_r4ynBH|X?l_j-No~8RZQcC?i48mT4Lhg1`{RzY>D|<}hswICY@M#uC7tWA zetW68C!5;0QhSRI4dHa7y*HZzXAmg9dn-}8T`%39DDBcqyJk!GO&=b3dGR7>sD16lfv8r29P zc|C(B>(EIgyBE($-NoNC={~Q9B5O5jg zPdaN6@FH*-0dPNPv_@TNOgifjxPrh{0^F&%8%&gR=p`MAlHGdA?%9&PFN8=JUqk3R zs+1cl38hU}+GdsZq_Ya;CXwu3Oe?=O1Gx|9ful%b)02{kn#Yhl`*`vkl0$@q%BYDF zw_f5-lx)>Yw$7Gpe*q?izO)Y^KgzA69=Tpu)+dxEU1^$CTuJ8|tc;3e5J~jy4Z5-c z{ce^xF{^e6$?HhsD3@zaBH8Vr4P=r=ru*o;`J>|mxU=S7PGWU~zPe%B4U=AH`UD#L zh;cf%`hM*PTHez#bt~>Tm_CW7GbjvwR3;1$R@i%m0A-KD#`Ud+RBz7Nek z#C&J<-Ht?IvtHOd-QE*-^rm~!co@@G)6QF`E9;WZ_1I@e5IBRt778@zN<-4wh(JFA zg9vP<08UtJPVgWwiU9U{jjq%fQ$YX$I0upPOBA9A+(ZC}E%7a*kWV9UkSu~pXf`q` zZNQ-=w2Arx&2sBhVo#j35w3U=sz<3)s~06apFo zmuN%TX6_pZ>|aW2v5f*7b!B7H*@T5Wfa~~i1a?!vtt;-NvlW382%JX%+5r|vo5BSI zh7f3{K&`IS8q=2#fw6gkaRf93c8Cf$5ZF(48%d>&0%Tc9I$f+53hj&I2<)T)c2+a1 z1p;9NHdwN#LEtF_Gz7XRKxPMHp1*;>!CYE~;}ozt?IGOl^dWGH0=7b)L|^~`9|deJ zc@Y6W0wWZ#^`?qI7=aUF7Ed9dSru$q+(6(U*^}K_d#^T8-lUf|O~H^{Bg&7 zFKeCNdN}Sll0JvV^Oz|tG2mX+x>B8VvW~fczz_nkR0Dt=!-km;fgqJHzxza@xK%H1 zO%!j_i?_`d?|5NN+;JiuLMV(XW%qU^Dz@nr+Y%L>dPV1KMfZzqabkN4xvR)kB$c9s zLYx_A-&ry)D$!xCA=$Z{wiYZ=^O9Y-#XbCZ@(7Y=kZh!y=*HEUX+HvkRscPOO|2dT zMiGG4f>PNO0tmzqz%8b2=A1y_76N-{d)sF3+X(cKEqhYwqySlQjfJIm1@)s-2*9*9 zx5rK+Fh~I00@Ujz^$*75j$LUF+AiUNpyFPCVoj^QrgaL=0f*9FG!CH=me$0&4t-t6 z!xM4G(XFozMqS=0s`LEsDm(DhIT8_sYJ05GWHBP9iXX z08T}?9Jk=`yoi7w0qg>@`%XGHA)q1Mf>MG0!_4vw!wV?fzEuYP)c_kq=yqqyRNj)l4A`U z6J7aK>M)Yf-mv|VAIpv)c?QY#8OVMl2MPIz3`C+iV>#+Q;wM%QlB16&14zb@#2rxW zj8glEpROhl=pM!%RuT2Vuj$C*4&*E7?tKdM=%f+Gf_Y>D%Z=cOP2!qqX+_ zM52D@O#M#1`xLqSIDpoJXl;7XpKx`~xH>-rGugTHAvE@&(LGh1XzQ72>(NgP#T~wM zFIo?ywQZ^+(SCHM{iuF=H0}tbkD&D^TALrJiI(n}mTtZGLfkQsK8DugXr-4Dn`f#v z>pPFd9mmrr(0azA+%wY-`Cf`Uyym{_-lUtzfnTBq?XOP_fc+nau$Z{xfD|0_5QQa|9-I1u?tyk}!ttRK+#b?t|q^=W< zN6K01+VwL^{Ud%3pG2UikOCeGw9P1OkNDv1#rvT%2ppn7`;5~5$hn!Vz7%+7dE|?5 GsrG+*&c4$C delta 5417 zcmaKvYfM|$9l*KvHINs1U;+Vb9*F^)H^c$LBiP0~Z371Lei?9hBmu%JArHK6Um|tt zg08e7O`7P`uHIT{?ov&tpZZ}^t3L0kuX?mf)i$k@rfS+ws!h`#ns(0rPtvHSMfluv z@9%g1=lZ<;#jDc)UXW7WJ8|M@0{^p&rY_{Q@1$ht8q#-)*7W+tQ_6}|zVm@qIV0JW zA^!OZ|9mc`rO1ofqQt@9qw~59iR(6@E4_Ln&zFdNy5+Sauj3(lHJEIKB(mq`9z~6D|?A<{-hJ0q$dgLf&6%qk$*Gavz7cf$-MK&ROQb} z>BSk(JU__JdgET(7cwmNK(viyW2s@$e@Lm`xKe&zs$cmyxlnId98mt7Y*k3IQK>s( zR6a^R%dcm`!y$Qbz&adqktbt+B`DyNR7OVf(~ zXrt)fqgI~23F+sMrW_MbYLE5tj`%*$%gV1I{XL{dkMk#wE*@{w>k}7$3hlUa(#Z2K ziG12ian-#XN>tR7VhkyN0x=@Q^hlie^HAdAFCbvuDXX%5%BKA0l&JN?~e&^seGdO%J~p7wmoBZtp)6;vhTw zL7e#^H$ObY{3y;;xv3svk~4AY$4ag-U5Y)bHU3UAe8Feb7tjL3XT=o#3*^5C`M*M| z{Vgs4<7F6l6ud7XFQq@9IC6jM-`4*quV&9bdfQZxu1wqikZcUjg_dTvCLgt2`chI} zxSXUk)@CX{yu7LRS+|vyhK8RyKW>K4Y=1FantI9tbjZ*HTqfIs`qf)$8l}M^ZBG#%^ zJ5QAADrUV?f zj(tZwc}^tXRmz+hC#uTlmv4m1uLkEsp;=|jS?PG4Ly3RZ-Z+_%!1R(NeU^|7|EZrP zf{*le*u^$q&vvn4l+Y;$kBVCVM&uS~o+v0tLeZR{j~GXS!8L)2VG z%w^FrO?I+WKt@2;h@BQYNU=l7X-NvF0mQM);Yw`_N2(SoX?Y@Oxo+6j0SVF?Q)T#S>LV}@7$E=`~aOHt%H-%=@l8joK z(M&R$V;N4hV_1_%SSdJV5XQ8-O>-P1$3b&CNKQvAr%UzEYI2B`gH(|a7Ay5Y3cwagnP|-pyCt}5mB7u~ouH;BVrrtM zR$^+6ncCHE7=~@AwWF51S4Q()B;Q5zyGVXlEZ?j4hcx*r>p-m&HE6_6V(p|>Ke75_ z)_!#q`o0S_kCad#dgL2DFM57SDQ?RS_u*YX2IrH3TAGQanOfS3r9EcpRC|M(Jk0{A z4WI_&&PS?zv}%A<4aBO3)JbUlLDYs&gK6g>l^$BzPb&Lkl>_Sd4NYER!>El&IC!3V zYTt||&$3a(Qz8lL8|$n2C>Eh`)f|BKN|)r3%!dI$Go=c^a&^n!<6 z@Th&)H2FGPMtmFbxm`QWDkWK^QNAL$*cQS&2+N{p4Ya~ZDxB|_HF=2LMS4$CSi3QN zAMdu&&D*on^Nr+uquMf}$)hZc)Tx6pRz-xDzSNqXAOQyB4N$7gEpR)Qi-Iv}WH- z>&8jlxH@}Rlkc%^q&-N(H`L|(|4c|&kp^^+@xoWKaor}&)mu8&i~0cSm-bU=?HH*Y zQ)i$B29XXSt&UDm`v|d*sKG5wzQcx*jv)=IGxNNrS-wj0n#6_I6zUH~eT0c(e$GH`fo~|81l%`Q?ddonY=ScG$mzE_zMC#MA8I-P~R2j9?>Hw+c9Rn{t zhjd=huzKWTG(<1;kxPB*2sG{j;_F!W>+}ZFb)@zC0opi18u>Sd&>KiMkyb_B^x_b? z$R}=CYzz(^yM@AS6dLx!A=(rqO+o(t3sO70e}|53p*5t3VQ1OfpoJ}@utn{f)Z{5P zjC=D4Qs-N4+A>L6Ce^F37mOmELfWnN4$$74r1vJTVM_`?4FftBL~A;XTAvyip@A(D z*y5T)7X)pZHzaDaXw9luukjw7lR88XiVL@UbW30_>-gai=EGIA=hek!ZeNpng)J`J z9@5u}72|KKNyoh>_>K~;3P2%6=+O{+S+N6$M!=Tr{7SxMDy&`D8ZWZh`9lL?{ zy09PQh{KAFoU=twXmS(VK(>jIs>G=9he@?x9fE$ph4?lU&3+jA(elo6q+XM2*cOsI zK(ZbNXquIzSr3-Vy9ndh#oMe=%_I6F~VD}MjW0i#w11)MMMa^pK2&^vpn-|0> zt67GAwni+}<|a0`+BL1oGt2>Jv&WsXa?hI`?!r3{x|zEknq5b->u9!vWIJNnu6N4C zp~8!n53TIo>(pFN%=OglB4$_2?0%cD~~FR}pAfoG_nl<+-$S(8`TAkrbE)<^>__K{+r z8kpDQ1vZRyO2$15j(6>(obT>AP)K_6s23{l_NLUOh+!gtmNb`#+$7R}lXP*Vjl zRYb$$bi0Od9UKYXt>N4O?gcKGGH!0+&;H#QE$J|I;k-~D=OR9U-AvjdE zAq}@9wnf~uq?45JLkaA(9f&&*FWiOHgY@#gn>Nglh8aF7uSq_bl-)Y!Mahp+ftUq& zV1)6}cTj&nV))`7QpyM6k|r;+0OA3p&`+bJc9hpJBRQc4myQjhH1w^~FiJ~8;%kG2 zW>%BTYV|VjnI5(rM!JF_;CG3bIjR#H_$Ja-r0~#%PX;)D#)uE4l1PY_wUaVFmEio_9Y%adVBR`qG_#RpHquNt z$#lmu`RN{xsCUu2he2}o%rvi+Zhe6q;w=!%8wb)zK$e#b*J#YMRTFnjv5>whDbf% veIZB((oUqM;`{fKvR-u%PHSB@#2&=3R69wLQ*DRo=LP!QvDIJlU(^2wKYEoJ diff --git a/recruitment/__pycache__/utils.cpython-312.pyc b/recruitment/__pycache__/utils.cpython-312.pyc index dc3c1d77a034331cc079b37187af18f9333fd7cd..9ef9f2b6b028aa0691751f295bb5bdb2d3efeca2 100644 GIT binary patch delta 146 zcmcaPpYhdvM&8rByj%=GaPN_1=9!JW3s}T#^fU5vQ}xplGg4Di^aG0Wvr>~wiZ}0K zdFaM_i#sK?Br!9mIKH$fXYvB?8b;R1vOe9?%KF!pjV~%2Z}2+6aor*0qC?1K<Q36m&kphso#bJ}1pHiBWYF8vMS;hYt E0MUXVasU7T diff --git a/recruitment/__pycache__/views.cpython-312.pyc b/recruitment/__pycache__/views.cpython-312.pyc index 0f15f541b3e29df1a4a32ea6dba08a8eb54bc323..2f473d0e7a775d66e21924fb4a1f302c923d7a9b 100644 GIT binary patch delta 75401 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

&PqF(#MUA1UZDBilfYv~ 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 k>*E@esQJ)r7aPRK6;Ld!>Yn2Hq+B7kcD4s{jB1 diff --git a/recruitment/__pycache__/views_frontend.cpython-312.pyc b/recruitment/__pycache__/views_frontend.cpython-312.pyc index d6e46724e7db99dfa4618501206aff0cb0d73be5..c5f727d13c7558733e77bca57e3545697251a5ac 100644 GIT binary patch delta 13205 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 QWq$Lyy analysis_data -> match_score +SCORE_PATH_RAW = F('ai_analysis_data__analysis_data__match_score') + +# Define a robust annotation expression for safely extracting and casting the match score. +# This sequence handles three common failure points: +# 1. Missing keys (handled by Coalesce). +# 2. Textual scores (e.g., "N/A" or "") (handled by NullIf). +# 3. Quoted numeric scores (e.g., "50") from JSONB extraction (handled by Replace). +def get_safe_score_annotation(): + """ + Returns a Django Expression object that safely extracts a score from the + JSONField, cleans it, and casts it to an IntegerField. + """ + + # 1. Extract the JSON value as text and force a CharField for cleaning functions + # Using the double-underscore path is equivalent to the KeyTextTransform + # for the final nested key in a PostgreSQL JSONField. + extracted_text = Cast(SCORE_PATH_RAW, output_field=CharField()) + + # 2. Clean up any residual double-quotes that sometimes remain if the data + # was stored as a quoted string (e.g., "50") + cleaned_text = Replace(extracted_text, Value('"'), Value('')) + + # 3. Use NullIf to convert the cleaned text to NULL if it is an empty string + # (or if it was a non-numeric string like "N/A" after quote removal) + null_if_empty = NullIf(cleaned_text, Value('')) + + # 4. Cast the result (which is now either a clean numeric string or NULL) to an IntegerField. + final_cast = Cast(null_if_empty, output_field=IntegerField()) + + # 5. Use Coalesce to ensure NULL scores (from errors or missing data) default to 0. + return Coalesce(final_cast, Value(0)) \ No newline at end of file diff --git a/recruitment/tasks.py b/recruitment/tasks.py index a0c05cf..6ff28bc 100644 --- a/recruitment/tasks.py +++ b/recruitment/tasks.py @@ -12,7 +12,7 @@ from . linkedin_service import LinkedInService from django.shortcuts import get_object_or_404 from . models import JobPosting from django.utils import timezone -from . models import InterviewSchedule,ScheduledInterview,ZoomMeeting +from . models import InterviewSchedule,ScheduledInterview,ZoomMeetingDetails # Add python-docx import for Word document processing try: @@ -26,7 +26,7 @@ except ImportError: logger = logging.getLogger(__name__) OPENROUTER_API_KEY ='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' -OPENROUTER_MODEL = 'qwen/qwen-2.5-72b-instruct:free' +OPENROUTER_MODEL = 'x-ai/grok-code-fast-1' # OPENROUTER_MODEL = 'openai/gpt-oss-20b:free' # OPENROUTER_MODEL = 'openai/gpt-oss-20b' @@ -440,7 +440,7 @@ def handle_reume_parsing_and_scoring(pk): print(f"Successfully scored and saved analysis for candidate {instance.id}") - +from django.utils import timezone def create_interview_and_meeting( candidate_id, job_id, @@ -457,7 +457,7 @@ def create_interview_and_meeting( job = JobPosting.objects.get(pk=job_id) schedule = InterviewSchedule.objects.get(pk=schedule_id) - interview_datetime = datetime.combine(slot_date, slot_time) + interview_datetime = timezone.make_aware(datetime.combine(slot_date, slot_time)) meeting_topic = f"Interview for {job.title} - {candidate.name}" # 1. External API Call (Slow) @@ -466,24 +466,26 @@ def create_interview_and_meeting( if result["status"] == "success": # 2. Database Writes (Slow) - zoom_meeting = ZoomMeeting.objects.create( + zoom_meeting = ZoomMeetingDetails.objects.create( topic=meeting_topic, start_time=interview_datetime, duration=duration, meeting_id=result["meeting_details"]["meeting_id"], - join_url=result["meeting_details"]["join_url"], + details_url=result["meeting_details"]["join_url"], zoom_gateway_response=result["zoom_gateway_response"], host_email=result["meeting_details"]["host_email"], - password=result["meeting_details"]["password"] + password=result["meeting_details"]["password"], + location_type="Remote" ) ScheduledInterview.objects.create( - application=Application, + application=candidate, job=job, - zoom_meeting=zoom_meeting, + interview_location=zoom_meeting, schedule=schedule, interview_date=slot_date, interview_time=slot_time ) + # Log success or use Django-Q result system for monitoring logger.info(f"Successfully scheduled interview for {Application.name}") return True # Task succeeded @@ -517,7 +519,7 @@ def handle_zoom_webhook_event(payload): try: # Use filter().first() to avoid exceptions if the meeting doesn't exist yet, # and to simplify the logic flow. - meeting_instance = ZoomMeeting.objects.filter(meeting_id=meeting_id_zoom).first() + meeting_instance = ZoomMeetingDetails.objects.filter(meeting_id=meeting_id_zoom).first() print(meeting_instance) # --- 1. Creation and Update Events --- if event_type == 'meeting.updated': @@ -698,7 +700,7 @@ def sync_candidate_to_source_task(candidate_id, source_id): dict: Sync result for this specific candidate-source pair """ from .candidate_sync_service import CandidateSyncService - from .models import Candidate, Source, IntegrationLog + from .models import Application, Source, IntegrationLog logger.info(f"Starting sync task for candidate {candidate_id} to source {source_id}") diff --git a/recruitment/urls.py b/recruitment/urls.py index 394687b..2d3e4c0 100644 --- a/recruitment/urls.py +++ b/recruitment/urls.py @@ -575,7 +575,7 @@ urlpatterns = [ ), # Email composition URLs path( - "jobs//candidates//compose-email/", + "jobs//candidates/compose-email/", views.compose_candidate_email, name="compose_candidate_email", ), @@ -594,16 +594,41 @@ urlpatterns = [ path("documents//delete/", views.document_delete, name="document_delete"), path("documents//download/", views.document_download, name="document_download"), path('jobs//candidates/compose_email/', views.compose_candidate_email, name='compose_candidate_email'), + path('interview/partcipants//',views.create_interview_participants,name='create_interview_participants'), path('interview/email//',views.send_interview_email,name='send_interview_email'), # # --- SCHEDULED INTERVIEW URLS (New Centralized Management) --- - # path('interview/list/', views.InterviewListView.as_view(), name='interview_list'), + # path('interview/list/', views.interview_list, name='interview_list'), # path('interviews//', views.ScheduledInterviewDetailView.as_view(), name='scheduled_interview_detail'), # path('interviews//update/', views.ScheduledInterviewUpdateView.as_view(), name='update_scheduled_interview'), # path('interviews//delete/', views.ScheduledInterviewDeleteView.as_view(), name='delete_scheduled_interview'), + path("interviews/meetings/", views.MeetingListView.as_view(), name="list_meetings"), + + # 1. Onsite Reschedule URL + path( + '/candidate//onsite/reschedule//', + views.reschedule_onsite_meeting, + name='reschedule_onsite_meeting' + ), + + # 2. Onsite Delete URL + + path( + 'job//candidates//delete-onsite-meeting//', + views.delete_onsite_meeting_for_candidate, + name='delete_onsite_meeting_for_candidate' + ), - + path( + 'job//candidate//schedule/onsite/', + views.schedule_onsite_meeting_for_candidate, + name='schedule_onsite_meeting_for_candidate' # This is the name used in the button + ), + + + # Detail View (assuming slug is on ScheduledInterview) + # path("interviews/meetings//", views.MeetingDetailView.as_view(), name="meeting_details"), ] diff --git a/recruitment/utils.py b/recruitment/utils.py index afed297..3ef5dd4 100644 --- a/recruitment/utils.py +++ b/recruitment/utils.py @@ -594,7 +594,7 @@ def update_meeting(instance, updated_data): instance.topic = zoom_details.get("topic", instance.topic) instance.duration = zoom_details.get("duration", instance.duration) - instance.join_url = zoom_details.get("join_url", instance.join_url) + instance.details_url = zoom_details.get("join_url", instance.details_url) instance.password = zoom_details.get("password", instance.password) # Corrected status assignment: instance.status, not instance.password instance.status = zoom_details.get("status") diff --git a/recruitment/views.py b/recruitment/views.py index c4e1841..d499bf9 100644 --- a/recruitment/views.py +++ b/recruitment/views.py @@ -1,7 +1,7 @@ import json import io import zipfile - +import datetime from django.core.paginator import Paginator from django.utils.translation import gettext as _ from django.contrib.auth import get_user_model, authenticate, login, logout @@ -39,7 +39,9 @@ from django.db.models import ( Q, ExpressionWrapper, fields, + Value ) +from django.db.models.functions import Coalesce, Cast, Replace, NullIf from django.db.models.functions import Cast, Coalesce, TruncDate from django.db.models.fields.json import KeyTextTransform from django.db.models.expressions import ExpressionWrapper @@ -50,7 +52,7 @@ from .forms import ( CandidateExamDateForm, JobPostingForm, JobPostingImageForm, - MeetingCommentForm, + InterviewNoteForm, InterviewScheduleForm, FormTemplateForm, SourceForm, @@ -61,7 +63,12 @@ from .forms import ( AgencyLoginForm, PortalLoginForm, MessageForm, - PersonForm + PersonForm, + OnsiteMeetingForm, + + OnsiteReshuduleForm, + OnsiteScheduleForm, + InterviewEmailForm ) from easyaudit.models import CRUDEvent, LoginEvent, RequestEvent from rest_framework import viewsets @@ -91,14 +98,14 @@ from .models import ( FormSubmission, InterviewSchedule, BreakTime, - ZoomMeeting, + ZoomMeetingDetails, Application, Person, JobPosting, ScheduledInterview, JobPostingImage, Profile, - MeetingComment, + InterviewNote, HiringAgency, AgencyJobAssignment, AgencyAccessLink, @@ -106,6 +113,8 @@ from .models import ( Source, Message, Document, + OnsiteLocationDetails, + InterviewLocation ) import logging from datastar_py.django import ( @@ -153,6 +162,7 @@ class PersonCreateView(CreateView): return super().form_valid(form) + class PersonDetailView(DetailView): model = Person template_name = "people/person_detail.html" @@ -182,7 +192,7 @@ class CandidateViewSet(viewsets.ModelViewSet): class ZoomMeetingCreateView(StaffRequiredMixin, CreateView): - model = ZoomMeeting + model = ZoomMeetingDetails template_name = "meetings/create_meeting.html" form_class = ZoomMeetingForm success_url = "/" @@ -222,7 +232,7 @@ class ZoomMeetingCreateView(StaffRequiredMixin, CreateView): class ZoomMeetingListView(StaffRequiredMixin, ListView): - model = ZoomMeeting + model = ZoomMeetingDetails template_name = "meetings/list_meetings.html" context_object_name = "meetings" paginate_by = 10 @@ -272,6 +282,12 @@ class ZoomMeetingListView(StaffRequiredMixin, ListView): context["candidate_name_filter"] = self.request.GET.get("candidate_name", "") return context + +def interview_list(request): + interviews=ScheduledInterview.objects.all() + print(interviews) + return render(request,'interviews/interview_list.html',{'interviews':interviews}) + # @login_required # def InterviewListView(request): # # interview_type=request.GET.get('interview_type','Remote') @@ -342,7 +358,7 @@ class ZoomMeetingListView(StaffRequiredMixin, ListView): class ZoomMeetingDetailsView(StaffRequiredMixin, DetailView): - model = ZoomMeeting + model = ZoomMeetingDetails template_name = "meetings/meeting_details.html" context_object_name = "meeting" @@ -373,27 +389,29 @@ class ZoomMeetingDetailsView(StaffRequiredMixin, DetailView): context['total_participants']=total_participants return context + + class ZoomMeetingUpdateView(StaffRequiredMixin, UpdateView): - model = ZoomMeeting + model = ZoomMeetingDetails form_class = ZoomMeetingForm context_object_name = "meeting" template_name = "meetings/update_meeting.html" success_url = "/" - # def get_form_kwargs(self): - # kwargs = super().get_form_kwargs() - # # Ensure the form is initialized with the instance's current values - # if self.object: - # kwargs['initial'] = getattr(kwargs, 'initial', {}) - # initial_start_time = "" - # if self.object.start_time: - # try: - # initial_start_time = self.object.start_time.strftime('%m-%d-%Y,T%H:%M') - # except AttributeError: - # print(f"Warning: start_time {self.object.start_time} is not a datetime object.") - # initial_start_time = "" - # kwargs['initial']['start_time'] = initial_start_time - # return kwargs + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + # Ensure the form is initialized with the instance's current values + if self.object: + kwargs['initial'] = getattr(kwargs, 'initial', {}) + initial_start_time = "" + if self.object.start_time: + try: + initial_start_time = self.object.start_time.strftime('%m-%d-%Y,T%H:%M') + except AttributeError: + print(f"Warning: start_time {self.object.start_time} is not a datetime object.") + initial_start_time = "" + kwargs['initial']['start_time'] = initial_start_time + return kwargs def form_valid(self, form): instance = form.save(commit=False) @@ -416,7 +434,7 @@ class ZoomMeetingUpdateView(StaffRequiredMixin, UpdateView): def ZoomMeetingDeleteView(request, slug): - meeting = get_object_or_404(ZoomMeeting, slug=slug) + meeting = get_object_or_404(ZoomMeetingDetails, slug=slug) if "HX-Request" in request.headers: return render( request, @@ -583,20 +601,12 @@ def job_detail(request, slug): # --- 2. Quality Metrics (JSON Aggregation) --- - # Filter for candidates who have been scored and annotate with a sortable score - # candidates_with_score = applicants.filter(is_resume_parsed=True).annotate( - # # Extract the score as TEXT - # score_as_text=KeyTextTransform( - # 'match_score', - # KeyTextTransform('resume_data', F('ai_analysis_data')) - # ) - # ).annotate( - # # Cast the extracted text score to a FloatField for numerical operations - # sortable_score=Cast('score_as_text', output_field=FloatField()) - # ) + + candidates_with_score = applicants.filter(is_resume_parsed=True).annotate( annotated_match_score=Coalesce(Cast(SCORE_PATH, output_field=IntegerField()), 0) ) + total_candidates = applicants.count() avg_match_score_result = candidates_with_score.aggregate( avg_score=Avg("annotated_match_score") @@ -696,7 +706,7 @@ ALLOWED_EXTENSIONS = ('.pdf', '.docx') def job_cvs_download(request,slug): job = get_object_or_404(JobPosting,slug=slug) - entries=Candidate.objects.filter(job=job) + entries=Application.objects.filter(job=job) # 2. Create an in-memory byte stream (BytesIO) @@ -1486,7 +1496,6 @@ def _handle_preview_submission(request, slug, job): if form.is_valid(): # Get the form data applications = form.cleaned_data["applications"] - interview_type=form.cleaned_data["interview_type"] start_date = form.cleaned_data["start_date"] end_date = form.cleaned_data["end_date"] working_days = form.cleaned_data["working_days"] @@ -1496,7 +1505,7 @@ def _handle_preview_submission(request, slug, job): buffer_time = form.cleaned_data["buffer_time"] break_start_time = form.cleaned_data["break_start_time"] break_end_time = form.cleaned_data["break_end_time"] - + schedule_interview_type=form.cleaned_data["schedule_interview_type"] # Process break times # breaks = [] # for break_form in break_formset: @@ -1539,15 +1548,14 @@ def _handle_preview_submission(request, slug, job): # Create a preview schedule preview_schedule = [] - for i, candidate in enumerate(applications): + for i, application in enumerate(applications): slot = available_slots[i] preview_schedule.append( - {"applications": applications, "date": slot["date"], "time": slot["time"]} + {"application": application, "date": slot["date"], "time": slot["time"]} ) - + # Save the form data to session for later use schedule_data = { - "interview_type":interview_type, "start_date": start_date.isoformat(), "end_date": end_date.isoformat(), "working_days": working_days, @@ -1555,9 +1563,11 @@ def _handle_preview_submission(request, slug, job): "end_time": end_time.isoformat(), "interview_duration": interview_duration, "buffer_time": buffer_time, - "break_start_time": break_start_time.isoformat(), - "break_end_time": break_end_time.isoformat(), + "break_start_time": break_start_time.isoformat() if break_start_time else None, + "break_end_time": break_end_time.isoformat() if break_end_time else None, "candidate_ids": [c.id for c in applications], + "schedule_interview_type":schedule_interview_type + } request.session[SESSION_DATA_KEY] = schedule_data @@ -1568,7 +1578,6 @@ def _handle_preview_submission(request, slug, job): { "job": job, "schedule": preview_schedule, - "interview_type":interview_type, "start_date": start_date, "end_date": end_date, "working_days": working_days, @@ -1578,6 +1587,8 @@ def _handle_preview_submission(request, slug, job): "break_end_time": break_end_time, "interview_duration": interview_duration, "buffer_time": buffer_time, + "schedule_interview_type":schedule_interview_type, + "form":OnsiteMeetingForm() }, ) else: @@ -1589,6 +1600,175 @@ def _handle_preview_submission(request, slug, job): ) +# def _handle_confirm_schedule(request, slug, job): +# """ +# Handles the final POST request (Confirm Schedule). +# Creates the main schedule record and queues individual interviews asynchronously. +# """ + +# SESSION_DATA_KEY = "interview_schedule_data" +# SESSION_ID_KEY = f"schedule_candidate_ids_{slug}" + +# # 1. Get schedule data from session +# schedule_data = request.session.get(SESSION_DATA_KEY) + +# if not schedule_data: +# messages.error(request, "Session expired. Please try again.") +# return redirect("schedule_interviews", slug=slug) + +# # 2. Create the Interview Schedule (Parent Record) +# # NOTE: You MUST convert the time strings back to Python time objects here. +# try: +# schedule = InterviewSchedule.objects.create( +# job=job, +# created_by=request.user, +# start_date=datetime.fromisoformat(schedule_data["start_date"]).date(), +# end_date=datetime.fromisoformat(schedule_data["end_date"]).date(), +# working_days=schedule_data["working_days"], +# start_time=time.fromisoformat(schedule_data["start_time"]), +# end_time=time.fromisoformat(schedule_data["end_time"]), +# interview_duration=schedule_data["interview_duration"], +# buffer_time=schedule_data["buffer_time"], +# # Use the simple break times saved in the session +# # If the value is None (because required=False in form), handle it gracefully +# break_start_time=schedule_data.get("break_start_time"), +# break_end_time=schedule_data.get("break_end_time"), +# schedule_interview_type=schedule_data.get("schedule_interview_type") +# ) +# except Exception as e: +# # Handle database creation error +# messages.error(request, f"Error creating schedule: {e}") +# if SESSION_ID_KEY in request.session: +# del request.session[SESSION_ID_KEY] +# return redirect("schedule_interviews", slug=slug) + +# # 3. Setup candidates and get slots +# candidates = Application.objects.filter(id__in=schedule_data["candidate_ids"]) +# print(candidates) +# schedule.applications.set(candidates) +# available_slots = get_available_time_slots( +# schedule +# ) # This should still be synchronous and fast + +# # 4. Queue scheduled interviews asynchronously (FAST RESPONSE) +# if schedule_data.get("schedule_interview_type")=='Remote': +# print('....remote..') +# queued_count = 0 +# for i, candidate in enumerate(candidates): +# if i < len(available_slots): +# slot = available_slots[i] + +# # Dispatch the individual creation task to the background queue +# async_task( +# "recruitment.tasks.create_interview_and_meeting", +# candidate.pk, +# job.pk, +# schedule.pk, +# slot["date"], +# slot["time"], +# schedule.interview_duration, +# ) +# queued_count += 1 + +# messages.success( +# request, +# f"Schedule successfully created. Queued {queued_count} interviews to be booked asynchronously. Check back in a moment!", +# ) + +# # Clear both session data keys upon successful completion +# if SESSION_DATA_KEY in request.session: +# del request.session[SESSION_DATA_KEY] +# if SESSION_ID_KEY in request.session: +# del request.session[SESSION_ID_KEY] + +# return redirect("job_detail", slug=slug) + +# elif schedule_data.get("schedule_interview_type") == 'Onsite': +# # The form submission for Onsite details should happen here. +# # This block assumes the OnsiteMeetingForm is being submitted NOW. + +# # NOTE: start_time and duration must be passed through the form +# # for OnsiteLocationDetails creation. + +# if request.method == 'POST': + +# if available_slots: +# first_slot = available_slots[0] +# # Combine the first slot's date and the schedule's start time +# location_start_dt = datetime.combine(first_slot['date'], schedule.start_time) +# else: +# # Fallback if no slots (should not happen if candidates > 0) +# location_start_dt = datetime.now() + +# # Create a form using the submitted POST data +# form = OnsiteMeetingForm(request.POST) + +# if form.is_valid(): +# # 1. Extract location-specific data from the form +# topic = form.cleaned_data['topic'] +# physical_address = form.cleaned_data['physical_address'] +# room_number = form.cleaned_data['room_number'] + +# # 2. Create the OnsiteLocationDetails instance (The Location Template) +# # The duration comes from the parent InterviewSchedule +# try: +# onsite_location = OnsiteLocationDetails.create( +# start_time=location_start_dt, # Uses datetime derived from first slot date +# duration=schedule.interview_duration, # Uses duration from parent schedule +# physical_address=physical_address, +# room_number=room_number, +# ) +# onsite_location.save() + +# # 3. Create the ScheduledInterview entries, linking the location +# for i, candidate in enumerate(candidates): +# if i < len(available_slots): +# slot = available_slots[i] + +# # Combine date and time from the slot for the ScheduledInterview creation + +# ScheduledInterview.objects.create( +# application=candidate, +# job=job, +# schedule=schedule, +# interview_date=slot['date'], +# interview_time=slot['time'], + +# # CRITICAL: Link the location object +# interview_location=onsite_location, +# # Assuming 'topic' is stored on the ScheduledInterview model +# # topic=topic +# ) + +# messages.success( +# request, +# f"Onsite schedule Interview Create succesfully" +# ) + +# # Clear session data keys upon successful completion +# if SESSION_DATA_KEY in request.session: del request.session[SESSION_DATA_KEY] +# if SESSION_ID_KEY in request.session: del request.session[SESSION_ID_KEY] + +# # Redirect to a confirmation or job details page +# return redirect('job_detail', slug=job.slug) + +# except Exception as e: +# # Handle database creation error +# messages.error(request, f"Error creating onsite location/interviews: {e}") +# # Keep the form data for re-submission if possible, or redirect +# return render(request, 'interviews/onsite_location_form.html', {'form': form, 'schedule': schedule}) + +# else: +# # Form is invalid, re-render with errors +# return render(request, 'interviews/onsite_location_form.html', {'form': form, 'schedule': schedule,'job':job}) + +# else: +# # For a GET request (First time after InterviewSchedule is created) +# # Render the form to collect location details +# form = OnsiteMeetingForm() +# print(f"job:{job}") +# return render(request,'interviews/onsite_location_form.html',{'form': form, 'schedule': schedule,'job':job}) + def _handle_confirm_schedule(request, slug, job): """ Handles the final POST request (Confirm Schedule). @@ -1606,12 +1786,14 @@ def _handle_confirm_schedule(request, slug, job): return redirect("schedule_interviews", slug=slug) # 2. Create the Interview Schedule (Parent Record) - # NOTE: You MUST convert the time strings back to Python time objects here. try: - schedule = InterviewSchedule.objects.create( + # Handle break times: If they exist, convert them; otherwise, pass None. + break_start = schedule_data.get("break_start_time") + break_end = schedule_data.get("break_end_time") + + schedule = InterviewSchedule.objects.create( job=job, created_by=request.user, - interview_type=schedule_data["interview_type"], start_date=datetime.fromisoformat(schedule_data["start_date"]).date(), end_date=datetime.fromisoformat(schedule_data["end_date"]).date(), working_days=schedule_data["working_days"], @@ -1619,41 +1801,34 @@ def _handle_confirm_schedule(request, slug, job): end_time=time.fromisoformat(schedule_data["end_time"]), interview_duration=schedule_data["interview_duration"], buffer_time=schedule_data["buffer_time"], - # Use the simple break times saved in the session - # If the value is None (because required=False in form), handle it gracefully - break_start_time=schedule_data.get("break_start_time"), - break_end_time=schedule_data.get("break_end_time"), + # Convert time strings to time objects only if they exist and handle None gracefully + break_start_time=time.fromisoformat(break_start) if break_start else None, + break_end_time=time.fromisoformat(break_end) if break_end else None, + schedule_interview_type=schedule_data.get("schedule_interview_type") ) except Exception as e: - # Handle database creation error + # Clear data on failure to prevent stale data causing repeated errors messages.error(request, f"Error creating schedule: {e}") - if SESSION_ID_KEY in request.session: - del request.session[SESSION_ID_KEY] + if SESSION_ID_KEY in request.session: del request.session[SESSION_ID_KEY] + if SESSION_DATA_KEY in request.session: del request.session[SESSION_DATA_KEY] return redirect("schedule_interviews", slug=slug) # 3. Setup candidates and get slots candidates = Application.objects.filter(id__in=schedule_data["candidate_ids"]) - schedule.candidates.set(candidates) - available_slots = get_available_time_slots( - schedule - ) # This should still be synchronous and fast + schedule.applications.set(candidates) + available_slots = get_available_time_slots(schedule) - # 4. Queue scheduled interviews asynchronously (FAST RESPONSE) - if schedule.interview_type=='Remote': + # 4. Handle Remote/Onsite logic + if schedule_data.get("schedule_interview_type") == 'Remote': + # ... (Remote logic remains unchanged) queued_count = 0 for i, candidate in enumerate(candidates): if i < len(available_slots): slot = available_slots[i] - # Dispatch the individual creation task to the background queue async_task( "recruitment.tasks.create_interview_and_meeting", - candidate.pk, - job.pk, - schedule.pk, - slot["date"], - slot["time"], - schedule.interview_duration, + candidate.pk, job.pk, schedule.pk, slot["date"], slot["time"], schedule.interview_duration, ) queued_count += 1 @@ -1662,36 +1837,84 @@ def _handle_confirm_schedule(request, slug, job): f"Schedule successfully created. Queued {queued_count} interviews to be booked asynchronously. Check back in a moment!", ) - # Clear both session data keys upon successful completion - if SESSION_DATA_KEY in request.session: - del request.session[SESSION_DATA_KEY] - if SESSION_ID_KEY in request.session: - del request.session[SESSION_ID_KEY] - - return redirect("job_detail", slug=slug) - else: - for i, candidate in enumerate(candidates): - if i < len(available_slots): - slot = available_slots[i] - ScheduledInterview.objects.create( - candidate=candidate, - job=job, - # zoom_meeting=None, - schedule=schedule, - interview_date=slot['date'], - interview_time= slot['time'] - ) - - messages.success( - request, - f"Onsite schedule Interview Create succesfully" - ) - - # Clear both session data keys upon successful completion if SESSION_DATA_KEY in request.session: del request.session[SESSION_DATA_KEY] if SESSION_ID_KEY in request.session: del request.session[SESSION_ID_KEY] - return redirect('schedule_interview_location_form',slug=schedule.slug) + return redirect("job_detail", slug=slug) + + elif schedule_data.get("schedule_interview_type") == 'Onsite': + print("inside...") + + if request.method == 'POST': + form = OnsiteMeetingForm(request.POST) + + if form.is_valid(): + + if not available_slots: + messages.error(request, "No available slots found for the selected schedule range.") + return render(request, 'interviews/onsite_location_form.html', {'form': form, 'schedule': schedule, 'job': job}) + + # Extract common location data from the form + physical_address = form.cleaned_data['physical_address'] + room_number = form.cleaned_data['room_number'] + + try: + # 1. Iterate over candidates and create a NEW Location object for EACH + for i, candidate in enumerate(candidates): + if i < len(available_slots): + slot = available_slots[i] + + + location_start_dt = datetime.combine(slot['date'], schedule.start_time) + + # --- CORE FIX: Create a NEW Location object inside the loop --- + onsite_location = OnsiteLocationDetails.objects.create( + start_time=location_start_dt, + duration=schedule.interview_duration, + physical_address=physical_address, + room_number=room_number, + location_type="Onsite" + + ) + + # 2. Create the ScheduledInterview, linking the unique location + ScheduledInterview.objects.create( + application=candidate, + job=job, + schedule=schedule, + interview_date=slot['date'], + interview_time=slot['time'], + interview_location=onsite_location, + ) + + messages.success( + request, + f"Onsite schedule interviews created successfully for {len(candidates)} candidates." + ) + + # Clear session data keys upon successful completion + if SESSION_DATA_KEY in request.session: del request.session[SESSION_DATA_KEY] + if SESSION_ID_KEY in request.session: del request.session[SESSION_ID_KEY] + + return redirect('job_detail', slug=job.slug) + + except Exception as e: + messages.error(request, f"Error creating onsite location/interviews: {e}") + # On failure, re-render the form with the error and ensure 'job' is present + return render(request, 'interviews/onsite_location_form.html', {'form': form, 'schedule': schedule, 'job': job}) + + else: + # Form is invalid, re-render with errors + # Ensure 'job' is passed to prevent NoReverseMatch + return render(request, 'interviews/onsite_location_form.html', {'form': form, 'schedule': schedule, 'job': job}) + + else: + # For a GET request + form = OnsiteMeetingForm() + + return render(request, 'interviews/onsite_location_form.html', {'form': form, 'schedule': schedule, 'job': job}) + + def schedule_interviews_view(request, slug): job = get_object_or_404(JobPosting, slug=slug) if request.method == "POST": @@ -1909,38 +2132,12 @@ def candidate_update_status(request, slug): def candidate_interview_view(request, slug): job = get_object_or_404(JobPosting, slug=slug) - if request.method == "POST": - form = ParticipantsSelectForm(request.POST, instance=job) - print(form.errors) - - if form.is_valid(): - # Save the main instance (JobPosting) - job_instance = form.save(commit=False) - job_instance.save() - - # MANUALLY set the M2M relationships based on submitted data - job_instance.participants.set(form.cleaned_data["participants"]) - job_instance.users.set(form.cleaned_data["users"]) - - messages.success(request, "Interview participants updated successfully.") - return redirect("candidate_interview_view", slug=job.slug) - - else: - initial_data = { - "participants": job.participants.all(), - "users": job.users.all(), - } - form = ParticipantsSelectForm(instance=job, initial=initial_data) - - else: - form = ParticipantsSelectForm(instance=job) context = { "job": job, "candidates": job.interview_candidates, "current_stage": "Interview", - "form": form, - "participants_count": job.participants.count() + job.users.count(), + } return render(request, "recruitment/candidate_interview_view.html", context) @@ -1949,7 +2146,7 @@ def candidate_interview_view(request, slug): def reschedule_meeting_for_candidate(request, slug, candidate_id, meeting_id): job = get_object_or_404(JobPosting, slug=slug) candidate = get_object_or_404(Application, pk=candidate_id) - meeting = get_object_or_404(ZoomMeeting, pk=meeting_id) + meeting = get_object_or_404(ZoomMeetingDetails, pk=meeting_id) form = ZoomMeetingForm(instance=meeting) if request.method == "POST": @@ -1988,7 +2185,7 @@ def reschedule_meeting_for_candidate(request, slug, candidate_id, meeting_id): def delete_meeting_for_candidate(request, slug, candidate_pk, meeting_id): job = get_object_or_404(JobPosting, slug=slug) candidate = get_object_or_404(Application, pk=candidate_pk) - meeting = get_object_or_404(ZoomMeeting, pk=meeting_id) + meeting = get_object_or_404(ZoomMeetingDetails, pk=meeting_id) if request.method == "POST": result = delete_zoom_meeting(meeting.meeting_id) if ( @@ -2016,6 +2213,53 @@ def delete_meeting_for_candidate(request, slug, candidate_pk, meeting_id): } return render(request, "meetings/delete_meeting_form.html", context) +@staff_user_required +def delete_zoom_meeting_for_candidate(request, slug, candidate_pk, meeting_id): + """ + Deletes a specific Zoom (Remote) meeting instance. + The ZoomMeetingDetails object inherits from InterviewLocation, + which is linked to ScheduledInterview. Deleting the subclass + should trigger CASCADE/SET_NULL correctly on the FK chain. + """ + job = get_object_or_404(JobPosting, slug=slug) + candidate = get_object_or_404(Application, pk=candidate_pk) + + # Target the specific Zoom meeting details instance + meeting = get_object_or_404(ZoomMeetingDetails, pk=meeting_id) + + if request.method == "POST": + # 1. Attempt to delete the meeting from the external Zoom API + result = delete_zoom_meeting(meeting.meeting_id) + + # 2. Check for success OR if the meeting was already deleted externally + if ( + result["status"] == "success" + or "Meeting does not exist" in result["details"]["message"] + ): + # 3. Delete the local Django object. This will delete the base + # InterviewLocation object and update the ScheduledInterview FK. + meeting.delete() + messages.success(request, f"Remote meeting for {candidate.name} deleted successfully.") + else: + messages.error(request, result["message"]) + + return redirect(reverse("candidate_interview_view", kwargs={"slug": job.slug})) + + context = { + "job": job, + "candidate": candidate, + "meeting": meeting, + "location_type": "Remote", + "delete_url": reverse( + "delete_remote_meeting_for_candidate", # Use the specific new URL name + kwargs={ + "slug": job.slug, + "candidate_pk": candidate_pk, + "meeting_id": meeting_id, + }, + ), + } + return render(request, "meetings/delete_meeting_form.html", context) @staff_user_required def interview_calendar_view(request, slug): @@ -2133,7 +2377,7 @@ def api_schedule_candidate_meeting(request, job_slug, candidate_pk): if result["status"] == "success": zoom_meeting_details = result["meeting_details"] - zoom_meeting = ZoomMeeting.objects.create( + zoom_meeting = ZoomMeetingDetails.objects.create( topic=topic, start_time=start_time, # Store in local timezone duration=duration, @@ -2246,7 +2490,7 @@ def api_schedule_candidate_meeting(request, job_slug, candidate_pk): if result["status"] == "success": zoom_meeting_details = result["meeting_details"] - zoom_meeting = ZoomMeeting.objects.create( + zoom_meeting = ZoomMeetingDetails.objects.create( topic=topic, start_time=start_time, duration=duration, @@ -2679,23 +2923,25 @@ def schedule_meeting_for_candidate(request, slug, candidate_pk): if zoom_creation_result["status"] == "success": zoom_details = zoom_creation_result["meeting_details"] - zoom_meeting_instance = ZoomMeeting.objects.create( + zoom_meeting_instance = ZoomMeetingDetails.objects.create( topic=topic_val, start_time=start_time_val, # Store the original datetime duration=duration_val, meeting_id=zoom_details["meeting_id"], - join_url=zoom_details["join_url"], + details_url=zoom_details["join_url"], password=zoom_details.get("password"), # password might be None status=zoom_creation_result["zoom_gateway_response"].get( "status", "waiting" ), zoom_gateway_response=zoom_creation_result["zoom_gateway_response"], + location_type='Remote', + ) # Create a ScheduledInterview record ScheduledInterview.objects.create( application=candidate, job=job, - zoom_meeting=zoom_meeting_instance, + interview_location=zoom_meeting_instance, interview_date=start_time_val.date(), interview_time=start_time_val.time(), status="scheduled", @@ -2959,7 +3205,7 @@ def zoom_webhook_view(request): @staff_user_required def add_meeting_comment(request, slug): """Add a comment to a meeting""" - meeting = get_object_or_404(ZoomMeeting, slug=slug) + meeting = get_object_or_404(ZoomMeetingDetails, slug=slug) if request.method == "POST": form = MeetingCommentForm(request.POST) @@ -3000,8 +3246,8 @@ def add_meeting_comment(request, slug): @staff_user_required def edit_meeting_comment(request, slug, comment_id): """Edit a meeting comment""" - meeting = get_object_or_404(ZoomMeeting, slug=slug) - comment = get_object_or_404(MeetingComment, id=comment_id, meeting=meeting) + meeting = get_object_or_404(ZoomMeetingDetails, slug=slug) + comment = get_object_or_404(InterviewNote, id=comment_id, meeting=meeting) # Check if user is author if comment.author != request.user and not request.user.is_staff: @@ -3036,8 +3282,8 @@ def edit_meeting_comment(request, slug, comment_id): @staff_user_required def delete_meeting_comment(request, slug, comment_id): """Delete a meeting comment""" - meeting = get_object_or_404(ZoomMeeting, slug=slug) - comment = get_object_or_404(MeetingComment, id=comment_id, meeting=meeting) + meeting = get_object_or_404(ZoomMeetingDetails, slug=slug) + comment = get_object_or_404(InterviewNote, id=comment_id, meeting=meeting) # Check if user is the author if comment.author != request.user and not request.user.is_staff: @@ -3081,7 +3327,7 @@ def delete_meeting_comment(request, slug, comment_id): @staff_user_required def set_meeting_candidate(request, slug): - meeting = get_object_or_404(ZoomMeeting, slug=slug) + meeting = get_object_or_404(ZoomMeetingDetails, slug=slug) if request.method == "POST" and "HX-Request" not in request.headers: form = InterviewForm(request.POST) if form.is_valid(): @@ -4806,14 +5052,15 @@ def api_candidate_detail(request, candidate_id): @staff_user_required -def compose_candidate_email(request, job_slug, candidate_slug): +def compose_candidate_email(request, job_slug): """Compose email to participants about a candidate""" from .email_service import send_bulk_email job = get_object_or_404(JobPosting, slug=job_slug) - candidate = get_object_or_404(Application, slug=candidate_slug, job=job) - if request.method == "POST": - form = CandidateEmailForm(job, candidate, request.POST) + + # # candidate = get_object_or_404(Application, slug=candidate_slug, job=job) + # if request.method == "POST": + # form = CandidateEmailForm(job, candidate, request.POST) candidate_ids=request.GET.getlist('candidate_ids') candidates=Application.objects.filter(id__in=candidate_ids) @@ -4827,48 +5074,7 @@ def compose_candidate_email(request, job_slug, candidate_slug): print("form is valid ...") # Get email addresses email_addresses = form.get_email_addresses() - if not email_addresses: - messages.error( - request, "No valid email addresses found for selected recipients." - ) - return render( - request, - "includes/email_compose_form.html", - {"form": form, "job": job, "candidate": candidate}, - ) - - # Check if this is an interview invitation - subject = form.cleaned_data.get("subject", "").lower() - is_interview_invitation = "interview" in subject or "meeting" in subject - - if is_interview_invitation: - # Use HTML template for interview invitations - meeting_details = None - if form.cleaned_data.get("include_meeting_details"): - # Try to get meeting details from candidate - meeting_details = { - "topic": f"Interview for {job.title}", - "date_time": getattr( - candidate, "interview_date", "To be scheduled" - ), - "duration": "60 minutes", - "join_url": getattr(candidate, "meeting_url", ""), - } - - from .email_service import send_interview_invitation_email - - email_result = send_interview_invitation_email( - candidate=candidate, - job=job, - meeting_details=meeting_details, - recipient_list=email_addresses, - ) - else: - # Get formatted message for regular emails - message = form.get_formatted_message() - subject = form.cleaned_data.get("subject") - print(email_addresses) - + if not email_addresses: messages.error(request, 'No email selected') @@ -4903,15 +5109,7 @@ def compose_candidate_email(request, job_slug, candidate_slug): f"Email sent successfully to {len(email_addresses)} recipient(s).", ) - # For HTMX requests, return success response - if "HX-Request" in request.headers: - return JsonResponse( - { - "success": True, - "message": f"Email sent successfully to {len(email_addresses)} recipient(s).", - } - ) - + return redirect("candidate_interview_view", slug=job.slug) else: messages.error( @@ -4933,31 +5131,11 @@ def compose_candidate_email(request, job_slug, candidate_slug): return render( request, "includes/email_compose_form.html", - {"form": form, "job": job, "candidate": candidate}, + {"form": form, "job": job, "candidate": candidates}, ) - return render(request, 'includes/email_compose_form.html', { - 'form': form, - 'job': job, - 'candidate': candidates - }) + - # except Exception as e: - # logger.error(f"Error sending candidate email: {e}") - # messages.error(request, f'An error occurred while sending the email: {str(e)}') - - # # For HTMX requests, return error response - # if 'HX-Request' in request.headers: - # return JsonResponse({ - # 'success': False, - # 'error': f'An error occurred while sending the email: {str(e)}' - # }) - - # return render(request, 'includes/email_compose_form.html', { - # 'form': form, - # 'job': job, - # 'candidate': candidate - # }) else: # Form validation errors print('form is not valid') @@ -4976,17 +5154,18 @@ def compose_candidate_email(request, job_slug, candidate_slug): return render( request, "includes/email_compose_form.html", - {"form": form, "job": job, "candidates": candidate},s + {"form": form, "job": job, "candidates": candidates}, ) else: # GET request - show the form - form = CandidateEmailForm(job, candidate) + form = CandidateEmailForm(job, candidates) return render( request, "includes/email_compose_form.html", - {"form": form, "job": job, "candidate": candidate}, + # {"form": form, "job": job, "candidates": candidates}, + {"form": form,"job":job}, ) @@ -5287,9 +5466,288 @@ def send_interview_email(request, slug): # form=InterviewScheduleLocationForm(instance=schedule) # return render(request,'interviews/schedule_interview_location_form.html',{'form':form,'schedule':schedule}) +class MeetingListView(ListView): + """ + A unified view to list both Remote and Onsite Scheduled Interviews. + """ + model = ScheduledInterview + template_name = "meetings/list_meetings.html" + context_object_name = "meetings" + paginate_by = 100 + + def get_queryset(self): + # Start with a base queryset, ensuring an InterviewLocation link exists. + queryset = super().get_queryset().filter(interview_location__isnull=False).select_related( + 'interview_location', + 'job', + 'application__person', + 'application', + ).prefetch_related( + 'interview_location__zoommeetingdetails', + 'interview_location__onsitelocationdetails', + ) + # Note: Printing the queryset here can consume memory for large sets. + + # Get filters from GET request + search_query = self.request.GET.get("q") + status_filter = self.request.GET.get("status") + candidate_name_filter = self.request.GET.get("candidate_name") + type_filter = self.request.GET.get("type") + print(type_filter) + + # 2. Type Filter: Filter based on the base InterviewLocation's type + if type_filter: + # Use .title() to handle case variations from URL (e.g., 'remote' -> 'Remote') + normalized_type = type_filter.title() + print(normalized_type) + # Assuming InterviewLocation.LocationType is accessible/defined + if normalized_type in ['Remote', 'Onsite']: + queryset = queryset.filter(interview_location__location_type=normalized_type) + print(queryset) + + # 3. Search by Topic (stored on InterviewLocation) + if search_query: + queryset = queryset.filter(interview_location__topic__icontains=search_query) + + # 4. Status Filter + if status_filter: + queryset = queryset.filter(status=status_filter) + + # 5. Candidate Name Filter + if candidate_name_filter: + queryset = queryset.filter( + Q(application__person__first_name__icontains=candidate_name_filter) | + Q(application__person__last_name__icontains=candidate_name_filter) + ) + + return queryset.order_by("-interview_date", "-interview_time") + + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + # Pass filters back to the template for retention + context["search_query"] = self.request.GET.get("q", "") + context["status_filter"] = self.request.GET.get("status", "") + context["candidate_name_filter"] = self.request.GET.get("candidate_name", "") + context["type_filter"] = self.request.GET.get("type", "") + + + # CORRECTED: Pass the status choices from the model class for the filter dropdown + context["status_choices"] = self.model.InterviewStatus.choices + + meetings_data = [] + + for interview in context.get(self.context_object_name, []): + location = interview.interview_location + details = None + + if not location: + continue + + # Determine and fetch the CONCRETE details object (prefetched) + if location.location_type == location.LocationType.REMOTE: + details = getattr(location, 'zoommeetingdetails', None) + elif location.location_type == location.LocationType.ONSITE: + details = getattr(location, 'onsitelocationdetails', None) + + # Combine date and time for template display/sorting + start_datetime = None + if interview.interview_date and interview.interview_time: + start_datetime = datetime.combine(interview.interview_date, interview.interview_time) + + # SUCCESS: Build the data dictionary + meetings_data.append({ + 'interview': interview, + 'location': location, + 'details': details, + 'type': location.location_type, + 'topic': location.topic, + 'slug': interview.slug, + 'start_time': start_datetime, # Combined datetime object + # Duration should ideally be on ScheduledInterview or fetched from details + 'duration': getattr(details, 'duration', 'N/A'), + # Use details.join_url and fallback to None, if Remote + 'join_url': getattr(details, 'join_url', None) if location.location_type == location.LocationType.REMOTE else None, + 'meeting_id': getattr(details, 'meeting_id', None), + # Use the primary status from the ScheduledInterview record + 'status': interview.status, + }) + + context["meetings_data"] = meetings_data + + return context + +def reschedule_onsite_meeting(request, slug, candidate_id, meeting_id): + """Handles the rescheduling of an Onsite Interview (updates OnsiteLocationDetails).""" + job = get_object_or_404(JobPosting, slug=slug) + candidate = get_object_or_404(Application, pk=candidate_id) + + # Fetch the OnsiteLocationDetails instance, ensuring it belongs to this candidate. + # We use the reverse relationship: onsitelocationdetails -> interviewlocation -> scheduledinterview -> application + # The 'interviewlocation_ptr' is the foreign key field name if OnsiteLocationDetails is a proxy/multi-table inheritance model. + onsite_meeting = get_object_or_404( + OnsiteLocationDetails, + pk=meeting_id, + # Correct filter: Use the reverse link through the ScheduledInterview model. + # This assumes your ScheduledInterview model links back to a generic InterviewLocation base. + interviewlocation_ptr__scheduled_interview__application=candidate + ) + + if request.method == 'POST': + form = OnsiteReshuduleForm(request.POST, instance=onsite_meeting) + + if form.is_valid(): + instance = form.save(commit=False) + + if instance.start_time < timezone.now(): + messages.error(request, "Start time must be in the future for rescheduling.") + return render(request, "meetings/reschedule_onsite.html", {"form": form, "job": job, "candidate": candidate, "meeting": onsite_meeting}) + + # Update parent status + try: + # Retrieve the ScheduledInterview instance via the reverse relationship + scheduled_interview = ScheduledInterview.objects.get( + interview_location=instance.interviewlocation_ptr # Use the base model FK + ) + scheduled_interview.status = ScheduledInterview.InterviewStatus.SCHEDULED + scheduled_interview.save() + except ScheduledInterview.DoesNotExist: + messages.warning(request, "Parent schedule record not found. Status not updated.") + + instance.save() + messages.success(request, "Onsite meeting successfully rescheduled! ✅") + + return redirect(reverse("candidate_interview_view", kwargs={'slug': job.slug})) + + else: + form = OnsiteReshuduleForm(instance=onsite_meeting) + + context = { + "form": form, + "job": job, + "candidate": candidate, + "meeting": onsite_meeting + } + return render(request, "meetings/reschedule_onsite_meeting.html", context) -def onsite_interview_list_view(request): - onsite_interviews=ScheduledInterview.objects.filter(schedule__interview_type='Onsite') - return render(request,'interviews/onsite_interview_list.html',{'onsite_interviews':onsite_interviews}) +# recruitment/views.py +@staff_user_required +def delete_onsite_meeting_for_candidate(request, slug, candidate_pk, meeting_id): + """ + Deletes a specific Onsite Location Details instance. + This does not require an external API call. + """ + job = get_object_or_404(JobPosting, slug=slug) + candidate = get_object_or_404(Application, pk=candidate_pk) + + # Target the specific Onsite meeting details instance + meeting = get_object_or_404(OnsiteLocationDetails, pk=meeting_id) + + if request.method == "POST": + # Delete the local Django object. + # This deletes the base InterviewLocation and updates the ScheduledInterview FK. + meeting.delete() + messages.success(request, f"Onsite meeting for {candidate.name} deleted successfully.") + + return redirect(reverse("candidate_interview_view", kwargs={"slug": job.slug})) + + context = { + "job": job, + "candidate": candidate, + "meeting": meeting, + "location_type": "Onsite", + "delete_url": reverse( + "delete_onsite_meeting_for_candidate", # Use the specific new URL name + kwargs={ + "slug": job.slug, + "candidate_pk": candidate_pk, + "meeting_id": meeting_id, + }, + ), + } + return render(request, "meetings/delete_meeting_form.html", context) + + + +def schedule_onsite_meeting_for_candidate(request, slug, candidate_pk): + """ + Handles scheduling a NEW Onsite Interview for a candidate using OnsiteScheduleForm. + """ + job = get_object_or_404(JobPosting, slug=slug) + candidate = get_object_or_404(Application, pk=candidate_pk) + + action_url = reverse('schedule_onsite_meeting_for_candidate', + kwargs={'slug': job.slug, 'candidate_pk': candidate.pk}) + + if request.method == 'POST': + # Use the new form + form = OnsiteScheduleForm(request.POST) + if form.is_valid(): + + cleaned_data = form.cleaned_data + + # 1. Create OnsiteLocationDetails + onsite_loc = OnsiteLocationDetails( + topic=cleaned_data['topic'], + physical_address=cleaned_data['physical_address'], + room_number=cleaned_data['room_number'], + start_time=cleaned_data['start_time'], + duration=cleaned_data['duration'], + status=OnsiteLocationDetails.Status.WAITING, + location_type=InterviewLocation.LocationType.ONSITE, + ) + onsite_loc.save() + + # 2. Extract Date and Time + interview_date = cleaned_data['start_time'].date() + interview_time = cleaned_data['start_time'].time() + + # 3. Create ScheduledInterview linked to the new location + # Use cleaned_data['application'] and cleaned_data['job'] from the form + ScheduledInterview.objects.create( + application=cleaned_data['application'], + job=cleaned_data['job'], + interview_location=onsite_loc, + interview_date=interview_date, + interview_time=interview_time, + status=ScheduledInterview.InterviewStatus.SCHEDULED, + ) + + messages.success(request, "Onsite interview scheduled successfully. ✅") + return redirect(reverse("candidate_interview_view", kwargs={'slug': job.slug})) + + else: + # GET Request: Initialize the hidden fields with the correct objects + initial_data = { + 'application': candidate, # Pass the object itself for ModelChoiceField + 'job': job, # Pass the object itself for ModelChoiceField + } + # Use the new form + form = OnsiteScheduleForm(initial=initial_data) + + context = { + "form": form, + "job": job, + "candidate": candidate, + "action_url": action_url, + } + + return render(request, "meetings/schedule_onsite_meeting_form.html", context) +# def meeting_list_view(request): +# queryset = ScheduledInterview.filter(interview_location__isnull=False).select_related( +# 'interview_location', +# 'job', +# 'application__person', +# 'application', +# ).prefetch_related( +# 'interview_location__zoommeetingdetails', +# 'interview_location__onsitelocationdetails', +# ) +# print(queryset) +# return render(request,) +# ========================================================================= +# 2. Simple Meeting Creation Views (Placeholders) +# ========================================================================= diff --git a/recruitment/views_frontend.py b/recruitment/views_frontend.py index ada854a..8598100 100644 --- a/recruitment/views_frontend.py +++ b/recruitment/views_frontend.py @@ -8,6 +8,7 @@ from django.db.models.fields.json import KeyTextTransform from recruitment.utils import json_to_markdown_table from django.db.models import Count, Avg, F, FloatField from django.db.models.functions import Cast +from django.db.models.functions import Coalesce, Cast, Replace, NullIf from . import models from django.utils.translation import get_language from . import forms @@ -22,7 +23,7 @@ from django.views.generic import ListView, CreateView, UpdateView, DeleteView, D # JobForm removed - using JobPostingForm instead from django.urls import reverse_lazy from django.db.models import FloatField -from django.db.models import F, IntegerField, Count, Avg, Sum, Q, ExpressionWrapper, fields +from django.db.models import F, IntegerField, Count, Avg, Sum, Q, ExpressionWrapper, fields, Value,CharField from django.db.models.functions import Cast, Coalesce, TruncDate from django.contrib.auth.decorators import login_required from django.shortcuts import render @@ -454,6 +455,29 @@ def dashboard_view(request): ) ) + # safe_match_score_cast = Cast( + # # 3. If the result after stripping quotes is an empty string (''), convert it to NULL. + # NullIf( + # # 2. Use Replace to remove the literal double quotes (") that might be present. + # Replace( + # # 1. Use the double-underscore path (which uses the ->> operator for the final value) + # # and cast to CharField for text-based cleanup functions. + # Cast(SCORE_PATH, output_field=CharField()), + # Value('"'), Value('') # Replace the double quote character with an empty string + # ), + # Value('') # Value to check for (empty string) + # ), + # output_field=IntegerField() # 4. Cast the clean, non-empty string (or NULL) to an integer. + # ) + + + # candidates_with_score_query= candidate_queryset.filter(is_resume_parsed=True).annotate( + # # The Coalesce handles NULL values (from missing data, non-numeric data, or NullIf) and sets them to 0. + # annotated_match_score=Coalesce(safe_match_score_cast, Value(0)) + # ) + + + # A. Pipeline & Volume Metrics (Scoped) total_active_jobs = job_scope_queryset.filter(status="ACTIVE").count() last_week = timezone.now() - timedelta(days=7) diff --git a/temp_file.py b/temp_file.py index c821c84..9bc6229 100644 --- a/temp_file.py +++ b/temp_file.py @@ -119,10 +119,10 @@ def create_zoom_meeting(topic, start_time, duration, host_email): # Step 11: Analytics Dashboard (recruitment/dashboard.py) import pandas as pd -from .models import Candidate +from .models import Application def get_dashboard_data(): - df = pd.DataFrame(list(Candidate.objects.all().values('status', 'created_at'))) + df = pd.DataFrame(list( Application.objects.all().values('status', 'created_at'))) summary = df['status'].value_counts().to_dict() return summary diff --git a/templates/interviews/interview_list.html b/templates/interviews/interview_list.html index b94634d..36114d4 100644 --- a/templates/interviews/interview_list.html +++ b/templates/interviews/interview_list.html @@ -11,6 +11,7 @@ {% endblock %} {% block content %} +{{interviews}}

diff --git a/templates/interviews/schedule_interview_location_form.html b/templates/interviews/onsite_location_form.html similarity index 88% rename from templates/interviews/schedule_interview_location_form.html rename to templates/interviews/onsite_location_form.html index ca21030..dde8002 100644 --- a/templates/interviews/schedule_interview_location_form.html +++ b/templates/interviews/onsite_location_form.html @@ -9,7 +9,7 @@

Set Interview Location

-
+ {% csrf_token %} {# Renders the single 'location' field using the crispy filter #} diff --git a/templates/interviews/preview_schedule.html b/templates/interviews/preview_schedule.html index 1d520ae..3f7392c 100644 --- a/templates/interviews/preview_schedule.html +++ b/templates/interviews/preview_schedule.html @@ -1,5 +1,5 @@ {% extends "base.html" %} -{% load static %} +{% load static crispy_forms_tags %} {%load i18n %} {% block customCSS %} @@ -119,7 +119,7 @@ {% if not forloop.last %}, {% endif %} {% endfor %}

-

Interview Type: {{interview_type}}

+

Interview Type: {{schedule_interview_type}}

@@ -163,23 +163,57 @@ {{ item.date|date:"F j, Y" }} {{ item.time|time:"g:i A" }} - {{ item.applications.name }} - {{ item.applications.email }} + {{ item.application.name }} + {{ item.application.email }} {% endfor %} - - - {% csrf_token %} -
- {% trans "Back to Edit" %} - - - + {% else %} +
+ {% csrf_token %} + + {% trans "Back to Edit" %} + + +
+ {% endif %} + + + + + @@ -200,13 +234,13 @@ document.addEventListener('DOMContentLoaded', function() { events: [ {% for item in schedule %} { - title: '{{ item.candidate.name }}', + title: '{{ item.application.name }}', start: '{{ item.date|date:"Y-m-d" }}T{{ item.time|time:"H:i:s" }}', url: '#', // Use the theme color for candidate events color: 'var(--kaauh-teal-dark)', extendedProps: { - email: '{{ item.candidate.email }}', + email: '{{ item.application.email }}', time: '{{ item.time|time:"g:i A" }}' } }, diff --git a/templates/interviews/schedule_interviews.html b/templates/interviews/schedule_interviews.html index 31239ba..ae594a5 100644 --- a/templates/interviews/schedule_interviews.html +++ b/templates/interviews/schedule_interviews.html @@ -142,8 +142,8 @@
- - {{ form.interview_type }} + + {{ form.schedule_interview_type }}
diff --git a/templates/meetings/create_remote_meeting.html b/templates/meetings/create_remote_meeting.html new file mode 100644 index 0000000..390937a --- /dev/null +++ b/templates/meetings/create_remote_meeting.html @@ -0,0 +1,136 @@ +{% extends "base.html" %} +{% load static i18n widget_tweaks %} + +{% block title %}{% trans "Schedule Remote Meeting" %} - {{ block.super }}{% endblock %} + +{% block content %} +
+
+
+ +
+ + + +

+ {% trans "Create Remote Interview" %} +

+
+ +
+
+
{% trans "Remote Meeting Details" %}
+
+
+
+ {% csrf_token %} + + {# --- Non-Field Errors --- #} + {% if form.non_field_errors %} + + {% endif %} + + {# --- Core Meeting Details (BaseMeetingForm fields) --- #} +
+
+ + {% render_field form.application class="form-select" %} +
{{ form.application.help_text }}
+ {% for error in form.application.errors %} +
{{ error }}
+ {% endfor %} +
+
+ + {% render_field form.job class="form-select" %} +
{{ form.job.help_text }}
+ {% for error in form.job.errors %} +
{{ error }}
+ {% endfor %} +
+
+ +
+
+ + {% render_field form.topic class="form-control" placeholder=form.topic.label %} +
{{ form.topic.help_text }}
+ {% for error in form.topic.errors %} +
{{ error }}
+ {% endfor %} +
+
+ + {# Note: input type='datetime-local' is set in the form definition (forms.py) #} + {% render_field form.start_time class="form-control" %} +
{{ form.start_time.help_text }}
+ {% for error in form.start_time.errors %} +
{{ error }}
+ {% endfor %} +
+
+ + {% render_field form.duration class="form-control" placeholder="30" %} +
{{ form.duration.help_text }}
+ {% for error in form.duration.errors %} +
{{ error }}
+ {% endfor %} +
+
+ +
+ + {# --- Remote Specific Details (SimpleRemoteMeetingForm fields) --- #} +
{% trans "Remote Configuration" %}
+ +
+
+ + {% render_field form.host_email class="form-control" %} +
{{ form.host_email.help_text }}
+ {% for error in form.host_email.errors %} +
{{ error }}
+ {% endfor %} +
+
+ + {% render_field form.password class="form-control" %} +
{{ form.password.help_text }}
+ {% for error in form.password.errors %} +
{{ error }}
+ {% endfor %} +
+
+ +
+
+ {% render_field form.participant_video class="form-check-input" %} + +
+
{{ form.participant_video.help_text }}
+ {% for error in form.participant_video.errors %} +
{{ error }}
+ {% endfor %} +
+ + {# Hidden status field #} + {% render_field form.status type="hidden" %} + +
+ +
+
+
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/templates/meetings/delete_onsite_meeting.html b/templates/meetings/delete_onsite_meeting.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/meetings/list_meetings.html b/templates/meetings/list_meetings.html index 8dfbdb2..bb743ed 100644 --- a/templates/meetings/list_meetings.html +++ b/templates/meetings/list_meetings.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% load static i18n %} -{% block title %}{% trans "Zoom Meetings" %} - {{ block.super }}{% endblock %} +{% block title %}{% trans "Interviews & Meetings" %} - {{ block.super }}{% endblock %} {% block customCSS %} {% endblock %} @@ -172,48 +119,66 @@

- {% trans "Zoom Meetings" %} + {% trans "Interviews & Meetings" %}

- - {% trans "Create Meeting" %} - + {% comment %} {% endcomment %}
-
+
+ {# Assuming includes/search_form.html handles the 'q' parameter #} {% include "includes/search_form.html" with search_query=search_query %}
-
+
- {% if search_query %}{% endif %} - {% if status_filter %}{% endif %} + {# Hidden inputs to persist other filters #} + {% if search_query %}{% endif %} + {% if status_filter %}{% endif %} + {% if candidate_name_filter %}{% endif %} -
+
+ + +
+ +
-
+
-
+
- {% if status_filter or search_query or candidate_name_filter %} + {% if status_filter or search_query or candidate_name_filter or type_filter %} {% trans "Clear" %} @@ -225,59 +190,63 @@
- {% if meetings %} + + {% if meetings_data %}
- {# View Switcher #} + {# View Switcher (not provided, assuming standard include) #} {% include "includes/_list_view_switcher.html" with list_id="meetings-list" %} {# Card View #}
- {% for meeting in meetings %} + {% for meeting in meetings_data %}
-
{{ meeting.topic }}
- - {{ meeting.status|title }} +
{{ meeting.topic }}
+ {# Display the type badge (Remote/Onsite) #} + + {{ meeting.type|title }}

- {% trans "Candidate" %}: {% if meeting.interview %}{{ meeting.interview.candidate.name }}{% else %} - - {% endif %}
- {% trans "Job" %}: {% if meeting.interview %}{{ meeting.interview.job.title }}{% else %} - - {% endif %}
- {% trans "ID" %}: {{ meeting.meeting_id|default:meeting.id }}
+ {% trans "Candidate" %}: {{ meeting.interview.application.person.full_name|default:"N/A" }}
+ {% trans "Job" %}: {{ meeting.interview.job.title|default:"N/A" }}
+ + {# Dynamic location/type details #} + {% if meeting.type == 'Remote' %} + {% trans "Remote ID" %}: {{ meeting.meeting_id|default:meeting.location.id }}
+ {% elif meeting.type == 'Onsite' %} + {# Use the details object for concrete location info #} + {% trans "Location" %}: {{ meeting.details.room_number|default:meeting.details.physical_address|truncatechars:30 }}
+ {% endif %} {% trans "Start" %}: {{ meeting.start_time|date:"M d, Y H:i" }}
- {% trans "Duration" %}: {{ meeting.duration }} minutes{% if meeting.password %}
{% trans "Password" %}: Yes{% endif %} + {% trans "Duration" %}: {{ meeting.duration }} minutes

+ + + {{ meeting.interview.get_status_display }} +
- + {% trans "View" %} - {% if meeting.join_url %} + {% if meeting.type == 'Remote' and meeting.join_url %} - {% trans "Join" %} + {% trans "Join Remote" %} + {% elif meeting.type == 'Onsite' %} + {% endif %} - - + + {# CORRECTED: Passing the slug to the update URL #} + - {% endif %} + {# Display the event type badge #} + {{ meeting.type|title }} + + + {{ meeting.interview.application.person.full_name }} - {% if meeting.interview %} {{ meeting.interview.job.title }} - {% else %} - - {% endif %} - {{ meeting.meeting_id|default:meeting.id }} {{ meeting.start_time|date:"M d, Y H:i" }} {{ meeting.duration }} min - {% if meeting %} - - {% if meeting.status == 'started' %} - - {% endif %} - {{ meeting.status|title }} + {# Display the meeting status badge from the ScheduledInterview model #} + + {{ meeting.interview.get_status_display }} - {% else %} - -- - {% endif %}
- {% if meeting.join_url %} + {% if meeting.type == 'Remote' and meeting.join_url %} {% endif %} - + - + {# CORRECTED: Passing the slug to the update URL #} +
- {# Pagination (Standardized) #} + {# Pagination (All filters correctly included in query strings) #} {% if is_paginated %}
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/templates/meetings/reschedule_onsite_meeting.html b/templates/meetings/reschedule_onsite_meeting.html new file mode 100644 index 0000000..6a81ca4 --- /dev/null +++ b/templates/meetings/reschedule_onsite_meeting.html @@ -0,0 +1,111 @@ +{% load static i18n %} +{% load widget_tweaks %} + +
+
+
+
+ + {% trans "Update Onsite Interview" %} for **{{ candidate.name }}** +
+

{% trans "Job" %}: {{ job.title }}

+

{% trans "Location Type" %}: {% trans "Onsite" %}

+
+
+ +
+ + {% csrf_token %} + +
+ + {# --- STATUS FIELD (Now Visible and Selectable) --- #} +
+ + {{ form.status|add_class:"form-select" }} + {% for error in form.status.errors %} +
{{ error }}
+ {% endfor %} +
+ +
+ {# --- TOPIC FIELD --- #} +
+
+ + {{ form.topic|add_class:"form-control" }} + {% for error in form.topic.errors %} +
{{ error }}
+ {% endfor %} +
+
+ + {# --- ROOM NUMBER FIELD --- #} +
+
+ + {{ form.room_number|add_class:"form-control" }} + {% for error in form.room_number.errors %} +
{{ error }}
+ {% endfor %} +
+
+
+ + + {# --- ADDRESS FIELD --- #} +
+ + {{ form.physical_address|add_class:"form-control" }} + {% for error in form.physical_address.errors %} +
{{ error }}
+ {% endfor %} +
+ +
+ +
+ {# --- START TIME FIELD --- #} +
+
+ + {{ form.start_time|add_class:"form-control" }} + {% for error in form.start_time.errors %} +
{{ error }}
+ {% endfor %} +
+
+ + {# --- DURATION FIELD --- #} +
+
+ + {{ form.duration|add_class:"form-control" }} + {% for error in form.duration.errors %} +
{{ error }}
+ {% endfor %} +
+
+
+ +
+ +
+ +
+
\ No newline at end of file diff --git a/templates/meetings/schedule_onsite_meeting_form.html b/templates/meetings/schedule_onsite_meeting_form.html new file mode 100644 index 0000000..2c2fecd --- /dev/null +++ b/templates/meetings/schedule_onsite_meeting_form.html @@ -0,0 +1,98 @@ +{% load static i18n %} +{% load widget_tweaks %} + +
+
+
+
+ + {% trans "Schedule New Onsite Interview" %} for **{{ candidate.name }}** +
+

{% trans "Job" %}: {{ job.title }}

+

{% trans "Location Type" %}: {% trans "Onsite" %}

+
+
+ +
+ {# The action_url is passed from the view and points back to the POST handler #} +
+ {% csrf_token %} + + {# --- HIDDEN FIELDS (application, job, status) --- #} + {# These fields are crucial for creating the ScheduledInterview record #} + {{ form.application }} + {{ form.job }} + {{ form.status }} + + {# --- TOPIC FIELD --- #} +
+ + {{ form.topic|add_class:"form-control"|attr:"required" }} + {% for error in form.topic.errors %} +
{{ error }}
+ {% endfor %} +
+ + {# --- ADDRESS FIELD --- #} +
+ + {{ form.physical_address|add_class:"form-control"|attr:"required" }} + {% for error in form.physical_address.errors %} +
{{ error }}
+ {% endfor %} +
+ + {# --- ROOM NUMBER FIELD --- #} +
+ + {{ form.room_number|add_class:"form-control" }} + {% for error in form.room_number.errors %} +
{{ error }}
+ {% endfor %} +
+ +
+ +
+ {# --- START TIME FIELD --- #} +
+
+ + {# Assumes start_time widget is DateTimeInput with type='datetime-local' #} + {{ form.start_time|add_class:"form-control"|attr:"required" }} + {% for error in form.start_time.errors %} +
{{ error }}
+ {% endfor %} +
+
+ + {# --- DURATION FIELD --- #} +
+
+ + {{ form.duration|add_class:"form-control"|attr:"required" }} + {% for error in form.duration.errors %} +
{{ error }}
+ {% endfor %} +
+
+
+ +
+ +
+
+
+
\ No newline at end of file diff --git a/templates/recruitment/candidate_interview_view.html b/templates/recruitment/candidate_interview_view.html index 98ab26f..fb6a4fa 100644 --- a/templates/recruitment/candidate_interview_view.html +++ b/templates/recruitment/candidate_interview_view.html @@ -304,8 +304,8 @@
- {% if candidate.get_latest_meeting.topic %} - {{ candidate.get_latest_meeting.topic }} + {% if candidate.get_latest_meeting %} + {{ candidate.get_latest_meeting }} {% else %} -- {% endif %} @@ -380,8 +380,10 @@ {% endif %} - - {% if candidate.get_latest_meeting %} + + {% if candidate.get_latest_meeting %} + {% if candidate.get_latest_meeting.location_type == 'Remote'%} + + {% else%} + + + + + + {% endif %} {% else %} + {% endif %}