diff --git a/NorahUniversity/__pycache__/settings.cpython-312.pyc b/NorahUniversity/__pycache__/settings.cpython-312.pyc index 9a36850..7d14999 100644 Binary files a/NorahUniversity/__pycache__/settings.cpython-312.pyc and b/NorahUniversity/__pycache__/settings.cpython-312.pyc differ diff --git a/NorahUniversity/__pycache__/urls.cpython-312.pyc b/NorahUniversity/__pycache__/urls.cpython-312.pyc index 9cb4a11..0cc7192 100644 Binary files a/NorahUniversity/__pycache__/urls.cpython-312.pyc and b/NorahUniversity/__pycache__/urls.cpython-312.pyc differ diff --git a/NorahUniversity/settings.py b/NorahUniversity/settings.py index 3a40e03..249db2c 100644 --- a/NorahUniversity/settings.py +++ b/NorahUniversity/settings.py @@ -48,6 +48,7 @@ INSTALLED_APPS = [ 'channels', 'django_filters', 'crispy_forms', + 'django_summernote', 'crispy_bootstrap5', 'django_extensions', 'template_partials', @@ -66,6 +67,7 @@ MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', @@ -118,6 +120,8 @@ DATABASES = { # Password validation # https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators + + AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', diff --git a/NorahUniversity/urls.py b/NorahUniversity/urls.py index 9dfbf53..84c78b0 100644 --- a/NorahUniversity/urls.py +++ b/NorahUniversity/urls.py @@ -1,24 +1,9 @@ -""" -URL configuration for NorahUniversity project. -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/5.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" from django.contrib import admin from django.urls import path, include from django.conf.urls.static import static from django.conf import settings -from django.conf.urls.i18n import i18n_patterns +from django.conf.urls.i18n import i18n_patterns # Import i18n_patterns from rest_framework.routers import DefaultRouter from recruitment import views @@ -26,11 +11,20 @@ router = DefaultRouter() router.register(r'jobs', views.JobPostingViewSet) router.register(r'candidates', views.CandidateViewSet) +# 1. URLs that DO NOT have a language prefix (admin, API, static files) urlpatterns = [ path('admin/', admin.site.urls), path('api/', include(router.urls)), path('accounts/', include('allauth.urls')), - path('', include('recruitment.urls')), + path('i18n/', include('django.conf.urls.i18n')), + path('summernote/', include('django_summernote.urls')), ] + +# 2. URLs that DO have a language prefix (user-facing views) +# This includes the root path (''), which is handled by 'recruitment.urls' +urlpatterns += i18n_patterns( + path('', include('recruitment.urls')), +) + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) -urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index 591f60d..feeaaa2 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 0000000..f28f365 --- /dev/null +++ b/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,1428 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-10-08 13:37+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +#: recruitment/forms.py:14 recruitment/models.py:200 +msgid "First Name" +msgstr "" + +#: recruitment/forms.py:15 recruitment/models.py:201 +msgid "Last Name" +msgstr "" + +#: recruitment/forms.py:16 recruitment/models.py:203 +#: templates/recruitment/candidate_list.html:152 +msgid "Phone" +msgstr "" + +#: recruitment/forms.py:17 recruitment/models.py:202 +#: templates/recruitment/candidate_detail.html:242 +#: templates/recruitment/candidate_list.html:151 +msgid "Email" +msgstr "" + +#: recruitment/forms.py:18 recruitment/models.py:204 +#: templates/recruitment/candidate_detail.html:218 +msgid "Resume" +msgstr "" + +#: recruitment/forms.py:19 +msgid "Application Stage" +msgstr "" + +#: recruitment/forms.py:22 +msgid "Enter first name" +msgstr "" + +#: recruitment/forms.py:23 +msgid "Enter last name" +msgstr "" + +#: recruitment/forms.py:24 +msgid "Enter phone number" +msgstr "" + +#: recruitment/forms.py:25 +msgid "Enter email" +msgstr "" + +#: recruitment/forms.py:50 +msgid "Submit" +msgstr "" + +#: recruitment/forms.py:60 +msgid "New Application Stage" +msgstr "" + +#: recruitment/forms.py:85 recruitment/models.py:180 recruitment/models.py:206 +#: templates/jobs/job_detail.html:420 +#: templates/recruitment/candidate_list.html:154 +msgid "Applied" +msgstr "" + +#: recruitment/forms.py:92 +msgid "Please select a stage." +msgstr "" + +#: recruitment/forms.py:101 +#, python-format +msgid "" +"Cannot transition from \"%(current)s\" to \"%(new)s\". Allowed transitions: " +"%(allowed)s" +msgstr "" + +#: recruitment/forms.py:116 recruitment/models.py:306 +#: templates/meetings/create_meeting.html:162 +msgid "Topic" +msgstr "" + +#: recruitment/forms.py:117 recruitment/models.py:308 recruitment/models.py:727 +#: templates/meetings/create_meeting.html:166 +#: templates/meetings/list_meetings.html:260 +#: templates/meetings/meeting_details.html:29 +msgid "Start Time" +msgstr "" + +#: recruitment/forms.py:118 recruitment/models.py:309 +#: templates/meetings/list_meetings.html:265 +#: templates/meetings/meeting_details.html:33 +msgid "Duration" +msgstr "" + +#: recruitment/forms.py:121 +msgid "Enter meeting topic" +msgstr "" + +#: recruitment/forms.py:123 +msgid "60" +msgstr "" + +#: recruitment/forms.py:137 templates/meetings/create_meeting.html:180 +#: templates/meetings/list_meetings.html:242 +msgid "Create Meeting" +msgstr "" + +#: recruitment/forms.py:147 recruitment/models.py:290 +#: templates/recruitment/training_list.html:150 +#: templates/recruitment/training_update.html:144 +msgid "Title" +msgstr "" + +#: recruitment/forms.py:148 recruitment/models.py:291 +#: templates/recruitment/training_update.html:158 +msgid "Content" +msgstr "" + +#: recruitment/forms.py:149 recruitment/models.py:292 +#: templates/recruitment/training_update.html:150 +msgid "Video Link" +msgstr "" + +#: recruitment/forms.py:150 recruitment/models.py:293 +#: templates/recruitment/training_update.html:166 +msgid "File" +msgstr "" + +#: recruitment/forms.py:153 +msgid "Enter title" +msgstr "" + +#: recruitment/forms.py:154 +msgid "Enter material content" +msgstr "" + +#: recruitment/forms.py:155 +msgid "https://www.youtube.com/watch?v=..." +msgstr "" + +#: recruitment/forms.py:174 +msgid "Save Material" +msgstr "" + +#: recruitment/forms.py:377 recruitment/models.py:199 +#: templates/recruitment/candidate_list.html:153 +msgid "Job" +msgstr "" + +#: recruitment/forms.py:378 +msgid "Template Name" +msgstr "" + +#: recruitment/forms.py:379 recruitment/models.py:542 +msgid "Description" +msgstr "" + +#: recruitment/forms.py:380 recruitment/models.py:576 +msgid "Active" +msgstr "" + +#: recruitment/forms.py:385 +msgid "Enter template name" +msgstr "" + +#: recruitment/forms.py:391 +msgid "Enter template description (optional)" +msgstr "" + +#: recruitment/forms.py:410 +msgid "Create Template" +msgstr "" + +#: recruitment/models.py:13 +msgid "Created at" +msgstr "" + +#: recruitment/models.py:14 +msgid "Updated at" +msgstr "" + +#: recruitment/models.py:15 +msgid "Slug" +msgstr "" + +#: recruitment/models.py:120 recruitment/models.py:714 +msgid "Hiring Agency" +msgstr "" + +#: recruitment/models.py:121 +msgid "External agency responsible for sourcing candidates for this role" +msgstr "" + +#: recruitment/models.py:181 +msgid "Exam" +msgstr "" + +#: recruitment/models.py:182 templates/jobs/job_detail.html:426 +msgid "Interview" +msgstr "" + +#: recruitment/models.py:183 templates/jobs/job_detail.html:432 +msgid "Offer" +msgstr "" + +#: recruitment/models.py:185 +msgid "Passed" +msgstr "" + +#: recruitment/models.py:186 +msgid "Failed" +msgstr "" + +#: recruitment/models.py:188 +msgid "Accepted" +msgstr "" + +#: recruitment/models.py:189 +msgid "Rejected" +msgstr "" + +#: recruitment/models.py:205 +msgid "Parsed Summary" +msgstr "" + +#: recruitment/models.py:207 +msgid "Stage" +msgstr "" + +#: recruitment/models.py:209 +msgid "Exam Date" +msgstr "" + +#: recruitment/models.py:210 +msgid "Exam Status" +msgstr "" + +#: recruitment/models.py:211 recruitment/models.py:744 +msgid "Interview Date" +msgstr "" + +#: recruitment/models.py:212 +msgid "Interview Status" +msgstr "" + +#: recruitment/models.py:213 +msgid "Offer Date" +msgstr "" + +#: recruitment/models.py:214 +msgid "Offer Status" +msgstr "" + +#: recruitment/models.py:215 +msgid "Join Date" +msgstr "" + +#: recruitment/models.py:230 +msgid "Submitted by Agency" +msgstr "" + +#: recruitment/models.py:234 +msgid "Candidate" +msgstr "" + +#: recruitment/models.py:235 templates/base.html:298 +#: templates/jobs/job_detail.html:414 +msgid "Candidates" +msgstr "" + +#: recruitment/models.py:294 +msgid "Created by" +msgstr "" + +#: recruitment/models.py:297 +msgid "Training Material" +msgstr "" + +#: recruitment/models.py:298 templates/recruitment/training_list.html:4 +#: templates/recruitment/training_list.html:126 +msgid "Training Materials" +msgstr "" + +#: recruitment/models.py:307 templates/meetings/meeting_details.html:25 +msgid "Meeting ID" +msgstr "" + +#: recruitment/models.py:310 +msgid "Timezone" +msgstr "" + +#: recruitment/models.py:311 templates/meetings/list_meetings.html:286 +msgid "Join URL" +msgstr "" + +#: recruitment/models.py:312 templates/meetings/meeting_details.html:62 +msgid "Participant Video" +msgstr "" + +#: recruitment/models.py:313 templates/meetings/meeting_details.html:66 +msgid "Join Before Host" +msgstr "" + +#: recruitment/models.py:314 templates/meetings/meeting_details.html:70 +msgid "Mute Upon Entry" +msgstr "" + +#: recruitment/models.py:315 templates/meetings/meeting_details.html:74 +msgid "Waiting Room" +msgstr "" + +#: recruitment/models.py:317 +msgid "Zoom Gateway Response" +msgstr "" + +#: recruitment/models.py:532 +msgid "Source Name" +msgstr "" + +#: recruitment/models.py:533 recruitment/models.py:538 +msgid "e.g., ATS, ERP " +msgstr "" + +#: recruitment/models.py:537 +msgid "Source Type" +msgstr "" + +#: recruitment/models.py:543 +msgid "A description of the source" +msgstr "" + +#: recruitment/models.py:548 recruitment/models.py:667 +msgid "IP Address" +msgstr "" + +#: recruitment/models.py:549 +msgid "The IP address of the source" +msgstr "" + +#: recruitment/models.py:558 +msgid "API Key" +msgstr "" + +#: recruitment/models.py:559 +msgid "API key for authentication (will be encrypted)" +msgstr "" + +#: recruitment/models.py:565 +msgid "API Secret" +msgstr "" + +#: recruitment/models.py:566 +msgid "API secret for authentication (will be encrypted)" +msgstr "" + +#: recruitment/models.py:571 +msgid "Trusted IP Addresses" +msgstr "" + +#: recruitment/models.py:572 +msgid "Comma-separated list of trusted IP addresses" +msgstr "" + +#: recruitment/models.py:577 +msgid "Whether this source is active for integration" +msgstr "" + +#: recruitment/models.py:582 +msgid "Integration Version" +msgstr "" + +#: recruitment/models.py:583 +msgid "Version of the integration protocol" +msgstr "" + +#: recruitment/models.py:588 +msgid "Last Sync At" +msgstr "" + +#: recruitment/models.py:589 +msgid "Timestamp of the last successful synchronization" +msgstr "" + +#: recruitment/models.py:601 +msgid "Sync Status" +msgstr "" + +#: recruitment/models.py:610 recruitment/models.py:630 +msgid "Source" +msgstr "" + +#: recruitment/models.py:611 +msgid "Sources" +msgstr "" + +#: recruitment/models.py:619 +msgid "Request" +msgstr "" + +#: recruitment/models.py:620 +msgid "Response" +msgstr "" + +#: recruitment/models.py:621 +msgid "Error" +msgstr "" + +#: recruitment/models.py:622 +msgid "Sync" +msgstr "" + +#: recruitment/models.py:623 templates/jobs/create_job.html:392 +msgid "Create Job" +msgstr "" + +#: recruitment/models.py:624 +msgid "Update Job" +msgstr "" + +#: recruitment/models.py:635 +msgid "Action" +msgstr "" + +#: recruitment/models.py:640 +msgid "Endpoint" +msgstr "" + +#: recruitment/models.py:645 +msgid "HTTP Method" +msgstr "" + +#: recruitment/models.py:650 +msgid "Request Data" +msgstr "" + +#: recruitment/models.py:655 +msgid "Response Data" +msgstr "" + +#: recruitment/models.py:660 +msgid "Status Code" +msgstr "" + +#: recruitment/models.py:664 +msgid "Error Message" +msgstr "" + +#: recruitment/models.py:672 +msgid "User Agent" +msgstr "" + +#: recruitment/models.py:677 +msgid "Processing Time (seconds)" +msgstr "" + +#: recruitment/models.py:685 +msgid "Integration Log" +msgstr "" + +#: recruitment/models.py:686 +msgid "Integration Logs" +msgstr "" + +#: recruitment/models.py:701 +msgid "Agency Name" +msgstr "" + +#: recruitment/models.py:702 +msgid "Contact Person" +msgstr "" + +#: recruitment/models.py:706 +msgid "Internal notes about the agency" +msgstr "" + +#: recruitment/models.py:707 +msgid "Select country" +msgstr "" + +#: recruitment/models.py:715 +msgid "Hiring Agencies" +msgstr "" + +#: recruitment/models.py:724 +msgid "Start Date" +msgstr "" + +#: recruitment/models.py:725 +msgid "End Date" +msgstr "" + +#: recruitment/models.py:726 +msgid "Working Days" +msgstr "" + +#: recruitment/models.py:728 +msgid "End Time" +msgstr "" + +#: recruitment/models.py:729 +msgid "Break Start Time" +msgstr "" + +#: recruitment/models.py:730 +msgid "Break End Time" +msgstr "" + +#: recruitment/models.py:731 +msgid "Interview Duration (minutes)" +msgstr "" + +#: recruitment/models.py:732 +msgid "Buffer Time (minutes)" +msgstr "" + +#: recruitment/models.py:745 +msgid "Interview Time" +msgstr "" + +#: recruitment/models.py:749 +msgid "Scheduled" +msgstr "" + +#: recruitment/models.py:750 +msgid "Confirmed" +msgstr "" + +#: recruitment/models.py:751 +msgid "Cancelled" +msgstr "" + +#: recruitment/models.py:752 +msgid "Completed" +msgstr "" + +#: templates/base.html:7 +msgid "King Abdullah Academic University Hospital - Applicant Tracking System" +msgstr "" + +#: templates/base.html:8 +msgid "University ATS" +msgstr "" + +#: templates/base.html:258 +msgid "Saudi Vision 2030" +msgstr "" + +#: templates/base.html:259 +msgid "King Abdullah Academic University Hospital" +msgstr "" + +#: templates/base.html:272 +msgid "Toggle navigation" +msgstr "" + +#: templates/base.html:282 +msgid "Dashboard" +msgstr "" + +#: templates/base.html:290 +msgid "Jobs" +msgstr "" + +#: templates/base.html:309 +msgid "Training" +msgstr "" + +#: templates/base.html:320 templates/base.html:340 +msgid "Meetings" +msgstr "" + +#: templates/base.html:330 templates/forms/form_templates_list.html:190 +msgid "Form Templates" +msgstr "" + +#: templates/base.html:337 +msgid "More" +msgstr "" + +#: templates/base.html:341 +msgid "Schedule" +msgstr "" + +#: templates/base.html:343 +msgid "Active Jobs" +msgstr "" + +#: templates/base.html:344 +msgid "Draft Jobs" +msgstr "" + +#: templates/base.html:346 +msgid "All Candidates" +msgstr "" + +#: templates/base.html:347 +msgid "New Candidates" +msgstr "" + +#: templates/base.html:356 +msgid "Toggle language menu" +msgstr "" + +#: templates/base.html:392 +msgid "Toggle user menu" +msgstr "" + +#: templates/base.html:396 +msgid "Your account" +msgstr "" + +#: templates/base.html:419 +msgid "My Profile" +msgstr "" + +#: templates/base.html:420 templates/meetings/meeting_details.html:56 +msgid "Settings" +msgstr "" + +#: templates/base.html:421 +msgid "Activity Log" +msgstr "" + +#: templates/base.html:422 +msgid "Help & Support" +msgstr "" + +#: templates/base.html:428 +msgid "Connect LinkedIn" +msgstr "" + +#: templates/base.html:435 +msgid "LinkedIn Connected" +msgstr "" + +#: templates/base.html:447 +msgid "Sign out" +msgstr "" + +#: templates/base.html:450 +msgid "Sign Out" +msgstr "" + +#: templates/base.html:466 +msgid "Close" +msgstr "" + +#: templates/base.html:478 +msgid "King Abdullah Academic University Hospital (KAAUH)." +msgstr "" + +#: templates/base.html:479 +msgid "All rights reserved." +msgstr "" + +#: templates/base.html:511 +msgid "Are you sure you want to sign out?" +msgstr "" + +#: templates/forms/form_templates_list.html:208 +msgid "Search templates by name..." +msgstr "" + +#: templates/forms/form_templates_list.html:243 +msgid "ago" +msgstr "" + +#: templates/forms/form_templates_list.html:253 +msgid "Stages" +msgstr "" + +#: templates/forms/form_templates_list.html:257 +msgid "Fields" +msgstr "" + +#: templates/forms/form_templates_list.html:264 +msgid "No description provided" +msgstr "" + +#: templates/forms/form_templates_list.html:274 +msgid "Preview" +msgstr "" + +#: templates/forms/form_templates_list.html:277 +#: templates/recruitment/candidate_list.html:178 +#: templates/recruitment/training_list.html:168 +msgid "Edit" +msgstr "" + +#: templates/forms/form_templates_list.html:282 +#: templates/includes/delete_modal.html:26 +#: templates/meetings/list_meetings.html:307 +#: templates/recruitment/candidate_list.html:181 +#: templates/recruitment/training_list.html:171 +#: templates/recruitment/training_update.html:184 +msgid "Delete" +msgstr "" + +#: templates/forms/form_templates_list.html:326 +msgid "No Form Templates Found" +msgstr "" + +#: templates/forms/form_templates_list.html:329 +#, python-format +msgid "No templates match your search \"%(query)s\"." +msgstr "" + +#: templates/forms/form_templates_list.html:331 +msgid "You haven't created any form templates yet." +msgstr "" + +#: templates/forms/form_templates_list.html:335 +msgid "Create Your First Template" +msgstr "" + +#: templates/forms/form_wizard.html:7 templates/forms/form_wizard.html:470 +#: templates/jobs/job_detail_candidate.html:7 +msgid "Application Form" +msgstr "" + +#: templates/forms/form_wizard.html:439 +#: templates/jobs/job_detail_candidate.html:121 +msgid "KAAUH IMAGE" +msgstr "" + +#: templates/forms/form_wizard.html:449 +#: templates/jobs/job_detail_candidate.html:132 +msgid "Applications" +msgstr "" + +#: templates/forms/form_wizard.html:452 +#: templates/jobs/job_detail_candidate.html:135 +msgid "Profile" +msgstr "" + +#: templates/forms/form_wizard.html:480 +msgid "Review Your Application" +msgstr "" + +#: templates/forms/form_wizard.html:487 +msgid "Back" +msgstr "" + +#: templates/forms/form_wizard.html:491 +msgid "Next" +msgstr "" + +#: templates/forms/form_wizard.html:495 +msgid "Submit Application" +msgstr "" + +#: templates/includes/delete_modal.html:11 +msgid "Confirm Delete" +msgstr "" + +#: templates/includes/delete_modal.html:16 +msgid "Are you sure you want to delete this item?" +msgstr "" + +#: templates/includes/delete_modal.html:19 templates/jobs/create_job.html:389 +#: templates/meetings/create_meeting.html:184 +#: templates/meetings/update_meeting.html:222 +msgid "Cancel" +msgstr "" + +#: templates/includes/search_form.html:11 +msgid "Search..." +msgstr "" + +#: templates/includes/search_form.html:13 +msgid "Search" +msgstr "" + +#: templates/jobs/create_job.html:113 +msgid "Create New Job Posting" +msgstr "" + +#: templates/jobs/create_job.html:121 +msgid "Basic Information" +msgstr "" + +#: templates/jobs/create_job.html:127 +msgid "Job Title" +msgstr "" + +#: templates/jobs/create_job.html:137 +msgid "Job Type" +msgstr "" + +#: templates/jobs/create_job.html:148 +msgid "Department" +msgstr "" + +#: templates/jobs/create_job.html:158 +msgid "Position Number" +msgstr "" + +#: templates/jobs/create_job.html:169 +msgid "Workplace Type" +msgstr "" + +#: templates/jobs/create_job.html:179 +#: templates/recruitment/training_list.html:151 +msgid "Created By" +msgstr "" + +#: templates/jobs/create_job.html:193 +msgid "Location" +msgstr "" + +#: templates/jobs/create_job.html:199 +msgid "City" +msgstr "" + +#: templates/jobs/create_job.html:209 +msgid "State/Province" +msgstr "" + +#: templates/jobs/create_job.html:219 +msgid "Country" +msgstr "" + +#: templates/jobs/create_job.html:233 +msgid "Job Details" +msgstr "" + +#: templates/jobs/create_job.html:239 templates/jobs/job_detail.html:341 +msgid "Job Description" +msgstr "" + +#: templates/jobs/create_job.html:250 +msgid "Qualifications and Requirements" +msgstr "" + +#: templates/jobs/create_job.html:261 +msgid "Salary Range" +msgstr "" + +#: templates/jobs/create_job.html:271 templates/jobs/job_detail.html:353 +msgid "Benefits" +msgstr "" + +#: templates/jobs/create_job.html:285 +msgid "Application Information" +msgstr "" + +#: templates/jobs/create_job.html:291 +msgid "Application URL" +msgstr "" + +#: templates/jobs/create_job.html:297 +msgid "Full URL where candidates will apply" +msgstr "" + +#: templates/jobs/create_job.html:303 +msgid "Application Deadline" +msgstr "" + +#: templates/jobs/create_job.html:313 +msgid "Desired Start Date" +msgstr "" + +#: templates/jobs/create_job.html:324 templates/jobs/job_detail.html:363 +msgid "Application Instructions" +msgstr "" + +#: templates/jobs/create_job.html:338 +msgid "Post Reach Field" +msgstr "" + +#: templates/jobs/create_job.html:344 +msgid "Hashtags" +msgstr "" + +#: templates/jobs/create_job.html:358 templates/jobs/job_detail.html:545 +msgid "Internal Information" +msgstr "" + +#: templates/jobs/create_job.html:364 +msgid "Reports To" +msgstr "" + +#: templates/jobs/create_job.html:374 +msgid "Open Positions" +msgstr "" + +#: templates/jobs/job_detail.html:262 +#: templates/recruitment/candidate_detail.html:236 +msgid "Core Details" +msgstr "" + +#: templates/jobs/job_detail.html:267 +msgid "Description & Requirements" +msgstr "" + +#: templates/jobs/job_detail.html:273 +msgid "Application" +msgstr "" + +#: templates/jobs/job_detail.html:284 +msgid "Administrative & Location" +msgstr "" + +#: templates/jobs/job_detail.html:287 +msgid "Department:" +msgstr "" + +#: templates/jobs/job_detail.html:290 +msgid "Position No:" +msgstr "" + +#: templates/jobs/job_detail.html:293 +msgid "Job Type:" +msgstr "" + +#: templates/jobs/job_detail.html:296 +msgid "Workplace:" +msgstr "" + +#: templates/jobs/job_detail.html:299 +msgid "Location:" +msgstr "" + +#: templates/jobs/job_detail.html:302 +msgid "Created By:" +msgstr "" + +#: templates/jobs/job_detail.html:305 +msgid "Financial & Timeline" +msgstr "" + +#: templates/jobs/job_detail.html:311 +msgid "Salary:" +msgstr "" + +#: templates/jobs/job_detail.html:319 +msgid "Start Date:" +msgstr "" + +#: templates/jobs/job_detail.html:327 +msgid "Deadline:" +msgstr "" + +#: templates/jobs/job_detail.html:329 +msgid "EXPIRED" +msgstr "" + +#: templates/jobs/job_detail.html:347 +msgid "Required Qualifications" +msgstr "" + +#: templates/jobs/job_detail.html:375 +msgid "Edit Job" +msgstr "" + +#: templates/jobs/job_detail.html:380 +msgid "Upload Image for Post" +msgstr "" + +#: templates/jobs/job_detail.html:395 +msgid "Applicants" +msgstr "" + +#: templates/jobs/job_detail.html:400 +msgid "Manage" +msgstr "" + +#: templates/jobs/job_detail.html:405 +msgid "Info" +msgstr "" + +#: templates/jobs/job_detail.html:464 +msgid "View All Applicants" +msgstr "" + +#: templates/jobs/job_detail.html:471 +msgid "No applicants yet" +msgstr "" + +#: templates/jobs/job_detail.html:472 +msgid "Candidates will appear here once they apply for this position." +msgstr "" + +#: templates/jobs/job_detail.html:481 +msgid "LinkedIn Integration" +msgstr "" + +#: templates/jobs/job_detail.html:485 +msgid "Posted successfully!" +msgstr "" + +#: templates/jobs/job_detail.html:489 +msgid "View on LinkedIn" +msgstr "" + +#: templates/jobs/job_detail.html:493 +msgid "Posted on:" +msgstr "" + +#: templates/jobs/job_detail.html:496 +msgid "This job has not been posted to LinkedIn yet." +msgstr "" + +#: templates/jobs/job_detail.html:504 +msgid "Re-post to LinkedIn" +msgstr "" + +#: templates/jobs/job_detail.html:504 +msgid "Post to LinkedIn" +msgstr "" + +#: templates/jobs/job_detail.html:510 +msgid "You need to" +msgstr "" + +#: templates/jobs/job_detail.html:510 +msgid "authenticate with LinkedIn" +msgstr "" + +#: templates/jobs/job_detail.html:510 +msgid "first." +msgstr "" + +#: templates/jobs/job_detail.html:517 +msgid "Error:" +msgstr "" + +#: templates/jobs/job_detail.html:523 +msgid "Form Management" +msgstr "" + +#: templates/jobs/job_detail.html:526 +msgid "Manage the custom application forms associated with this job posting." +msgstr "" + +#: templates/jobs/job_detail.html:530 +msgid "Create New Form" +msgstr "" + +#: templates/jobs/job_detail.html:534 +msgid "View All Existing Forms" +msgstr "" + +#: templates/jobs/job_detail.html:538 +#: templates/recruitment/candidate_create.html:131 +msgid "Create Candidate" +msgstr "" + +#: templates/jobs/job_detail.html:547 +msgid "Internal Job ID:" +msgstr "" + +#: templates/jobs/job_detail.html:548 +msgid "Created:" +msgstr "" + +#: templates/jobs/job_detail.html:549 +msgid "Last Updated:" +msgstr "" + +#: templates/jobs/job_detail.html:551 +msgid "Reports To:" +msgstr "" + +#: templates/jobs/job_detail.html:557 +msgid "Back to Jobs" +msgstr "" + +#: templates/jobs/job_detail_candidate.html:144 +msgid "Job Overview" +msgstr "" + +#: templates/meetings/create_meeting.html:4 +msgid "Create Zoom Meeting" +msgstr "" + +#: templates/meetings/create_meeting.html:151 +msgid "Create New Zoom Meeting" +msgstr "" + +#: templates/meetings/create_meeting.html:155 +#: templates/meetings/meeting_details.html:19 +msgid "Back to Meetings" +msgstr "" + +#: templates/meetings/create_meeting.html:170 +msgid "Duration (minutes)" +msgstr "" + +#: templates/meetings/list_meetings.html:4 +#: templates/meetings/list_meetings.html:233 +msgid "Zoom Meetings" +msgstr "" + +#: templates/meetings/list_meetings.html:255 +msgid "ID" +msgstr "" + +#: templates/meetings/list_meetings.html:270 +msgid "Status" +msgstr "" + +#: templates/meetings/list_meetings.html:274 +msgid "Waiting" +msgstr "" + +#: templates/meetings/list_meetings.html:276 +msgid "Started" +msgstr "" + +#: templates/meetings/list_meetings.html:278 +msgid "Ended" +msgstr "" + +#: templates/meetings/list_meetings.html:289 +#: templates/meetings/meeting_details.html:45 +msgid "Join Meeting" +msgstr "" + +#: templates/meetings/list_meetings.html:296 +#: templates/recruitment/candidate_list.html:174 +#: templates/recruitment/candidate_update.html:104 +#: templates/recruitment/training_list.html:164 +#: templates/recruitment/training_update.html:119 +msgid "View" +msgstr "" + +#: templates/meetings/list_meetings.html:302 +msgid "Update" +msgstr "" + +#: templates/meetings/list_meetings.html:356 +msgid "No meetings found." +msgstr "" + +#: templates/meetings/list_meetings.html:362 +msgid "Create Your First Meeting" +msgstr "" + +#: templates/meetings/meeting_details.html:4 +msgid "Meeting Details" +msgstr "" + +#: templates/meetings/meeting_details.html:23 +#: templates/meetings/update_meeting.html:191 +msgid "Meeting Information" +msgstr "" + +#: templates/meetings/meeting_details.html:37 +msgid "Host Email" +msgstr "" + +#: templates/meetings/meeting_details.html:44 +msgid "Join Information" +msgstr "" + +#: templates/meetings/meeting_details.html:48 +msgid "Password" +msgstr "" + +#: templates/meetings/meeting_details.html:58 +msgid "Host Video" +msgstr "" + +#: templates/meetings/meeting_details.html:81 +msgid "View API Response" +msgstr "" + +#: templates/meetings/meeting_details.html:83 +#: templates/meetings/update_meeting.html:218 +msgid "Update Meeting" +msgstr "" + +#: templates/meetings/meeting_details.html:86 +msgid "Are you sure?" +msgstr "" + +#: templates/meetings/meeting_details.html:86 +msgid "Delete Meeting" +msgstr "" + +#: templates/meetings/meeting_details.html:93 +msgid "Zoom API Response" +msgstr "" + +#: templates/meetings/update_meeting.html:3 +#: templates/meetings/update_meeting.html:174 +msgid "Update Zoom Meeting" +msgstr "" + +#: templates/meetings/update_meeting.html:175 +msgid "Modify the details of your scheduled meeting" +msgstr "" + +#: templates/meetings/update_meeting.html:197 +msgid "Topic:" +msgstr "" + +#: templates/meetings/update_meeting.html:202 +msgid "Start Time (ISO 8601):" +msgstr "" + +#: templates/meetings/update_meeting.html:209 +msgid "Duration (minutes):" +msgstr "" + +#: templates/recruitment/candidate_create.html:94 +msgid "Create New Candidate" +msgstr "" + +#: templates/recruitment/candidate_create.html:96 +msgid "Enter details to create a new candidate record." +msgstr "" + +#: templates/recruitment/candidate_create.html:99 +#: templates/recruitment/candidate_create.html:101 +#: templates/recruitment/candidate_detail.html:326 +#: templates/recruitment/candidate_update.html:97 +#: templates/recruitment/candidate_update.html:99 +#: templates/recruitment/training_create.html:124 +#: templates/recruitment/training_create.html:126 +#: templates/recruitment/training_update.html:112 +#: templates/recruitment/training_update.html:114 +msgid "Back to List" +msgstr "" + +#: templates/recruitment/candidate_create.html:112 +msgid "Candidate Information" +msgstr "" + +#: templates/recruitment/candidate_detail.html:191 +msgid "Stage:" +msgstr "" + +#: templates/recruitment/candidate_detail.html:196 +msgid "Applied for:" +msgstr "" + +#: templates/recruitment/candidate_detail.html:202 +msgid "Change Stage" +msgstr "" + +#: templates/recruitment/candidate_detail.html:212 +msgid "Contact & Job" +msgstr "" + +#: templates/recruitment/candidate_detail.html:225 +msgid "Summary" +msgstr "" + +#: templates/recruitment/candidate_detail.html:251 +msgid "Position Applied" +msgstr "" + +#: templates/recruitment/candidate_detail.html:260 +msgid "Applied Date" +msgstr "" + +#: templates/recruitment/candidate_detail.html:277 +msgid "Resume Document" +msgstr "" + +#: templates/recruitment/candidate_detail.html:285 +msgid "Download Resume" +msgstr "" + +#: templates/recruitment/candidate_detail.html:294 +msgid "AI Generated Summary" +msgstr "" + +#: templates/recruitment/candidate_detail.html:312 +msgid "Management Actions" +msgstr "" + +#: templates/recruitment/candidate_detail.html:320 +msgid "Edit Details" +msgstr "" + +#: templates/recruitment/candidate_detail.html:322 +msgid "Are you sure you want to delete this candidate?" +msgstr "" + +#: templates/recruitment/candidate_detail.html:323 +msgid "Delete Candidate" +msgstr "" + +#: templates/recruitment/candidate_detail.html:338 +msgid "Parsed Data" +msgstr "" + +#: templates/recruitment/candidate_detail.html:343 +msgid "Activity" +msgstr "" + +#: templates/recruitment/candidate_detail.html:352 +msgid "Structured Resume Data" +msgstr "" + +#: templates/recruitment/candidate_detail.html:372 +msgid "" +"Activity feed (e.g., stage changes, notes, interview history) will appear " +"here." +msgstr "" + +#: templates/recruitment/candidate_list.html:129 +msgid "Candidate Profiles" +msgstr "" + +#: templates/recruitment/candidate_list.html:138 +msgid "Add New Candidate" +msgstr "" + +#: templates/recruitment/candidate_list.html:150 +msgid "Name" +msgstr "" + +#: templates/recruitment/candidate_list.html:155 +#: templates/recruitment/training_list.html:152 +msgid "Created" +msgstr "" + +#: templates/recruitment/candidate_list.html:156 +#: templates/recruitment/training_list.html:153 +msgid "Actions" +msgstr "" + +#: templates/recruitment/candidate_list.html:233 +msgid "No candidates found." +msgstr "" + +#: templates/recruitment/candidate_list.html:234 +msgid "Start by adding a new profile or adjusting your search filters." +msgstr "" + +#: templates/recruitment/candidate_list.html:238 +msgid "Add Your First Candidate" +msgstr "" + +#: templates/recruitment/candidate_update.html:92 +msgid "Update Candidate:" +msgstr "" + +#: templates/recruitment/candidate_update.html:94 +msgid "Edit candidate information and details" +msgstr "" + +#: templates/recruitment/candidate_update.html:102 +msgid "View Candidate" +msgstr "" + +#: templates/recruitment/candidate_update.html:116 +msgid "Candidate Form" +msgstr "" + +#: templates/recruitment/candidate_update.html:135 +msgid "Update Candidate" +msgstr "" + +#: templates/recruitment/training_create.html:119 +msgid "Create New Training Material" +msgstr "" + +#: templates/recruitment/training_create.html:121 +msgid "Upload a new document or guide for your team." +msgstr "" + +#: templates/recruitment/training_create.html:137 +#: templates/recruitment/training_update.html:131 +msgid "Material Details" +msgstr "" + +#: templates/recruitment/training_create.html:158 +msgid "Create Material" +msgstr "" + +#: templates/recruitment/training_list.html:135 +#: templates/recruitment/training_list.html:137 +msgid "Add New Material" +msgstr "" + +#: templates/recruitment/training_list.html:223 +msgid "No training materials found." +msgstr "" + +#: templates/recruitment/training_list.html:224 +msgid "It looks like there are no materials yet. Start by adding one!" +msgstr "" + +#: templates/recruitment/training_list.html:228 +msgid "Create Your First Material" +msgstr "" + +#: templates/recruitment/training_update.html:107 +msgid "Update Training Material:" +msgstr "" + +#: templates/recruitment/training_update.html:109 +msgid "Edit the details of this training document or guide." +msgstr "" + +#: templates/recruitment/training_update.html:117 +msgid "View Material" +msgstr "" + +#: templates/recruitment/training_update.html:180 +msgid "Update Material" +msgstr "" + +#: templates/recruitment/training_update.html:182 +msgid "Are you sure you want to delete this material?" +msgstr "" + +#: templates/unfold/components/table.html:43 +msgid "No data" +msgstr "" diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000..ecedf37 --- /dev/null +++ b/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,1427 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-10-08 13:38+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: recruitment/forms.py:14 recruitment/models.py:200 +msgid "First Name" +msgstr "" + +#: recruitment/forms.py:15 recruitment/models.py:201 +msgid "Last Name" +msgstr "" + +#: recruitment/forms.py:16 recruitment/models.py:203 +#: templates/recruitment/candidate_list.html:152 +msgid "Phone" +msgstr "" + +#: recruitment/forms.py:17 recruitment/models.py:202 +#: templates/recruitment/candidate_detail.html:242 +#: templates/recruitment/candidate_list.html:151 +msgid "Email" +msgstr "" + +#: recruitment/forms.py:18 recruitment/models.py:204 +#: templates/recruitment/candidate_detail.html:218 +msgid "Resume" +msgstr "" + +#: recruitment/forms.py:19 +msgid "Application Stage" +msgstr "" + +#: recruitment/forms.py:22 +msgid "Enter first name" +msgstr "" + +#: recruitment/forms.py:23 +msgid "Enter last name" +msgstr "" + +#: recruitment/forms.py:24 +msgid "Enter phone number" +msgstr "" + +#: recruitment/forms.py:25 +msgid "Enter email" +msgstr "" + +#: recruitment/forms.py:50 +msgid "Submit" +msgstr "" + +#: recruitment/forms.py:60 +msgid "New Application Stage" +msgstr "" + +#: recruitment/forms.py:85 recruitment/models.py:180 recruitment/models.py:206 +#: templates/jobs/job_detail.html:420 +#: templates/recruitment/candidate_list.html:154 +msgid "Applied" +msgstr "" + +#: recruitment/forms.py:92 +msgid "Please select a stage." +msgstr "" + +#: recruitment/forms.py:101 +#, python-format +msgid "" +"Cannot transition from \"%(current)s\" to \"%(new)s\". Allowed transitions: " +"%(allowed)s" +msgstr "" + +#: recruitment/forms.py:116 recruitment/models.py:306 +#: templates/meetings/create_meeting.html:162 +msgid "Topic" +msgstr "" + +#: recruitment/forms.py:117 recruitment/models.py:308 recruitment/models.py:727 +#: templates/meetings/create_meeting.html:166 +#: templates/meetings/list_meetings.html:260 +#: templates/meetings/meeting_details.html:29 +msgid "Start Time" +msgstr "" + +#: recruitment/forms.py:118 recruitment/models.py:309 +#: templates/meetings/list_meetings.html:265 +#: templates/meetings/meeting_details.html:33 +msgid "Duration" +msgstr "" + +#: recruitment/forms.py:121 +msgid "Enter meeting topic" +msgstr "" + +#: recruitment/forms.py:123 +msgid "60" +msgstr "" + +#: recruitment/forms.py:137 templates/meetings/create_meeting.html:180 +#: templates/meetings/list_meetings.html:242 +msgid "Create Meeting" +msgstr "" + +#: recruitment/forms.py:147 recruitment/models.py:290 +#: templates/recruitment/training_list.html:150 +#: templates/recruitment/training_update.html:144 +msgid "Title" +msgstr "" + +#: recruitment/forms.py:148 recruitment/models.py:291 +#: templates/recruitment/training_update.html:158 +msgid "Content" +msgstr "" + +#: recruitment/forms.py:149 recruitment/models.py:292 +#: templates/recruitment/training_update.html:150 +msgid "Video Link" +msgstr "" + +#: recruitment/forms.py:150 recruitment/models.py:293 +#: templates/recruitment/training_update.html:166 +msgid "File" +msgstr "" + +#: recruitment/forms.py:153 +msgid "Enter title" +msgstr "" + +#: recruitment/forms.py:154 +msgid "Enter material content" +msgstr "" + +#: recruitment/forms.py:155 +msgid "https://www.youtube.com/watch?v=..." +msgstr "" + +#: recruitment/forms.py:174 +msgid "Save Material" +msgstr "" + +#: recruitment/forms.py:377 recruitment/models.py:199 +#: templates/recruitment/candidate_list.html:153 +msgid "Job" +msgstr "" + +#: recruitment/forms.py:378 +msgid "Template Name" +msgstr "" + +#: recruitment/forms.py:379 recruitment/models.py:542 +msgid "Description" +msgstr "" + +#: recruitment/forms.py:380 recruitment/models.py:576 +msgid "Active" +msgstr "" + +#: recruitment/forms.py:385 +msgid "Enter template name" +msgstr "" + +#: recruitment/forms.py:391 +msgid "Enter template description (optional)" +msgstr "" + +#: recruitment/forms.py:410 +msgid "Create Template" +msgstr "" + +#: recruitment/models.py:13 +msgid "Created at" +msgstr "" + +#: recruitment/models.py:14 +msgid "Updated at" +msgstr "" + +#: recruitment/models.py:15 +msgid "Slug" +msgstr "" + +#: recruitment/models.py:120 recruitment/models.py:714 +msgid "Hiring Agency" +msgstr "" + +#: recruitment/models.py:121 +msgid "External agency responsible for sourcing candidates for this role" +msgstr "" + +#: recruitment/models.py:181 +msgid "Exam" +msgstr "" + +#: recruitment/models.py:182 templates/jobs/job_detail.html:426 +msgid "Interview" +msgstr "" + +#: recruitment/models.py:183 templates/jobs/job_detail.html:432 +msgid "Offer" +msgstr "" + +#: recruitment/models.py:185 +msgid "Passed" +msgstr "" + +#: recruitment/models.py:186 +msgid "Failed" +msgstr "" + +#: recruitment/models.py:188 +msgid "Accepted" +msgstr "" + +#: recruitment/models.py:189 +msgid "Rejected" +msgstr "" + +#: recruitment/models.py:205 +msgid "Parsed Summary" +msgstr "" + +#: recruitment/models.py:207 +msgid "Stage" +msgstr "" + +#: recruitment/models.py:209 +msgid "Exam Date" +msgstr "" + +#: recruitment/models.py:210 +msgid "Exam Status" +msgstr "" + +#: recruitment/models.py:211 recruitment/models.py:744 +msgid "Interview Date" +msgstr "" + +#: recruitment/models.py:212 +msgid "Interview Status" +msgstr "" + +#: recruitment/models.py:213 +msgid "Offer Date" +msgstr "" + +#: recruitment/models.py:214 +msgid "Offer Status" +msgstr "" + +#: recruitment/models.py:215 +msgid "Join Date" +msgstr "" + +#: recruitment/models.py:230 +msgid "Submitted by Agency" +msgstr "" + +#: recruitment/models.py:234 +msgid "Candidate" +msgstr "" + +#: recruitment/models.py:235 templates/base.html:298 +#: templates/jobs/job_detail.html:414 +msgid "Candidates" +msgstr "" + +#: recruitment/models.py:294 +msgid "Created by" +msgstr "" + +#: recruitment/models.py:297 +msgid "Training Material" +msgstr "" + +#: recruitment/models.py:298 templates/recruitment/training_list.html:4 +#: templates/recruitment/training_list.html:126 +msgid "Training Materials" +msgstr "" + +#: recruitment/models.py:307 templates/meetings/meeting_details.html:25 +msgid "Meeting ID" +msgstr "" + +#: recruitment/models.py:310 +msgid "Timezone" +msgstr "" + +#: recruitment/models.py:311 templates/meetings/list_meetings.html:286 +msgid "Join URL" +msgstr "" + +#: recruitment/models.py:312 templates/meetings/meeting_details.html:62 +msgid "Participant Video" +msgstr "" + +#: recruitment/models.py:313 templates/meetings/meeting_details.html:66 +msgid "Join Before Host" +msgstr "" + +#: recruitment/models.py:314 templates/meetings/meeting_details.html:70 +msgid "Mute Upon Entry" +msgstr "" + +#: recruitment/models.py:315 templates/meetings/meeting_details.html:74 +msgid "Waiting Room" +msgstr "" + +#: recruitment/models.py:317 +msgid "Zoom Gateway Response" +msgstr "" + +#: recruitment/models.py:532 +msgid "Source Name" +msgstr "" + +#: recruitment/models.py:533 recruitment/models.py:538 +msgid "e.g., ATS, ERP " +msgstr "" + +#: recruitment/models.py:537 +msgid "Source Type" +msgstr "" + +#: recruitment/models.py:543 +msgid "A description of the source" +msgstr "" + +#: recruitment/models.py:548 recruitment/models.py:667 +msgid "IP Address" +msgstr "" + +#: recruitment/models.py:549 +msgid "The IP address of the source" +msgstr "" + +#: recruitment/models.py:558 +msgid "API Key" +msgstr "" + +#: recruitment/models.py:559 +msgid "API key for authentication (will be encrypted)" +msgstr "" + +#: recruitment/models.py:565 +msgid "API Secret" +msgstr "" + +#: recruitment/models.py:566 +msgid "API secret for authentication (will be encrypted)" +msgstr "" + +#: recruitment/models.py:571 +msgid "Trusted IP Addresses" +msgstr "" + +#: recruitment/models.py:572 +msgid "Comma-separated list of trusted IP addresses" +msgstr "" + +#: recruitment/models.py:577 +msgid "Whether this source is active for integration" +msgstr "" + +#: recruitment/models.py:582 +msgid "Integration Version" +msgstr "" + +#: recruitment/models.py:583 +msgid "Version of the integration protocol" +msgstr "" + +#: recruitment/models.py:588 +msgid "Last Sync At" +msgstr "" + +#: recruitment/models.py:589 +msgid "Timestamp of the last successful synchronization" +msgstr "" + +#: recruitment/models.py:601 +msgid "Sync Status" +msgstr "" + +#: recruitment/models.py:610 recruitment/models.py:630 +msgid "Source" +msgstr "" + +#: recruitment/models.py:611 +msgid "Sources" +msgstr "" + +#: recruitment/models.py:619 +msgid "Request" +msgstr "" + +#: recruitment/models.py:620 +msgid "Response" +msgstr "" + +#: recruitment/models.py:621 +msgid "Error" +msgstr "" + +#: recruitment/models.py:622 +msgid "Sync" +msgstr "" + +#: recruitment/models.py:623 templates/jobs/create_job.html:392 +msgid "Create Job" +msgstr "" + +#: recruitment/models.py:624 +msgid "Update Job" +msgstr "" + +#: recruitment/models.py:635 +msgid "Action" +msgstr "" + +#: recruitment/models.py:640 +msgid "Endpoint" +msgstr "" + +#: recruitment/models.py:645 +msgid "HTTP Method" +msgstr "" + +#: recruitment/models.py:650 +msgid "Request Data" +msgstr "" + +#: recruitment/models.py:655 +msgid "Response Data" +msgstr "" + +#: recruitment/models.py:660 +msgid "Status Code" +msgstr "" + +#: recruitment/models.py:664 +msgid "Error Message" +msgstr "" + +#: recruitment/models.py:672 +msgid "User Agent" +msgstr "" + +#: recruitment/models.py:677 +msgid "Processing Time (seconds)" +msgstr "" + +#: recruitment/models.py:685 +msgid "Integration Log" +msgstr "" + +#: recruitment/models.py:686 +msgid "Integration Logs" +msgstr "" + +#: recruitment/models.py:701 +msgid "Agency Name" +msgstr "" + +#: recruitment/models.py:702 +msgid "Contact Person" +msgstr "" + +#: recruitment/models.py:706 +msgid "Internal notes about the agency" +msgstr "" + +#: recruitment/models.py:707 +msgid "Select country" +msgstr "" + +#: recruitment/models.py:715 +msgid "Hiring Agencies" +msgstr "" + +#: recruitment/models.py:724 +msgid "Start Date" +msgstr "" + +#: recruitment/models.py:725 +msgid "End Date" +msgstr "" + +#: recruitment/models.py:726 +msgid "Working Days" +msgstr "" + +#: recruitment/models.py:728 +msgid "End Time" +msgstr "" + +#: recruitment/models.py:729 +msgid "Break Start Time" +msgstr "" + +#: recruitment/models.py:730 +msgid "Break End Time" +msgstr "" + +#: recruitment/models.py:731 +msgid "Interview Duration (minutes)" +msgstr "" + +#: recruitment/models.py:732 +msgid "Buffer Time (minutes)" +msgstr "" + +#: recruitment/models.py:745 +msgid "Interview Time" +msgstr "" + +#: recruitment/models.py:749 +msgid "Scheduled" +msgstr "" + +#: recruitment/models.py:750 +msgid "Confirmed" +msgstr "" + +#: recruitment/models.py:751 +msgid "Cancelled" +msgstr "" + +#: recruitment/models.py:752 +msgid "Completed" +msgstr "" + +#: templates/base.html:7 +msgid "King Abdullah Academic University Hospital - Applicant Tracking System" +msgstr "" + +#: templates/base.html:8 +msgid "University ATS" +msgstr "" + +#: templates/base.html:258 +msgid "Saudi Vision 2030" +msgstr "" + +#: templates/base.html:259 +msgid "King Abdullah Academic University Hospital" +msgstr "" + +#: templates/base.html:272 +msgid "Toggle navigation" +msgstr "" + +#: templates/base.html:282 +msgid "Dashboard" +msgstr "" + +#: templates/base.html:290 +msgid "Jobs" +msgstr "" + +#: templates/base.html:309 +msgid "Training" +msgstr "" + +#: templates/base.html:320 templates/base.html:340 +msgid "Meetings" +msgstr "" + +#: templates/base.html:330 templates/forms/form_templates_list.html:190 +msgid "Form Templates" +msgstr "" + +#: templates/base.html:337 +msgid "More" +msgstr "" + +#: templates/base.html:341 +msgid "Schedule" +msgstr "" + +#: templates/base.html:343 +msgid "Active Jobs" +msgstr "" + +#: templates/base.html:344 +msgid "Draft Jobs" +msgstr "" + +#: templates/base.html:346 +msgid "All Candidates" +msgstr "" + +#: templates/base.html:347 +msgid "New Candidates" +msgstr "" + +#: templates/base.html:356 +msgid "Toggle language menu" +msgstr "" + +#: templates/base.html:392 +msgid "Toggle user menu" +msgstr "" + +#: templates/base.html:396 +msgid "Your account" +msgstr "" + +#: templates/base.html:419 +msgid "My Profile" +msgstr "" + +#: templates/base.html:420 templates/meetings/meeting_details.html:56 +msgid "Settings" +msgstr "" + +#: templates/base.html:421 +msgid "Activity Log" +msgstr "" + +#: templates/base.html:422 +msgid "Help & Support" +msgstr "" + +#: templates/base.html:428 +msgid "Connect LinkedIn" +msgstr "" + +#: templates/base.html:435 +msgid "LinkedIn Connected" +msgstr "" + +#: templates/base.html:447 +msgid "Sign out" +msgstr "" + +#: templates/base.html:450 +msgid "Sign Out" +msgstr "" + +#: templates/base.html:466 +msgid "Close" +msgstr "" + +#: templates/base.html:478 +msgid "King Abdullah Academic University Hospital (KAAUH)." +msgstr "" + +#: templates/base.html:479 +msgid "All rights reserved." +msgstr "" + +#: templates/base.html:511 +msgid "Are you sure you want to sign out?" +msgstr "" + +#: templates/forms/form_templates_list.html:208 +msgid "Search templates by name..." +msgstr "" + +#: templates/forms/form_templates_list.html:243 +msgid "ago" +msgstr "" + +#: templates/forms/form_templates_list.html:253 +msgid "Stages" +msgstr "" + +#: templates/forms/form_templates_list.html:257 +msgid "Fields" +msgstr "" + +#: templates/forms/form_templates_list.html:264 +msgid "No description provided" +msgstr "" + +#: templates/forms/form_templates_list.html:274 +msgid "Preview" +msgstr "" + +#: templates/forms/form_templates_list.html:277 +#: templates/recruitment/candidate_list.html:178 +#: templates/recruitment/training_list.html:168 +msgid "Edit" +msgstr "" + +#: templates/forms/form_templates_list.html:282 +#: templates/includes/delete_modal.html:26 +#: templates/meetings/list_meetings.html:307 +#: templates/recruitment/candidate_list.html:181 +#: templates/recruitment/training_list.html:171 +#: templates/recruitment/training_update.html:184 +msgid "Delete" +msgstr "" + +#: templates/forms/form_templates_list.html:326 +msgid "No Form Templates Found" +msgstr "" + +#: templates/forms/form_templates_list.html:329 +#, python-format +msgid "No templates match your search \"%(query)s\"." +msgstr "" + +#: templates/forms/form_templates_list.html:331 +msgid "You haven't created any form templates yet." +msgstr "" + +#: templates/forms/form_templates_list.html:335 +msgid "Create Your First Template" +msgstr "" + +#: templates/forms/form_wizard.html:7 templates/forms/form_wizard.html:470 +#: templates/jobs/job_detail_candidate.html:7 +msgid "Application Form" +msgstr "" + +#: templates/forms/form_wizard.html:439 +#: templates/jobs/job_detail_candidate.html:121 +msgid "KAAUH IMAGE" +msgstr "" + +#: templates/forms/form_wizard.html:449 +#: templates/jobs/job_detail_candidate.html:132 +msgid "Applications" +msgstr "" + +#: templates/forms/form_wizard.html:452 +#: templates/jobs/job_detail_candidate.html:135 +msgid "Profile" +msgstr "" + +#: templates/forms/form_wizard.html:480 +msgid "Review Your Application" +msgstr "" + +#: templates/forms/form_wizard.html:487 +msgid "Back" +msgstr "" + +#: templates/forms/form_wizard.html:491 +msgid "Next" +msgstr "" + +#: templates/forms/form_wizard.html:495 +msgid "Submit Application" +msgstr "" + +#: templates/includes/delete_modal.html:11 +msgid "Confirm Delete" +msgstr "" + +#: templates/includes/delete_modal.html:16 +msgid "Are you sure you want to delete this item?" +msgstr "" + +#: templates/includes/delete_modal.html:19 templates/jobs/create_job.html:389 +#: templates/meetings/create_meeting.html:184 +#: templates/meetings/update_meeting.html:222 +msgid "Cancel" +msgstr "" + +#: templates/includes/search_form.html:11 +msgid "Search..." +msgstr "" + +#: templates/includes/search_form.html:13 +msgid "Search" +msgstr "" + +#: templates/jobs/create_job.html:113 +msgid "Create New Job Posting" +msgstr "" + +#: templates/jobs/create_job.html:121 +msgid "Basic Information" +msgstr "" + +#: templates/jobs/create_job.html:127 +msgid "Job Title" +msgstr "" + +#: templates/jobs/create_job.html:137 +msgid "Job Type" +msgstr "" + +#: templates/jobs/create_job.html:148 +msgid "Department" +msgstr "" + +#: templates/jobs/create_job.html:158 +msgid "Position Number" +msgstr "" + +#: templates/jobs/create_job.html:169 +msgid "Workplace Type" +msgstr "" + +#: templates/jobs/create_job.html:179 +#: templates/recruitment/training_list.html:151 +msgid "Created By" +msgstr "" + +#: templates/jobs/create_job.html:193 +msgid "Location" +msgstr "" + +#: templates/jobs/create_job.html:199 +msgid "City" +msgstr "" + +#: templates/jobs/create_job.html:209 +msgid "State/Province" +msgstr "" + +#: templates/jobs/create_job.html:219 +msgid "Country" +msgstr "" + +#: templates/jobs/create_job.html:233 +msgid "Job Details" +msgstr "" + +#: templates/jobs/create_job.html:239 templates/jobs/job_detail.html:341 +msgid "Job Description" +msgstr "" + +#: templates/jobs/create_job.html:250 +msgid "Qualifications and Requirements" +msgstr "" + +#: templates/jobs/create_job.html:261 +msgid "Salary Range" +msgstr "" + +#: templates/jobs/create_job.html:271 templates/jobs/job_detail.html:353 +msgid "Benefits" +msgstr "" + +#: templates/jobs/create_job.html:285 +msgid "Application Information" +msgstr "" + +#: templates/jobs/create_job.html:291 +msgid "Application URL" +msgstr "" + +#: templates/jobs/create_job.html:297 +msgid "Full URL where candidates will apply" +msgstr "" + +#: templates/jobs/create_job.html:303 +msgid "Application Deadline" +msgstr "" + +#: templates/jobs/create_job.html:313 +msgid "Desired Start Date" +msgstr "" + +#: templates/jobs/create_job.html:324 templates/jobs/job_detail.html:363 +msgid "Application Instructions" +msgstr "" + +#: templates/jobs/create_job.html:338 +msgid "Post Reach Field" +msgstr "" + +#: templates/jobs/create_job.html:344 +msgid "Hashtags" +msgstr "" + +#: templates/jobs/create_job.html:358 templates/jobs/job_detail.html:545 +msgid "Internal Information" +msgstr "" + +#: templates/jobs/create_job.html:364 +msgid "Reports To" +msgstr "" + +#: templates/jobs/create_job.html:374 +msgid "Open Positions" +msgstr "" + +#: templates/jobs/job_detail.html:262 +#: templates/recruitment/candidate_detail.html:236 +msgid "Core Details" +msgstr "" + +#: templates/jobs/job_detail.html:267 +msgid "Description & Requirements" +msgstr "" + +#: templates/jobs/job_detail.html:273 +msgid "Application" +msgstr "" + +#: templates/jobs/job_detail.html:284 +msgid "Administrative & Location" +msgstr "" + +#: templates/jobs/job_detail.html:287 +msgid "Department:" +msgstr "" + +#: templates/jobs/job_detail.html:290 +msgid "Position No:" +msgstr "" + +#: templates/jobs/job_detail.html:293 +msgid "Job Type:" +msgstr "" + +#: templates/jobs/job_detail.html:296 +msgid "Workplace:" +msgstr "" + +#: templates/jobs/job_detail.html:299 +msgid "Location:" +msgstr "" + +#: templates/jobs/job_detail.html:302 +msgid "Created By:" +msgstr "" + +#: templates/jobs/job_detail.html:305 +msgid "Financial & Timeline" +msgstr "" + +#: templates/jobs/job_detail.html:311 +msgid "Salary:" +msgstr "" + +#: templates/jobs/job_detail.html:319 +msgid "Start Date:" +msgstr "" + +#: templates/jobs/job_detail.html:327 +msgid "Deadline:" +msgstr "" + +#: templates/jobs/job_detail.html:329 +msgid "EXPIRED" +msgstr "" + +#: templates/jobs/job_detail.html:347 +msgid "Required Qualifications" +msgstr "" + +#: templates/jobs/job_detail.html:375 +msgid "Edit Job" +msgstr "" + +#: templates/jobs/job_detail.html:380 +msgid "Upload Image for Post" +msgstr "" + +#: templates/jobs/job_detail.html:395 +msgid "Applicants" +msgstr "" + +#: templates/jobs/job_detail.html:400 +msgid "Manage" +msgstr "" + +#: templates/jobs/job_detail.html:405 +msgid "Info" +msgstr "" + +#: templates/jobs/job_detail.html:464 +msgid "View All Applicants" +msgstr "" + +#: templates/jobs/job_detail.html:471 +msgid "No applicants yet" +msgstr "" + +#: templates/jobs/job_detail.html:472 +msgid "Candidates will appear here once they apply for this position." +msgstr "" + +#: templates/jobs/job_detail.html:481 +msgid "LinkedIn Integration" +msgstr "" + +#: templates/jobs/job_detail.html:485 +msgid "Posted successfully!" +msgstr "" + +#: templates/jobs/job_detail.html:489 +msgid "View on LinkedIn" +msgstr "" + +#: templates/jobs/job_detail.html:493 +msgid "Posted on:" +msgstr "" + +#: templates/jobs/job_detail.html:496 +msgid "This job has not been posted to LinkedIn yet." +msgstr "" + +#: templates/jobs/job_detail.html:504 +msgid "Re-post to LinkedIn" +msgstr "" + +#: templates/jobs/job_detail.html:504 +msgid "Post to LinkedIn" +msgstr "" + +#: templates/jobs/job_detail.html:510 +msgid "You need to" +msgstr "" + +#: templates/jobs/job_detail.html:510 +msgid "authenticate with LinkedIn" +msgstr "" + +#: templates/jobs/job_detail.html:510 +msgid "first." +msgstr "" + +#: templates/jobs/job_detail.html:517 +msgid "Error:" +msgstr "" + +#: templates/jobs/job_detail.html:523 +msgid "Form Management" +msgstr "" + +#: templates/jobs/job_detail.html:526 +msgid "Manage the custom application forms associated with this job posting." +msgstr "" + +#: templates/jobs/job_detail.html:530 +msgid "Create New Form" +msgstr "" + +#: templates/jobs/job_detail.html:534 +msgid "View All Existing Forms" +msgstr "" + +#: templates/jobs/job_detail.html:538 +#: templates/recruitment/candidate_create.html:131 +msgid "Create Candidate" +msgstr "" + +#: templates/jobs/job_detail.html:547 +msgid "Internal Job ID:" +msgstr "" + +#: templates/jobs/job_detail.html:548 +msgid "Created:" +msgstr "" + +#: templates/jobs/job_detail.html:549 +msgid "Last Updated:" +msgstr "" + +#: templates/jobs/job_detail.html:551 +msgid "Reports To:" +msgstr "" + +#: templates/jobs/job_detail.html:557 +msgid "Back to Jobs" +msgstr "" + +#: templates/jobs/job_detail_candidate.html:144 +msgid "Job Overview" +msgstr "" + +#: templates/meetings/create_meeting.html:4 +msgid "Create Zoom Meeting" +msgstr "" + +#: templates/meetings/create_meeting.html:151 +msgid "Create New Zoom Meeting" +msgstr "" + +#: templates/meetings/create_meeting.html:155 +#: templates/meetings/meeting_details.html:19 +msgid "Back to Meetings" +msgstr "" + +#: templates/meetings/create_meeting.html:170 +msgid "Duration (minutes)" +msgstr "" + +#: templates/meetings/list_meetings.html:4 +#: templates/meetings/list_meetings.html:233 +msgid "Zoom Meetings" +msgstr "" + +#: templates/meetings/list_meetings.html:255 +msgid "ID" +msgstr "" + +#: templates/meetings/list_meetings.html:270 +msgid "Status" +msgstr "" + +#: templates/meetings/list_meetings.html:274 +msgid "Waiting" +msgstr "" + +#: templates/meetings/list_meetings.html:276 +msgid "Started" +msgstr "" + +#: templates/meetings/list_meetings.html:278 +msgid "Ended" +msgstr "" + +#: templates/meetings/list_meetings.html:289 +#: templates/meetings/meeting_details.html:45 +msgid "Join Meeting" +msgstr "" + +#: templates/meetings/list_meetings.html:296 +#: templates/recruitment/candidate_list.html:174 +#: templates/recruitment/candidate_update.html:104 +#: templates/recruitment/training_list.html:164 +#: templates/recruitment/training_update.html:119 +msgid "View" +msgstr "" + +#: templates/meetings/list_meetings.html:302 +msgid "Update" +msgstr "" + +#: templates/meetings/list_meetings.html:356 +msgid "No meetings found." +msgstr "" + +#: templates/meetings/list_meetings.html:362 +msgid "Create Your First Meeting" +msgstr "" + +#: templates/meetings/meeting_details.html:4 +msgid "Meeting Details" +msgstr "" + +#: templates/meetings/meeting_details.html:23 +#: templates/meetings/update_meeting.html:191 +msgid "Meeting Information" +msgstr "" + +#: templates/meetings/meeting_details.html:37 +msgid "Host Email" +msgstr "" + +#: templates/meetings/meeting_details.html:44 +msgid "Join Information" +msgstr "" + +#: templates/meetings/meeting_details.html:48 +msgid "Password" +msgstr "" + +#: templates/meetings/meeting_details.html:58 +msgid "Host Video" +msgstr "" + +#: templates/meetings/meeting_details.html:81 +msgid "View API Response" +msgstr "" + +#: templates/meetings/meeting_details.html:83 +#: templates/meetings/update_meeting.html:218 +msgid "Update Meeting" +msgstr "" + +#: templates/meetings/meeting_details.html:86 +msgid "Are you sure?" +msgstr "" + +#: templates/meetings/meeting_details.html:86 +msgid "Delete Meeting" +msgstr "" + +#: templates/meetings/meeting_details.html:93 +msgid "Zoom API Response" +msgstr "" + +#: templates/meetings/update_meeting.html:3 +#: templates/meetings/update_meeting.html:174 +msgid "Update Zoom Meeting" +msgstr "" + +#: templates/meetings/update_meeting.html:175 +msgid "Modify the details of your scheduled meeting" +msgstr "" + +#: templates/meetings/update_meeting.html:197 +msgid "Topic:" +msgstr "" + +#: templates/meetings/update_meeting.html:202 +msgid "Start Time (ISO 8601):" +msgstr "" + +#: templates/meetings/update_meeting.html:209 +msgid "Duration (minutes):" +msgstr "" + +#: templates/recruitment/candidate_create.html:94 +msgid "Create New Candidate" +msgstr "" + +#: templates/recruitment/candidate_create.html:96 +msgid "Enter details to create a new candidate record." +msgstr "" + +#: templates/recruitment/candidate_create.html:99 +#: templates/recruitment/candidate_create.html:101 +#: templates/recruitment/candidate_detail.html:326 +#: templates/recruitment/candidate_update.html:97 +#: templates/recruitment/candidate_update.html:99 +#: templates/recruitment/training_create.html:124 +#: templates/recruitment/training_create.html:126 +#: templates/recruitment/training_update.html:112 +#: templates/recruitment/training_update.html:114 +msgid "Back to List" +msgstr "" + +#: templates/recruitment/candidate_create.html:112 +msgid "Candidate Information" +msgstr "" + +#: templates/recruitment/candidate_detail.html:191 +msgid "Stage:" +msgstr "" + +#: templates/recruitment/candidate_detail.html:196 +msgid "Applied for:" +msgstr "" + +#: templates/recruitment/candidate_detail.html:202 +msgid "Change Stage" +msgstr "" + +#: templates/recruitment/candidate_detail.html:212 +msgid "Contact & Job" +msgstr "" + +#: templates/recruitment/candidate_detail.html:225 +msgid "Summary" +msgstr "" + +#: templates/recruitment/candidate_detail.html:251 +msgid "Position Applied" +msgstr "" + +#: templates/recruitment/candidate_detail.html:260 +msgid "Applied Date" +msgstr "" + +#: templates/recruitment/candidate_detail.html:277 +msgid "Resume Document" +msgstr "" + +#: templates/recruitment/candidate_detail.html:285 +msgid "Download Resume" +msgstr "" + +#: templates/recruitment/candidate_detail.html:294 +msgid "AI Generated Summary" +msgstr "" + +#: templates/recruitment/candidate_detail.html:312 +msgid "Management Actions" +msgstr "" + +#: templates/recruitment/candidate_detail.html:320 +msgid "Edit Details" +msgstr "" + +#: templates/recruitment/candidate_detail.html:322 +msgid "Are you sure you want to delete this candidate?" +msgstr "" + +#: templates/recruitment/candidate_detail.html:323 +msgid "Delete Candidate" +msgstr "" + +#: templates/recruitment/candidate_detail.html:338 +msgid "Parsed Data" +msgstr "" + +#: templates/recruitment/candidate_detail.html:343 +msgid "Activity" +msgstr "" + +#: templates/recruitment/candidate_detail.html:352 +msgid "Structured Resume Data" +msgstr "" + +#: templates/recruitment/candidate_detail.html:372 +msgid "" +"Activity feed (e.g., stage changes, notes, interview history) will appear " +"here." +msgstr "" + +#: templates/recruitment/candidate_list.html:129 +msgid "Candidate Profiles" +msgstr "" + +#: templates/recruitment/candidate_list.html:138 +msgid "Add New Candidate" +msgstr "" + +#: templates/recruitment/candidate_list.html:150 +msgid "Name" +msgstr "" + +#: templates/recruitment/candidate_list.html:155 +#: templates/recruitment/training_list.html:152 +msgid "Created" +msgstr "" + +#: templates/recruitment/candidate_list.html:156 +#: templates/recruitment/training_list.html:153 +msgid "Actions" +msgstr "" + +#: templates/recruitment/candidate_list.html:233 +msgid "No candidates found." +msgstr "" + +#: templates/recruitment/candidate_list.html:234 +msgid "Start by adding a new profile or adjusting your search filters." +msgstr "" + +#: templates/recruitment/candidate_list.html:238 +msgid "Add Your First Candidate" +msgstr "" + +#: templates/recruitment/candidate_update.html:92 +msgid "Update Candidate:" +msgstr "" + +#: templates/recruitment/candidate_update.html:94 +msgid "Edit candidate information and details" +msgstr "" + +#: templates/recruitment/candidate_update.html:102 +msgid "View Candidate" +msgstr "" + +#: templates/recruitment/candidate_update.html:116 +msgid "Candidate Form" +msgstr "" + +#: templates/recruitment/candidate_update.html:135 +msgid "Update Candidate" +msgstr "" + +#: templates/recruitment/training_create.html:119 +msgid "Create New Training Material" +msgstr "" + +#: templates/recruitment/training_create.html:121 +msgid "Upload a new document or guide for your team." +msgstr "" + +#: templates/recruitment/training_create.html:137 +#: templates/recruitment/training_update.html:131 +msgid "Material Details" +msgstr "" + +#: templates/recruitment/training_create.html:158 +msgid "Create Material" +msgstr "" + +#: templates/recruitment/training_list.html:135 +#: templates/recruitment/training_list.html:137 +msgid "Add New Material" +msgstr "" + +#: templates/recruitment/training_list.html:223 +msgid "No training materials found." +msgstr "" + +#: templates/recruitment/training_list.html:224 +msgid "It looks like there are no materials yet. Start by adding one!" +msgstr "" + +#: templates/recruitment/training_list.html:228 +msgid "Create Your First Material" +msgstr "" + +#: templates/recruitment/training_update.html:107 +msgid "Update Training Material:" +msgstr "" + +#: templates/recruitment/training_update.html:109 +msgid "Edit the details of this training document or guide." +msgstr "" + +#: templates/recruitment/training_update.html:117 +msgid "View Material" +msgstr "" + +#: templates/recruitment/training_update.html:180 +msgid "Update Material" +msgstr "" + +#: templates/recruitment/training_update.html:182 +msgid "Are you sure you want to delete this material?" +msgstr "" + +#: templates/unfold/components/table.html:43 +msgid "No data" +msgstr "" diff --git a/recruitment/__pycache__/admin.cpython-312.pyc b/recruitment/__pycache__/admin.cpython-312.pyc index b454784..ccbec15 100644 Binary files a/recruitment/__pycache__/admin.cpython-312.pyc and b/recruitment/__pycache__/admin.cpython-312.pyc differ diff --git a/recruitment/__pycache__/forms.cpython-312.pyc b/recruitment/__pycache__/forms.cpython-312.pyc index 6f80a04..3921c26 100644 Binary files a/recruitment/__pycache__/forms.cpython-312.pyc and b/recruitment/__pycache__/forms.cpython-312.pyc differ diff --git a/recruitment/__pycache__/models.cpython-312.pyc b/recruitment/__pycache__/models.cpython-312.pyc index 4d11b5e..0cf83a9 100644 Binary files a/recruitment/__pycache__/models.cpython-312.pyc and b/recruitment/__pycache__/models.cpython-312.pyc differ diff --git a/recruitment/__pycache__/utils.cpython-312.pyc b/recruitment/__pycache__/utils.cpython-312.pyc index d2f9cb2..bc58dfb 100644 Binary files a/recruitment/__pycache__/utils.cpython-312.pyc and b/recruitment/__pycache__/utils.cpython-312.pyc differ diff --git a/recruitment/__pycache__/views.cpython-312.pyc b/recruitment/__pycache__/views.cpython-312.pyc index ccaa5c1..1c2171f 100644 Binary files a/recruitment/__pycache__/views.cpython-312.pyc and b/recruitment/__pycache__/views.cpython-312.pyc differ diff --git a/recruitment/__pycache__/views_frontend.cpython-312.pyc b/recruitment/__pycache__/views_frontend.cpython-312.pyc index 7ee2519..6d78c62 100644 Binary files a/recruitment/__pycache__/views_frontend.cpython-312.pyc and b/recruitment/__pycache__/views_frontend.cpython-312.pyc differ diff --git a/recruitment/admin.py b/recruitment/admin.py index 9480c13..0676c9e 100644 --- a/recruitment/admin.py +++ b/recruitment/admin.py @@ -5,7 +5,7 @@ from django.utils import timezone from .models import ( JobPosting, Candidate, TrainingMaterial, ZoomMeeting, FormTemplate, FormStage, FormField, FormSubmission, FieldResponse, - SharedFormTemplate, Source, HiringAgency, IntegrationLog,InterviewSchedule + SharedFormTemplate, Source, HiringAgency, IntegrationLog,InterviewSchedule,Profile ) class FormFieldInline(admin.TabularInline): @@ -261,4 +261,5 @@ admin.site.register(FormStage) admin.site.register(FormField) admin.site.register(FieldResponse) admin.site.register(InterviewSchedule) +admin.site.register(Profile) # admin.site.register(HiringAgency) diff --git a/recruitment/forms.py b/recruitment/forms.py index dab5dbc..866307e 100644 --- a/recruitment/forms.py +++ b/recruitment/forms.py @@ -1,10 +1,12 @@ from django import forms from .validators import validate_hash_tags -from crispy_forms.helper import FormHelper from django.core.validators import URLValidator from django.utils.translation import gettext_lazy as _ -from crispy_forms.layout import Layout, Submit, HTML, Div, Field +from crispy_forms.helper import FormHelper +from crispy_forms.layout import Layout, Submit, Row, Column, Field, Div from .models import ZoomMeeting, Candidate,TrainingMaterial,JobPosting,FormTemplate,InterviewSchedule +from django_summernote.widgets import SummernoteWidget + class CandidateForm(forms.ModelForm): class Meta: @@ -150,28 +152,33 @@ class TrainingMaterialForm(forms.ModelForm): 'file': _('File'), } widgets = { - 'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('Enter title')}), - 'content': forms.Textarea(attrs={'rows': 6, 'class': 'form-control', 'placeholder': _('Enter material content')}), + 'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('Enter material title')}), + # 💡 Use SummernoteWidget here + 'content': SummernoteWidget(attrs={'placeholder': _('Enter material content')}), 'video_link': forms.URLInput(attrs={'class': 'form-control', 'placeholder': _('https://www.youtube.com/watch?v=...')}), 'file': forms.FileInput(attrs={'class': 'form-control'}), } - + + # The __init__ and FormHelper layout remains the same def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_method = 'post' - self.helper.form_class = 'form-horizontal' - self.helper.label_class = 'col-md-3' - self.helper.field_class = 'col-md-9' + self.helper.form_class = 'g-3' + self.helper.layout = Layout( - Field('title', css_class='form-control'), - Field('content', css_class='form-control'), - Div( - Field('video_link', css_class='form-control'), - Field('file', css_class='form-control'), - css_class='row' + 'title', + 'content', # Summernote is applied via the widgets dictionary + Row( + Column('video_link', css_class='col-md-6'), + Column('file', css_class='col-md-6'), + css_class='g-3 mb-4' ), - Submit('submit', _('Save Material'), css_class='btn btn-primary mt-3') + Div( + Submit('submit', _('Create Material'), + css_class='btn btn-main-action'), + css_class='col-12 mt-4' + ) ) @@ -222,25 +229,22 @@ class JobPostingForm(forms.ModelForm): 'value': 'United States' }), - # Job Details - 'description': forms.Textarea(attrs={ - 'class': 'form-control', - 'rows': 6, + # Job Details (Using SummernoteWidget) + 'description': SummernoteWidget(attrs={ + # Removed 'class' and 'rows' as Summernote handles styling 'placeholder': 'Provide a comprehensive description of the role, responsibilities, and expectations...', 'required': True }), - 'qualifications': forms.Textarea(attrs={ - 'class': 'form-control', - 'rows': 4, + 'qualifications': SummernoteWidget(attrs={ + # Removed 'class' and 'rows' 'placeholder': 'List required qualifications, skills, education, and experience...' }), 'salary_range': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': '$60,000 - $80,000' }), - 'benefits': forms.Textarea(attrs={ - 'class': 'form-control', - 'rows': 2, + 'benefits': SummernoteWidget(attrs={ + # Removed 'class' and 'rows' 'placeholder': 'Health insurance, retirement plans, tuition reimbursement, etc.' }), @@ -254,10 +258,10 @@ class JobPostingForm(forms.ModelForm): 'class': 'form-control', 'type': 'date' }), - 'application_instructions': forms.Textarea(attrs={ - 'class': 'form-control', - 'rows': 3, - 'placeholder': 'Special instructions for applicants (e.g., required documents, reference requirements, etc.)' + 'application_instructions': SummernoteWidget(attrs={ + + 'placeholder': 'Special instructions for applicants (e.g., required documents, reference requirements, etc.)', + }), 'open_positions': forms.NumberInput(attrs={ 'class': 'form-control', @@ -267,8 +271,7 @@ class JobPostingForm(forms.ModelForm): 'hash_tags': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': '#hiring,#jobopening', - 'validators':validate_hash_tags, - + # 'validators':validate_hash_tags, # Assuming this is available }), # Internal Information diff --git a/recruitment/migrations/0027_profile.py b/recruitment/migrations/0027_profile.py new file mode 100644 index 0000000..d2b58c8 --- /dev/null +++ b/recruitment/migrations/0027_profile.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2.7 on 2025-10-08 13:01 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('recruitment', '0026_interviewschedule_scheduledinterview'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Profile', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('profile_image', models.ImageField(blank=True, null=True, upload_to='profile_pic/')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/recruitment/models.py b/recruitment/models.py index 88fa105..187e0a2 100644 --- a/recruitment/models.py +++ b/recruitment/models.py @@ -9,6 +9,9 @@ from django.core.exceptions import ValidationError from django_countries.fields import CountryField from django.urls import reverse +class Profile(models.Model): + profile_image=models.ImageField(null=True,blank=True,upload_to='profile_pic/') + user=models.OneToOneField(User,on_delete=models.CASCADE,related_name='profile') class Base(models.Model): created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('Created at')) updated_at = models.DateTimeField(auto_now=True, verbose_name=_('Updated at')) @@ -127,7 +130,7 @@ class JobPosting(Base): verbose_name_plural = "Job Postings" def __str__(self): - return f"{self.title} - {self.get_status_display()}" + return f"{self.title} - {self.internal_job_id}-{self.get_status_display()}" def get_source(self): return self.source.name if self.source else 'System' diff --git a/recruitment/views.py b/recruitment/views.py index 2b8b7fb..95a2b40 100644 --- a/recruitment/views.py +++ b/recruitment/views.py @@ -83,8 +83,7 @@ class ZoomMeetingListView(ListView): if search_query: queryset = queryset.filter( Q(topic__icontains=search_query) | - Q(meeting_id__icontains=search_query) | - Q(host_email__icontains=search_query) + Q(meeting_id__icontains=search_query) ) return queryset @@ -143,27 +142,30 @@ def ZoomMeetingDeleteView(request, pk): #Job Posting -def job_list(request): - """Display the list of job postings order by creation date descending""" - jobs=JobPosting.objects.all().order_by('-created_at') +# def job_list(request): +# """Display the list of job postings order by creation date descending""" +# jobs=JobPosting.objects.all().order_by('-created_at') - # Filter by status if provided - status=request.GET.get('status') - if status: - jobs=jobs.filter(status=status) +# # Filter by status if provided +# print(f"the request is: {request} ") +# status=request.GET.get('status') +# print(f"DEBUG: Status filter received: {status}") +# if status: +# jobs=jobs.filter(status=status) - #pagination - paginator=Paginator(jobs,10) # Show 10 jobs per page - page_number=request.GET.get('page') - page_obj=paginator.get_page(page_number) - return render(request, 'jobs/job_list.html', { - 'page_obj': page_obj, - 'status_filter': status - }) +# #pagination +# paginator=Paginator(jobs,10) # Show 10 jobs per page +# page_number=request.GET.get('page') +# page_obj=paginator.get_page(page_number) +# return render(request, 'jobs/job_list.html', { +# 'page_obj': page_obj, +# 'status_filter': status +# }) def create_job(request): """Create a new job posting""" + if request.method=='POST': form=JobPostingForm(request.POST,is_anonymous_user=not request.user.is_authenticated) @@ -761,7 +763,8 @@ def delete_form_template(request, template_id): def form_wizard_view(request, template_id): """Display the form as a step-by-step wizard""" template = get_object_or_404(FormTemplate, id=template_id, is_active=True) - return render(request, 'forms/form_wizard.html', {'template_id': template_id}) + job_id=template.job.internal_job_id + return render(request, 'forms/form_wizard.html', {'template_id': template_id,'job_id':job_id}) @require_http_methods(["POST"]) def submit_form(request, template_id): """Handle form submission""" diff --git a/recruitment/views_frontend.py b/recruitment/views_frontend.py index 353f5c9..f323882 100644 --- a/recruitment/views_frontend.py +++ b/recruitment/views_frontend.py @@ -41,10 +41,15 @@ class JobListView(LoginRequiredMixin, ListView): # Filter for non-staff users if not self.request.user.is_staff: queryset = queryset.filter(status='Published') + + status=self.request.GET.get('status') + if status: + queryset=queryset.filter(status=status) return queryset def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) context['search_query'] = self.request.GET.get('search', '') context['lang'] = get_language() @@ -288,7 +293,7 @@ class TrainingListView(LoginRequiredMixin, ListView): template_name = 'recruitment/training_list.html' context_object_name = 'materials' paginate_by = 10 - + def get_queryset(self): queryset = super().get_queryset() @@ -296,8 +301,7 @@ class TrainingListView(LoginRequiredMixin, ListView): search_query = self.request.GET.get('search', '') if search_query: queryset = queryset.filter( - Q(title__icontains=search_query) | - Q(description__icontains=search_query) + Q(title__icontains=search_query) ) # Filter for non-staff users diff --git a/templates/base.html b/templates/base.html index 2aac25d..caf1cc4 100644 --- a/templates/base.html +++ b/templates/base.html @@ -20,6 +20,7 @@ --kaauh-light-bg: #f9fbfd; --kaauh-border: #eaeff3; } + /* === Top Bar === */ .top-bar { @@ -260,8 +261,7 @@