From 5856f1e0cb2a38d5ccefce86487adc13049f16ea Mon Sep 17 00:00:00 2001 From: Faheed Date: Tue, 7 Oct 2025 13:39:44 +0300 Subject: [PATCH] ui changes for theme --- .gitignore | 59 + .../__pycache__/settings.cpython-312.pyc | Bin 4756 -> 4953 bytes NorahUniversity/settings.py | 9 +- db.sqlite3 | Bin 466944 -> 471040 bytes .../__pycache__/signals.cpython-312.pyc | Bin 5553 -> 5550 bytes .../views_frontend.cpython-312.pyc | Bin 19102 -> 19033 bytes recruitment/signals.py | 4 +- recruitment/views_frontend.py | 4 +- templates/base.html | 596 ++++---- templates/forms/form_builder.html | 1286 +++++++++-------- templates/forms/form_templates_list.html | 231 ++- templates/includes/search_form.html | 4 +- templates/jobs/create_job.html | 584 +++++--- templates/jobs/job_detail.html | 811 +++++++---- templates/jobs/job_list.html | 327 +++-- templates/meetings/list_meetings.html | 218 +-- templates/recruitment/candidate_create.html | 146 +- templates/recruitment/candidate_detail.html | 534 ++++--- templates/recruitment/candidate_list.html | 344 +++-- templates/recruitment/candidate_update.html | 165 ++- templates/recruitment/dashboard.html | 200 ++- templates/recruitment/training_create.html | 172 ++- templates/recruitment/training_list.html | 326 +++-- templates/recruitment/training_update.html | 227 ++- 24 files changed, 4000 insertions(+), 2247 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ad516dd --- /dev/null +++ b/.gitignore @@ -0,0 +1,59 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.pyc +*.pyd +*.pyo + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# Django stuff: +*.log +*.pot +*.sqlite3 +local_settings.py +db.sqlite3 + +# Virtual environment +venv/ +env/ + +# IDE files +.idea/ +.vscode/ +*.swp +*.bak +*.swo + +# OS generated files +.DS_Store +Thumbs.db + +# Testing +.tox/ +.coverage +.pytest_cache/ +htmlcov/ + +# Media and Static files (if served locally and not meant for version control) +media/ +static/ + +# Deployment files +*.tar.gz +*.zip \ No newline at end of file diff --git a/NorahUniversity/__pycache__/settings.cpython-312.pyc b/NorahUniversity/__pycache__/settings.cpython-312.pyc index 69463135e206851e9ac846c186dc092ed8319a2f..99c93bea71739110a9dd22dd951c5848bb2c98f1 100644 GIT binary patch delta 273 zcmbQDdQ*+>G%qg~0}%8)f09uoHjz()(QBi+J(EC+MU+X3Wt3@(Rg_sJlcx3NET)NE zDYy76%*?aOi!&=za}7-mOsW*a1AO8g0}S;7{X9%_BJ^$m^8^$dW}(8|KVz(7AMKdD$hCo?ZQH6=4oKRGccCn+>VK%^ delta 75 zcmcbqHbs^1G%qg~0}%9YeVlPfbRwSwquoYzdnT4jCQXaYWlR&fm^4i`XY+D1Pu?lu a#gz_J$q2;72Ag>W4VXACGKdzX0{H;^#}VuR diff --git a/NorahUniversity/settings.py b/NorahUniversity/settings.py index 5e75a2d..962943d 100644 --- a/NorahUniversity/settings.py +++ b/NorahUniversity/settings.py @@ -206,4 +206,11 @@ CORS_ALLOW_CREDENTIALS = True # Celery + Redis for long running background i will be using it CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' -CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' \ No newline at end of file +CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' + + + + +LINKEDIN_CLIENT_ID = '867jwsiyem1504' +LINKEDIN_CLIENT_SECRET = 'WPL_AP1.QNH5lYnfRSQpp0Qp.GO8Srw==' +LINKEDIN_REDIRECT_URI = 'http://127.0.0.1:8000/jobs/linkedin/callback/' diff --git a/db.sqlite3 b/db.sqlite3 index 736bcc01cacbadb3bfa1c23639e291f185fa6be3..064b2974fea6fa2acf4b01a4a250782b85fe75eb 100644 GIT binary patch delta 2452 zcmah~TWs6b8I~-cCRJ_GMsDrwB#f8LOKZvEMK`ZoN?k2mlx$g&B|l81MAAAEMM@-f z9Rl0vine8+#(w*0e(b#I$SLOF#`}{6 z=k7k+1rwIHUDy~NI%l)4A!^gw3Fi3&>rfe82~+cwI+K&r-lgecG@&+CsM5islSR6s zRGI0hFGSJ8tnQi(X4yzJ99ELSpsqK)Ww*anRkI83TBP>F)8 zNR%DIOgmFaOI@YHFeT9&bCJwUJghg$g$26pUk>X+CJ-+;qcF-i>wyrFrzkeVxKr-D zu-Kw>aiJzCKlVvAuT1uTuD9Ec6S50l&FdIW=5K3 z{pm_&TvWtVqnOL_ zDiwmX4$F+<6Qj+d*bKzubB!FOFDVlAsngwLjEXgM+D(QFv;H>WcP034w=DVdB%NYg z@odu5X#~Aq4;c#6^U0KupY2fjppT#;^^RMvCE~0gP@JrKSCl+iURdzaReO@HH=47t zT5jH6$SaGBp-4U5B_Yo*5<*IK>q^_62}&H1>trbbCGtTFxx3aWM;;nj+WzUsOE30nMg3=&jnn`d^6n&!>Z^{x2A}u z+eNTb!Ft&rjU{H+4;&C94a^}3VEJ^7YM;_;_OxE-|9 zOS;L;E5Eahn+LH?Qy+HPgk8l>W2aHOe-}G`)WVwoU#nZt4s&dMc<6|6^-q?sTl=t2 zP1rT;Q|!lx;uqNALl(yT?9i6YYk#+lt=cTuR&S@$urIJX*cS4e@H~P;$IQ;RY{-NDAY}SPR1)JTp-snGp4GvfintftBtTj?0+h+Dr|A)B6 zhMhNdz1DXS(HWR=X%h6CZEvAr^U~yVuidcr=*{LylX(&u95WwzFK#(!DKjo4@QT|P#0ugZKk$B)eK5XjgySu`~!S#KM$KwgNi&pg^x$0(eVj`LAHF0q=qYa{J}oZSOzc1>;A1bmK9B!3Vt588l5 zUgXiu(`#so@{nXg6b1E3Ll~_uK>AgEYyuw(ayo~j>^C?Gb~zmtVQdN?iz_(!V zfE8@h8E;<%llz|H>q#*lT?D>oK;QTTxQCzeGU^Y(ffZd*+5xBu+)I0A*Y+33yp(36k1-QKWpLPF z&x8HRiEUX(brot_ua5*xL$tlXx=<|1u!v?m6~VOzlE`WJ!h8(TJyrT0D$)4L1u$mV kAAwQ-fAWW;05ug>ITh}t?|(^b delta 348 zcmWNMu`dH*7{FmVNSm@=3PDCO$ zQSC`?u-sxXAYz~zv<5n$M5>84e8W3DPoDREe~TMI*Dakj5zqI<~$% zE>IW*hNCKTu#KeyrdtFpN6o#%X|0LcfFySa-f)LA6tRO%WRSuPCNTt6?y$vs*{&Z2 zH diff --git a/recruitment/__pycache__/signals.cpython-312.pyc b/recruitment/__pycache__/signals.cpython-312.pyc index c8f2950f54d82a3210a1688873c5c5760e5373a5..0af7a5bfe6b70762d284bbf0903b368185bd08f0 100644 GIT binary patch delta 50 zcmdm}y-u6=G%qg~0}xm}f1Dw>kvD^pv1oG{V~imGQbq=b28Iu83>*UO^-cAgp9r00 F0sw384l^DYu*+?J ID0G$y0H~V~djJ3c diff --git a/recruitment/__pycache__/views_frontend.cpython-312.pyc b/recruitment/__pycache__/views_frontend.cpython-312.pyc index 339a41adadf759af08f89b7912c78189864bbf35..7ee2519568478ec0dfd924fd2c58b5682f353142 100644 GIT binary patch delta 1387 zcmZuxZD?Cn7(Va0_vYi?q+e^cCTrJf)2?Z=HCew{m!{3yt(giFJ0?>{9XW9}tqxD) zs^eZ28Eh%KDX%hNt0L52DWYEeBSS2;c1(1WiEIOZs378C_(Ol_FV9JOv7uhzj1d74nsMXG?vX zNpdyi5^J$wEa*;Yi<&eSz*I}f^#<@3lVWUlt~*kCDn55{8k_9}sZ3mprNj4ZoU>da-YiA3iX$>zx6VqH>AFZ*wW$cKnbX!=*htrMNk`*V zju)ZSB5!O2h)LNdR$DH*u`wYOnA0}SiRgA&sJ~#a&6ixWzO%+z-&2%rIqk9B`G})O ziRmt`zBp$a6Ve5v+~z~2hOXW$tGlGk`tCV+u;42y<^5x#e;^)9ogvL6-|k3+2|r+Y zn2&{~Hd|iPo9mRmUbggn+@Y|orY_s&H~?~wNWJ)w8}eNa+w?fR)mCr&zttIfgs_n1 zdC4=jI?uoic|kcsW+2jd>b~@`XW3M?DSZfU?Wm)t8u80m0JrWuu5tN$uwUJIj>0=w z9p5eR!T5^+_HsM|5W;_V#o+=*yLv?;)0Oe~d574*AHf@4eeLsNc^k6)BRTuCoS)$1 zESoF%icTr6(N$h;8!=N0m&YMb5j^x)~%(FiH_3s`JTZ5Pv$ z-!~domx66#{S{4BifOqf)h?#52PAhTtVxV`(|eSaUCDH>awP_0eWh0uh(8A=?3;aa z6vFn&{&N65s3o4zFAHTZVH-{+5^x#gdeB}>Oagp?JCX-sFIveD^hL>%um_`q`(RPB z@LJP2{xNu7T@rD;n+##JxmI76ObMg-+0Y;?VTEf_PV`y^s6!< z;V}A#JK-wc4F~PR!=KW|Z)N5?2_XrOOSmTCx`gjBvOlW*D3(X<$M!!;;XV8$y>CEX zW$7>_uO%BL*^&g8blxvP{I?O_E8w;#@yrSK{8To{f3dp{DBvCjcnyP&Q7h z1{;?>UDS0fMu@&Tog34sE7CQvTRVL12FWzqc`Guf&TDpRQ#8bkm&G4#W=A??znE#R z#Mv6H^`dG@WoAOg$L_6bNNup)6*)jo$-}}?GAumr#09b;Q{YSA72Z)KVmigbwGkezRBc*S9#-z=FEa9{QR-&an}Y^>C?HGRO4(6iZ|S7hnDwpI6;PPDi2 znrX?dInlI=*;>OnOK5{3AwDuES7B78uIc2AhSu6luu_O0@&FJ+q#oK>PFkH97Fsta zSNEZ{lPBuUskG^=V_KV1r?eLZ>OE0o)?~Zwdf16I`Q?edw-lDnso7Fz94z&~a--7b zv*NV2V&m&`T3#%#PvLa}ex^K0Hj!+PU1BrQlcs|0?;CA0U4|g8;Yyz)qN4^ zYFj(%i)-R_D6R$K9Vo85dF=Iw%rT}U6|q42lag5I2h_ijWJGq)Gh(sWoB*v>xOWC1 z#=d&|IoB2BpmPYY*1kTt!on`EW%L~bSYSWz+7AP4NB>3FB9G#*i#_Ncghd|3ZUu(e z#oebIUvuYE?02opRp2UzBpcte8w%{wp1bVJy$T#)Gx1KiQCfE={;TUI59Dx&74|*` zH`%3_*Q$TwbHV=|_uS^d|1tWr9KPpphr?a=(_oieM0LpWJo$_O=h;|d(9ch^w2KnS h5(E7Px0UJ?+3iFN+_(Nnh~OLqcoqJ7nmtS&`447PF`fVb diff --git a/recruitment/signals.py b/recruitment/signals.py index 073a12c..69f2b2d 100644 --- a/recruitment/signals.py +++ b/recruitment/signals.py @@ -24,8 +24,8 @@ import asyncio @receiver(post_save, sender=models.Candidate) def score_candidate_resume(sender, instance, created, **kwargs): # Skip if no resume or OpenRouter not configured - if instance.resume is None: - return + if instance.resume: + return if kwargs.get('update_fields') is not None: return diff --git a/recruitment/views_frontend.py b/recruitment/views_frontend.py index 5f7b0db..353f5c9 100644 --- a/recruitment/views_frontend.py +++ b/recruitment/views_frontend.py @@ -214,9 +214,7 @@ def candidate_detail(request, slug): }) def candidate_update_stage(request, slug): - """Handle HTMX stage update requests""" - from time import sleep - sleep(5) + """Handle HTMX stage update requests""" try: if not request.user.is_staff: return render(request, 'recruitment/partials/error.html', {'error': 'Permission denied'}, status=403) diff --git a/templates/base.html b/templates/base.html index 1897f5a..21eeb6b 100644 --- a/templates/base.html +++ b/templates/base.html @@ -1,159 +1,16 @@ -{% comment %} {% load static i18n %} +{% load i18n static %} - + - {% block title %}NorahUniversity ATS{% endblock %} - - - - {% comment %} {% endcomment %} - {% comment %} {% endcomment %} - - - {% comment %} - - - {% block extra_css %}{% endblock %} - - {% endcomment %} - {% comment %}
-
-
- - -
-
-
{% endcomment %} -{% comment %} - {% endcomment %} - - {% comment %}
- {% if messages %} -
- {% for message in messages %} - - {% endfor %} -
- {% endif %} - - {% block content %} - {% endblock %} -
{% endcomment %} - - - {% comment %} {% include 'includes/delete_modal.html' %} {% endcomment %} - - {% comment %} - - - - - - - - - - - - - - - - - {% block extra_js %}{% endblock %} {% endcomment %} - - -{% load static %} - - - - - - - {% block title %}University ATS{% endblock %} + + {% block title %}{% trans 'University ATS' %}{% endblock %} - - + {% comment %} + {% endcomment %} {% block customCSS %}{% endblock %} -
-
+
+
- -
-
+
+ {% comment %}
- info@kaauh.edu.sa + info@kaauh.edu.sa
- +966 11 820 0000 -
+ +966 11 820 0000 +
{% endcomment %}
-
- Saudi Vision 2030 - King Abdullah Academic University Hospital + {% trans 'Saudi Vision 2030' %} + {% trans 'King Abdullah Academic University Hospital' %}
@@ -519,42 +440,77 @@ {% for message in messages %} {% endfor %} {% endif %} {% block content %} - {% endblock %}
- - {% include 'includes/delete_modal.html' %} +

- © {% now "Y" %} King Abdullah Academic University Hospital (KAAUH).
- All rights reserved. + © {% now "Y" %} {% trans "King Abdullah Academic University Hospital (KAAUH)." %}
+ {% trans "All rights reserved." %}

+ {% include 'includes/delete_modal.html' %} + + {% block customJS %}{% endblock %} + \ No newline at end of file diff --git a/templates/forms/form_builder.html b/templates/forms/form_builder.html index 9c5db2f..c7cd71b 100644 --- a/templates/forms/form_builder.html +++ b/templates/forms/form_builder.html @@ -6,657 +6,664 @@ ATS Form Builder - Vanilla JS + margin-bottom: 5px; + } + } + .stage-tab.drag-over { + background-color: rgba(0, 129, 167, 0.1); /* Used a hardcoded rgba of the new primary color */ + border: 2px dashed var(--primary); + } + @@ -669,6 +676,7 @@ templateId: {% if template_id %}{{ template_id }}{% else %}null{% endif %} }; +