+ + {{ stages[currentStage].name }} Stage + * + Default +
+ +Drag form elements here to build your stage
+Drag & drop your resume here or click to browse
+Supported formats: PDF, DOC, DOCX (Max 5MB)
+diff --git a/NorahUniversity/__pycache__/settings.cpython-313.pyc b/NorahUniversity/__pycache__/settings.cpython-313.pyc index 7b23a96..3876470 100644 Binary files a/NorahUniversity/__pycache__/settings.cpython-313.pyc and b/NorahUniversity/__pycache__/settings.cpython-313.pyc differ diff --git a/NorahUniversity/__pycache__/urls.cpython-313.pyc b/NorahUniversity/__pycache__/urls.cpython-313.pyc index f0c7a3b..624686a 100644 Binary files a/NorahUniversity/__pycache__/urls.cpython-313.pyc and b/NorahUniversity/__pycache__/urls.cpython-313.pyc differ diff --git a/NorahUniversity/settings.py b/NorahUniversity/settings.py index 74fceb8..82d1381 100644 --- a/NorahUniversity/settings.py +++ b/NorahUniversity/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = [ "unfold.contrib.guardian", # optional, if django-guardian package is used "unfold.contrib.simple_history", 'django.contrib.admin', + 'django.contrib.humanize', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', @@ -53,8 +54,10 @@ INSTALLED_APPS = [ 'allauth.socialaccount.providers.linkedin_oauth2', 'channels', 'django_filters', - - + 'crispy_forms', + 'crispy_bootstrap5', + 'django_extensions', + 'template_partials', ] SITE_ID = 1 @@ -135,11 +138,30 @@ AUTH_PASSWORD_VALIDATORS = [ }, ] +# Crispy Forms Configuration +CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" +CRISPY_TEMPLATE_PACK = "bootstrap5" + +# Bootstrap 5 Configuration +CRISPY_BS5 = { + 'include_placeholder_text': True, + 'use_css_helpers': True, +} + # Internationalization # https://docs.djangoproject.com/en/5.2/topics/i18n/ +LANGUAGES = [ + ('en', 'English'), + ('ar', 'Arabic'), +] + LANGUAGE_CODE = 'en-us' +LOCALE_PATHS = [ + BASE_DIR / 'locale', +] + TIME_ZONE = 'UTC' USE_I18N = True @@ -188,4 +210,10 @@ UNFOLD = { ZOOM_ACCOUNT_ID = 'HoGikHXsQB2GNDC5Rvyw9A' ZOOM_CLIENT_ID = 'brC39920R8C8azfudUaQgA' ZOOM_CLIENT_SECRET = 'rvfhjlbID4ychXPOvZ2lYsoAC0B0Ny2L' -SECRET_TOKEN = '6KdTGyF0SSCSL_V4Xa34aw' \ No newline at end of file +SECRET_TOKEN = '6KdTGyF0SSCSL_V4Xa34aw' + +# Maximum file upload size (in bytes) +DATA_UPLOAD_MAX_MEMORY_SIZE = 10485760 # 10MB +FILE_UPLOAD_MAX_MEMORY_SIZE = 10485760 # 10MB + +CORS_ALLOW_CREDENTIALS = True \ No newline at end of file diff --git a/NorahUniversity/urls.py b/NorahUniversity/urls.py index 209fb93..9dfbf53 100644 --- a/NorahUniversity/urls.py +++ b/NorahUniversity/urls.py @@ -23,7 +23,7 @@ from rest_framework.routers import DefaultRouter from recruitment import views router = DefaultRouter() -router.register(r'jobs', views.JobViewSet) +router.register(r'jobs', views.JobPostingViewSet) router.register(r'candidates', views.CandidateViewSet) urlpatterns = [ @@ -33,4 +33,4 @@ urlpatterns = [ path('', include('recruitment.urls')), ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) -urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) \ No newline at end of file +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/db.sqlite3 b/db.sqlite3 index 81757bc..71a4820 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/i.html b/i.html new file mode 100644 index 0000000..9139446 --- /dev/null +++ b/i.html @@ -0,0 +1,1495 @@ + + +
+ + +Drag form elements here to build your stage
+Drag & drop your resume here or click to browse
+Supported formats: PDF, DOC, DOCX (Max 5MB)
++ {{ form.description|truncatewords:15 }} +
+ +{{ form.title }}
+| # | +Submitted | +IP Address | +User Agent | +Data Fields | +Files | +Actions | +
|---|---|---|---|---|---|---|
| + {{ submission.id }} + | +
+
+ {{ submission.submitted_at|date:"M d, Y" }}
+ + {{ submission.submitted_at|time:"g:i A" }} + |
+
+ {{ submission.ip_address|default:"N/A" }}
+ |
+ + + {% if submission.user_agent %} + {{ submission.user_agent|truncatechars:50 }} + {% else %} + N/A + {% endif %} + + | ++ {{ submission.submission_data.keys|length }} fields + | ++ {{ submission.files.count }} files + | +
+
+
+
+
+
+ |
+
{{ job.department }} • {{ job.get_location_display }}
+| + + | +Name | +Phone | +Stage | +Applied Date | +Actions | +|
|---|---|---|---|---|---|---|
| + + | +
+
+ {{ candidate.first_name }} {{ candidate.last_name }}
+
+ |
+ {{ candidate.email }} | +{{ candidate.phone|default:"-" }} | ++ + {{ candidate.stage }} + + | +{{ candidate.created_at|date:"M d, Y" }} | ++ + | +
There are no candidates who have applied for this position yet.
+ + Add First Applicant + +This job has not been posted to LinkedIn yet.
+ {% endif %} + + + + {% if not request.session.linkedin_authenticated %} + You need to authenticate with LinkedIn first. + {% endif %} + + {% if job.linkedin_post_status and 'ERROR' in job.linkedin_post_status %} ++ Manage the custom application forms associated with this job posting. +
+ + {# Primary Action: Highlight the creation of a NEW form #} + + Create New Form + + + {# Secondary Action: Make the list button less prominent #} + + View All Existing Forms + + +| Name | +Stage | +Date Applied | +Actions | +|
|---|---|---|---|---|
| + {{ candidate.first_name }} {{ candidate.last_name }} + | +{{ candidate.email }} | ++ + {{ candidate.stage }} + + | +{{ candidate.created_at|date:"M d, Y" }} | ++ + View + + | +
Candidates will appear here once they apply for this position.
+Internal Job ID: {{ job.internal_job_id }}
+Created: {{ job.created_at|date:"M d, Y" }}
+Last Updated: {{ job.updated_at|date:"M d, Y" }}
+ {% if job.reporting_to %} +Reports To: {{ job.reporting_to }}
+ {% endif %} +Are you sure you want to delete the job posting "{{ job.title }}"?
+ +Create a new Zoom meeting
-Your upcoming and past meetings
-No meetings found.
-{% trans "No meetings found." %}
+ {% if user.is_staff %} + + + {% trans "Create Your First Meeting" %} + + {% endif %} +All information about your scheduled meeting
+Modify the details of your scheduled meeting
+{% trans "Modify the details of your scheduled meeting" %}