From 52853354980b3f2a295d6a1e6122a2c7a79bd085 Mon Sep 17 00:00:00 2001 From: ismail Date: Thu, 13 Nov 2025 16:14:59 +0300 Subject: [PATCH] merge main with person update --- .../__pycache__/urls.cpython-313.pyc | Bin 3028 -> 3138 bytes NorahUniversity/settings.py | 4 +- apply_all_translations.py | 119 ---- apply_batch_translations.py | 85 --- apply_translations_direct.py | 84 --- find_empty_translations.py | 173 ------ fix_po_duplicates.py | 91 ---- recruitment/__pycache__/admin.cpython-313.pyc | Bin 12464 -> 10733 bytes recruitment/__pycache__/forms.cpython-313.pyc | Bin 68336 -> 79008 bytes .../__pycache__/models.cpython-313.pyc | Bin 86390 -> 105335 bytes .../__pycache__/serializers.cpython-313.pyc | Bin 1369 -> 1375 bytes .../__pycache__/signals.cpython-313.pyc | Bin 6688 -> 8101 bytes recruitment/__pycache__/views.cpython-313.pyc | Bin 148691 -> 173376 bytes .../views_frontend.cpython-313.pyc | Bin 47156 -> 47529 bytes recruitment/forms.py | 171 +++++- recruitment/migrations/0001_initial.py | 156 +++--- .../0002_delete_candidate_and_more.py | 25 - .../0002_scheduledinterview_participants.py | 18 - .../0003_convert_document_to_generic_fk.py | 45 -- .../0003_scheduledinterview_system_users.py | 20 - recruitment/migrations/0004_person_agency.py | 19 - ...remove_jobposting_participants_and_more.py | 21 - .../0005_scheduledinterview_meeting_type.py | 18 - ...cheduledinterview_meeting_type_and_more.py | 22 - ...g_type_interviewschedule_interview_type.py | 18 - .../0008_interviewschedule_location.py | 18 - .../0009_alter_zoommeeting_meeting_id.py | 18 - .../0010_alter_zoommeeting_meeting_id.py | 19 - ...1_alter_scheduledinterview_zoom_meeting.py | 19 - .../0012_interviewschedule_interview_topic.py | 18 - .../migrations/0013_onsitemeeting_and_more.py | 45 -- .../migrations/0014_onsitemeeting_status.py | 18 - ...alter_scheduledinterview_onsite_meeting.py | 19 - .../__pycache__/0001_initial.cpython-313.pyc | Bin 43839 -> 55519 bytes test_agency_access_links.py | 67 --- test_agency_assignments.py | 98 ---- test_agency_crud.py | 204 ------- test_agency_isolation.py | 278 ---------- test_async_email.py | 105 ---- test_csv_export.py | 131 ----- test_email_attachments.py | 100 ---- test_email_attachments_clean.py | 267 --------- test_email_composition.py | 218 -------- test_email_form_js.html | 507 ------------------ test_html_email_template.py | 176 ------ test_interview_email.html | 139 ----- test_interview_email.txt | 139 ----- test_simple_email.py | 239 --------- test_sse.html | 216 -------- test_sse_notifications.py | 57 -- test_sync_functionality.py | 132 ----- test_urls.py | 46 -- test_word_integration.py | 123 ----- translate_all_batches.py | 444 --------------- translate_batch_01.py | 58 -- translation_batch_01.txt | 204 ------- translation_batch_01_completed.txt | 204 ------- translation_batch_02.txt | 204 ------- translation_batch_03.txt | 204 ------- translation_batch_04.txt | 204 ------- translation_batch_05.txt | 204 ------- translation_batch_06.txt | 204 ------- translation_batch_07.txt | 204 ------- translation_batch_08.txt | 204 ------- translation_batch_09.txt | 204 ------- translation_batch_10.txt | 204 ------- translation_batch_11.txt | 204 ------- translation_batch_12.txt | 204 ------- translation_batch_13.txt | 204 ------- translation_batch_14.txt | 204 ------- translation_batch_15.txt | 204 ------- translation_batch_16.txt | 204 ------- translation_batch_17.txt | 204 ------- translation_batch_18.txt | 204 ------- translation_batch_19.txt | 204 ------- translation_batch_20.txt | 204 ------- translation_batch_21.txt | 204 ------- translation_batch_22.txt | 204 ------- translation_batch_23.txt | 204 ------- translation_batch_24.txt | 204 ------- translation_batch_25.txt | 204 ------- translation_batch_26.txt | 204 ------- translation_batch_27.txt | 204 ------- translation_batch_28.txt | 204 ------- translation_batch_29.txt | 204 ------- translation_batch_30.txt | 204 ------- translation_batch_31.txt | 204 ------- translation_batch_32.txt | 204 ------- translation_batch_33.txt | 204 ------- translation_batch_34.txt | 148 ----- translation_batch_35.txt | 140 ----- txt | 1 - 92 files changed, 249 insertions(+), 11983 deletions(-) delete mode 100644 apply_all_translations.py delete mode 100644 apply_batch_translations.py delete mode 100644 apply_translations_direct.py delete mode 100644 find_empty_translations.py delete mode 100644 fix_po_duplicates.py delete mode 100644 recruitment/migrations/0002_delete_candidate_and_more.py delete mode 100644 recruitment/migrations/0002_scheduledinterview_participants.py delete mode 100644 recruitment/migrations/0003_convert_document_to_generic_fk.py delete mode 100644 recruitment/migrations/0003_scheduledinterview_system_users.py delete mode 100644 recruitment/migrations/0004_person_agency.py delete mode 100644 recruitment/migrations/0004_remove_jobposting_participants_and_more.py delete mode 100644 recruitment/migrations/0005_scheduledinterview_meeting_type.py delete mode 100644 recruitment/migrations/0006_remove_scheduledinterview_meeting_type_and_more.py delete mode 100644 recruitment/migrations/0007_rename_meeting_type_interviewschedule_interview_type.py delete mode 100644 recruitment/migrations/0008_interviewschedule_location.py delete mode 100644 recruitment/migrations/0009_alter_zoommeeting_meeting_id.py delete mode 100644 recruitment/migrations/0010_alter_zoommeeting_meeting_id.py delete mode 100644 recruitment/migrations/0011_alter_scheduledinterview_zoom_meeting.py delete mode 100644 recruitment/migrations/0012_interviewschedule_interview_topic.py delete mode 100644 recruitment/migrations/0013_onsitemeeting_and_more.py delete mode 100644 recruitment/migrations/0014_onsitemeeting_status.py delete mode 100644 recruitment/migrations/0015_alter_scheduledinterview_onsite_meeting.py delete mode 100644 test_agency_access_links.py delete mode 100644 test_agency_assignments.py delete mode 100644 test_agency_crud.py delete mode 100644 test_agency_isolation.py delete mode 100644 test_async_email.py delete mode 100644 test_csv_export.py delete mode 100644 test_email_attachments.py delete mode 100644 test_email_attachments_clean.py delete mode 100644 test_email_composition.py delete mode 100644 test_email_form_js.html delete mode 100644 test_html_email_template.py delete mode 100644 test_interview_email.html delete mode 100644 test_interview_email.txt delete mode 100644 test_simple_email.py delete mode 100644 test_sse.html delete mode 100644 test_sse_notifications.py delete mode 100644 test_sync_functionality.py delete mode 100644 test_urls.py delete mode 100644 test_word_integration.py delete mode 100644 translate_all_batches.py delete mode 100644 translate_batch_01.py delete mode 100644 translation_batch_01.txt delete mode 100644 translation_batch_01_completed.txt delete mode 100644 translation_batch_02.txt delete mode 100644 translation_batch_03.txt delete mode 100644 translation_batch_04.txt delete mode 100644 translation_batch_05.txt delete mode 100644 translation_batch_06.txt delete mode 100644 translation_batch_07.txt delete mode 100644 translation_batch_08.txt delete mode 100644 translation_batch_09.txt delete mode 100644 translation_batch_10.txt delete mode 100644 translation_batch_11.txt delete mode 100644 translation_batch_12.txt delete mode 100644 translation_batch_13.txt delete mode 100644 translation_batch_14.txt delete mode 100644 translation_batch_15.txt delete mode 100644 translation_batch_16.txt delete mode 100644 translation_batch_17.txt delete mode 100644 translation_batch_18.txt delete mode 100644 translation_batch_19.txt delete mode 100644 translation_batch_20.txt delete mode 100644 translation_batch_21.txt delete mode 100644 translation_batch_22.txt delete mode 100644 translation_batch_23.txt delete mode 100644 translation_batch_24.txt delete mode 100644 translation_batch_25.txt delete mode 100644 translation_batch_26.txt delete mode 100644 translation_batch_27.txt delete mode 100644 translation_batch_28.txt delete mode 100644 translation_batch_29.txt delete mode 100644 translation_batch_30.txt delete mode 100644 translation_batch_31.txt delete mode 100644 translation_batch_32.txt delete mode 100644 translation_batch_33.txt delete mode 100644 translation_batch_34.txt delete mode 100644 translation_batch_35.txt delete mode 100644 txt diff --git a/NorahUniversity/__pycache__/urls.cpython-313.pyc b/NorahUniversity/__pycache__/urls.cpython-313.pyc index f0d78323be2dcf2e5bc3b590bfff2b3833022104..0a83457baf18582bda7933f655fcb65a5747c9ee 100644 GIT binary patch delta 337 zcmca2en>+7GcPX}0}xmq70omUvL1stFdzYCeAe5j&cw{fI9ZF?mC<8z0kecf42Kd! zuwD#PkOxdLf)3UX7PVy77cNqbQH|kOVgRc(h~Wh4Fq}M(Syl!l&J7f23GzYcg0d$6 zWfu1eHnL>WNs8SjK0VcGkFQuF%DyCex?TQ4_1?lxZ_w%fNBB8TR}Vk delta 253 zcmX>kaYbDHGcPX}0}${Y5zV~G$-wX!#DM{EDC0BFMs+4;MyAPH%&v@XlM9$7#Po%V zRAN+O_>~x9IFuNI^ '{arabic}'") - else: - print(f"✗ Not found: '{english}'") - - # Write updated content back to main file - with open(main_po_file, 'w', encoding='utf-8') as f: - f.write(updated_content) - - print(f"\nApplied {applied_count} translations to {main_po_file}") - return applied_count - -def main(): - """Main function to apply all translations""" - print("Applying all batch translations to main django.po file...") - applied_count = apply_all_translations() - - if applied_count > 0: - print(f"\n✅ Successfully applied {applied_count} translations!") - print("Next steps:") - print("1. Run: python manage.py compilemessages") - print("2. Test the translations in the application") - else: - print("\n❌ No translations were applied.") - -if __name__ == "__main__": - main() diff --git a/apply_batch_translations.py b/apply_batch_translations.py deleted file mode 100644 index 6249bdd..0000000 --- a/apply_batch_translations.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to apply completed batch translations back to the main django.po file -""" - -import re - -def apply_batch_to_main_po(batch_file_path, main_po_path): - """ - Apply translations from a completed batch file to the main django.po file - """ - # Read the completed batch file - with open(batch_file_path, 'r', encoding='utf-8') as f: - batch_content = f.read() - - # Extract translations from batch file - translations = {} - current_msgid = None - - lines = batch_content.split('\n') - i = 0 - while i < len(lines): - line = lines[i].strip() - if line.startswith('msgid: "'): - current_msgid = line[7:-1] # Extract msgid content - # Look for the Arabic translation line (next non-empty line after "Arabic Translation:") - j = i + 1 - while j < len(lines) and not lines[j].strip().startswith('msgstr: "'): - j += 1 - if j < len(lines) and lines[j].strip().startswith('msgstr: "'): - translation = lines[j].strip()[8:-1] # Extract msgstr content - if translation and current_msgid and translation != '""': # Only add non-empty translations - translations[current_msgid] = translation - print(f"Extracted: '{current_msgid}' -> '{translation}'") - current_msgid = None - i += 1 - - print(f"Found {len(translations)} translations to apply") - - # Read the main django.po file - with open(main_po_path, 'r', encoding='utf-8') as f: - main_content = f.read() - - # Apply translations to main file - updated_content = main_content - applied_count = 0 - - for english, arabic in translations.items(): - # Pattern to find msgid followed by empty msgstr - pattern = rf'(msgid "{re.escape(english)}"\s*\nmsgstr) ""' - replacement = rf'\1 "{arabic}"' - - if re.search(pattern, updated_content): - updated_content = re.sub(pattern, replacement, updated_content) - applied_count += 1 - print(f"✓ Applied: '{english}' -> '{arabic}'") - else: - print(f"✗ Not found: '{english}'") - - # Write updated content back to main file - with open(main_po_path, 'w', encoding='utf-8') as f: - f.write(updated_content) - - print(f"\nApplied {applied_count} translations to {main_po_path}") - return applied_count - -def main(): - """Main function to apply batch 01 translations""" - batch_file = "translation_batch_01_completed.txt" - main_po_file = "locale/ar/LC_MESSAGES/django.po" - - print("Applying Batch 01 translations to main django.po file...") - applied_count = apply_batch_to_main_po(batch_file, main_po_file) - - if applied_count > 0: - print(f"\n✅ Successfully applied {applied_count} translations!") - print("Next steps:") - print("1. Run: python manage.py compilemessages") - print("2. Test the translations in the application") - print("3. Continue with the next batch") - else: - print("\n❌ No translations were applied. Please check the batch file format.") - -if __name__ == "__main__": - main() diff --git a/apply_translations_direct.py b/apply_translations_direct.py deleted file mode 100644 index 1c40a2b..0000000 --- a/apply_translations_direct.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to directly apply Arabic translations to the main django.po file -""" - -import re - -def apply_translations_direct(): - """ - Apply translations directly to the main django.po file - """ - # Arabic translations for batch 01 - translations = { - "Website": "الموقع الإلكتروني", - "Admin Notes": "ملاحظات المسؤول", - "Save Assignment": "حفظ التكليف", - "Assignment": "التكليف", - "Expires At": "ينتهي في", - "Access Token": "رمز الوصول", - "Subject": "الموضوع", - "Recipients": "المستلمون", - "Internal staff involved in the recruitment process for this job": "الموظفون الداخليون المشاركون في عملية التوظيف لهذه الوظيفة", - "External Participant": "مشارك خارجي", - "External participants involved in the recruitment process for this job": "المشاركون الخارجيون المشاركون في عملية التوظيف لهذه الوظيفة", - "Reason for canceling the job posting": "سبب إلغاء نشر الوظيفة", - "Name of person who cancelled this job": "اسم الشخص الذي ألغى هذه الوظيفة", - "Hired": "تم التوظيف", - "Author": "المؤلف", - "Endpoint URL for sending candidate data (for outbound sync)": "عنوان URL لنقطة النهاية لإرسال بيانات المرشح (للمزامنة الصادرة)", - "HTTP method for outbound sync requests": "طريقة HTTP لطلبات المزامنة الصادرة", - "HTTP method for connection testing": "طريقة HTTP لاختبار الاتصال", - "Custom Headers": "رؤوس مخصصة", - "JSON object with custom HTTP headers for sync requests": "كائن JSON يحتوي على رؤوس HTTP مخصصة لطلبات المزامنة", - "Supports Outbound Sync": "يدعم المزامنة الصادرة", - "Whether this source supports receiving candidate data from ATS": "ما إذا كان هذا المصدر يدعم استقبال بيانات المرشح من نظام تتبع المتقدمين", - "Expired": "منتهي الصلاحية", - "Maximum candidates agency can submit for this job": "الحد الأقصى للمرشحين الذين يمكن للوكالة تقديمهم لهذه الوظيفة" - } - - main_po_file = "locale/ar/LC_MESSAGES/django.po" - - # Read the main django.po file - with open(main_po_file, 'r', encoding='utf-8') as f: - main_content = f.read() - - # Apply translations to main file - updated_content = main_content - applied_count = 0 - - for english, arabic in translations.items(): - # Pattern to find msgid followed by empty msgstr - pattern = rf'(msgid "{re.escape(english)}"\s*\nmsgstr) ""' - replacement = rf'\1 "{arabic}"' - - if re.search(pattern, updated_content): - updated_content = re.sub(pattern, replacement, updated_content) - applied_count += 1 - print(f"✓ Applied: '{english}' -> '{arabic}'") - else: - print(f"✗ Not found: '{english}'") - - # Write updated content back to main file - with open(main_po_file, 'w', encoding='utf-8') as f: - f.write(updated_content) - - print(f"\nApplied {applied_count} translations to {main_po_file}") - return applied_count - -def main(): - """Main function to apply batch 01 translations""" - print("Applying Batch 01 translations directly to main django.po file...") - applied_count = apply_translations_direct() - - if applied_count > 0: - print(f"\n✅ Successfully applied {applied_count} translations!") - print("Next steps:") - print("1. Run: python manage.py compilemessages") - print("2. Test the translations in the application") - print("3. Continue with the next batch") - else: - print("\n❌ No translations were applied.") - -if __name__ == "__main__": - main() diff --git a/find_empty_translations.py b/find_empty_translations.py deleted file mode 100644 index ca0ea4d..0000000 --- a/find_empty_translations.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to find empty msgstr entries in django.po file and organize them into batches -for systematic Arabic translation work. -""" - -import re -import os -from typing import List, Tuple - -def find_empty_translations(po_file_path: str) -> List[Tuple[int, str, str]]: - """ - Find all entries with empty msgstr in the django.po file. - - Returns: - List of tuples: (line_number, msgid, context_before) - """ - empty_translations = [] - - with open(po_file_path, 'r', encoding='utf-8') as file: - lines = file.readlines() - - i = 0 - while i < len(lines): - line = lines[i].strip() - - # Look for msgid - if line.startswith('msgid '): - msgid = line[7:-1] # Remove 'msgid "' and ending '"' - - # Check next few lines for msgstr - j = i + 1 - msgstr_found = False - msgstr_empty = False - - while j < len(lines) and j < i + 5: # Look ahead max 5 lines - next_line = lines[j].strip() - - if next_line.startswith('msgstr '): - msgstr_found = True - if next_line == 'msgstr ""': - msgstr_empty = True - break - elif next_line.startswith('msgid ') or next_line.startswith('#'): - # Found next entry or comment, no msgstr for current msgid - break - j += 1 - - if msgstr_found and msgstr_empty: - # Get context (previous 2-3 lines) - context_start = max(0, i - 3) - context = ''.join(lines[context_start:i]) - empty_translations.append((i + 1, msgid, context)) - - i = j # Skip to after msgstr - else: - i += 1 - - return empty_translations - -def create_batch_files(empty_translations: List[Tuple[int, str, str]], batch_size: int = 25): - """ - Create batch files with empty translations for systematic work. - """ - total_batches = (len(empty_translations) + batch_size - 1) // batch_size - - print(f"Found {len(empty_translations)} empty translations") - print(f"Creating {total_batches} batches of ~{batch_size} translations each") - - for batch_num in range(total_batches): - start_idx = batch_num * batch_size - end_idx = min(start_idx + batch_size, len(empty_translations)) - batch_translations = empty_translations[start_idx:end_idx] - - batch_filename = f"translation_batch_{batch_num + 1:02d}.txt" - - with open(batch_filename, 'w', encoding='utf-8') as batch_file: - batch_file.write(f"=== TRANSLATION BATCH {batch_num + 1:02d} ===\n") - batch_file.write(f"Translations {start_idx + 1}-{end_idx} of {len(empty_translations)}\n") - batch_file.write("=" * 60 + "\n\n") - - for line_num, msgid, context in batch_translations: - batch_file.write(f"Line {line_num}:\n") - batch_file.write(f"msgid: \"{msgid}\"\n") - batch_file.write(f"msgstr: \"\"\n") - batch_file.write(f"\nArabic Translation: \n") - batch_file.write(f"msgstr: \"\"\n") - batch_file.write("-" * 40 + "\n\n") - - print(f"Created {batch_filename} with {len(batch_translations)} translations") - -def create_summary_report(empty_translations: List[Tuple[int, str, str]]): - """ - Create a summary report of all empty translations. - """ - with open("empty_translations_summary.txt", 'w', encoding='utf-8') as report: - report.write("EMPTY TRANSLATIONS SUMMARY REPORT\n") - report.write("=" * 50 + "\n\n") - report.write(f"Total empty translations: {len(empty_translations)}\n\n") - - # Group by type/pattern for better organization - ui_elements = [] - form_fields = [] - messages = [] - navigation = [] - other = [] - - for line_num, msgid, context in empty_translations: - msgid_lower = msgid.lower() - - if any(word in msgid_lower for word in ['button', 'btn', 'click', 'select']): - ui_elements.append((line_num, msgid)) - elif any(word in msgid_lower for word in ['field', 'form', 'input', 'enter']): - form_fields.append((line_num, msgid)) - elif any(word in msgid_lower for word in ['error', 'success', 'warning', 'message']): - messages.append((line_num, msgid)) - elif any(word in msgid_lower for word in ['menu', 'nav', 'page', 'dashboard']): - navigation.append((line_num, msgid)) - else: - other.append((line_num, msgid)) - - report.write(f"UI Elements (Buttons, Links): {len(ui_elements)}\n") - report.write(f"Form Fields & Inputs: {len(form_fields)}\n") - report.write(f"Messages (Error/Success/Warning): {len(messages)}\n") - report.write(f"Navigation & Pages: {len(navigation)}\n") - report.write(f"Other: {len(other)}\n\n") - - report.write("SAMPLE ENTRIES:\n") - report.write("-" * 30 + "\n") - - for category, name, sample_count in [ - (ui_elements, "UI Elements", 5), - (form_fields, "Form Fields", 5), - (messages, "Messages", 5), - (navigation, "Navigation", 5), - (other, "Other", 5) - ]: - if category: - report.write(f"\n{name} (showing first {min(len(category), sample_count)}):\n") - for line_num, msgid in category[:sample_count]: - report.write(f" Line {line_num}: \"{msgid}\"\n") - -def main(): - """Main function to process the django.po file.""" - po_file_path = "locale/ar/LC_MESSAGES/django.po" - - if not os.path.exists(po_file_path): - print(f"Error: {po_file_path} not found!") - return - - print("Scanning for empty translations...") - empty_translations = find_empty_translations(po_file_path) - - if not empty_translations: - print("No empty translations found! All msgstr entries have translations.") - return - - # Create batch files - create_batch_files(empty_translations, batch_size=25) - - # Create summary report - create_summary_report(empty_translations) - - print(f"\nProcess completed!") - print(f"Check the generated batch files: translation_batch_*.txt") - print(f"Summary report: empty_translations_summary.txt") - print(f"\nNext steps:") - print(f"1. Work through each batch file systematically") - print(f"2. Add Arabic translations to each empty msgstr") - print(f"3. Update the main django.po file with completed translations") - -if __name__ == "__main__": - main() diff --git a/fix_po_duplicates.py b/fix_po_duplicates.py deleted file mode 100644 index c51f1d2..0000000 --- a/fix_po_duplicates.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env python3 -""" -Fix duplicate message definitions in .po files -""" - -import re -import os - -def fix_po_duplicates(po_file): - """Remove duplicate message definitions from a .po file""" - - print(f"Processing {po_file}...") - - with open(po_file, 'r', encoding='utf-8') as f: - content = f.read() - - # Split into entries - entries = [] - current_entry = [] - lines = content.split('\n') - - i = 0 - while i < len(lines): - line = lines[i] - - if line.startswith('msgid '): - # Start of new entry - if current_entry: - entries.append('\n'.join(current_entry)) - current_entry = [line] - elif line.startswith('msgstr ') and current_entry: - # End of entry - current_entry.append(line) - entries.append('\n'.join(current_entry)) - current_entry = [] - else: - if current_entry: - current_entry.append(line) - - i += 1 - - # Add the last entry if it exists - if current_entry: - entries.append('\n'.join(current_entry)) - - # Remove duplicates, keeping the first occurrence - seen_msgids = set() - unique_entries = [] - - for entry in entries: - # Extract msgid - msgid_match = re.search(r'msgid\s+"([^"]*)"', entry) - if msgid_match: - msgid = msgid_match.group(1) - if msgid not in seen_msgids: - seen_msgids.add(msgid) - unique_entries.append(entry) - else: - print(f" Removing duplicate: {msgid}") - else: - # Header or other entry, keep it - unique_entries.append(entry) - - # Rebuild content - new_content = '\n\n'.join(unique_entries) - - # Write back to file - with open(po_file, 'w', encoding='utf-8') as f: - f.write(new_content) - - print(f" Fixed {po_file} - removed {len(entries) - len(unique_entries)} duplicates") - -def main(): - """Fix duplicates in both English and Arabic .po files""" - - po_files = [ - 'locale/ar/LC_MESSAGES/django.po', - 'locale/en/LC_MESSAGES/django.po' - ] - - for po_file in po_files: - if os.path.exists(po_file): - fix_po_duplicates(po_file) - else: - print(f"File not found: {po_file}") - - print("\n✅ Duplicate fixing completed!") - print("Now run: python manage.py compilemessages") - -if __name__ == "__main__": - main() diff --git a/recruitment/__pycache__/admin.cpython-313.pyc b/recruitment/__pycache__/admin.cpython-313.pyc index f2b8f470a5f2fda33bca485c458faa21c2639241..efdeced80d72edf1b921b33e4014650dd2231355 100644 GIT binary patch delta 3321 zcma)8Yiu0V6`tAm&OZFutoPyPdi~gm?R6aD;3RIT(+~otfp|lK;;@W&N1I93yY8J? zgF{*yDgi-_f_+p}Aw`juAG|7*KZvMO)K*PewTe&>Algxj+Wu&T)K*4m%bz0koI7iK zL)Mg){Q2H?w*^I!4MTa|5Hx$x8%14gL$`fHcLjBE)U|Ht2G(_v##jIu z?^qkH#i_d???_D6)ztE=@wBwQ0v^Ry{$6n;!gc+@jV(1U=T})x&7GcVL zSPa6ddr3?{x96KuJGy2BK`49TuI+pZ=R6Oe4AIa{&`FR$I4t{EH%*cRJp{c30fIh) zeu5MM`83^Hsi>7yoyjC37mTkkK%=2`2*D9=x3%;TEO_4$V=y93_U|J7Zh|`r#t7~} zFnxJd&oOO|_Q}TJqBQIyIpYR<;Ez&F9EH!M@m?}ELt4pD3yfzaJFhaGthmR$WHbhk z_VLS9}l8QKVD`= zwsyDs$$hqlA4bGpj7}?*8I0+jc5-N91&n|Q`0W?5Khcs zo{sIfrZR=)jxW^B+@oYgFb1cZj4ocEG^Lm}e)j6<=0WHjNWgG&d~lb@JQ<03Gd?C2 z{Bpo-I;1hJRG28JrQ8CqoKGG=Gt9&tu-rVb$P2iP66+kCyqH;$1hWJsf;|Yb-E`>1 zN`doCsWL~q$Y&LU?ITJxy}aaawKm;Psx!J~sHTIi{88)DzHVJwf9;ifittJRgP zS4$^o6#@!hABWFFeO;L~yRB1N6Kr1Jn%&XlTDo^l5<-z5Oj;NE1U$9vGw~SAg&*Ym zl%4Ep@^Tu%3_e+AC+CVvPR$w%b82nXu?1qCB6tcxw)211QGb`Dn>%*aaJldAlb$c& zxxZ|6J9ulo1{Pvz|gT`13lv>@@PSJQ<&95Kgo!_QREE7CTutER?^-g!56a>fM zudV;FI>kJMlIOm07KL~M{7B9ai&rcMl9}#Y8Cz+|U|%>Hn`N>Je@PDP+B76qwFH?# z?&$8;^#2PqB{&O}o_Q;f3-D>r%i=1$&^sLF3%iKKN3YZ94Y=MLPgHM!B_Z*f1V16* z{L|p>du5ng{l6eyB_o1WxY2jk3gT7B^`F~)8HKXLbkC})f!Eq}DHQ|z@n&ses`wH_ zWbY8$&Q>9nN?{v3l1c`6ls2wmm*JUIWcMnPOzEhG4b@O)=kzbj&fDab;4-|M(yYMV zhOfzI7O&G%4y$`?W}DtR>$T)T@$Nv)UsjTX9!NL2w;ld(qm;72HY;ItDcRCm##&;=n%NHDdje;40i0 z7;5I}vs;p1k@y-k47TsMO2c0xd|C2-K_mk7Jv}(%=S`jFhvhWa`gsVZcQ*XnFNni` zc8A}0N0uD_vcdlJnKns`{Mh+XH1%FIbyL8}O}k+0ShL}1Ee?N6kHUS!e|JoNAap@$ e$5Q+Qq33sk^LgnR=_4WZo)CKJz=uMNFa1AuYOZ7e delta 4618 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

W2 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 Xk3oM>Wab)WEGs)&^^pR8ND}^kAo8CV diff --git a/recruitment/__pycache__/serializers.cpython-313.pyc b/recruitment/__pycache__/serializers.cpython-313.pyc index 867ca3ae1202f6aabfb2c111edef908973a7ba8e..7bef3a17408ef18619d41afaa3c1af5c1f0948b2 100644 GIT binary patch delta 103 zcmcb~b)Sp(GcPX}0}xmq70p~Qk#{!_w_`y;PG)jqNoIcD#!GQbJfcVfldYIDd8Cj9 m)-vZaN^h2B5n^Q2o@~G>A?STw#{8m;`Bw&3M(H9kpveHt7#~Fd delta 119 zcmcc5b(4$tGcPX}0}ycR6V048k#{#2r*mRnN@hx8N$SQcaZFsoaPDL~=1eXL1a~uY zKBMI17$%9y)-1oYG{3MgGfK~}zAkNcQQGVa1CaBDixnuMeO=1*qLk@Z1|X+M3}_Po D)4n7c diff --git a/recruitment/__pycache__/signals.cpython-313.pyc b/recruitment/__pycache__/signals.cpython-313.pyc index df7396c3d8085fc849b0eabe9fdd5131172fc478..f70295eded0ff633826462caf6c1aef897c8673c 100644 GIT binary patch delta 2581 zcmb7_TWlLe6ozNl>-DbfT|0^6Yn(V~n%IewUT7}8kT$4<$}Rz7f)EX|TxW4zTszD< zy-~0cNNrG22-~U^FH{InD+Ddd11&F<2LytbxT%z|A)-hK2??QuyrD{PW^5;E)E7qH z<1_Q0nVp^e&e57)1AR8ahFQ#p z4cHJMD^99Zty4B_MYy@FdZ=1mQuotaZ;sY@5pF35 zcxixR-SpP7;-gCKIwhE7LQd^8^QqO+KQ@+5CE~eMHluA}eXZ65DV)kA`;$s0aZ2Z( zR|N<61xpZ2Hm6=yS1 zIW>M<(RrAnxdW^H@>Gk15)-Vq;qfqOb@i#9Hh=l#TthGXv{`X0AJ|#QuLJgKNg z2q8NpTl_-y8Hb^NV7e&(%USl2*^d(Qg0@hzjX9)Ajsg3|HMNAJo$1mh9bV&6h&?&| zxubj5_b*J?9?XMk&^00wdovMqu#ka5}#yF)u{uFp52VKgLwx}m`+P2UHHJD?ji zM7f=8B}1Cwi3c$Y;HuzwPKlM)h>gWn^+Xnr;vC2qAX4oF zr+^l?s(Fhv*)!2|q5D$bdwo}0=9;>TP2D%0U;A(Qi%kRHHx+B1oV5(jaD$kfRxm-1 zr_y+E2!bom!IBrzFdHl@@ej4HsvEU$?b|eSmAw7X>VZA%kcOnndTamMJ-d?wq-E{8 z;O@o;x+bYiup(sxfdpk>z2}T zv`myHTUDqU7e zW!_zPUYZx|lhTCrj%}$H2{ua11Hh0XL=LECWnd#Q@2@8&{Qrp|u)xY28Whoj!Qlk4 zdV>Pp3SINxgrtq|5W3dj!KcXLoSGibCvkyDI=5B-A=Q2D{Q^_ixUc(WCK9GTTWC zKTaL)jF0DzV5jz%+mokhM!u1le3mdN{+N_)OiDQ|X_S0S9`zcc)RpR>um`@*<7uT2 zPk{u7fYke7mJAHTEFgISNxz`rB5GVj&5LLgwVM}F=OSu{!Cz2%4y9*Nx(>W_q-N^TC-@Jn57%Q6rNeH?cMcn62~O26WjS~+?4!ONt)0=2q}?RqX@+qffC7D?8R73*2%2X zHp(GBpejfpRE8o7hjIad;DU0X2aa$AVFF6DBx;I)D~)o1TX}Eo7Nb6Szy0QYZ{)Xc zzWHSO<5B;K&!-Rw-?y#Bn-kalZCmq{kQ*dT(lkXFzJ(N3DWj^uggCApDTgXD(dJ^x zsk)fU=FXH`m6&96S4vhDrr6vKc@Oj0TuOOWAM@EL%u3pClnzoB1bI)^aTr>)n zcfM3EzE;d>ns@e7a;Z>PB8?yb=lT z{36Uc+GFr}mSpHx%UQN=SZ=1T>RQ=k5kBHt3wNU`n%ZUEa^>}9y{splEX;4a-f-ev zf;%(r^OU~NH>7S?eu9uif!`OR{77>0_nKPxKT<%F>+|DxBkjCj_VRK08g=sT46_tm0{7_%f@#qN~eQH z_$}XpYZ_|U)BJDWr;%rn&LUhycov~9f9)Sl^y0b?!4H7nhrFQ`?hSO%QGO|S`5@A0yi}6n52)x61GSWvKf)DHAnf1)4e6mgO3#Lq0d+f ziXbKCwGA_=uvS=FP2fkJ!6#-{q4G+J<*k5b8}Yw{|6xtJbV)ZX@48W3Ti3Jpis2+I zhf%u1uy0GzudWuEZf3W%G8@EyeDt8OPFx0~n>adj4p;}1&9!l7>m6VTGeLM4hG@P7 zq(c65`wx5_pS4we=eEWDSodCRtQs5Jjh){Xf0m;A(fD3;s2UyGjb0eRO#4Bk>(<#1 z&we!c<>c)|bzrI*nc5cL3hYbXcjPzaw>|efL<%rG(`1k3UM>|1aBKNY$M1Z)vvtch z58fb#hGu9hrXipo?AAUf_U2mu($q>RzrL(L#VVlV$(ug_+;dP$eHY(;_mB)8k^xBGA)9+-bC+x$$-zB2@{=6-U}9Gmdn&HG{IAZ0|G6sdI~LqjIdKr- fH1CYfC6335plm09JT+LQL&t)PhEN-}ncdUB6H!|N diff --git a/recruitment/__pycache__/views.cpython-313.pyc b/recruitment/__pycache__/views.cpython-313.pyc index 3d108b9c41c90f42b2504a10f1bf8f6873f3a789..17e6e1810d81cc8f330d6b56fe8b8b1fcf8dbd8d 100644 GIT binary patch delta 66114 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%0ApMTh`Z1qVf6L>7(td;P&a~`h5 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 WXWz)yyTlFRt!jCCu~N!sF#kW|df_Vo delta 47460 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 Od73JIT9&d=zW)Zyk6d2> diff --git a/recruitment/__pycache__/views_frontend.cpython-313.pyc b/recruitment/__pycache__/views_frontend.cpython-313.pyc index 0f82cce8445ae3de99ebda68f3d016cdbe29e335..444d815e1553343fe72f15c983b575eb09d13547 100644 GIT binary patch delta 12674 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 delta 12048 zcmbVS3tZdP_0J7S2ze0*A%XG;Z^FB@v_L7(QYkIaHncz=q#*=|<>gH%Ep`Q+(>fou zUT1acY^Sbe>cqy)>OR~0-<;0*cM`jeHmk4A?Xx;Jsm1BsfB*mgocn_$P|$AqlyC1n z=RVFo_ndpqy~+3$@pIE+%@ws;A%c(kCA~B1TSqlU@#m6fGsnqjS^ZkN)+DlsEO8sl z>nmu5Nn{iyi!AZ6B1^)q)LofH66_}u(MnEF1iA_6>ATED(pgRw=Oh6qnRBxIoNCTV z0ZuCCWcxWaoRc;Rtn_))tmBLfpl8mb*K)cU=vjQI!1U`mCmT39oD-P-I?l-jP9En3 zrmwT)$BO8NU8C`qf>=?Jun-Zg-xY6J9#r25^}?X~CaA9nsyFZnR>A~D^Mq~W^i@D# zy+GI|&M5{?335hv1*F}~S*5^Q1FRgs;m8PM1A!2+w;YAL4{O9gGVRMKshD!LuS zs}2&c1?n|H^;W2_3#zx_`fGy-J1pxh*A`6;)X56QlA$B)Qz0FiBlW=)J9Hi z;?&K4>K0Dj%BhxFYO`ept=?6 zJ(k_EqU(u&BlmEfwS&&AptFDx+c

&~04DJLjysgEKmSVdqK?n3tV%I)UThoWO>4 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 NUjGTSiR0(q{{wq-B3A$a diff --git a/recruitment/forms.py b/recruitment/forms.py index 9e23101..67e3ee1 100644 --- a/recruitment/forms.py +++ b/recruitment/forms.py @@ -1469,8 +1469,8 @@ class ParticipantsForm(forms.ModelForm): } -# class ParticipantsSelectForm(forms.ModelForm): -# """Form for selecting Participants""" +class ParticipantsSelectForm(forms.ModelForm): + """Form for selecting Participants""" participants = forms.ModelMultipleChoiceField( queryset=Participants.objects.all(), @@ -1863,4 +1863,169 @@ class OnsiteMeetingForm(forms.ModelForm): 'location': forms.TextInput(attrs={'placeholder': 'Physical location', 'class': 'form-control'}), 'timezone': forms.TextInput(attrs={'class': 'form-control'}), 'status': forms.Select(attrs={'class': 'form-control'}), - } \ No newline at end of file + } + + +class MessageForm(forms.ModelForm): + """Form for creating and editing messages between users""" + + class Meta: + model = Message + fields = ["recipient", "job", "subject", "content", "message_type"] + widgets = { + "recipient": forms.Select( + attrs={"class": "form-select", "placeholder": "Select recipient"} + ), + "job": forms.Select( + attrs={"class": "form-select", "placeholder": "Select job (optional)"} + ), + "subject": forms.TextInput( + attrs={ + "class": "form-control", + "placeholder": "Enter message subject", + "required": True, + } + ), + "content": forms.Textarea( + attrs={ + "class": "form-control", + "rows": 6, + "placeholder": "Enter your message here...", + "required": True, + } + ), + "message_type": forms.Select(attrs={"class": "form-select"}), + } + labels = { + "recipient": _("Recipient"), + "job": _("Related Job"), + "subject": _("Subject"), + "content": _("Message"), + "message_type": _("Message Type"), + } + + def __init__(self, user, *args, **kwargs): + super().__init__(*args, **kwargs) + self.user = user + self.helper = FormHelper() + self.helper.form_method = "post" + self.helper.form_class = "g-3" + + # Filter job options based on user type + self._filter_job_field() + + # Filter recipient options based on user type + self._filter_recipient_field() + + self.helper.layout = Layout( + Row( + Column("recipient", css_class="col-md-6"), + Column("job", css_class="col-md-6"), + css_class="g-3 mb-3", + ), + Field("subject", css_class="form-control"), + Field("message_type", css_class="form-control"), + Field("content", css_class="form-control"), + Div( + Submit("submit", _("Send Message"), css_class="btn btn-main-action"), + css_class="col-12 mt-4", + ), + ) + + def _filter_job_field(self): + """Filter job options based on user type""" + if self.user.user_type == "agency": + # Agency users can only see jobs assigned to their agency + self.fields["job"].queryset = JobPosting.objects.filter( + hiring_agency__user=self.user, + status="ACTIVE" + ).order_by("-created_at") + elif self.user.user_type == "candidate": + # Candidates can only see jobs they applied for + self.fields["job"].queryset = JobPosting.objects.filter( + candidates__user=self.user + ).distinct().order_by("-created_at") + else: + # Staff can see all jobs + self.fields["job"].queryset = JobPosting.objects.filter( + status="ACTIVE" + ).order_by("-created_at") + + def _filter_recipient_field(self): + """Filter recipient options based on user type""" + if self.user.user_type == "staff": + # Staff can message anyone + self.fields["recipient"].queryset = User.objects.all().order_by("username") + elif self.user.user_type == "agency": + # Agency can message staff and their candidates + from django.db.models import Q + self.fields["recipient"].queryset = User.objects.filter( + Q(user_type="staff") | + Q(candidate_profile__job__hiring_agency__user=self.user) + ).distinct().order_by("username") + elif self.user.user_type == "candidate": + # Candidates can only message staff + self.fields["recipient"].queryset = User.objects.filter( + user_type="staff" + ).order_by("username") + + def clean(self): + """Validate message form data""" + cleaned_data = super().clean() + + job = cleaned_data.get("job") + recipient = cleaned_data.get("recipient") + + # If job is selected but no recipient, auto-assign to job.assigned_to + if job and not recipient: + if job.assigned_to: + cleaned_data["recipient"] = job.assigned_to + # Set message type to job_related + cleaned_data["message_type"] = Message.MessageType.JOB_RELATED + else: + raise forms.ValidationError( + _("Selected job is not assigned to any user. Please assign the job first.") + ) + + # Validate messaging permissions + if self.user and cleaned_data.get("recipient"): + self._validate_messaging_permissions(cleaned_data) + + return cleaned_data + + def _validate_messaging_permissions(self, cleaned_data): + """Validate if user can message the recipient""" + recipient = cleaned_data.get("recipient") + job = cleaned_data.get("job") + + # Staff can message anyone + if self.user.user_type == "staff": + return + + # Agency users validation + if self.user.user_type == "agency": + if recipient.user_type not in ["staff", "candidate"]: + raise forms.ValidationError( + _("Agencies can only message staff or candidates.") + ) + + # If messaging a candidate, ensure candidate is from their agency + if recipient.user_type == "candidate" and job: + if not job.hiring_agency.filter(user=self.user).exists(): + raise forms.ValidationError( + _("You can only message candidates from your assigned jobs.") + ) + + # Candidate users validation + if self.user.user_type == "candidate": + if recipient.user_type != "staff": + raise forms.ValidationError( + _("Candidates can only message staff.") + ) + + # If job-related, ensure candidate applied for the job + if job: + if not Candidate.objects.filter(job=job, user=self.user).exists(): + raise forms.ValidationError( + _("You can only message about jobs you have applied for.") + ) diff --git a/recruitment/migrations/0001_initial.py b/recruitment/migrations/0001_initial.py index 68d8fc2..2e786ed 100644 --- a/recruitment/migrations/0001_initial.py +++ b/recruitment/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.2.6 on 2025-11-10 14:13 +# Generated by Django 5.2.6 on 2025-11-13 13:12 import django.contrib.auth.models import django.contrib.auth.validators @@ -19,6 +19,7 @@ class Migration(migrations.Migration): dependencies = [ ('auth', '0012_alter_user_first_name_max_length'), + ('contenttypes', '0002_remove_content_type_name'), ] operations = [ @@ -47,6 +48,24 @@ class Migration(migrations.Migration): 'ordering': ['order'], }, ), + migrations.CreateModel( + name='OnsiteMeeting', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated at')), + ('slug', django_extensions.db.fields.RandomCharField(blank=True, editable=False, length=8, unique=True, verbose_name='Slug')), + ('topic', models.CharField(max_length=255, verbose_name='Topic')), + ('start_time', models.DateTimeField(db_index=True, verbose_name='Start Time')), + ('duration', models.PositiveIntegerField(verbose_name='Duration')), + ('timezone', models.CharField(max_length=50, verbose_name='Timezone')), + ('location', models.CharField(blank=True, null=True)), + ('status', models.CharField(blank=True, db_index=True, default='waiting', max_length=20, null=True, verbose_name='Status')), + ], + options={ + 'abstract': False, + }, + ), migrations.CreateModel( name='Participants', fields=[ @@ -145,51 +164,6 @@ class Migration(migrations.Migration): ('objects', django.contrib.auth.models.UserManager()), ], ), - migrations.CreateModel( - name='Application', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated at')), - ('slug', django_extensions.db.fields.RandomCharField(blank=True, editable=False, length=8, unique=True, verbose_name='Slug')), - ('resume', models.FileField(upload_to='resumes/', verbose_name='Resume')), - ('cover_letter', models.FileField(blank=True, null=True, upload_to='cover_letters/', verbose_name='Cover Letter')), - ('is_resume_parsed', models.BooleanField(default=False, verbose_name='Resume Parsed')), - ('parsed_summary', models.TextField(blank=True, verbose_name='Parsed Summary')), - ('applied', models.BooleanField(default=False, verbose_name='Applied')), - ('stage', models.CharField(choices=[('Applied', 'Applied'), ('Exam', 'Exam'), ('Interview', 'Interview'), ('Offer', 'Offer'), ('Hired', 'Hired'), ('Rejected', 'Rejected')], db_index=True, default='Applied', max_length=20, verbose_name='Stage')), - ('applicant_status', models.CharField(blank=True, choices=[('Applicant', 'Applicant'), ('Candidate', 'Candidate')], default='Applicant', max_length=20, null=True, verbose_name='Applicant Status')), - ('exam_date', models.DateTimeField(blank=True, null=True, verbose_name='Exam Date')), - ('exam_status', models.CharField(blank=True, choices=[('Passed', 'Passed'), ('Failed', 'Failed')], max_length=20, null=True, verbose_name='Exam Status')), - ('interview_date', models.DateTimeField(blank=True, null=True, verbose_name='Interview Date')), - ('interview_status', models.CharField(blank=True, choices=[('Passed', 'Passed'), ('Failed', 'Failed')], max_length=20, null=True, verbose_name='Interview Status')), - ('offer_date', models.DateField(blank=True, null=True, verbose_name='Offer Date')), - ('offer_status', models.CharField(blank=True, choices=[('Accepted', 'Accepted'), ('Rejected', 'Rejected'), ('Pending', 'Pending')], max_length=20, null=True, verbose_name='Offer Status')), - ('hired_date', models.DateField(blank=True, null=True, verbose_name='Hired Date')), - ('join_date', models.DateField(blank=True, null=True, verbose_name='Join Date')), - ('ai_analysis_data', models.JSONField(blank=True, default=dict, help_text='Full JSON output from the resume scoring model.', null=True, verbose_name='AI Analysis Data')), - ('retry', models.SmallIntegerField(default=3, verbose_name='Resume Parsing Retry')), - ('hiring_source', models.CharField(blank=True, choices=[('Public', 'Public'), ('Internal', 'Internal'), ('Agency', 'Agency')], default='Public', max_length=255, null=True, verbose_name='Hiring Source')), - ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='application_profile', to=settings.AUTH_USER_MODEL, verbose_name='User Account')), - ], - options={ - 'verbose_name': 'Application', - 'verbose_name_plural': 'Applications', - }, - ), - migrations.CreateModel( - name='Candidate', - fields=[ - ], - options={ - 'verbose_name': 'Candidate (Legacy)', - 'verbose_name_plural': 'Candidates (Legacy)', - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=('recruitment.application',), - ), migrations.CreateModel( name='FormField', fields=[ @@ -281,10 +255,37 @@ class Migration(migrations.Migration): 'ordering': ['name'], }, ), - migrations.AddField( - model_name='application', - name='hiring_agency', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='applications', to='recruitment.hiringagency', verbose_name='Hiring Agency'), + migrations.CreateModel( + name='Application', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated at')), + ('slug', django_extensions.db.fields.RandomCharField(blank=True, editable=False, length=8, unique=True, verbose_name='Slug')), + ('resume', models.FileField(upload_to='resumes/', verbose_name='Resume')), + ('cover_letter', models.FileField(blank=True, null=True, upload_to='cover_letters/', verbose_name='Cover Letter')), + ('is_resume_parsed', models.BooleanField(default=False, verbose_name='Resume Parsed')), + ('parsed_summary', models.TextField(blank=True, verbose_name='Parsed Summary')), + ('applied', models.BooleanField(default=False, verbose_name='Applied')), + ('stage', models.CharField(choices=[('Applied', 'Applied'), ('Exam', 'Exam'), ('Interview', 'Interview'), ('Offer', 'Offer'), ('Hired', 'Hired'), ('Rejected', 'Rejected')], db_index=True, default='Applied', max_length=20, verbose_name='Stage')), + ('applicant_status', models.CharField(blank=True, choices=[('Applicant', 'Applicant'), ('Candidate', 'Candidate')], default='Applicant', max_length=20, null=True, verbose_name='Applicant Status')), + ('exam_date', models.DateTimeField(blank=True, null=True, verbose_name='Exam Date')), + ('exam_status', models.CharField(blank=True, choices=[('Passed', 'Passed'), ('Failed', 'Failed')], max_length=20, null=True, verbose_name='Exam Status')), + ('interview_date', models.DateTimeField(blank=True, null=True, verbose_name='Interview Date')), + ('interview_status', models.CharField(blank=True, choices=[('Passed', 'Passed'), ('Failed', 'Failed')], max_length=20, null=True, verbose_name='Interview Status')), + ('offer_date', models.DateField(blank=True, null=True, verbose_name='Offer Date')), + ('offer_status', models.CharField(blank=True, choices=[('Accepted', 'Accepted'), ('Rejected', 'Rejected'), ('Pending', 'Pending')], max_length=20, null=True, verbose_name='Offer Status')), + ('hired_date', models.DateField(blank=True, null=True, verbose_name='Hired Date')), + ('join_date', models.DateField(blank=True, null=True, verbose_name='Join Date')), + ('ai_analysis_data', models.JSONField(blank=True, default=dict, help_text='Full JSON output from the resume scoring model.', null=True, verbose_name='AI Analysis Data')), + ('retry', models.SmallIntegerField(default=3, verbose_name='Resume Parsing Retry')), + ('hiring_source', models.CharField(blank=True, choices=[('Public', 'Public'), ('Internal', 'Internal'), ('Agency', 'Agency')], default='Public', max_length=255, null=True, verbose_name='Hiring Source')), + ('hiring_agency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='applications', to='recruitment.hiringagency', verbose_name='Hiring Agency')), + ], + options={ + 'verbose_name': 'Application', + 'verbose_name_plural': 'Applications', + }, ), migrations.CreateModel( name='JobPosting', @@ -327,8 +328,6 @@ class Migration(migrations.Migration): ('cancelled_at', models.DateTimeField(blank=True, null=True)), ('assigned_to', models.ForeignKey(blank=True, help_text='The user who has been assigned to this job', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_jobs', to=settings.AUTH_USER_MODEL, verbose_name='Assigned To')), ('hiring_agency', models.ManyToManyField(blank=True, help_text='External agency responsible for sourcing candidates for this role', related_name='jobs', to='recruitment.hiringagency', verbose_name='Hiring Agency')), - ('users', models.ManyToManyField(blank=True, help_text='Internal staff involved in the recruitment process for this job', related_name='jobs_assigned', to=settings.AUTH_USER_MODEL, verbose_name='Internal Participant')), - ('participants', models.ManyToManyField(blank=True, help_text='External participants involved in the recruitment process for this job', related_name='jobs_participating', to='recruitment.participants', verbose_name='External Participant')), ('source', models.ForeignKey(blank=True, help_text='The system or channel from which this job posting originated or was first published.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='job_postings', to='recruitment.source')), ], options={ @@ -344,6 +343,7 @@ class Migration(migrations.Migration): ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated at')), ('slug', django_extensions.db.fields.RandomCharField(blank=True, editable=False, length=8, unique=True, verbose_name='Slug')), + ('interview_type', models.CharField(choices=[('Remote', 'Remote Interview'), ('Onsite', 'In-Person Interview')], default='Remote', max_length=10, verbose_name='Interview Meeting Type')), ('start_date', models.DateField(db_index=True, verbose_name='Start Date')), ('end_date', models.DateField(db_index=True, verbose_name='End Date')), ('working_days', models.JSONField(verbose_name='Working Days')), @@ -353,7 +353,7 @@ class Migration(migrations.Migration): ('break_end_time', models.TimeField(blank=True, null=True, verbose_name='Break End Time')), ('interview_duration', models.PositiveIntegerField(verbose_name='Interview Duration (minutes)')), ('buffer_time', models.PositiveIntegerField(default=0, verbose_name='Buffer Time (minutes)')), - ('candidates', models.ManyToManyField(blank=True, null=True, related_name='interview_schedules', to='recruitment.application')), + ('applications', models.ManyToManyField(blank=True, null=True, related_name='interview_schedules', to='recruitment.application')), ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='interview_schedules', to='recruitment.jobposting')), ], @@ -441,6 +441,7 @@ class Migration(migrations.Migration): ('address', models.TextField(blank=True, null=True, verbose_name='Address')), ('profile_image', models.ImageField(blank=True, null=True, upload_to='profile_pic/', validators=[recruitment.validators.validate_image_size], verbose_name='Profile Image')), ('linkedin_profile', models.URLField(blank=True, null=True, verbose_name='LinkedIn Profile URL')), + ('agency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='recruitment.hiringagency', verbose_name='Hiring Agency')), ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='person_profile', to=settings.AUTH_USER_MODEL, verbose_name='User Account')), ], options={ @@ -448,25 +449,6 @@ class Migration(migrations.Migration): 'verbose_name_plural': 'People', }, ), - migrations.CreateModel( - name='Document', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated at')), - ('slug', django_extensions.db.fields.RandomCharField(blank=True, editable=False, length=8, unique=True, verbose_name='Slug')), - ('file', models.FileField(upload_to='candidate_documents/%Y/%m/', validators=[recruitment.validators.validate_image_size], verbose_name='Document File')), - ('document_type', models.CharField(choices=[('resume', 'Resume'), ('cover_letter', 'Cover Letter'), ('certificate', 'Certificate'), ('id_document', 'ID Document'), ('passport', 'Passport'), ('education', 'Education Document'), ('experience', 'Experience Letter'), ('other', 'Other')], default='other', max_length=20, verbose_name='Document Type')), - ('description', models.CharField(blank=True, max_length=200, verbose_name='Description')), - ('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Uploaded By')), - ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='recruitment.person', verbose_name='Person')), - ], - options={ - 'verbose_name': 'Document', - 'verbose_name_plural': 'Documents', - 'ordering': ['-created_at'], - }, - ), migrations.AddField( model_name='application', name='person', @@ -553,8 +535,11 @@ class Migration(migrations.Migration): ('updated_at', models.DateTimeField(auto_now=True)), ('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='scheduled_interviews', to='recruitment.application')), ('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='scheduled_interviews', to='recruitment.jobposting')), + ('onsite_meeting', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='onsite_interview', to='recruitment.onsitemeeting')), + ('participants', models.ManyToManyField(blank=True, to='recruitment.participants')), ('schedule', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='interviews', to='recruitment.interviewschedule')), - ('zoom_meeting', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='interview', to='recruitment.zoommeeting')), + ('system_users', models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL)), + ('zoom_meeting', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='interview', to='recruitment.zoommeeting')), ], ), migrations.CreateModel( @@ -617,6 +602,27 @@ class Migration(migrations.Migration): 'indexes': [models.Index(fields=['unique_token'], name='recruitment_unique__f91e76_idx'), models.Index(fields=['expires_at'], name='recruitment_expires_954ed9_idx'), models.Index(fields=['is_active'], name='recruitment_is_acti_4b0804_idx')], }, ), + migrations.CreateModel( + name='Document', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated at')), + ('slug', django_extensions.db.fields.RandomCharField(blank=True, editable=False, length=8, unique=True, verbose_name='Slug')), + ('object_id', models.PositiveIntegerField(verbose_name='Object ID')), + ('file', models.FileField(upload_to='documents/%Y/%m/', validators=[recruitment.validators.validate_image_size], verbose_name='Document File')), + ('document_type', models.CharField(choices=[('resume', 'Resume'), ('cover_letter', 'Cover Letter'), ('certificate', 'Certificate'), ('id_document', 'ID Document'), ('passport', 'Passport'), ('education', 'Education Document'), ('experience', 'Experience Letter'), ('other', 'Other')], default='other', max_length=20, verbose_name='Document Type')), + ('description', models.CharField(blank=True, max_length=200, verbose_name='Description')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype', verbose_name='Content Type')), + ('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Uploaded By')), + ], + options={ + 'verbose_name': 'Document', + 'verbose_name_plural': 'Documents', + 'ordering': ['-created_at'], + 'indexes': [models.Index(fields=['content_type', 'object_id', 'document_type', 'created_at'], name='recruitment_content_547650_idx')], + }, + ), migrations.CreateModel( name='FieldResponse', fields=[ @@ -707,10 +713,6 @@ class Migration(migrations.Migration): model_name='person', index=models.Index(fields=['created_at'], name='recruitment_created_33495a_idx'), ), - migrations.AddIndex( - model_name='document', - index=models.Index(fields=['person', 'document_type', 'created_at'], name='recruitment_person__0a6844_idx'), - ), migrations.AddIndex( model_name='application', index=models.Index(fields=['person', 'job'], name='recruitment_person__34355c_idx'), diff --git a/recruitment/migrations/0002_delete_candidate_and_more.py b/recruitment/migrations/0002_delete_candidate_and_more.py deleted file mode 100644 index 1d47a45..0000000 --- a/recruitment/migrations/0002_delete_candidate_and_more.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 5.2.6 on 2025-11-11 10:17 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0001_initial'), - ] - - operations = [ - migrations.DeleteModel( - name='Candidate', - ), - migrations.RenameField( - model_name='interviewschedule', - old_name='candidates', - new_name='applications', - ), - migrations.RemoveField( - model_name='application', - name='user', - ), - ] diff --git a/recruitment/migrations/0002_scheduledinterview_participants.py b/recruitment/migrations/0002_scheduledinterview_participants.py deleted file mode 100644 index 71c0a2c..0000000 --- a/recruitment/migrations/0002_scheduledinterview_participants.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-06 15:19 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='scheduledinterview', - name='participants', - field=models.ManyToManyField(blank=True, to='recruitment.participants'), - ), - ] diff --git a/recruitment/migrations/0003_convert_document_to_generic_fk.py b/recruitment/migrations/0003_convert_document_to_generic_fk.py deleted file mode 100644 index 2d3f90c..0000000 --- a/recruitment/migrations/0003_convert_document_to_generic_fk.py +++ /dev/null @@ -1,45 +0,0 @@ -# Generated by Django 5.2.6 on 2025-11-11 12:13 - -import django.db.models.deletion -import recruitment.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('recruitment', '0002_delete_candidate_and_more'), - ] - - operations = [ - migrations.RemoveIndex( - model_name='document', - name='recruitment_person__0a6844_idx', - ), - migrations.RemoveField( - model_name='document', - name='person', - ), - migrations.AddField( - model_name='document', - name='content_type', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype', verbose_name='Content Type'), - preserve_default=False, - ), - migrations.AddField( - model_name='document', - name='object_id', - field=models.PositiveIntegerField(default=1, verbose_name='Object ID'), - preserve_default=False, - ), - migrations.AlterField( - model_name='document', - name='file', - field=models.FileField(upload_to='documents/%Y/%m/', validators=[recruitment.validators.validate_image_size], verbose_name='Document File'), - ), - migrations.AddIndex( - model_name='document', - index=models.Index(fields=['content_type', 'object_id', 'document_type', 'created_at'], name='recruitment_content_547650_idx'), - ), - ] diff --git a/recruitment/migrations/0003_scheduledinterview_system_users.py b/recruitment/migrations/0003_scheduledinterview_system_users.py deleted file mode 100644 index e365758..0000000 --- a/recruitment/migrations/0003_scheduledinterview_system_users.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-06 15:37 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0002_scheduledinterview_participants'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.AddField( - model_name='scheduledinterview', - name='system_users', - field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/recruitment/migrations/0004_person_agency.py b/recruitment/migrations/0004_person_agency.py deleted file mode 100644 index 24bd305..0000000 --- a/recruitment/migrations/0004_person_agency.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.2.6 on 2025-11-12 20:22 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0003_convert_document_to_generic_fk'), - ] - - operations = [ - migrations.AddField( - model_name='person', - name='agency', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='recruitment.hiringagency', verbose_name='Hiring Agency'), - ), - ] diff --git a/recruitment/migrations/0004_remove_jobposting_participants_and_more.py b/recruitment/migrations/0004_remove_jobposting_participants_and_more.py deleted file mode 100644 index 9368b3a..0000000 --- a/recruitment/migrations/0004_remove_jobposting_participants_and_more.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-06 15:44 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0003_scheduledinterview_system_users'), - ] - - operations = [ - migrations.RemoveField( - model_name='jobposting', - name='participants', - ), - migrations.RemoveField( - model_name='jobposting', - name='users', - ), - ] diff --git a/recruitment/migrations/0005_scheduledinterview_meeting_type.py b/recruitment/migrations/0005_scheduledinterview_meeting_type.py deleted file mode 100644 index fe94194..0000000 --- a/recruitment/migrations/0005_scheduledinterview_meeting_type.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-09 11:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0004_remove_jobposting_participants_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='scheduledinterview', - name='meeting_type', - field=models.CharField(choices=[('Remote', 'Remote Interview'), ('Onsite', 'In-Person Interview')], default='Remote', max_length=10, verbose_name='Interview Meeting Type'), - ), - ] diff --git a/recruitment/migrations/0006_remove_scheduledinterview_meeting_type_and_more.py b/recruitment/migrations/0006_remove_scheduledinterview_meeting_type_and_more.py deleted file mode 100644 index 9270e59..0000000 --- a/recruitment/migrations/0006_remove_scheduledinterview_meeting_type_and_more.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-09 11:12 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0005_scheduledinterview_meeting_type'), - ] - - operations = [ - migrations.RemoveField( - model_name='scheduledinterview', - name='meeting_type', - ), - migrations.AddField( - model_name='interviewschedule', - name='meeting_type', - field=models.CharField(choices=[('Remote', 'Remote Interview'), ('Onsite', 'In-Person Interview')], default='Remote', max_length=10, verbose_name='Interview Meeting Type'), - ), - ] diff --git a/recruitment/migrations/0007_rename_meeting_type_interviewschedule_interview_type.py b/recruitment/migrations/0007_rename_meeting_type_interviewschedule_interview_type.py deleted file mode 100644 index 85e6f83..0000000 --- a/recruitment/migrations/0007_rename_meeting_type_interviewschedule_interview_type.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-09 11:30 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0006_remove_scheduledinterview_meeting_type_and_more'), - ] - - operations = [ - migrations.RenameField( - model_name='interviewschedule', - old_name='meeting_type', - new_name='interview_type', - ), - ] diff --git a/recruitment/migrations/0008_interviewschedule_location.py b/recruitment/migrations/0008_interviewschedule_location.py deleted file mode 100644 index 2800b75..0000000 --- a/recruitment/migrations/0008_interviewschedule_location.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-09 12:37 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0007_rename_meeting_type_interviewschedule_interview_type'), - ] - - operations = [ - migrations.AddField( - model_name='interviewschedule', - name='location', - field=models.CharField(blank=True, default='Remote', null=True), - ), - ] diff --git a/recruitment/migrations/0009_alter_zoommeeting_meeting_id.py b/recruitment/migrations/0009_alter_zoommeeting_meeting_id.py deleted file mode 100644 index 602917a..0000000 --- a/recruitment/migrations/0009_alter_zoommeeting_meeting_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-09 13:43 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0008_interviewschedule_location'), - ] - - operations = [ - migrations.AlterField( - model_name='zoommeeting', - name='meeting_id', - field=models.CharField(blank=True, db_index=True, max_length=20, null=True, unique=True, verbose_name='Meeting ID'), - ), - ] diff --git a/recruitment/migrations/0010_alter_zoommeeting_meeting_id.py b/recruitment/migrations/0010_alter_zoommeeting_meeting_id.py deleted file mode 100644 index d64f578..0000000 --- a/recruitment/migrations/0010_alter_zoommeeting_meeting_id.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-09 13:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0009_alter_zoommeeting_meeting_id'), - ] - - operations = [ - migrations.AlterField( - model_name='zoommeeting', - name='meeting_id', - field=models.CharField(db_index=True, default=1, max_length=20, unique=True, verbose_name='Meeting ID'), - preserve_default=False, - ), - ] diff --git a/recruitment/migrations/0011_alter_scheduledinterview_zoom_meeting.py b/recruitment/migrations/0011_alter_scheduledinterview_zoom_meeting.py deleted file mode 100644 index dba9c62..0000000 --- a/recruitment/migrations/0011_alter_scheduledinterview_zoom_meeting.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-09 13:50 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0010_alter_zoommeeting_meeting_id'), - ] - - operations = [ - migrations.AlterField( - model_name='scheduledinterview', - name='zoom_meeting', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='interview', to='recruitment.zoommeeting'), - ), - ] diff --git a/recruitment/migrations/0012_interviewschedule_interview_topic.py b/recruitment/migrations/0012_interviewschedule_interview_topic.py deleted file mode 100644 index fbf21b7..0000000 --- a/recruitment/migrations/0012_interviewschedule_interview_topic.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-10 09:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0011_alter_scheduledinterview_zoom_meeting'), - ] - - operations = [ - migrations.AddField( - model_name='interviewschedule', - name='interview_topic', - field=models.CharField(blank=True, null=True), - ), - ] diff --git a/recruitment/migrations/0013_onsitemeeting_and_more.py b/recruitment/migrations/0013_onsitemeeting_and_more.py deleted file mode 100644 index 4cb09d6..0000000 --- a/recruitment/migrations/0013_onsitemeeting_and_more.py +++ /dev/null @@ -1,45 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-10 13:00 - -import django.db.models.deletion -import django_extensions.db.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0012_interviewschedule_interview_topic'), - ] - - operations = [ - migrations.CreateModel( - name='OnsiteMeeting', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated at')), - ('slug', django_extensions.db.fields.RandomCharField(blank=True, editable=False, length=8, unique=True, verbose_name='Slug')), - ('topic', models.CharField(max_length=255, verbose_name='Topic')), - ('start_time', models.DateTimeField(db_index=True, verbose_name='Start Time')), - ('duration', models.PositiveIntegerField(verbose_name='Duration')), - ('timezone', models.CharField(max_length=50, verbose_name='Timezone')), - ('location', models.CharField(blank=True, null=True)), - ], - options={ - 'abstract': False, - }, - ), - migrations.RemoveField( - model_name='interviewschedule', - name='interview_topic', - ), - migrations.RemoveField( - model_name='interviewschedule', - name='location', - ), - migrations.AddField( - model_name='scheduledinterview', - name='onsite_meeting', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='interview', to='recruitment.onsitemeeting'), - ), - ] diff --git a/recruitment/migrations/0014_onsitemeeting_status.py b/recruitment/migrations/0014_onsitemeeting_status.py deleted file mode 100644 index 78270f1..0000000 --- a/recruitment/migrations/0014_onsitemeeting_status.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-10 13:20 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0013_onsitemeeting_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='onsitemeeting', - name='status', - field=models.CharField(blank=True, db_index=True, default='waiting', max_length=20, null=True, verbose_name='Status'), - ), - ] diff --git a/recruitment/migrations/0015_alter_scheduledinterview_onsite_meeting.py b/recruitment/migrations/0015_alter_scheduledinterview_onsite_meeting.py deleted file mode 100644 index 3127c6b..0000000 --- a/recruitment/migrations/0015_alter_scheduledinterview_onsite_meeting.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-10 13:55 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('recruitment', '0014_onsitemeeting_status'), - ] - - operations = [ - migrations.AlterField( - model_name='scheduledinterview', - name='onsite_meeting', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='onsite_interview', to='recruitment.onsitemeeting'), - ), - ] diff --git a/recruitment/migrations/__pycache__/0001_initial.cpython-313.pyc b/recruitment/migrations/__pycache__/0001_initial.cpython-313.pyc index 18266ec110a40f03365eb1917350c02c559c9fdb..e3b2eb39684601b7619be175a031568b8a89e2df 100644 GIT binary patch literal 55519 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 aJO3qfGA}jr9l23wmF}$i*A#kU?EfG8fh!*X literal 43839 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 diff --git a/test_agency_access_links.py b/test_agency_access_links.py deleted file mode 100644 index 354e883..0000000 --- a/test_agency_access_links.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python -import os -import sys -import django - -# Add project root to Python path -sys.path.append(os.path.dirname(os.path.abspath(__file__))) - -# Set Django settings module -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') - -# Initialize Django -django.setup() - -def test_agency_access_links(): - """Test agency access link functionality""" - print("Testing agency access links...") - - # Test 1: Check if URLs exist - try: - from recruitment.urls import urlpatterns - print("✅ URL patterns loaded successfully") - - # Check if our new URLs are in patterns - url_patterns = [str(pattern.pattern) for pattern in urlpatterns] - - # Look for our specific URL patterns - deactivate_found = any('agency-access-links' in pattern and 'deactivate' in pattern for pattern in url_patterns) - reactivate_found = any('agency-access-links' in pattern and 'reactivate' in pattern for pattern in url_patterns) - - if deactivate_found: - print("✅ Found URL pattern for agency_access_link_deactivate") - else: - print("❌ Missing URL pattern for agency_access_link_deactivate") - - if reactivate_found: - print("✅ Found URL pattern for agency_access_link_reactivate") - else: - print("❌ Missing URL pattern for agency_access_link_reactivate") - - # Test 2: Check if views exist - try: - from recruitment.views import agency_access_link_deactivate, agency_access_link_reactivate - print("✅ View functions imported successfully") - - # Test that functions are callable - if callable(agency_access_link_deactivate): - print("✅ agency_access_link_deactivate is callable") - else: - print("❌ agency_access_link_deactivate is not callable") - - if callable(agency_access_link_reactivate): - print("✅ agency_access_link_reactivate is callable") - else: - print("❌ agency_access_link_reactivate is not callable") - - except ImportError as e: - print(f"❌ Import error: {e}") - - print("Agency access link functionality test completed!") - return True - except Exception as e: - print(f"❌ Test failed: {e}") - return False - -if __name__ == "__main__": - test_agency_access_links() diff --git a/test_agency_assignments.py b/test_agency_assignments.py deleted file mode 100644 index 586e93d..0000000 --- a/test_agency_assignments.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env python -""" -Test script to verify agency assignment functionality -""" -import os -import sys -import django - -# Setup Django -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from django.test import Client -from django.urls import reverse -from django.contrib.auth.models import User -from recruitment.models import HiringAgency, JobPosting, AgencyJobAssignment - -def test_agency_assignments(): - """Test agency assignment functionality""" - print("🧪 Testing Agency Assignment Functionality") - print("=" * 50) - - # Create test client - client = Client() - - # Test URLs - urls_to_test = [ - ('agency_list', '/recruitment/agencies/'), - ('agency_assignment_list', '/recruitment/agency-assignments/'), - ] - - print("\n📋 Testing URL Accessibility:") - for url_name, expected_path in urls_to_test: - try: - url = reverse(url_name) - print(f"✅ {url_name}: {url}") - except Exception as e: - print(f"❌ {url_name}: Error - {e}") - - print("\n🔍 Testing Views:") - - # Test agency list view (without authentication - should redirect) - try: - response = client.get(reverse('agency_list')) - if response.status_code == 302: # Redirect to login - print("✅ Agency list view redirects unauthenticated users (as expected)") - else: - print(f"⚠️ Agency list view status: {response.status_code}") - except Exception as e: - print(f"❌ Agency list view error: {e}") - - # Test agency assignment list view (without authentication - should redirect) - try: - response = client.get(reverse('agency_assignment_list')) - if response.status_code == 302: # Redirect to login - print("✅ Agency assignment list view redirects unauthenticated users (as expected)") - else: - print(f"⚠️ Agency assignment list view status: {response.status_code}") - except Exception as e: - print(f"❌ Agency assignment list view error: {e}") - - print("\n📊 Testing Database Models:") - - # Test if models exist and can be created - try: - # Check if we can query the models - agency_count = HiringAgency.objects.count() - job_count = JobPosting.objects.count() - assignment_count = AgencyJobAssignment.objects.count() - - print(f"✅ HiringAgency model: {agency_count} agencies in database") - print(f"✅ JobPosting model: {job_count} jobs in database") - print(f"✅ AgencyJobAssignment model: {assignment_count} assignments in database") - - except Exception as e: - print(f"❌ Database model error: {e}") - - print("\n🎯 Navigation Menu Test:") - print("✅ Agency Assignments link added to navigation menu") - print("✅ Navigation includes both 'Agencies' and 'Agency Assignments' links") - - print("\n📝 Summary:") - print("✅ Agency assignment functionality is fully implemented") - print("✅ All required views are present in views.py") - print("✅ URL patterns are configured in urls.py") - print("✅ Navigation menu has been updated") - print("✅ Templates are created and functional") - - print("\n🚀 Ready for use!") - print("Users can now:") - print(" - View agencies at /recruitment/agencies/") - print(" - Manage agency assignments at /recruitment/agency-assignments/") - print(" - Create, update, and delete assignments") - print(" - Generate access links for external agencies") - print(" - Send messages to agencies") - -if __name__ == '__main__': - test_agency_assignments() diff --git a/test_agency_crud.py b/test_agency_crud.py deleted file mode 100644 index e2f9da1..0000000 --- a/test_agency_crud.py +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/env python -""" -Test script to verify Agency CRUD functionality -""" -import os -import sys -import django - -# Add the project directory to the Python path -sys.path.append(os.path.dirname(os.path.abspath(__file__))) - -# Set up Django -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from django.test import Client -from django.contrib.auth.models import User -from recruitment.models import HiringAgency - -def test_agency_crud(): - """Test Agency CRUD operations""" - print("🧪 Testing Agency CRUD Functionality") - print("=" * 50) - - # Create a test user - user, created = User.objects.get_or_create( - username='testuser', - defaults={'email': 'test@example.com', 'is_staff': True, 'is_superuser': True} - ) - if created: - user.set_password('testpass123') - user.save() - print("✅ Created test user") - else: - print("ℹ️ Using existing test user") - - # Create test client - client = Client() - - # Login the user - client.login(username='testuser', password='testpass123') - print("✅ Logged in test user") - - # Test 1: Agency List View - print("\n1. Testing Agency List View...") - response = client.get('/recruitment/agencies/') - if response.status_code == 200: - print("✅ Agency list view works") - else: - print(f"❌ Agency list view failed: {response.status_code}") - return False - - # Test 2: Agency Create View (GET) - print("\n2. Testing Agency Create View (GET)...") - response = client.get('/recruitment/agencies/create/') - if response.status_code == 200: - print("✅ Agency create view works") - else: - print(f"❌ Agency create view failed: {response.status_code}") - return False - - # Test 3: Agency Create (POST) - print("\n3. Testing Agency Create (POST)...") - agency_data = { - 'name': 'Test Agency', - 'contact_person': 'John Doe', - 'email': 'test@agency.com', - 'phone': '+1234567890', - 'country': 'SA', - 'city': 'Riyadh', - 'address': 'Test Address', - 'website': 'https://testagency.com', - 'description': 'Test agency description' - } - - response = client.post('/recruitment/agencies/create/', agency_data) - if response.status_code == 302: # Redirect after successful creation - print("✅ Agency creation works") - - # Get the created agency - agency = HiringAgency.objects.filter(name='Test Agency').first() - if agency: - print(f"✅ Agency created with ID: {agency.id}") - - # Test 4: Agency Detail View - print("\n4. Testing Agency Detail View...") - response = client.get(f'/recruitment/agencies/{agency.slug}/') - if response.status_code == 200: - print("✅ Agency detail view works") - else: - print(f"❌ Agency detail view failed: {response.status_code}") - return False - - # Test 5: Agency Update View (GET) - print("\n5. Testing Agency Update View (GET)...") - response = client.get(f'/recruitment/agencies/{agency.slug}/update/') - if response.status_code == 200: - print("✅ Agency update view works") - else: - print(f"❌ Agency update view failed: {response.status_code}") - return False - - # Test 6: Agency Update (POST) - print("\n6. Testing Agency Update (POST)...") - update_data = agency_data.copy() - update_data['name'] = 'Updated Test Agency' - - response = client.post(f'/recruitment/agencies/{agency.slug}/update/', update_data) - if response.status_code == 302: - print("✅ Agency update works") - - # Verify the update - agency.refresh_from_db() - if agency.name == 'Updated Test Agency': - print("✅ Agency data updated correctly") - else: - print("❌ Agency data not updated correctly") - return False - else: - print(f"❌ Agency update failed: {response.status_code}") - return False - - # Test 7: Agency Delete View (GET) - print("\n7. Testing Agency Delete View (GET)...") - response = client.get(f'/recruitment/agencies/{agency.slug}/delete/') - if response.status_code == 200: - print("✅ Agency delete view works") - else: - print(f"❌ Agency delete view failed: {response.status_code}") - return False - - # Test 8: Agency Delete (POST) - print("\n8. Testing Agency Delete (POST)...") - delete_data = { - 'confirm_name': 'Updated Test Agency', - 'confirm_delete': 'on' - } - - response = client.post(f'/recruitment/agencies/{agency.slug}/delete/', delete_data) - if response.status_code == 302: - print("✅ Agency deletion works") - - # Verify deletion - if not HiringAgency.objects.filter(name='Updated Test Agency').exists(): - print("✅ Agency deleted successfully") - else: - print("❌ Agency not deleted") - return False - else: - print(f"❌ Agency deletion failed: {response.status_code}") - return False - - else: - print("❌ Agency not found after creation") - return False - else: - print(f"❌ Agency creation failed: {response.status_code}") - print(f"Response content: {response.content.decode()}") - return False - - # Test 9: URL patterns - print("\n9. Testing URL patterns...") - try: - from django.urls import reverse - print(f"✅ Agency list URL: {reverse('agency_list')}") - print(f"✅ Agency create URL: {reverse('agency_create')}") - print("✅ All URL patterns resolved correctly") - except Exception as e: - print(f"❌ URL pattern error: {e}") - return False - - # Test 10: Model functionality - print("\n10. Testing Model functionality...") - try: - # Test model creation - test_agency = HiringAgency.objects.create( - name='Model Test Agency', - contact_person='Jane Smith', - email='model@test.com', - phone='+9876543210', - country='SA' - ) - print(f"✅ Model creation works: {test_agency.name}") - print(f"✅ Slug generation works: {test_agency.slug}") - print(f"✅ String representation works: {str(test_agency)}") - - # Test model methods - print(f"✅ Country display: {test_agency.get_country_display()}") - - # Clean up - test_agency.delete() - print("✅ Model deletion works") - - except Exception as e: - print(f"❌ Model functionality error: {e}") - return False - - print("\n" + "=" * 50) - print("🎉 All Agency CRUD tests passed!") - return True - -if __name__ == '__main__': - success = test_agency_crud() - sys.exit(0 if success else 1) diff --git a/test_agency_isolation.py b/test_agency_isolation.py deleted file mode 100644 index 3ffa2bc..0000000 --- a/test_agency_isolation.py +++ /dev/null @@ -1,278 +0,0 @@ -#!/usr/bin/env python -""" -Test script to verify agency user isolation and all fixes are working properly. -This tests: -1. Agency login functionality (AttributeError fix) -2. Agency portal template isolation (agency_base.html usage) -3. Agency user access restrictions -4. JavaScript fixes in submit candidate form -""" - -import os -import sys -import django -from django.test import TestCase, Client -from django.urls import reverse -from django.contrib.auth.models import User -from unittest.mock import patch, MagicMock - -# Setup Django -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from recruitment.models import Agency, AgencyJobAssignment, AgencyAccessLink, Candidate, Job - - -class AgencyIsolationTest(TestCase): - """Test agency user isolation and functionality""" - - def setUp(self): - """Set up test data""" - # Create internal staff user - self.staff_user = User.objects.create_user( - username='staff_user', - email='staff@example.com', - password='testpass123', - is_staff=True - ) - - # Create agency user - self.agency_user = User.objects.create_user( - username='agency_user', - email='agency@example.com', - password='testpass123', - is_staff=False - ) - - # Create agency - self.agency = Agency.objects.create( - name='Test Agency', - contact_email='agency@example.com', - contact_phone='+1234567890', - address='Test Address', - is_active=True - ) - - # Create job - self.job = Job.objects.create( - title='Test Job', - department='IT', - description='Test job description', - status='active' - ) - - # Create agency assignment - self.assignment = AgencyJobAssignment.objects.create( - agency=self.agency, - job=self.job, - max_candidates=10, - deadline_date='2024-12-31', - status='active' - ) - - # Create access link - self.access_link = AgencyAccessLink.objects.create( - assignment=self.assignment, - unique_token='test-token-123', - access_password='testpass123', - expires_at='2024-12-31' - ) - - # Create test candidate - self.candidate = Candidate.objects.create( - first_name='Test', - last_name='Candidate', - email='candidate@example.com', - phone='+1234567890', - job=self.job, - source='agency', - hiring_agency=self.agency - ) - - def test_agency_login_form_attribute_error_fix(self): - """Test that AgencyLoginForm handles missing validated_access_link attribute""" - from recruitment.forms import AgencyLoginForm - - # Test form with valid data - form_data = { - 'access_token': 'test-token-123', - 'password': 'testpass123' - } - - form = AgencyLoginForm(data=form_data) - - # This should not raise AttributeError anymore - try: - is_valid = form.is_valid() - print(f"✓ AgencyLoginForm validation works: {is_valid}") - except AttributeError as e: - if 'validated_access_link' in str(e): - self.fail("AttributeError 'validated_access_link' not fixed!") - else: - raise - - def test_agency_portal_templates_use_agency_base(self): - """Test that agency portal templates use agency_base.html""" - agency_portal_templates = [ - 'recruitment/agency_portal_login.html', - 'recruitment/agency_portal_dashboard.html', - 'recruitment/agency_portal_submit_candidate.html', - 'recruitment/agency_portal_messages.html', - 'recruitment/agency_access_link_detail.html' - ] - - for template_name in agency_portal_templates: - template_path = f'templates/{template_name}' - if os.path.exists(template_path): - with open(template_path, 'r') as f: - content = f.read() - self.assertIn("{% extends 'agency_base.html' %}", content, - f"{template_name} should use agency_base.html") - print(f"✓ {template_name} uses agency_base.html") - else: - print(f"⚠ Template {template_name} not found") - - def test_agency_base_template_isolation(self): - """Test that agency_base.html properly isolates agency users""" - agency_base_path = 'templates/agency_base.html' - - if os.path.exists(agency_base_path): - with open(agency_base_path, 'r') as f: - content = f.read() - - # Check that it extends base.html - self.assertIn("{% extends 'base.html' %}", content) - - # Check that it has agency-specific navigation - self.assertIn('agency_portal_dashboard', content) - self.assertIn('agency_portal_logout', content) - - # Check that it doesn't include admin navigation - self.assertNotIn('admin:', content) - - print("✓ agency_base.html properly configured") - else: - self.fail("agency_base.html not found") - - def test_agency_login_view(self): - """Test agency login functionality""" - client = Client() - - # Test GET request - response = client.get(reverse('agency_portal_login')) - self.assertEqual(response.status_code, 200) - print("✓ Agency login page loads") - - # Test POST with valid credentials - response = client.post(reverse('agency_portal_login'), { - 'access_token': 'test-token-123', - 'password': 'testpass123' - }) - - # Should redirect or show success (depending on implementation) - self.assertIn(response.status_code, [200, 302]) - print("✓ Agency login POST request handled") - - def test_agency_user_access_restriction(self): - """Test that agency users can't access internal pages""" - client = Client() - - # Log in as agency user - client.login(username='agency_user', password='testpass123') - - # Try to access internal pages (should be restricted) - internal_urls = [ - '/admin/', - reverse('agency_list'), - reverse('candidate_list'), - ] - - for url in internal_urls: - try: - response = client.get(url) - # Agency users should get redirected or forbidden - self.assertIn(response.status_code, [302, 403, 404]) - print(f"✓ Agency user properly restricted from {url}") - except: - print(f"⚠ Could not test access to {url}") - - def test_javascript_fixes_in_submit_candidate(self): - """Test that JavaScript fixes are in place in submit candidate template""" - template_path = 'templates/recruitment/agency_portal_submit_candidate.html' - - if os.path.exists(template_path): - with open(template_path, 'r') as f: - content = f.read() - - # Check for safe element access patterns - self.assertIn('getElementValue', content) - self.assertIn('if (element)', content) - - # Check for error handling - self.assertIn('console.error', content) - - print("✓ JavaScript fixes present in submit candidate template") - else: - self.fail("agency_portal_submit_candidate.html not found") - - def test_agency_portal_navigation(self): - """Test agency portal navigation links""" - agency_portal_urls = [ - 'agency_portal_dashboard', - 'agency_portal_login', - 'agency_portal_logout', - ] - - for url_name in agency_portal_urls: - try: - url = reverse(url_name) - print(f"✓ Agency portal URL {url_name} resolves: {url}") - except: - print(f"⚠ Agency portal URL {url_name} not found") - - -def run_tests(): - """Run all tests""" - print("=" * 60) - print("AGENCY ISOLATION AND FIXES TEST") - print("=" * 60) - - test_case = AgencyIsolationTest() - test_case.setUp() - - tests = [ - test_case.test_agency_login_form_attribute_error_fix, - test_case.test_agency_portal_templates_use_agency_base, - test_case.test_agency_base_template_isolation, - test_case.test_agency_login_view, - test_case.test_agency_user_access_restriction, - test_case.test_javascript_fixes_in_submit_candidate, - test_case.test_agency_portal_navigation, - ] - - passed = 0 - failed = 0 - - for test in tests: - try: - test() - passed += 1 - except Exception as e: - print(f"✗ {test.__name__} failed: {e}") - failed += 1 - - print("=" * 60) - print(f"TEST RESULTS: {passed} passed, {failed} failed") - print("=" * 60) - - if failed == 0: - print("🎉 All tests passed! Agency isolation is working properly.") - else: - print("⚠️ Some tests failed. Please review the issues above.") - - return failed == 0 - - -if __name__ == '__main__': - success = run_tests() - sys.exit(0 if success else 1) diff --git a/test_async_email.py b/test_async_email.py deleted file mode 100644 index a90c1d0..0000000 --- a/test_async_email.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python -""" -Test script for async email functionality -""" - -import os -import sys -import django - -# Setup Django -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from django.contrib.auth.models import User -from recruitment.email_service import send_bulk_email -from recruitment.models import JobPosting, Candidate - -def test_async_email(): - """Test async email sending functionality""" - - print("🧪 Testing Async Email Functionality") - print("=" * 50) - - try: - # Get a test user - test_user = User.objects.first() - if not test_user: - print("❌ No users found in database. Please create a user first.") - return - - # Get a test job and candidate - test_job = JobPosting.objects.first() - test_candidate = Candidate.objects.first() - - if not test_job or not test_candidate: - print("❌ No test job or candidate found. Please create some test data first.") - return - - print(f"📧 Test User: {test_user.email}") - print(f"💼 Test Job: {test_job.title}") - print(f"👤 Test Candidate: {test_candidate.name}") - - # Test synchronous email sending - print("\n1. Testing Synchronous Email Sending...") - try: - sync_result = send_bulk_email( - subject="Test Synchronous Email", - message="This is a test synchronous email from the ATS system.", - recipient_list=[test_user.email], - async_task=False - ) - print(f" ✅ Sync result: {sync_result}") - except Exception as e: - print(f" ❌ Sync error: {e}") - - # Test asynchronous email sending - print("\n2. Testing Asynchronous Email Sending...") - try: - async_result = send_bulk_email( - subject="Test Asynchronous Email", - message="This is a test asynchronous email from the ATS system.", - recipient_list=[test_user.email], - async_task=True - ) - print(f" ✅ Async result: {async_result}") - except Exception as e: - print(f" ❌ Async error: {e}") - - print("\n3. Testing Email Service Status...") - - # Check Django Q configuration - try: - import django_q - from django_q.models import Task - pending_tasks = Task.objects.count() - print(f" 📊 Django Q Status: Installed, {pending_tasks} tasks in queue") - except ImportError: - print(" ⚠️ Django Q not installed") - except Exception as e: - print(f" 📊 Django Q Status: Installed but error checking status: {e}") - - # Check email backend configuration - from django.conf import settings - email_backend = getattr(settings, 'EMAIL_BACKEND', 'not configured') - print(f" 📧 Email Backend: {email_backend}") - - email_host = getattr(settings, 'EMAIL_HOST', 'not configured') - print(f" 🌐 Email Host: {email_host}") - - email_port = getattr(settings, 'EMAIL_PORT', 'not configured') - print(f" 🔌 Email Port: {email_port}") - - print("\n✅ Async email functionality test completed!") - print("💡 If emails are not being received, check:") - print(" - Email server configuration in settings.py") - print(" - Django Q cluster status (python manage.py qmonitor)") - print(" - Email logs and spam folders") - - except Exception as e: - print(f"❌ Test failed with error: {e}") - import traceback - traceback.print_exc() - -if __name__ == "__main__": - test_async_email() diff --git a/test_csv_export.py b/test_csv_export.py deleted file mode 100644 index 25ac28d..0000000 --- a/test_csv_export.py +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env python -""" -Test script to verify CSV export functionality with updated JSON structure -""" -import os -import sys -import django - -# Setup Django environment -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from recruitment.models import Candidate, JobPosting -from recruitment.views_frontend import export_candidates_csv -from django.test import RequestFactory -from django.contrib.auth.models import User - -def test_csv_export(): - """Test the CSV export function with sample data""" - - print("🧪 Testing CSV Export Functionality") - print("=" * 50) - - # Create a test request factory - factory = RequestFactory() - - # Get or create a test user - user, created = User.objects.get_or_create( - username='testuser', - defaults={'email': 'test@example.com', 'is_staff': True} - ) - - # Get a sample job - job = JobPosting.objects.first() - if not job: - print("❌ No jobs found in database. Please create a job first.") - return False - - print(f"📋 Using job: {job.title}") - - # Test different stages - stages = ['screening', 'exam', 'interview', 'offer', 'hired'] - - for stage in stages: - print(f"\n🔍 Testing stage: {stage}") - - # Create a mock request - request = factory.get(f'/export/{job.slug}/{stage}/') - request.user = user - request.GET = {'search': ''} - - try: - # Call the export function - response = export_candidates_csv(request, job.slug, stage) - - # Check if response is successful - if response.status_code == 200: - print(f"✅ {stage} export successful") - - # Read and analyze the CSV content - content = response.content.decode('utf-8-sig') - lines = content.split('\n') - - if len(lines) > 1: - headers = lines[0].split(',') - print(f"📊 Headers: {len(headers)} columns") - print(f"📊 Data rows: {len(lines) - 1}") - - # Check for AI score column - if 'Match Score' in headers: - print("✅ Match Score column found") - else: - print("⚠️ Match Score column not found") - - # Check for other AI columns - ai_columns = ['Years Experience', 'Screening Rating', 'Professional Category', 'Top 3 Skills'] - found_ai_columns = [col for col in ai_columns if col in headers] - print(f"🤖 AI columns found: {found_ai_columns}") - - else: - print("⚠️ No data rows found") - - else: - print(f"❌ {stage} export failed with status: {response.status_code}") - - except Exception as e: - print(f"❌ {stage} export error: {str(e)}") - import traceback - traceback.print_exc() - - # Test with actual candidate data - print(f"\n🔍 Testing with actual candidate data") - candidates = Candidate.objects.filter(job=job) - print(f"📊 Total candidates for job: {candidates.count()}") - - if candidates.exists(): - # Test AI data extraction for first candidate - candidate = candidates.first() - print(f"\n🧪 Testing AI data extraction for: {candidate.name}") - - try: - # Test the model properties - print(f"📊 Match Score: {candidate.match_score}") - print(f"📊 Years Experience: {candidate.years_of_experience}") - print(f"📊 Screening Rating: {candidate.screening_stage_rating}") - print(f"📊 Professional Category: {candidate.professional_category}") - print(f"📊 Top 3 Skills: {candidate.top_3_keywords}") - print(f"📊 Strengths: {candidate.strengths}") - print(f"📊 Weaknesses: {candidate.weaknesses}") - - # Test AI analysis data structure - if candidate.ai_analysis_data: - print(f"📊 AI Analysis Data keys: {list(candidate.ai_analysis_data.keys())}") - if 'analysis_data' in candidate.ai_analysis_data: - analysis_keys = list(candidate.ai_analysis_data['analysis_data'].keys()) - print(f"📊 Analysis Data keys: {analysis_keys}") - else: - print("⚠️ 'analysis_data' key not found in ai_analysis_data") - else: - print("⚠️ No AI analysis data found") - - except Exception as e: - print(f"❌ Error extracting AI data: {str(e)}") - import traceback - traceback.print_exc() - - print("\n🎉 CSV Export Test Complete!") - return True - -if __name__ == '__main__': - test_csv_export() diff --git a/test_email_attachments.py b/test_email_attachments.py deleted file mode 100644 index 040d695..0000000 --- a/test_email_attachments.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python -""" -Test script for email attachment functionality -""" - -import os -import django -from django.conf import settings -from django.test import TestCase, Client -from django.core.files.uploadedfile import SimpleUploadedFile -from django.core.files.base import ContentFile -import io -from unittest.mock import Mock -from recruitment.email_service import send_bulk_email -from recruitment.forms import CandidateEmailForm -from recruitment.models import JobPosting, Candidate -from django.test import RequestFactory -from django.contrib.auth.models import User - -# Configure Django settings -if not settings.configured: - settings.configure( - DEBUG=True, - DATABASES={ - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': ':memory:', - } - }, - USE_TZ=True, - SECRET_KEY='test-secret-key', - INSTALLED_APPS=[ - 'django.contrib.contenttypes', - 'django.contrib.auth', - 'django.contrib.sessions', - 'recruitment', - ], - EMAIL_BACKEND='django.core.mail.backends.console.EmailBackend', - ) - -# Setup test database -from django.db import connection -from django.core.management import execute_from_command_line - -def setup_test_data(): - """Create test data for email attachment testing""" - # Create test user - user = User.objects.create_user( - username='testuser', - email='test@example.com', - first_name='Test', - last_name='User' - ) - - # Create test job - job = JobPosting.objects.create( - title='Test Job Position', - description='This is a test job for email attachment testing.', - status='ACTIVE', - internal_job_id='TEST-001' - ) - - # Create test candidate - candidate = Candidate.objects.create( - first_name='John', - last_name='Doe', - email='john.doe@example.com', - phone='+1234567890', - address='123 Test Street', - job=job, - stage='Interview' - ) - - return user, job, candidate - -def test_email_service_with_attachments(): - """Test the email service directly with attachments""" - print("Testing email service with attachments...") - - # Create test files - test_files = [] - - # Test 1: Simple text file - text_content = "This is a test attachment content." - text_file = ContentFile( - text_content.encode('utf-8'), - name='test_document.txt' - ) - test_files.append(('test_document.txt', text_file, 'text/plain')) - - # Test 2: PDF content (simulated) - pdf_content = b'%PDF-1.4\n1 0 obj\n<<\n/Length 100\n>>stream\nxref\nstartxref\n1234\n5678\n/ModDate(D:20250101)\n' - pdf_file = ContentFile( - pdf_content, - name='test_document.pdf' - ) - test_files.append(('test_document.pdf', pdf_file, 'application/pdf')) - - # Test 3: Image file (simulated) - image_content = b'\x89PNG\r\n\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 diff --git a/test_email_attachments_clean.py b/test_email_attachments_clean.py deleted file mode 100644 index 15c50ea..0000000 --- a/test_email_attachments_clean.py +++ /dev/null @@ -1,267 +0,0 @@ -#!/usr/bin/env python -""" -Clean test script for email attachment functionality -""" - -import os -import sys -import django -from django.conf import settings - -# Configure Django settings BEFORE importing any Django modules -if not settings.configured: - settings.configure( - DEBUG=True, - DATABASES={ - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': ':memory:', - } - }, - USE_TZ=True, - SECRET_KEY='test-secret-key', - INSTALLED_APPS=[ - 'django.contrib.contenttypes', - 'django.contrib.auth', - 'django.contrib.sessions', - 'recruitment', - ], - EMAIL_BACKEND='django.core.mail.backends.console.EmailBackend', - MEDIA_ROOT='/tmp/test_media', - FILE_UPLOAD_TEMP_DIR='/tmp/test_uploads', - ) - -# Setup Django -django.setup() - -# Now import Django modules -from django.test import TestCase, Client -from django.core.files.uploadedfile import SimpleUploadedFile -from django.core.files.base import ContentFile -import io -from unittest.mock import Mock -from recruitment.email_service import send_bulk_email -from recruitment.forms import CandidateEmailForm -from recruitment.models import JobPosting, Candidate -from django.test import RequestFactory -from django.contrib.auth.models import User - -# Setup test database -from django.db import connection -from django.core.management import execute_from_command_line - -def setup_test_data(): - """Create test data for email attachment testing""" - # Create test user - user = User.objects.create_user( - username='testuser', - email='test@example.com', - first_name='Test', - last_name='User' - ) - - # Create test job - job = JobPosting.objects.create( - title='Test Job Position', - description='This is a test job for email attachment testing.', - status='ACTIVE', - internal_job_id='TEST-001' - ) - - # Create test candidate - candidate = Candidate.objects.create( - first_name='John', - last_name='Doe', - email='john.doe@example.com', - phone='+1234567890', - address='123 Test Street', - job=job, - stage='Interview' - ) - - return user, job, candidate - -def test_email_service_with_attachments(): - """Test the email service directly with attachments""" - print("Testing email service with attachments...") - - # Create test files - test_files = [] - - # Test 1: Simple text file - text_content = "This is a test attachment content." - text_file = ContentFile( - text_content.encode('utf-8'), - name='test_document.txt' - ) - test_files.append(('test_document.txt', text_file, 'text/plain')) - - # Test 2: PDF content (simulated) - pdf_content = b'%PDF-1.4\n1 0 obj\n<<\n/Length 100\n>>stream\nxref\nstartxref\n1234\n5678\n/ModDate(D:20250101)\n' - pdf_file = ContentFile( - pdf_content, - name='test_document.pdf' - ) - test_files.append(('test_document.pdf', pdf_file, 'application/pdf')) - - # Test 3: Image file (simulated PNG header) - image_content = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01' - image_file = ContentFile( - image_content, - name='test_image.png' - ) - test_files.append(('test_image.png', image_file, 'image/png')) - - try: - # Test email service with attachments - result = send_bulk_email( - subject='Test Email with Attachments', - body='This is a test email with attachments.', - from_email='test@example.com', - recipient_list=['recipient@example.com'], - attachments=test_files - ) - - print(f"Email service result: {result}") - print("✓ Email service with attachments test passed") - return True - - except Exception as e: - print(f"✗ Email service test failed: {e}") - return False - -def test_candidate_email_form_with_attachments(): - """Test the CandidateEmailForm with attachments""" - print("\nTesting CandidateEmailForm with attachments...") - - user, job, candidate = setup_test_data() - - # Create test files for form - text_file = SimpleUploadedFile( - "test.txt", - b"This is test content for form attachment" - ) - - pdf_file = SimpleUploadedFile( - "test.pdf", - b"%PDF-1.4 test content" - ) - - form_data = { - 'subject': 'Test Subject', - 'body': 'Test body content', - 'from_email': 'test@example.com', - 'recipient_list': 'recipient@example.com', - } - - files_data = { - 'attachments': [text_file, pdf_file] - } - - try: - form = CandidateEmailForm(data=form_data, files=files_data) - - if form.is_valid(): - print("✓ Form validation passed") - print(f"Form cleaned data: {form.cleaned_data}") - - # Test form processing - try: - result = form.save() - print(f"✓ Form save result: {result}") - return True - except Exception as e: - print(f"✗ Form save failed: {e}") - return False - else: - print(f"✗ Form validation failed: {form.errors}") - return False - - except Exception as e: - print(f"✗ Form test failed: {e}") - return False - -def test_email_view_with_attachments(): - """Test the email view with attachments""" - print("\nTesting email view with attachments...") - - user, job, candidate = setup_test_data() - factory = RequestFactory() - - # Create a mock request with files - text_file = SimpleUploadedFile( - "test.txt", - b"This is test content for view attachment" - ) - - request = factory.post( - '/recruitment/send-candidate-email/', - data={ - 'subject': 'Test Subject', - 'body': 'Test body content', - 'from_email': 'test@example.com', - 'recipient_list': 'recipient@example.com', - }, - format='multipart' - ) - request.FILES['attachments'] = [text_file] - request.user = user - - try: - # Import and test the view - from recruitment.views import send_candidate_email - - response = send_candidate_email(request) - print(f"View response status: {response.status_code}") - - if response.status_code == 200: - print("✓ Email view test passed") - return True - else: - print(f"✗ Email view test failed with status: {response.status_code}") - return False - - except Exception as e: - print(f"✗ Email view test failed: {e}") - return False - -def main(): - """Run all email attachment tests""" - print("=" * 60) - print("EMAIL ATTACHMENT FUNCTIONALITY TESTS") - print("=" * 60) - - # Initialize Django - django.setup() - - # Create tables - from django.core.management import execute_from_command_line - execute_from_command_line(['manage.py', 'migrate', '--run-syncdb']) - - results = [] - - # Run tests - results.append(test_email_service_with_attachments()) - results.append(test_candidate_email_form_with_attachments()) - results.append(test_email_view_with_attachments()) - - # Summary - print("\n" + "=" * 60) - print("TEST SUMMARY") - print("=" * 60) - - passed = sum(results) - total = len(results) - - print(f"Tests passed: {passed}/{total}") - - if passed == total: - print("🎉 All email attachment tests passed!") - return True - else: - print("❌ Some email attachment tests failed!") - return False - -if __name__ == '__main__': - success = main() - exit(0 if success else 1) diff --git a/test_email_composition.py b/test_email_composition.py deleted file mode 100644 index 6e540b6..0000000 --- a/test_email_composition.py +++ /dev/null @@ -1,218 +0,0 @@ -#!/usr/bin/env python3 -""" -Test script to verify email composition functionality -""" - -import os -import sys -import django - -# Setup Django environment -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from django.test import TestCase, Client -from django.urls import reverse -from django.contrib.auth.models import User -from django.utils import timezone -from recruitment.models import JobPosting, Candidate -from unittest.mock import patch, MagicMock - -def test_email_composition_view(): - """Test the email composition view""" - print("Testing email composition view...") - - # Create test user (delete if exists) - User.objects.filter(username='testuser').delete() - user = User.objects.create_user( - username='testuser', - email='test@example.com', - password='testpass123' - ) - - # Create test job - job = JobPosting.objects.create( - title='Test Job', - internal_job_id='TEST001', - description='Test job description', - status='active', - application_deadline=timezone.now() + timezone.timedelta(days=30) - ) - - # Add user to job participants so they appear in recipient choices - job.users.add(user) - - # Create test candidate - candidate = Candidate.objects.create( - first_name='Test Candidate', - last_name='', - email='candidate@example.com', - phone='1234567890', - job=job - ) - - # Create client and login - client = Client() - client.login(username='testuser', password='testpass123') - - # Test GET request to email composition view - url = reverse('compose_candidate_email', kwargs={ - 'job_slug': job.slug, - 'candidate_slug': candidate.slug - }) - - try: - response = client.get(url) - print(f"✓ GET request successful: {response.status_code}") - - if response.status_code == 200: - print("✓ Email composition form rendered successfully") - - # Check if form contains expected fields - content = response.content.decode('utf-8') - if 'subject' in content.lower(): - print("✓ Subject field found in form") - if 'message' in content.lower(): - print("✓ Message field found in form") - if 'recipients' in content.lower(): - print("✓ Recipients field found in form") - - else: - print(f"✗ Unexpected status code: {response.status_code}") - - except Exception as e: - print(f"✗ Error testing GET request: {e}") - - # Test POST request with mock email sending - post_data = { - 'subject': 'Test Subject', - 'message': 'Test message content', - 'recipients': ['candidate@example.com'], - 'include_candidate_info': True, - 'include_meeting_details': False - } - - with patch('django.core.mail.send_mass_mail') as mock_send_mail: - mock_send_mail.return_value = 1 - - try: - response = client.post(url, data=post_data) - print(f"✓ POST request successful: {response.status_code}") - - if response.status_code == 200: - # Check if JSON response is correct - try: - json_data = response.json() - if json_data.get('success'): - print("✓ Email sent successfully") - print(f"✓ Success message: {json_data.get('message')}") - else: - print(f"✗ Email send failed: {json_data.get('error')}") - except: - print("✗ Invalid JSON response") - else: - print(f"✗ Unexpected status code: {response.status_code}") - - except Exception as e: - print(f"✗ Error testing POST request: {e}") - - # Clean up - user.delete() - job.delete() - candidate.delete() - - print("Email composition test completed!") - -def test_email_form(): - """Test the CandidateEmailForm""" - print("\nTesting CandidateEmailForm...") - - from recruitment.forms import CandidateEmailForm - - # Create test user for form (delete if exists) - User.objects.filter(username='formuser').delete() - form_user = User.objects.create_user( - username='formuser', - email='form@example.com', - password='formpass123' - ) - - # Create test job and candidate for form - job = JobPosting.objects.create( - title='Test Job Form', - internal_job_id='TEST002', - description='Test job description for form', - status='active', - application_deadline=timezone.now() + timezone.timedelta(days=30) - ) - - # Add user to job participants so they appear in recipient choices - job.users.add(form_user) - - candidate = Candidate.objects.create( - first_name='Test Candidate', - last_name='Form', - email='candidate_form@example.com', - phone='1234567890', - job=job - ) - - try: - # Test valid form data - get available choices from form - form = CandidateEmailForm(job, candidate) - available_choices = [choice[0] for choice in form.fields['recipients'].choices] - - # Use first available choice for testing - test_recipient = available_choices[0] if available_choices else None - - if test_recipient: - form = CandidateEmailForm(job, candidate, data={ - 'subject': 'Test Subject', - 'message': 'Test message content', - 'recipients': [test_recipient], - 'include_candidate_info': True, - 'include_meeting_details': False - }) - - if form.is_valid(): - print("✓ Form validation passed") - print(f"✓ Cleaned recipients: {form.cleaned_data['recipients']}") - else: - print(f"✗ Form validation failed: {form.errors}") - else: - print("✗ No recipient choices available for testing") - except Exception as e: - print(f"✗ Error testing form: {e}") - - try: - # Test invalid form data (empty subject) - form = CandidateEmailForm(job, candidate, data={ - 'subject': '', - 'message': 'Test message content', - 'recipients': [], - 'include_candidate_info': True, - 'include_meeting_details': False - }) - - if not form.is_valid(): - print("✓ Form correctly rejected empty subject") - if 'subject' in form.errors: - print("✓ Subject field has validation error") - else: - print("✗ Form should have failed validation") - except Exception as e: - print(f"✗ Error testing invalid form: {e}") - - # Clean up - job.delete() - candidate.delete() - -if __name__ == '__main__': - print("Running Email Composition Tests") - print("=" * 50) - - test_email_form() - test_email_composition_view() - - print("\n" + "=" * 50) - print("All tests completed!") diff --git a/test_email_form_js.html b/test_email_form_js.html deleted file mode 100644 index edc579f..0000000 --- a/test_email_form_js.html +++ /dev/null @@ -1,507 +0,0 @@ - - - - - - Email Compose Form Test - - - - -

-

Email Compose Form JavaScript Test

- - -
-
-
-
-
-
- - Compose Email -
-
-
-
- - - -
- - -
- - -
- -
-
- - -
-
- - -
-
-
- - -
- - -
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
- - Email will be sent to all selected recipients -
-
- - -
-
-
-
-
-
-
- - -
-
-
-
- Loading... -
-
- Sending email... -
-
-
-
- - -
-
- - -
-

Test Results

-
-
-
- - - - - - - diff --git a/test_html_email_template.py b/test_html_email_template.py deleted file mode 100644 index 657be5d..0000000 --- a/test_html_email_template.py +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env python -""" -Test script for HTML email template functionality -""" - -import os -import sys -import django - -# Setup Django -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from django.template.loader import render_to_string -from django.utils.html import strip_tags -from recruitment.models import Candidate, JobPosting -from recruitment.email_service import send_interview_invitation_email - -def test_html_template(): - """Test the HTML email template rendering""" - print("Testing HTML email template...") - - # Create test context - context = { - 'candidate_name': 'John Doe', - 'candidate_email': 'john.doe@example.com', - 'candidate_phone': '+966 50 123 4567', - 'job_title': 'Senior Software Developer', - 'department': 'Information Technology', - 'company_name': 'Norah University', - 'meeting_topic': 'Interview for Senior Software Developer', - 'meeting_date_time': 'November 15, 2025 at 2:00 PM', - 'meeting_duration': '60 minutes', - 'join_url': 'https://zoom.us/j/123456789', - } - - try: - # Test template rendering - html_content = render_to_string('emails/interview_invitation.html', context) - plain_content = strip_tags(html_content) - - print("✅ HTML template rendered successfully!") - print(f"HTML content length: {len(html_content)} characters") - print(f"Plain text length: {len(plain_content)} characters") - - # Save rendered HTML to file for inspection - with open('test_interview_email.html', 'w', encoding='utf-8') as f: - f.write(html_content) - print("✅ HTML content saved to 'test_interview_email.html'") - - # Save plain text to file for inspection - with open('test_interview_email.txt', 'w', encoding='utf-8') as f: - f.write(plain_content) - print("✅ Plain text content saved to 'test_interview_email.txt'") - - return True - - except Exception as e: - print(f"❌ Error rendering template: {e}") - return False - -def test_email_service_function(): - """Test the email service function with mock data""" - print("\nTesting email service function...") - - try: - # Get a real candidate and job for testing - candidate = Candidate.objects.first() - job = JobPosting.objects.first() - - if not candidate: - print("❌ No candidates found in database") - return False - - if not job: - print("❌ No jobs found in database") - return False - - print(f"Using candidate: {candidate.name}") - print(f"Using job: {job.title}") - - # Test meeting details - meeting_details = { - 'topic': f'Interview for {job.title}', - 'date_time': 'November 15, 2025 at 2:00 PM', - 'duration': '60 minutes', - 'join_url': 'https://zoom.us/j/test123456', - } - - # Test the email function (without actually sending) - result = send_interview_invitation_email( - candidate=candidate, - job=job, - meeting_details=meeting_details, - recipient_list=['test@example.com'] - ) - - if result['success']: - print("✅ Email service function executed successfully!") - print(f"Recipients: {result.get('recipients_count', 'N/A')}") - print(f"Message: {result.get('message', 'N/A')}") - else: - print(f"❌ Email service function failed: {result.get('error', 'Unknown error')}") - - return result['success'] - - except Exception as e: - print(f"❌ Error testing email service: {e}") - return False - -def test_template_variables(): - """Test all template variables""" - print("\nTesting template variables...") - - # Test with minimal data - minimal_context = { - 'candidate_name': 'Test Candidate', - 'candidate_email': 'test@example.com', - 'job_title': 'Test Position', - } - - try: - html_content = render_to_string('emails/interview_invitation.html', minimal_context) - print("✅ Template works with minimal data") - - # Check for required variables - required_vars = ['candidate_name', 'candidate_email', 'job_title'] - missing_vars = [] - - for var in required_vars: - if f'{{ {var} }}' in html_content: - missing_vars.append(var) - - if missing_vars: - print(f"⚠️ Missing variables: {missing_vars}") - else: - print("✅ All required variables are present") - - return True - - except Exception as e: - print(f"❌ Error with minimal data: {e}") - return False - -def main(): - """Run all tests""" - print("🧪 Testing HTML Email Template System") - print("=" * 50) - - # Test 1: Template rendering - test1_passed = test_html_template() - - # Test 2: Template variables - test2_passed = test_template_variables() - - # Test 3: Email service function - test3_passed = test_email_service_function() - - # Summary - print("\n" + "=" * 50) - print("📊 TEST SUMMARY") - print(f"Template Rendering: {'✅ PASS' if test1_passed else '❌ FAIL'}") - print(f"Template Variables: {'✅ PASS' if test2_passed else '❌ FAIL'}") - print(f"Email Service: {'✅ PASS' if test3_passed else '❌ FAIL'}") - - overall_success = test1_passed and test2_passed and test3_passed - print(f"\nOverall Result: {'✅ ALL TESTS PASSED' if overall_success else '❌ SOME TESTS FAILED'}") - - if overall_success: - print("\n🎉 HTML email template system is ready!") - print("You can now send professional interview invitations using the new template.") - else: - print("\n🔧 Please fix the issues before using the template system.") - -if __name__ == '__main__': - main() diff --git a/test_interview_email.html b/test_interview_email.html deleted file mode 100644 index 6f84efb..0000000 --- a/test_interview_email.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - Interview Invitation - - - -
-
-

Interview Confirmation

-
- -

Dear John Doe,

-

Thank you for your interest in the position. We are pleased to invite you to a virtual interview. Please find the details below.

- -

Interview Details

-
- Topic: Interview for Senior Software Developer -
-
- Date & Time: November 15, 2025 at 2:00 PM -
-
- Duration: 60 minutes -
- - - - Join Interview Now - -

Please click the button above to join the meeting at the scheduled time.

- - -

Your Information

-
- Name: John Doe -
-
- Email: john.doe@example.com -
- -
- Phone: +966 50 123 4567 -
- - - -

Position Details

-
- Position: Senior Software Developer -
- -
- Department: Information Technology -
- - - - -
- - diff --git a/test_interview_email.txt b/test_interview_email.txt deleted file mode 100644 index 5c42c4c..0000000 --- a/test_interview_email.txt +++ /dev/null @@ -1,139 +0,0 @@ - - - - - Interview Invitation - - /* Basic reset and typography */ - body { - font-family: Arial, sans-serif; - line-height: 1.6; - color: #333333; - margin: 0; - padding: 0; - background-color: #f4f4f4; - } - /* Container for the main content */ - .container { - max-width: 600px; - margin: 20px auto; - background-color: #ffffff; - padding: 30px; - border-radius: 8px; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); - } - /* Header styling */ - .header { - text-align: center; - border-bottom: 2px solid #007bff; - padding-bottom: 10px; - margin-bottom: 20px; - } - .header h1 { - color: #007bff; - font-size: 24px; - margin: 0; - } - /* Section headings */ - .section-header { - color: #007bff; - font-size: 18px; - margin-top: 25px; - margin-bottom: 10px; - border-left: 4px solid #007bff; - padding-left: 10px; - } - /* Key detail rows */ - .detail-row { - margin-bottom: 10px; - } - .detail-row strong { - display: inline-block; - width: 120px; - color: #555555; - } - /* Button style for the Join URL */ - .button { - display: block; - width: 80%; - margin: 25px auto; - padding: 12px 0; - background-color: #28a745; /* Success/Go color */ - color: #ffffff; - text-align: center; - text-decoration: none; - border-radius: 5px; - font-weight: bold; - font-size: 16px; - } - /* Footer/closing section */ - .footer { - margin-top: 30px; - padding-top: 15px; - border-top: 1px dashed #cccccc; - text-align: center; - font-size: 14px; - color: #777777; - } - - - - - - Interview Confirmation - - - Dear John Doe, - Thank you for your interest in the position. We are pleased to invite you to a virtual interview. Please find the details below. - - Interview Details - - Topic: Interview for Senior Software Developer - - - Date & Time: November 15, 2025 at 2:00 PM - - - Duration: 60 minutes - - - - - Join Interview Now - - Please click the button above to join the meeting at the scheduled time. - - - Your Information - - Name: John Doe - - - Email: john.doe@example.com - - - - Phone: +966 50 123 4567 - - - - - Position Details - - Position: Senior Software Developer - - - - Department: Information Technology - - - - - - We look forward to speaking with you. - If you have any questions, please reply to this email. - Best regards,The Norah University Team - - - - diff --git a/test_simple_email.py b/test_simple_email.py deleted file mode 100644 index b748cc5..0000000 --- a/test_simple_email.py +++ /dev/null @@ -1,239 +0,0 @@ -#!/usr/bin/env python -""" -Simple test script for basic email functionality without attachments -""" - -import os -import sys -import django -from django.conf import settings - -# Configure Django settings BEFORE importing any Django modules -if not settings.configured: - settings.configure( - DEBUG=True, - DATABASES={ - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': ':memory:', - } - }, - USE_TZ=True, - SECRET_KEY='test-secret-key', - INSTALLED_APPS=[ - 'django.contrib.contenttypes', - 'django.contrib.auth', - 'django.contrib.sessions', - 'recruitment', - ], - EMAIL_BACKEND='django.core.mail.backends.console.EmailBackend', - ) - -# Setup Django -django.setup() - -# Now import Django modules -from django.test import TestCase, Client -from django.test import RequestFactory -from django.contrib.auth.models import User -from recruitment.email_service import send_bulk_email -from recruitment.forms import CandidateEmailForm -from recruitment.models import JobPosting, Candidate, Participants - -def setup_test_data(): - """Create test data for email testing""" - # Create test user (get or create to avoid duplicates) - user, created = User.objects.get_or_create( - username='testuser', - defaults={ - 'email': 'test@example.com', - 'first_name': 'Test', - 'last_name': 'User' - } - ) - - # Create test job - from datetime import datetime, timedelta - job = JobPosting.objects.create( - title='Test Job Position', - description='This is a test job for email testing.', - status='ACTIVE', - internal_job_id='TEST-001', - application_deadline=datetime.now() + timedelta(days=30) - ) - - # Create test candidate - candidate = Candidate.objects.create( - first_name='John', - last_name='Doe', - email='john.doe@example.com', - phone='+1234567890', - address='123 Test Street', - job=job, - stage='Interview' - ) - - # Create test participants - participant1 = Participants.objects.create( - name='Alice Smith', - email='alice@example.com', - phone='+1234567891', - designation='Interviewer' - ) - - participant2 = Participants.objects.create( - name='Bob Johnson', - email='bob@example.com', - phone='+1234567892', - designation='Hiring Manager' - ) - - # Add participants to job - job.participants.add(participant1, participant2) - - return user, job, candidate, [participant1, participant2] - -def test_email_service_basic(): - """Test the email service with basic functionality""" - print("Testing basic email service...") - - try: - # Test email service without attachments - result = send_bulk_email( - subject='Test Basic Email', - message='This is a test email without attachments.', - recipient_list=['recipient1@example.com', 'recipient2@example.com'] - ) - - print(f"Email service result: {result}") - print("✓ Basic email service test passed") - return True - - except Exception as e: - print(f"✗ Basic email service test failed: {e}") - return False - -def test_candidate_email_form_basic(): - """Test the CandidateEmailForm without attachments""" - print("\nTesting CandidateEmailForm without attachments...") - - user, job, candidate, participants = setup_test_data() - - form_data = { - 'subject': 'Test Subject', - 'message': 'Test body content', - 'recipients': [f'participant_{p.id}' for p in participants], - 'include_candidate_info': True, - 'include_meeting_details': True, - } - - try: - form = CandidateEmailForm(data=form_data, job=job, candidate=candidate) - - if form.is_valid(): - print("✓ Form validation passed") - print(f"Form cleaned data keys: {list(form.cleaned_data.keys())}") - - # Test getting email addresses - email_addresses = form.get_email_addresses() - print(f"Email addresses: {email_addresses}") - - # Test getting formatted message - formatted_message = form.get_formatted_message() - print(f"Formatted message length: {len(formatted_message)} characters") - - return True - else: - print(f"✗ Form validation failed: {form.errors}") - return False - - except Exception as e: - print(f"✗ Form test failed: {e}") - return False - -def test_email_sending_workflow(): - """Test the complete email sending workflow""" - print("\nTesting complete email sending workflow...") - - user, job, candidate, participants = setup_test_data() - - form_data = { - 'subject': 'Interview Update: John Doe - Test Job Position', - 'message': 'Please find the interview update below.', - 'recipients': [f'participant_{p.id}' for p in participants], - 'include_candidate_info': True, - 'include_meeting_details': True, - } - - try: - # Create and validate form - form = CandidateEmailForm(data=form_data, job=job, candidate=candidate) - - if not form.is_valid(): - print(f"✗ Form validation failed: {form.errors}") - return False - - # Get email data - subject = form.cleaned_data['subject'] - message = form.get_formatted_message() - recipient_emails = form.get_email_addresses() - - print(f"Subject: {subject}") - print(f"Recipients: {recipient_emails}") - print(f"Message preview: {message[:200]}...") - - # Send email using service - result = send_bulk_email( - subject=subject, - message=message, - recipient_list=recipient_emails - ) - - print(f"Email sending result: {result}") - print("✓ Complete email workflow test passed") - return True - - except Exception as e: - print(f"✗ Email workflow test failed: {e}") - return False - -def main(): - """Run all simple email tests""" - print("=" * 60) - print("SIMPLE EMAIL FUNCTIONALITY TESTS") - print("=" * 60) - - # Initialize Django - django.setup() - - # Create tables - from django.core.management import execute_from_command_line - execute_from_command_line(['manage.py', 'migrate', '--run-syncdb']) - - results = [] - - # Run tests - results.append(test_email_service_basic()) - results.append(test_candidate_email_form_basic()) - results.append(test_email_sending_workflow()) - - # Summary - print("\n" + "=" * 60) - print("TEST SUMMARY") - print("=" * 60) - - passed = sum(results) - total = len(results) - - print(f"Tests passed: {passed}/{total}") - - if passed == total: - print("🎉 All simple email tests passed!") - return True - else: - print("❌ Some simple email tests failed!") - return False - -if __name__ == '__main__': - success = main() - exit(0 if success else 1) diff --git a/test_sse.html b/test_sse.html deleted file mode 100644 index 7d24324..0000000 --- a/test_sse.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - SSE Test - - - -

SSE Notification Test

- -
- Disconnected -
- -
- - - -
- -

Notifications:

-
-

No notifications yet...

-
- -

Test Instructions:

-
    -
  1. Click "Connect" to start the SSE connection
  2. -
  3. Run the test script: python test_sse_notifications.py
  4. -
  5. Watch for real-time notifications to appear below
  6. -
  7. Check the browser console for debug information
  8. -
- - - - diff --git a/test_sse_notifications.py b/test_sse_notifications.py deleted file mode 100644 index e79cd74..0000000 --- a/test_sse_notifications.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python -""" -Test script to generate notifications and test SSE functionality -""" -import os -import sys -import django - -# Setup Django -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from django.utils import timezone -from django.contrib.auth.models import User -from recruitment.models import Notification - -def create_test_notification(): - """Create a test notification for admin user""" - try: - # Get first admin user - admin_user = User.objects.filter(is_staff=True).first() - if not admin_user: - print("No admin user found!") - return - - # Create a test notification - notification = Notification.objects.create( - recipient=admin_user, - notification_type=Notification.NotificationType.IN_APP, - message="Test SSE Notification - Real-time update working!", - status=Notification.Status.PENDING, - scheduled_for=timezone.now() # Add required scheduled_for field - ) - - print(f"Created test notification: {notification.id}") - print(f"Recipient: {admin_user.username}") - print(f"Message: {notification.message}") - print(f"Status: {notification.status}") - - return notification - - except Exception as e: - print(f"Error creating notification: {e}") - return None - -if __name__ == "__main__": - print("Testing SSE Notification System...") - print("=" * 50) - - notification = create_test_notification() - - if notification: - print("\n✅ Test notification created successfully!") - print("🔥 Check the browser console for SSE events") - print("📱 Open http://localhost:8000/ and look for real-time updates") - else: - print("\n❌ Failed to create test notification") diff --git a/test_sync_functionality.py b/test_sync_functionality.py deleted file mode 100644 index 797849b..0000000 --- a/test_sync_functionality.py +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env python3 -""" -Test script for candidate sync functionality -""" - -import os -import sys -import django - -# Setup Django -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from recruitment.models import JobPosting, Candidate, Source -from recruitment.candidate_sync_service import CandidateSyncService -from django.utils import timezone - -def test_sync_service(): - """Test the candidate sync service""" - print("🧪 Testing Candidate Sync Service") - print("=" * 50) - - # Initialize sync service - sync_service = CandidateSyncService() - - # Get test data - print("📊 Getting test data...") - jobs = JobPosting.objects.all() - sources = Source.objects.filter(supports_outbound_sync=True) - - print(f"Found {jobs.count()} jobs") - print(f"Found {sources.count()} sources with outbound sync support") - - if not jobs.exists(): - print("❌ No jobs found. Creating test job...") - # Create a test job if none exists - job = JobPosting.objects.create( - title="Test Developer Position", - department="IT", - description="Test job for sync functionality", - application_deadline=timezone.now().date() + timezone.timedelta(days=30), - status="ACTIVE" - ) - print(f"✅ Created test job: {job.title}") - else: - job = jobs.first() - print(f"✅ Using existing job: {job.title}") - - if not sources.exists(): - print("❌ No sources with outbound sync found. Creating test source...") - # Create a test source if none exists - source = Source.objects.create( - name="Test ERP System", - source_type="ERP", - sync_endpoint="https://httpbin.org/post", # Test endpoint that echoes back requests - sync_method="POST", - test_method="POST", - supports_outbound_sync=True, - is_active=True, - custom_headers='{"Content-Type": "application/json", "Authorization": "Bearer test-token"}' - ) - print(f"✅ Created test source: {source.name}") - else: - source = sources.first() - print(f"✅ Using existing source: {source.name}") - - # Test connection - print("\n🔗 Testing source connection...") - try: - connection_result = sync_service.test_source_connection(source) - print(f"✅ Connection test result: {connection_result}") - except Exception as e: - print(f"❌ Connection test failed: {str(e)}") - - # Check for hired candidates - hired_candidates = job.candidates.filter(offer_status='Accepted') - print(f"\n👥 Found {hired_candidates.count()} hired candidates") - - if hired_candidates.exists(): - # Test sync for hired candidates - print("\n🔄 Testing sync for hired candidates...") - try: - results = sync_service.sync_hired_candidates_to_all_sources(job) - print("✅ Sync completed successfully!") - print(f"Results: {results}") - except Exception as e: - print(f"❌ Sync failed: {str(e)}") - else: - print("ℹ️ No hired candidates to sync. Creating test candidate...") - - # Create a test candidate if none exists - candidate = Candidate.objects.create( - job=job, - first_name="Test", - last_name="Candidate", - email="test@example.com", - phone="+1234567890", - address="Test Address", - stage="Offer", - offer_status="Accepted", - offer_date=timezone.now().date(), - ai_analysis_data={ - 'analysis_data': { - 'match_score': 85, - 'years_of_experience': 5, - 'screening_stage_rating': 'A - Highly Qualified' - } - } - ) - print(f"✅ Created test candidate: {candidate.name}") - - # Test sync with the new candidate - print("\n🔄 Testing sync with new candidate...") - try: - results = sync_service.sync_hired_candidates_to_all_sources(job) - print("✅ Sync completed successfully!") - print(f"Results: {results}") - except Exception as e: - print(f"❌ Sync failed: {str(e)}") - - print("\n🎯 Test Summary") - print("=" * 50) - print("✅ Candidate sync service is working correctly") - print("✅ Source connection testing works") - print("✅ Hired candidate sync functionality verified") - print("\n📝 Next Steps:") - print("1. Configure real source endpoints in the admin panel") - print("2. Test with actual external systems") - print("3. Monitor sync logs for production usage") - -if __name__ == "__main__": - test_sync_service() diff --git a/test_urls.py b/test_urls.py deleted file mode 100644 index 3053444..0000000 --- a/test_urls.py +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env python -"""Test script to verify URL configuration""" - -import os -import sys -import django - -# Add the project directory to the Python path -sys.path.append('/home/ismail/projects/ats/kaauh_ats') - -# Set up Django -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') -django.setup() - -from django.urls import reverse -from django.test import Client - -def test_urls(): - """Test the agency access link URLs""" - print("Testing agency access link URLs...") - - try: - # Test URL reverse lookup - deactivate_url = reverse('agency_access_link_deactivate', kwargs={'slug': 'test-slug'}) - print(f"✓ Deactivate URL: {deactivate_url}") - - reactivate_url = reverse('agency_access_link_reactivate', kwargs={'slug': 'test-slug'}) - print(f"✓ Reactivate URL: {reactivate_url}") - - # Test URL resolution - from django.urls import resolve - deactivate_view = resolve('/recruitment/agency-access-link/test-slug/deactivate/') - print(f"✓ Deactivate view: {deactivate_view.view_name}") - - reactivate_view = resolve('/recruitment/agency-access-link/test-slug/reactivate/') - print(f"✓ Reactivate view: {reactivate_view.view_name}") - - print("\n✅ All URL tests passed!") - return True - - except Exception as e: - print(f"❌ Error testing URLs: {e}") - return False - -if __name__ == '__main__': - test_urls() diff --git a/test_word_integration.py b/test_word_integration.py deleted file mode 100644 index de56739..0000000 --- a/test_word_integration.py +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python3 -""" -Test script to verify Word document integration in recruitment/tasks.py -""" - -import os -import sys -import tempfile - -# Add the project directory to Python path -sys.path.insert(0, '/home/ismail/projects/ats/kaauh_ats') - -# Import the tasks module -try: - from recruitment.tasks import extract_text_from_document, extract_text_from_pdf, extract_text_from_word - print("✓ Successfully imported text extraction functions") -except ImportError as e: - print(f"✗ Failed to import functions: {e}") - sys.exit(1) - -def test_pdf_extraction(): - """Test PDF text extraction with a sample PDF""" - print("\n--- Testing PDF Extraction ---") - - # Create a temporary PDF file for testing - with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp_pdf: - try: - # Create a simple PDF content (this would normally be a real PDF) - tmp_pdf.write(b"%PDF-1.4\n1 0 obj\n<<\n/Type /Catalog\n/Pages 2 0 R\n>>\nendobj\n") - tmp_pdf_path = tmp_pdf.name - - # Test the PDF extraction - text = extract_text_from_pdf(tmp_pdf_path) - print(f"✓ PDF extraction completed. Text length: {len(text)}") - - # Clean up - os.unlink(tmp_pdf_path) - - except Exception as e: - print(f"✗ PDF extraction failed: {e}") - -def test_word_extraction(): - """Test Word text extraction with a sample Word document""" - print("\n--- Testing Word Extraction ---") - - try: - # Check if python-docx is available - from recruitment.tasks import DOCX_AVAILABLE - if not DOCX_AVAILABLE: - print("⚠ python-docx not available. Skipping Word extraction test.") - return - - # Create a temporary Word file for testing - with tempfile.NamedTemporaryFile(suffix='.docx', delete=False) as tmp_docx: - try: - # Create a simple Word document content - tmp_docx.write(b'PK\x03\x04') # Basic DOCX header - tmp_docx_path = tmp_docx.name - - # Test the Word extraction - text = extract_text_from_word(tmp_docx_path) - print(f"✓ Word extraction completed. Text length: {len(text)}") - - # Clean up - os.unlink(tmp_docx_path) - - except Exception as e: - print(f"✗ Word extraction failed: {e}") - # Clean up on failure - if os.path.exists(tmp_docx.name): - os.unlink(tmp_docx.name) - - except Exception as e: - print(f"✗ Word extraction setup failed: {e}") - -def test_unified_document_parser(): - """Test the unified document parser""" - print("\n--- Testing Unified Document Parser ---") - - # Test with non-existent file - try: - extract_text_from_document('/nonexistent/file.pdf') - print("✗ Should have failed for non-existent file") - except FileNotFoundError: - print("✓ Correctly handled non-existent file") - except Exception as e: - print(f"✗ Unexpected error for non-existent file: {e}") - - # Test with unsupported file type - with tempfile.NamedTemporaryFile(suffix='.txt', delete=False) as tmp_txt: - try: - tmp_txt.write(b'This is a text file') - tmp_txt_path = tmp_txt.name - - try: - extract_text_from_document(tmp_txt_path) - print("✗ Should have failed for unsupported file type") - except ValueError as e: - print(f"✓ Correctly handled unsupported file type: {e}") - except Exception as e: - print(f"✗ Unexpected error for unsupported file type: {e}") - - # Clean up - os.unlink(tmp_txt_path) - - except Exception as e: - print(f"✗ Test setup failed: {e}") - -def main(): - """Run all tests""" - print("Starting Word Document Integration Tests...") - - test_pdf_extraction() - test_word_extraction() - test_unified_document_parser() - - print("\n--- Test Summary ---") - print("Integration tests completed. Check the output above for any errors.") - print("\nNote: For full Word document processing, ensure python-docx is installed:") - print("pip install python-docx") - -if __name__ == "__main__": - main() diff --git a/translate_all_batches.py b/translate_all_batches.py deleted file mode 100644 index 6ea5d65..0000000 --- a/translate_all_batches.py +++ /dev/null @@ -1,444 +0,0 @@ -#!/usr/bin/env python3 -""" -Comprehensive script to translate all remaining batch files with Arabic translations -""" - -import re -import os - -# Comprehensive Arabic translation dictionary -TRANSLATIONS = { - # Email and Authentication - "The date and time this notification is scheduled to be sent.": "التاريخ والوقت المحدد لإرسال هذا الإشعار.", - "Send Attempts": "محاولات الإرسال", - "Failed to start the job posting process. Please try again.": "فشل في بدء عملية نشر الوظيفة. يرجى المحاولة مرة أخرى.", - "You don't have permission to view this page.": "ليس لديك إذن لعرض هذه الصفحة.", - "Account Inactive": "الحساب غير نشط", - "Princess Nourah bint Abdulrahman University": "جامعة الأميرة نورة بنت عبدالرحمن", - "Manage your personal details and security.": "إدارة تفاصيلك الشخصية والأمان.", - "Primary": "أساسي", - "Verified": "موثق", - "Unverified": "غير موثق", - "Make Primary": "جعل أساسي", - "Remove": "إزالة", - "Add Email Address": "إضافة عنوان بريد إلكتروني", - "Hello,": "مرحباً،", - "Confirm My KAAUH ATS Email": "تأكيد بريدي الإلكتروني في نظام توظيف جامعة نورة", - "Alternatively, copy and paste this link into your browser:": "بدلاً من ذلك، انسخ والصق هذا الرابط في متصفحك:", - "Password Reset Request": "طلب إعادة تعيين كلمة المرور", - "Click Here to Reset Your Password": "اضغط هنا لإعادة تعيين كلمة المرور", - "This link is only valid for a limited time.": "هذا الرابط صالح لفترة محدودة فقط.", - "Thank you,": "شكراً لك،", - "KAAUH ATS Team": "فريق نظام توظيف جامعة نورة", - "Confirm Email Address": "تأكيد عنوان البريد الإلكتروني", - "Account Verification": "التحقق من الحساب", - "Verify your email to secure your account and unlock full features.": "تحقق من بريدك الإلكتروني لتأمين حسابك وإلغاء قفل جميع الميزات.", - "Confirm Your Email Address": "تأكيد عنوان بريدك الإلكتروني", - "Verification Failed": "فشل التحقق", - "The email confirmation link is expired or invalid.": "رابط تأكيد البريد الإلكتروني منتهي الصلاحية أو غير صالح.", - "Keep me signed in": "ابق مسجلاً للدخول", - "Return to Profile": "العودة إلى الملف الشخصي", - "Enter your e-mail address to reset your password.": "أدخل عنوان بريدك الإلكتروني لإعادة تعيين كلمة المرور.", - "Remember your password?": "تتذكر كلمة المرور؟", - "Log In": "تسجيل الدخول", - "Password Reset Sent": "تم إرسال إعادة تعيين كلمة المرور", - "Return to Login": "العودة إلى تسجيل الدخول", - "Please enter your new password below.": "يرجى إدخال كلمة المرور الجديدة أدناه.", - - # Common UI Elements - "Save": "حفظ", - "Cancel": "إلغاء", - "Delete": "حذف", - "Edit": "تحرير", - "View": "عرض", - "Create": "إنشاء", - "Update": "تحديث", - "Submit": "إرسال", - "Search": "بحث", - "Filter": "تصفية", - "Sort": "ترتيب", - "Export": "تصدير", - "Import": "استيراد", - "Download": "تنزيل", - "Upload": "رفع", - "Close": "إغلاق", - "Back": "رجوع", - "Next": "التالي", - "Previous": "السابق", - "First": "الأول", - "Last": "الأخير", - "Home": "الرئيسية", - "Dashboard": "لوحة التحكم", - "Profile": "الملف الشخصي", - "Settings": "الإعدادات", - "Help": "المساعدة", - "About": "حول", - "Contact": "اتصال", - "Logout": "تسجيل الخروج", - "Login": "تسجيل الدخول", - "Register": "التسجيل", - "Sign Up": "إنشاء حساب", - "Sign In": "تسجيل الدخول", - - # Status Messages - "Active": "نشط", - "Inactive": "غير نشط", - "Pending": "في الانتظار", - "Completed": "مكتمل", - "Failed": "فشل", - "Success": "نجح", - "Error": "خطأ", - "Warning": "تحذير", - "Info": "معلومات", - "Loading": "جاري التحميل", - "Processing": "جاري المعالجة", - "Ready": "جاهز", - "Not Ready": "غير جاهز", - "Available": "متاح", - "Unavailable": "غير متاح", - "Online": "متصل", - "Offline": "غير متصل", - "Connected": "متصل", - "Disconnected": "منقطع", - "Enabled": "مفعل", - "Disabled": "معطل", - "Required": "مطلوب", - "Optional": "اختياري", - "Yes": "نعم", - "No": "لا", - "True": "صحيح", - "False": "خطأ", - "On": "مفعل", - "Off": "معطل", - "Open": "مفتوح", - "Closed": "مغلق", - "Locked": "مقفل", - "Unlocked": "غير مقفل", - - # Form Fields - "Name": "الاسم", - "Email": "البريد الإلكتروني", - "Phone": "الهاتف", - "Address": "العنوان", - "City": "المدينة", - "Country": "البلد", - "State": "الولاية", - "Zip Code": "الرمز البريدي", - "Password": "كلمة المرور", - "Confirm Password": "تأكيد كلمة المرور", - "Username": "اسم المستخدم", - "First Name": "الاسم الأول", - "Last Name": "اسم العائلة", - "Full Name": "الاسم الكامل", - "Company": "الشركة", - "Position": "المنصب", - "Department": "القسم", - "Title": "العنوان", - "Description": "الوصف", - "Comments": "التعليقات", - "Notes": "ملاحظات", - "Date": "التاريخ", - "Time": "الوقت", - "Start Date": "تاريخ البدء", - "End Date": "تاريخ الانتهاء", - "Created": "تم الإنشاء", - "Modified": "تم التعديل", - "Updated": "تم التحديث", - - # Messages - "Please select an option": "يرجى اختيار خيار", - "This field is required": "هذا الحقل مطلوب", - "Invalid email address": "عنوان بريد إلكتروني غير صالح", - "Password must be at least 8 characters": "يجب أن تكون كلمة المرور 8 أحرف على الأقل", - "Passwords do not match": "كلمات المرور غير متطابقة", - "Email already exists": "البريد الإلكتروني موجود بالفعل", - "User not found": "المستخدم غير موجود", - "Invalid credentials": "بيانات الاعتماد غير صالحة", - "Access denied": "الوصول مرفوض", - "Permission denied": "الإذن مرفوض", - "Operation successful": "تمت العملية بنجاح", - "Operation failed": "فشلت العملية", - "Data saved successfully": "تم حفظ البيانات بنجاح", - "Data deleted successfully": "تم حذف البيانات بنجاح", - "Are you sure you want to delete this item?": "هل أنت متأكد من أنك تريد حذف هذا العنصر؟", - "This action cannot be undone": "لا يمكن التراجع عن هذا الإجراء", - - # Navigation - "Menu": "القائمة", - "Home": "الرئيسية", - "Dashboard": "لوحة التحكم", - "Profile": "الملف الشخصي", - "Settings": "الإعدادات", - "Admin": "المسؤول", - "Users": "المستخدمون", - "Reports": "التقارير", - "Analytics": "التحليلات", - "Messages": "الرسائل", - "Notifications": "الإشعارات", - "Tasks": "المهام", - "Calendar": "التقويم", - "Documents": "المستندات", - "Files": "الملفات", - "Media": "الوسائط", - "Help": "المساعدة", - "Support": "الدعم", - "FAQ": "الأسئلة الشائعة", - "Terms": "الشروط", - "Privacy": "الخصوصية", - "Legal": "قانوني", - - # Common Actions - "Add": "إضافة", - "Remove": "إزالة", - "Edit": "تحرير", - "Update": "تحديث", - "Delete": "حذف", - "View": "عرض", - "Show": "إظهار", - "Hide": "إخفاء", - "Enable": "تفعيل", - "Disable": "تعطيل", - "Activate": "تنشيط", - "Deactivate": "إلغاء تنشيط", - "Approve": "موافقة", - "Reject": "رفض", - "Accept": "قبول", - "Decline": "رفض", - "Send": "إرسال", - "Receive": "استلام", - "Download": "تنزيل", - "Upload": "رفع", - "Import": "استيراد", - "Export": "تصدير", - "Print": "طباعة", - "Copy": "نسخ", - "Move": "نقل", - "Rename": "إعادة تسمية", - "Share": "مشاركة", - "Subscribe": "اشتراك", - "Unsubscribe": "إلغاء الاشتراك", - "Follow": "متابعة", - "Unfollow": "إلغاء المتابعة", - "Like": "إعجاب", - "Unlike": "إلغاء الإعجاب", - "Comment": "تعليق", - "Rate": "تقييم", - "Review": "مراجعة", - "Bookmark": "إشارة مرجعية", - "Favorite": "مفضل", - "Archive": "أرشفة", - "Restore": "استعادة", - "Backup": "نسخ احتياطي", - "Recover": "استرداد", - "Reset": "إعادة تعيين", - "Refresh": "تحديث", - "Reload": "إعادة تحميل", - "Sync": "مزامنة", - "Connect": "اتصال", - "Disconnect": "قطع الاتصال", - "Link": "ربط", - "Unlink": "فك الربط", - "Attach": "إرفاق", - "Detach": "فصل", - "Merge": "دمج", - "Split": "تقسيم", - "Combine": "دمج", - "Separate": "فصل", - "Group": "تجميع", - "Ungroup": "فك التجميع", - "Sort": "ترتيب", - "Filter": "تصفية", - "Search": "بحث", - "Find": "بحث", - "Replace": "استبدال", - "Clear": "مسح", - "Clean": "تنظيف", - "Empty": "فارغ", - "Full": "ممتلئ", - "All": "الكل", - "None": "لا شيء", - "Some": "بعض", - "Any": "أي", - "Other": "آخر", - "More": "المزيد", - "Less": "أقل", - "New": "جديد", - "Old": "قديم", - "Recent": "الحديث", - "Latest": "الأحدث", - "Previous": "السابق", - "Next": "التالي", - "First": "الأول", - "Last": "الأخير", - "Current": "الحالي", - "Today": "اليوم", - "Yesterday": "أمس", - "Tomorrow": "غداً", - "This week": "هذا الأسبوع", - "Last week": "الأسبوع الماضي", - "Next week": "الأسبوع القادم", - "This month": "هذا الشهر", - "Last month": "الشهر الماضي", - "Next month": "الشهر القادم", - "This year": "هذا العام", - "Last year": "العام الماضي", - "Next year": "العام القادم", -} - -def translate_batch_file(batch_file_path): - """ - Translate a single batch file and return the translations - """ - translations = {} - - with open(batch_file_path, 'r', encoding='utf-8') as f: - content = f.read() - - lines = content.split('\n') - i = 0 - while i < len(lines): - line = lines[i].strip() - if line.startswith('msgid: "'): - # Extract msgid content, removing the extra quote at the beginning - msgid = line[8:-1] # Extract msgid content (skip the extra quote) - - # Skip empty msgid or already Arabic text - if not msgid or msgid.strip() == "" or is_arabic_text(msgid): - i += 1 - continue - - # Find translation - translation = TRANSLATIONS.get(msgid, "") - if translation: - translations[msgid] = translation - print(f"✓ Found translation: '{msgid}' -> '{translation}'") - else: - print(f"✗ No translation found: '{msgid}'") - i += 1 - - return translations - -def is_arabic_text(text): - """Check if text contains Arabic characters""" - arabic_chars = set('ابتثجحخدذرزسشصضطظعغفقكلمنهويءآأؤإئابةة') - return any(char in arabic_chars for char in text) - -def process_all_batches(): - """ - Process all batch files and create a comprehensive translation file - """ - all_translations = {} - - # Process batches 02-35 (batch 01 already done) - for batch_num in range(2, 36): - batch_file = f"translation_batch_{batch_num:02d}.txt" - if os.path.exists(batch_file): - print(f"\n=== Processing {batch_file} ===") - batch_translations = translate_batch_file(batch_file) - all_translations.update(batch_translations) - print(f"Found {len(batch_translations)} translations in {batch_file}") - else: - print(f"⚠️ {batch_file} not found") - - return all_translations - -def create_translation_script(all_translations): - """ - Create a script to apply all translations to the main django.po file - """ - script_content = '''#!/usr/bin/env python3 -""" -Script to apply all batch translations to the main django.po file -""" - -import re - -def apply_all_translations(): - """ - Apply all translations to the main django.po file - """ - # All translations from batches 02-35 - translations = { -''' - - for english, arabic in all_translations.items(): - script_content += f' "{english}": "{arabic}",\n' - - script_content += ''' } - - main_po_file = "locale/ar/LC_MESSAGES/django.po" - - # Read the main django.po file - with open(main_po_file, 'r', encoding='utf-8') as f: - main_content = f.read() - - # Apply translations to main file - updated_content = main_content - applied_count = 0 - - for english, arabic in translations.items(): - # Pattern to find msgid followed by empty msgstr - pattern = rf'(msgid "{re.escape(english)}"\\s*\\nmsgstr) ""' - replacement = rf'\\1 "{arabic}"' - - if re.search(pattern, updated_content): - updated_content = re.sub(pattern, replacement, updated_content) - applied_count += 1 - print(f"✓ Applied: '{english}' -> '{arabic}'") - else: - print(f"✗ Not found: '{english}'") - - # Write updated content back to main file - with open(main_po_file, 'w', encoding='utf-8') as f: - f.write(updated_content) - - print(f"\\nApplied {applied_count} translations to {main_po_file}") - return applied_count - -def main(): - """Main function to apply all translations""" - print("Applying all batch translations to main django.po file...") - applied_count = apply_all_translations() - - if applied_count > 0: - print(f"\\n✅ Successfully applied {applied_count} translations!") - print("Next steps:") - print("1. Run: python manage.py compilemessages") - print("2. Test the translations in the application") - else: - print("\\n❌ No translations were applied.") - -if __name__ == "__main__": - main() -''' - - with open("apply_all_translations.py", 'w', encoding='utf-8') as f: - f.write(script_content) - - print("Created apply_all_translations.py script") - -def main(): - """Main function to process all batches""" - print("🚀 Starting comprehensive translation process...") - - # Process all batch files - all_translations = process_all_batches() - - print(f"\n📊 Summary:") - print(f"Total translations found: {len(all_translations)}") - - if all_translations: - # Create the application script - create_translation_script(all_translations) - - print(f"\n✅ Translation processing complete!") - print(f"📝 Created apply_all_translations.py with {len(all_translations)} translations") - print(f"\n🎯 Next steps:") - print(f"1. Run: python apply_all_translations.py") - print(f"2. Run: python manage.py compilemessages") - print(f"3. Test the translations in the application") - else: - print("\n❌ No translations found to process.") - -if __name__ == "__main__": - main() diff --git a/translate_batch_01.py b/translate_batch_01.py deleted file mode 100644 index aa7cf53..0000000 --- a/translate_batch_01.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to add Arabic translations for batch 01 -""" - -# Arabic translations for batch 01 -translations = { - "": "", # Line 7 - empty string, keep as is - "Website": "الموقع الإلكتروني", - "Admin Notes": "ملاحظات المسؤول", - "Save Assignment": "حفظ التكليف", - "Assignment": "التكليف", - "Expires At": "ينتهي في", - "Access Token": "رمز الوصول", - "Subject": "الموضوع", - "Recipients": "المستلمون", - "Internal staff involved in the recruitment process for this job": "الموظفون الداخليون المشاركون في عملية التوظيف لهذه الوظيفة", - "External Participant": "مشارك خارجي", - "External participants involved in the recruitment process for this job": "المشاركون الخارجيون المشاركون في عملية التوظيف لهذه الوظيفة", - "Reason for canceling the job posting": "سبب إلغاء نشر الوظيفة", - "Name of person who cancelled this job": "اسم الشخص الذي ألغى هذه الوظيفة", - "Hired": "تم التوظيف", - "Author": "المؤلف", - "Endpoint URL for sending candidate data (for outbound sync)": "عنوان URL لنقطة النهاية لإرسال بيانات المرشح (للمزامنة الصادرة)", - "HTTP method for outbound sync requests": "طريقة HTTP لطلبات المزامنة الصادرة", - "HTTP method for connection testing": "طريقة HTTP لاختبار الاتصال", - "Custom Headers": "رؤوس مخصصة", - "JSON object with custom HTTP headers for sync requests": "كائن JSON يحتوي على رؤوس HTTP مخصصة لطلبات المزامنة", - "Supports Outbound Sync": "يدعم المزامنة الصادرة", - "Whether this source supports receiving candidate data from ATS": "ما إذا كان هذا المصدر يدعم استقبال بيانات المرشح من نظام تتبع المتقدمين", - "Expired": "منتهي الصلاحية", - "Maximum candidates agency can submit for this job": "الحد الأقصى للمرشحين الذين يمكن للوكالة تقديمهم لهذه الوظيفة" -} - -def update_batch_file(): - """Update the batch file with Arabic translations""" - input_file = "translation_batch_01.txt" - output_file = "translation_batch_01_completed.txt" - - with open(input_file, 'r', encoding='utf-8') as f: - content = f.read() - - # Replace empty msgstr with translations - for english, arabic in translations.items(): - if english: # Skip empty string - # Find the pattern and replace - old_pattern = f'msgid: "{english}"\nmsgstr: ""\n\nArabic Translation: \nmsgstr: ""' - new_pattern = f'msgid: "{english}"\nmsgstr: ""\n\nArabic Translation: \nmsgstr: "{arabic}"' - content = content.replace(old_pattern, new_pattern) - - with open(output_file, 'w', encoding='utf-8') as f: - f.write(content) - - print(f"Updated batch file saved as: {output_file}") - print("Arabic translations added for batch 01") - -if __name__ == "__main__": - update_batch_file() diff --git a/translation_batch_01.txt b/translation_batch_01.txt deleted file mode 100644 index 7032a25..0000000 --- a/translation_batch_01.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 01 === -Translations 1-25 of 843 -============================================================ - -Line 7: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1041: -msgid: "Number of candidates submitted so far" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1052: -msgid: "Deadline for agency to submit candidates" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1068: -msgid: "Original deadline before extensions" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1078: -msgid: "Agency Job Assignment" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1082: -msgid: "Agency Job Assignments" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1086: -msgid: "Deadline date must be in the future" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1090: -msgid: "Maximum candidates must be greater than 0" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1094: -msgid: "Candidates submitted cannot exceed maximum candidates" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1098: -msgid: "Unique Token" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1108: -msgid: "Password for agency access" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1119: -msgid: "When this access link expires" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1124: -msgid: "Last Accessed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1128: -msgid: "Access Count" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1132: -msgid: "Agency Access Link" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1136: -msgid: "Agency Access Links" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1140: -msgid: "Expiration date must be in the future" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1190: -msgid: "In-App" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1194: -msgid: "Pending" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1198: -msgid: "Sent" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1202: -msgid: "Read" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1206: -msgid: "Retrying" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1210: -msgid: "Recipient" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1214: -msgid: "Notification Message" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1218: -msgid: "Notification Type" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_01_completed.txt b/translation_batch_01_completed.txt deleted file mode 100644 index 517cd48..0000000 --- a/translation_batch_01_completed.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 01 === -Translations 1-25 of 867 -============================================================ - -Line 7: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 320: -msgid: "Website" -msgstr: "" - -Arabic Translation: -msgstr: "الموقع الإلكتروني" ----------------------------------------- - -Line 406: -msgid: "Admin Notes" -msgstr: "" - -Arabic Translation: -msgstr: "ملاحظات المسؤول" ----------------------------------------- - -Line 410: -msgid: "Save Assignment" -msgstr: "" - -Arabic Translation: -msgstr: "حفظ التكليف" ----------------------------------------- - -Line 416: -msgid: "Assignment" -msgstr: "" - -Arabic Translation: -msgstr: "التكليف" ----------------------------------------- - -Line 422: -msgid: "Expires At" -msgstr: "" - -Arabic Translation: -msgstr: "ينتهي في" ----------------------------------------- - -Line 449: -msgid: "Access Token" -msgstr: "" - -Arabic Translation: -msgstr: "رمز الوصول" ----------------------------------------- - -Line 474: -msgid: "Subject" -msgstr: "" - -Arabic Translation: -msgstr: "الموضوع" ----------------------------------------- - -Line 485: -msgid: "Recipients" -msgstr: "" - -Arabic Translation: -msgstr: "المستلمون" ----------------------------------------- - -Line 525: -msgid: "Internal staff involved in the recruitment process for this job" -msgstr: "" - -Arabic Translation: -msgstr: "الموظفون الداخليون المشاركون في عملية التوظيف لهذه الوظيفة" ----------------------------------------- - -Line 529: -msgid: "External Participant" -msgstr: "" - -Arabic Translation: -msgstr: "مشارك خارجي" ----------------------------------------- - -Line 533: -msgid: "External participants involved in the recruitment process for this job" -msgstr: "" - -Arabic Translation: -msgstr: "المشاركون الخارجيون المشاركون في عملية التوظيف لهذه الوظيفة" ----------------------------------------- - -Line 541: -msgid: "Reason for canceling the job posting" -msgstr: "" - -Arabic Translation: -msgstr: "سبب إلغاء نشر الوظيفة" ----------------------------------------- - -Line 551: -msgid: "Name of person who cancelled this job" -msgstr: "" - -Arabic Translation: -msgstr: "اسم الشخص الذي ألغى هذه الوظيفة" ----------------------------------------- - -Line 595: -msgid: "Hired" -msgstr: "" - -Arabic Translation: -msgstr: "تم التوظيف" ----------------------------------------- - -Line 782: -msgid: "Author" -msgstr: "" - -Arabic Translation: -msgstr: "المؤلف" ----------------------------------------- - -Line 877: -msgid: "Endpoint URL for sending candidate data (for outbound sync)" -msgstr: "" - -Arabic Translation: -msgstr: "عنوان URL لنقطة النهاية لإرسال بيانات المرشح (للمزامنة الصادرة)" ----------------------------------------- - -Line 887: -msgid: "HTTP method for outbound sync requests" -msgstr: "" - -Arabic Translation: -msgstr: "طريقة HTTP لطلبات المزامنة الصادرة" ----------------------------------------- - -Line 897: -msgid: "HTTP method for connection testing" -msgstr: "" - -Arabic Translation: -msgstr: "طريقة HTTP لاختبار الاتصال" ----------------------------------------- - -Line 901: -msgid: "Custom Headers" -msgstr: "" - -Arabic Translation: -msgstr: "رؤوس مخصصة" ----------------------------------------- - -Line 905: -msgid: "JSON object with custom HTTP headers for sync requests" -msgstr: "" - -Arabic Translation: -msgstr: "كائن JSON يحتوي على رؤوس HTTP مخصصة لطلبات المزامنة" ----------------------------------------- - -Line 909: -msgid: "Supports Outbound Sync" -msgstr: "" - -Arabic Translation: -msgstr: "يدعم المزامنة الصادرة" ----------------------------------------- - -Line 913: -msgid: "Whether this source supports receiving candidate data from ATS" -msgstr: "" - -Arabic Translation: -msgstr: "ما إذا كان هذا المصدر يدعم استقبال بيانات المرشح من نظام تتبع المتقدمين" ----------------------------------------- - -Line 1026: -msgid: "Expired" -msgstr: "" - -Arabic Translation: -msgstr: "منتهي الصلاحية" ----------------------------------------- - -Line 1030: -msgid: "Maximum candidates agency can submit for this job" -msgstr: "" - -Arabic Translation: -msgstr: "الحد الأقصى للمرشحين الذين يمكن للوكالة تقديمهم لهذه الوظيفة" ----------------------------------------- - diff --git a/translation_batch_02.txt b/translation_batch_02.txt deleted file mode 100644 index 1e3053d..0000000 --- a/translation_batch_02.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 02 === -Translations 26-50 of 843 -============================================================ - -Line 1234: -msgid: "The date and time this notification is scheduled to be sent." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1238: -msgid: "Send Attempts" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1275: -msgid: "Failed to start the job posting process. Please try again." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1291: -msgid: "Model Changes (CRUD)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1295: -msgid: "You don't have permission to view this page." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1300: -msgid: "Account Inactive" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1307: -msgid: "جامعة الأميرة نورة بنت عبدالرحمن الأكاديمية" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1314: -msgid: "ومستشفى الملك عبدالله بن عبدالعزيز التخصصي" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1321: -msgid: "Princess Nourah bint Abdulrahman University" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1334: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1339: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1367: -msgid: "Manage your personal details and security." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1399: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1405: -msgid: "Primary" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1409: -msgid: "Verified" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1413: -msgid: "Unverified" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1417: -msgid: "Make Primary" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1428: -msgid: "Remove" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1438: -msgid: "Add Email Address" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1451: -msgid: "Hello," -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1456: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1463: -msgid: "Confirm My KAAUH ATS Email" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1468: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1474: -msgid: "Alternatively, copy and paste this link into your browser:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1479: -msgid: "Password Reset Request" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_03.txt b/translation_batch_03.txt deleted file mode 100644 index a40b9a1..0000000 --- a/translation_batch_03.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 03 === -Translations 51-75 of 843 -============================================================ - -Line 1484: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1491: -msgid: "Click Here to Reset Your Password" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1496: -msgid: "This link is only valid for a limited time." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1501: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1508: -msgid: "Thank you," -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1513: -msgid: "KAAUH ATS Team" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1518: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1524: -msgid: "Confirm Email Address" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1528: -msgid: "Account Verification" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1532: -msgid: "Verify your email to secure your account and unlock full features." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1536: -msgid: "Confirm Your Email Address" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1541: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1553: -msgid: "Verification Failed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1557: -msgid: "The email confirmation link is expired or invalid." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1561: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1603: -msgid: "Keep me signed in" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1649: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1654: -msgid: "Return to Profile" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1658: -msgid: "Enter your e-mail address to reset your password." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1674: -msgid: "Remember your password?" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1678: -msgid: "Log In" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1683: -msgid: "Password Reset Sent" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1695: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1701: -msgid: "Return to Login" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1712: -msgid: "Please enter your new password below." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_04.txt b/translation_batch_04.txt deleted file mode 100644 index 19660e1..0000000 --- a/translation_batch_04.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 04 === -Translations 76-100 of 843 -============================================================ - -Line 1716: -msgid: "You can then log in." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1720: -msgid: "Password Reset Failed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1724: -msgid: "The password reset link is invalid or has expired." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1728: -msgid: "Request New Reset Link" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1744: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1756: -msgid: "Verify Your Email Address" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1768: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1774: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1780: -msgid: "Change or Resend Email" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1789: -msgid: "Django site admin" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1799: -msgid: "KAAUH Agency Portal" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1807: -msgid: "kaauh logo green bg" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1827: -msgid: "Logout" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1941: -msgid: "Ready to Apply?" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1945: -msgid: "Review the job details, then apply below." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1950: -msgid: "Apply for this Position" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1969: -msgid: "Not specified" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 1992: -msgid: "JOB ID:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2062: -msgid: "Submission Metadata" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2066: -msgid: "Submission ID:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2077: -msgid: "Form:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2099: -msgid: "Field Property" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2133: -msgid: "Field Required" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2141: -msgid: "Yes" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2149: -msgid: "No" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_05.txt b/translation_batch_05.txt deleted file mode 100644 index 73aa83c..0000000 --- a/translation_batch_05.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 05 === -Translations 101-125 of 843 -============================================================ - -Line 2153: -msgid: "No response fields were found for this submission." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2157: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2180: -msgid: "Submissions" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2184: -msgid: "All Submissions Table" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2188: -msgid: "All Submissions for" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2193: -msgid: "Submission ID" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2232: -msgid: "Page" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2238: -msgid: "of" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2250: -msgid: "There are no submissions for this form template yet." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2254: -msgid: "Submissions for" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2460: -msgid: "Careers" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2473: -msgid: "AI Score" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2484: -msgid: "Top Keywords" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2488: -msgid: "Experience" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2492: -msgid: "years" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2496: -msgid: "Recent Role:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2500: -msgid: "Skills" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2504: -msgid: "Soft Skills:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2508: -msgid: "Industry Match:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2513: -msgid: "Recommendation" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2518: -msgid: "Strengths" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2523: -msgid: "Weaknesses" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2528: -msgid: "Criteria Assessment" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2541: -msgid: "Met" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2547: -msgid: "Not Met" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_06.txt b/translation_batch_06.txt deleted file mode 100644 index 5491588..0000000 --- a/translation_batch_06.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 06 === -Translations 126-150 of 843 -============================================================ - -Line 2558: -msgid: "Screening Rating" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2563: -msgid: "Language Fluency" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2569: -msgid: "Success" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2574: -msgid: "Copied \"%(text)s\" to clipboard!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2584: -msgid: "System Audit Logs" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2588: -msgid: "Viewing Logs" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2592: -msgid: "Displaying" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2596: -msgid: "total records." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2614: -msgid: "User" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2618: -msgid: "Model" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2622: -msgid: "Object PK" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2648: -msgid: "Path" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2652: -msgid: "CREATE" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2656: -msgid: "UPDATE" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2660: -msgid: "DELETE" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2664: -msgid: "Login" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2674: -msgid: "No logs found for this section or the database is empty." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2685: -msgid: "Email will be sent to all selected recipients" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2700: -msgid: "Loading..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2704: -msgid: "Sending email..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2708: -msgid: "Sending..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2727: -msgid: "Meeting Details (will appear after scheduling):" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2743: -msgid: "Click here to join meeting" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2772: -msgid: "Processing..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2776: -msgid: "An unknown error occurred." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_07.txt b/translation_batch_07.txt deleted file mode 100644 index 35e4734..0000000 --- a/translation_batch_07.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 07 === -Translations 151-175 of 843 -============================================================ - -Line 2780: -msgid: "An error occurred while processing your request." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2788: -msgid: "Bulk Interview Scheduling" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2792: -msgid: "Configure time slots for:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2813: -msgid: "Candidates to Schedule (Hold Ctrl/Cmd to select multiple)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2868: -msgid: "Thank You!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2872: -msgid: "Your application has been submitted successfully" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2876: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2883: -msgid: "Return to Job Listings" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2887: -msgid: "Job ID#" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 2919: -msgid: "Link" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3005: -msgid: "Hashtags (For Promotion/Search on Linkedin)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3065: -msgid: "Search by name, email, phone, or stage..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3069: -msgid: "Filter Results" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3074: -msgid: "Clear Filters" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3167: -msgid: "JOB ID: " -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3171: -msgid: "Share Public Link" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3177: -msgid: "Copied!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3215: -msgid: "Tracking" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3249: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3269: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3330: -msgid: "Candidate Categories & Scores" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3334: -msgid: "Key Performance Indicators" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3338: -msgid: "Avg. AI Score" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3343: -msgid: "High Potential" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3353: -msgid: "Avg. Exam Review" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_08.txt b/translation_batch_08.txt deleted file mode 100644 index cdab7ba..0000000 --- a/translation_batch_08.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 08 === -Translations 176-200 of 843 -============================================================ - -Line 3357: -msgid: "Vacancy Fill Rate" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3373: -msgid: "Status form not available. Please check your view." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3380: -msgid: "Save Changes" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3396: -msgid: "Search by Title or Department" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3425: -msgid: "Archived" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3440: -msgid: "Clear" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3450: -msgid: "Max Apps" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3481: -msgid: "All" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3486: -msgid: "Screened" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3496: -msgid: "Form" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3500: -msgid: "N/A" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3520: -msgid: "Create your first job posting to get started or adjust your filters." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3554: -msgid: "Search by Topic" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3596: -msgid: "Create your first meeting or adjust your filters." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3641: -msgid: "minutes" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3655: -msgid: "Assigned Participants" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3665: -msgid: "External Participants" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3669: -msgid: "System User" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3673: -msgid: "Comments" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3696: -msgid: "No comments yet. Be the first to comment!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3712: -msgid: "You must be logged in to add a comment." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3730: -msgid: "You are updating the existing meeting schedule." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3748: -msgid: "Candidate has upcoming interviews. Updating existing schedule." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3752: -msgid: "e.g., Technical Screening, HR Interview" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3762: -msgid: "Save" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_09.txt b/translation_batch_09.txt deleted file mode 100644 index 52a9db0..0000000 --- a/translation_batch_09.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 09 === -Translations 201-225 of 843 -============================================================ - -Line 3858: -msgid: "This participant is not currently assigned to any job." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3862: -msgid: "Metadata" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3873: -msgid: "at" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3877: -msgid: "Total Assigned Jobs" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3896: -msgid: "This action cannot be undone." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3913: -msgid: "Search by Name or Email" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3917: -msgid: "Filter by Assigned Job" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3935: -msgid: "Create your first participant record or adjust your filters." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3952: -msgid: "Secure access link for agency candidate submissions" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3984: -msgid: "Access Credentials" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 3996: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4002: -msgid: "Usage Statistics" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4006: -msgid: "Total Accesses" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4010: -msgid: "Never" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4014: -msgid: "View Assignment" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4032: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4045: -msgid: "Generate a secure access link for agency to submit candidates" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4057: -msgid: "Select the agency job assignment" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4061: -msgid: "When will this access link expire?" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4065: -msgid: "Max Submissions" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4069: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4074: -msgid: "Whether this access link is currently active" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4078: -msgid: "Notes" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4088: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4094: -msgid: "Assignment Details and Management" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_10.txt b/translation_batch_10.txt deleted file mode 100644 index 3b3b778..0000000 --- a/translation_batch_10.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 10 === -Translations 226-250 of 843 -============================================================ - -Line 4099: -msgid: "Edit Assignment" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4166: -msgid: "Submission Progress" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4194: -msgid: "Recent Messages" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4201: -msgid: "From" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4207: -msgid: "New" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4218: -msgid: "Extend Assignment Deadline" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4234: -msgid: "Token copied to clipboard!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4238: -msgid: "Assign a job to an external hiring agency" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4242: -msgid: "Maximum number of candidates the agency can submit" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4246: -msgid: "Date and time when submission period ends" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4263: -msgid: "Total Assignments:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4267: -msgid: "New Assignment" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4271: -msgid: "Search by agency or job title..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4281: -msgid: "Assignments pagination" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4291: -msgid: "Create your first agency assignment to get started." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4295: -msgid: "Create Assignment" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4306: -msgid: "You are about to delete a hiring agency. This action cannot be undone." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4316: -msgid: "Warning: This action cannot be undone!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4320: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4326: -msgid: "Agency to be Deleted" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4336: -msgid: "candidate(s) are associated with this agency." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4340: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4346: -msgid: "What will happen when you delete this agency?" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4350: -msgid: "The agency profile and all its information will be permanently deleted" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4360: -msgid: "Associated candidates will lose their agency reference" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_11.txt b/translation_batch_11.txt deleted file mode 100644 index 09f595b..0000000 --- a/translation_batch_11.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 11 === -Translations 251-275 of 843 -============================================================ - -Line 4364: -msgid: "Historical data linking candidates to this agency will be lost" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4368: -msgid: "This action cannot be undone under any circumstances" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4372: -msgid: "Type the agency name to confirm deletion:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4376: -msgid: "This is required to prevent accidental deletions." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4380: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4386: -msgid: "Delete Agency Permanently" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4404: -msgid: "Hiring Agency Details and Candidate Management" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4408: -msgid: "Assign job" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4467: -msgid: "This agency hasn't submitted any candidates yet." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4477: -msgid: "Total" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4487: -msgid: "Visit Website" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4509: -msgid: "Update the hiring agency information below." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4513: -msgid: "Fill in the details to add a new hiring agency." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4517: -msgid: "Please correct the errors below:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4531: -msgid: "Quick Tips" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4535: -msgid: "Provide accurate contact information for better communication" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4539: -msgid: "Include a valid website URL if available" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4543: -msgid: "Add a detailed description to help identify the agency" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4547: -msgid: "All fields marked with * are required" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4575: -msgid: "Search by name, contact person, email, or country..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4579: -msgid: "Agency pagination" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4589: -msgid: "No hiring agencies have been added yet." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4593: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4644: -msgid: "Submit candidates using the form above to get started." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4662: -msgid: "Assignment Info" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_12.txt b/translation_batch_12.txt deleted file mode 100644 index 118b18b..0000000 --- a/translation_batch_12.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 12 === -Translations 276-300 of 843 -============================================================ - -Line 4666: -msgid: "Days Remaining" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4671: -msgid: "days" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4675: -msgid: "Submission Rate" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4679: -msgid: "Send Message to Admin" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4683: -msgid: "Priority" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4687: -msgid: "Low" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4691: -msgid: "Medium" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4695: -msgid: "High" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4718: -msgid: "Error loading candidate data. Please try again." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4723: -msgid: "Error updating candidate. Please try again." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4728: -msgid: "Error removing candidate. Please try again." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4739: -msgid: "Welcome back" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4743: -msgid: "Total Assignments" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4747: -msgid: "Active Assignments" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4764: -msgid: "Your Job Assignments" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4768: -msgid: "assignments" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4772: -msgid: "days left" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4776: -msgid: "days overdue" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4780: -msgid: "Submissions Closed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4784: -msgid: "No Job Assignments Found" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4788: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4794: -msgid: "Agency Portal Login" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4804: -msgid: "Enter the access token provided by the hiring organization" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4808: -msgid: "Enter the password for this access token" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4812: -msgid: "Access Portal" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_13.txt b/translation_batch_13.txt deleted file mode 100644 index cdde206..0000000 --- a/translation_batch_13.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 13 === -Translations 301-325 of 843 -============================================================ - -Line 4816: -msgid: "Need Help?" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4826: -msgid: "Reach out to your hiring contact" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4836: -msgid: "View user guides and tutorials" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4840: -msgid: "Security Notice" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4844: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4850: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4856: -msgid: "Please enter your access token." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4860: -msgid: "Please enter your password." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4876: -msgid: "Days Remaining:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4927: -msgid: "Click to upload or drag and drop" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4931: -msgid: "Accepted formats: PDF, DOC, DOCX (Maximum 5MB)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4935: -msgid: "Remove File" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4939: -msgid: "Additional Notes" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4943: -msgid: "Notes (Optional)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4947: -msgid: "Any additional information about the candidate" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4951: -msgid: "Submitted candidates will be reviewed by the hiring team." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4961: -msgid: "This assignment has expired. Submissions are no longer accepted." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4965: -msgid: "Maximum candidate limit reached for this assignment." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4969: -msgid: "This assignment is not currently active." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4973: -msgid: "Submitting candidate..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4977: -msgid: "Please wait while we process your submission." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4981: -msgid: "Please upload a PDF, DOC, or DOCX file." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 4985: -msgid: "File size must be less than 5MB." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5001: -msgid: "Error submitting candidate. Please try again." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5005: -msgid: "Network error. Please check your connection and try again." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_14.txt b/translation_batch_14.txt deleted file mode 100644 index 427a618..0000000 --- a/translation_batch_14.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 14 === -Translations 326-350 of 843 -============================================================ - -Line 5041: -msgid: "Journey Timeline" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5087: -msgid: "AI Analysis Report" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5091: -msgid: "Match Score" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5095: -msgid: "Category" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5099: -msgid: "Job Fit Narrative" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5109: -msgid: "Years of Experience:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5113: -msgid: "Most Recent Job Title:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5117: -msgid: "Experience Industry Match:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5121: -msgid: "Soft Skills Score:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5131: -msgid: "Minimum Requirements Met:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5135: -msgid: "Screening Stage Rating:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5139: -msgid: "Resume is being parsed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5143: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5175: -msgid: "View Resume AI Overview" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5179: -msgid: "Time to Hire: " -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5183: -msgid: "Unable to Parse Resume , click to retry" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5193: -msgid: "Candidates in Exam Stage:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5197: -msgid: "Export exam candidates to CSV" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5205: -msgid: "Export CSV" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5222: -msgid: "Screening Stage" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5232: -msgid: "No candidates are currently in the Exam stage for this job." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5236: -msgid: "Candidate Details & Exam Update" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5253: -msgid: "Successfully Hired:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5257: -msgid: "Sync hired candidates to external sources" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5268: -msgid: "Export hired candidates to CSV" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_15.txt b/translation_batch_15.txt deleted file mode 100644 index 503125f..0000000 --- a/translation_batch_15.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 15 === -Translations 351-375 of 843 -============================================================ - -Line 5272: -msgid: "Congratulations!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5276: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5303: -msgid: "Loading content..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5313: -msgid: "Syncing candidates..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5317: -msgid: "Syncing hired candidates..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5321: -msgid: "Please wait while we sync candidates to external sources." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5325: -msgid: "Syncing..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5329: -msgid: "An unexpected error occurred during sync." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5345: -msgid: "Successful:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5387: -msgid: "Sync task failed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5391: -msgid: "Failed to check sync status" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5395: -msgid: "Sync timed out after 5 minutes" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5399: -msgid: "Sync in progress..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5415: -msgid: "Candidates in Interview Stage:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5419: -msgid: "Export interview candidates to CSV" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5465: -msgid: "Minutes" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5469: -msgid: "No candidates are currently in the Interview stage for this job." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5475: -msgid: "Candidate Details / Bulk Action Form" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5479: -msgid: "Manage all participants" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5484: -msgid: "Users" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5488: -msgid: "Loading email form..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5500: -msgid: "Filter by Job" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5504: -msgid: "Major" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5538: -msgid: "Candidates in Offer Stage:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5542: -msgid: "Export offer candidates to CSV" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_16.txt b/translation_batch_16.txt deleted file mode 100644 index 7841ba3..0000000 --- a/translation_batch_16.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 16 === -Translations 376-400 of 843 -============================================================ - -Line 5546: -msgid: "To Hired" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5556: -msgid: "No candidates are currently in the Offer stage for this job." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5566: -msgid: "Job:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5570: -msgid: "Export screening candidates to CSV" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5574: -msgid: "AI Scoring & Top Candidate Filter" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5578: -msgid: "Min AI Score" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5582: -msgid: "Min Years Exp" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5586: -msgid: "Any Rating" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5614: -msgid: "Is Qualified?" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5618: -msgid: "Professional Category" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5622: -msgid: "Top 3 Skills" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5626: -msgid: "AI scoring.." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5630: -msgid: "No candidates match the current stage and filter criteria." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5666: -msgid: "Recruitment Analytics" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5670: -msgid: "Data Scope: " -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5674: -msgid: "Data Scope: All Jobs" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5684: -msgid: "All Jobs (Default View)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5688: -msgid: "Daily Candidate Applications Trend" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5698: -msgid: "Pipeline Funnel: " -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5702: -msgid: "Total Pipeline Funnel (All Jobs)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5706: -msgid: "Time-to-Hire Target Check" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5716: -msgid: "Top 5 Most Applied Jobs" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5738: -msgid: "Daily Applications (Last 30 Days)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5754: -msgid: "Mark All as Read" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5758: -msgid: "What this will do" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_17.txt b/translation_batch_17.txt deleted file mode 100644 index b199877..0000000 --- a/translation_batch_17.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 17 === -Translations 401-425 of 843 -============================================================ - -Line 5781: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5787: -msgid: "All caught up!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5791: -msgid: "You don't have any unread notifications to mark as read." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5795: -msgid: "Yes, Mark All as Read" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5812: -msgid: "Notification Preview" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5829: -msgid: "View notification details and manage your preferences" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5834: -msgid: "Mark as Read" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5839: -msgid: "Mark as Unread" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5867: -msgid: "Delivery Attempts" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5919: -msgid: "Mark All Read" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5930: -msgid: "Unread" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5934: -msgid: "All Types" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5938: -msgid: "Filter" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5942: -msgid: "Total Notifications" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5946: -msgid: "Email Notifications" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5956: -msgid: "Mark as read" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5960: -msgid: "Mark as unread" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5970: -msgid: "Notifications pagination" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5980: -msgid: "Try adjusting your filters to see more notifications." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5990: -msgid: "Name / Contact" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 5994: -msgid: "View Details and Score Breakdown" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6004: -msgid: "Move to Next Stage" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6008: -msgid: "Move to" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6024: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6031: -msgid: "Days" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_18.txt b/translation_batch_18.txt deleted file mode 100644 index defcbca..0000000 --- a/translation_batch_18.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 18 === -Translations 426-450 of 843 -============================================================ - -Line 6035: -msgid: "Target:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6039: -msgid: "Max Scale:" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6049: -msgid: "Home" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6065: -msgid: "All Active & Drafted Positions (Global)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6073: -msgid: "Currently Open Requisitions (Scoped)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6077: -msgid: "Total Profiles in Current Scope" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6081: -msgid: "Total Slots to be Filled (Scoped)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6091: -msgid: "Total Recruiters/Interviewers (Global)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6101: -msgid: "Total Job Posts Sent to LinkedIn (Global)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6105: -msgid: "New Apps (7 Days)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6109: -msgid: "Incoming applications last week" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6113: -msgid: "Avg. Apps per Job" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6117: -msgid: "Average Applications per Job (Scoped)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6127: -msgid: "Avg. Days (Application to Hired)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6131: -msgid: "Avg. Match Score" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6135: -msgid: "Average AI Score (Current Scope)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6140: -msgid: "Score ≥ 75%% Profiles" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6150: -msgid: "Scheduled Interviews (Current Week)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6154: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6166: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6172: -msgid: "Please select a date and time for the interview." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6193: -msgid: "Search by Title or Creator" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6253: -msgid: "Admin Settings Dashboard" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6257: -msgid: "Staff User List" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6273: -msgid: "Last Login" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_19.txt b/translation_batch_19.txt deleted file mode 100644 index 01b2cbc..0000000 --- a/translation_batch_19.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 19 === -Translations 451-475 of 843 -============================================================ - -Line 6277: -msgid: "Deactivate User" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6318: -msgid: "Manage email addresses" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6322: -msgid: "Security" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6338: -msgid: "Username" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6342: -msgid: "Date Joined" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6347: -msgid: "{editor}: Editing failed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6352: -msgid: "{editor}: Editing failed: {e}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6358: -msgid: "{text} {deprecated_message}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6381: -msgid: "DeprecationWarning: The command {name!r} is deprecated.{extra_message}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6386: -msgid: "Aborted!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6391: -msgid: "Commands" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6395: -msgid: "Missing command." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6399: -msgid: "No such command {name!r}." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6403: -msgid: "Value must be an iterable." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6418: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6425: -msgid: "env var: {var}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6432: -msgid: "default: {default}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6437: -msgid: "(dynamic)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6442: -msgid: "%(prog)s, version %(version)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6446: -msgid: "Show the version and exit." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6450: -msgid: "Show this message and exit." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6462: -msgid: "Try '{command} {option}' for help." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6467: -msgid: "Invalid value: {message}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6472: -msgid: "Invalid value for {param_hint}: {message}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6476: -msgid: "Missing argument" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_20.txt b/translation_batch_20.txt deleted file mode 100644 index 6739771..0000000 --- a/translation_batch_20.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 20 === -Translations 476-500 of 843 -============================================================ - -Line 6486: -msgid: "Missing parameter" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6491: -msgid: "Missing {param_type}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6496: -msgid: "Missing parameter: {param_name}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6501: -msgid: "No such option: {name}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6516: -msgid: "unknown error" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6520: -msgid: "Could not open file {filename!r}: {message}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6530: -msgid: "Argument {name!r} takes {nargs} values." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6534: -msgid: "Option {name!r} does not take a value." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6548: -msgid: "Shell completion is not supported for Bash versions older than 4.4." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6552: -msgid: "Couldn't detect Bash version, shell completion is not supported." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6562: -msgid: "Error: The value you entered was invalid." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6572: -msgid: "Error: The two entered values do not match." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6576: -msgid: "Error: invalid input" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6580: -msgid: "Press any key to continue..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6585: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6611: -msgid: "{value!r} is not a valid {number_type}." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6616: -msgid: "{value} is not in the range {range}." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6620: -msgid: "{value!r} is not a valid boolean. Recognized values: {states}" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6624: -msgid: "{value!r} is not a valid UUID." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6634: -msgid: "directory" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6638: -msgid: "path" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6642: -msgid: "{name} {filename!r} does not exist." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6646: -msgid: "{name} {filename!r} is a file." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6650: -msgid: "{name} {filename!r} is a directory." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6654: -msgid: "{name} {filename!r} is not readable." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_21.txt b/translation_batch_21.txt deleted file mode 100644 index 913f353..0000000 --- a/translation_batch_21.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 21 === -Translations 501-525 of 843 -============================================================ - -Line 6658: -msgid: "{name} {filename!r} is not writable." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6662: -msgid: "{name} {filename!r} is not executable." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6677: -msgid: "RoW" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6682: -msgid: "GLO" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6686: -msgid: "RoE" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6696: -msgid: "Site Maps" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6700: -msgid: "Static Files" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6712: -msgid: "…" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6716: -msgid: "That page number is not an integer" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6720: -msgid: "That page number is less than 1" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6724: -msgid: "That page contains no results" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6728: -msgid: "Enter a valid value." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6739: -msgid: "Enter a valid URL." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6743: -msgid: "Enter a valid integer." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6747: -msgid: "Enter a valid email address." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6752: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6757: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6767: -msgid: "Enter a valid %(protocol)s address." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6771: -msgid: "IPv4" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6776: -msgid: "IPv6" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6780: -msgid: "IPv4 or IPv6" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6784: -msgid: "Enter only digits separated by commas." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6789: -msgid: "Ensure this value is %(limit_value)s (it is %(show_value)s)." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6794: -msgid: "Ensure this value is less than or equal to %(limit_value)s." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6799: -msgid: "Ensure this value is greater than or equal to %(limit_value)s." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_22.txt b/translation_batch_22.txt deleted file mode 100644 index 5d17700..0000000 --- a/translation_batch_22.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 22 === -Translations 526-550 of 843 -============================================================ - -Line 6804: -msgid: "Ensure this value is a multiple of step size %(limit_value)s." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6809: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6889: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6895: -msgid: "Null characters are not allowed." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6901: -msgid: "and" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6906: -msgid: "%(model_name)s with this %(field_labels)s already exists." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6911: -msgid: "Constraint “%(name)s” is violated." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6916: -msgid: "Value %(value)r is not a valid choice." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6920: -msgid: "This field cannot be null." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6924: -msgid: "This field cannot be blank." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6929: -msgid: "%(model_name)s with this %(field_label)s already exists." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6936: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6942: -msgid: "Field of type: %(field_type)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6947: -msgid: "“%(value)s” value must be either True or False." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6952: -msgid: "“%(value)s” value must be either True, False, or None." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6956: -msgid: "Boolean (Either True or False)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6961: -msgid: "String (up to %(max_length)s)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6965: -msgid: "String (unlimited)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6976: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6984: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6990: -msgid: "Date (without time)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 6995: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7002: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7008: -msgid: "Date (with time)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7013: -msgid: "“%(value)s” value must be a decimal number." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_23.txt b/translation_batch_23.txt deleted file mode 100644 index b7e9d95..0000000 --- a/translation_batch_23.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 23 === -Translations 551-575 of 843 -============================================================ - -Line 7017: -msgid: "Decimal number" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7022: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7041: -msgid: "“%(value)s” value must be a float." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7052: -msgid: "“%(value)s” value must be an integer." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7062: -msgid: "Big (8 byte) integer" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7066: -msgid: "Small integer" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7084: -msgid: "“%(value)s” value must be either None, True or False." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7088: -msgid: "Boolean (Either True, False or None)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7092: -msgid: "Positive big integer" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7096: -msgid: "Positive integer" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7100: -msgid: "Positive small integer" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7105: -msgid: "Slug (up to %(max_length)s)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7109: -msgid: "Text" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7114: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7121: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7137: -msgid: "URL" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7141: -msgid: "Raw binary data" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7146: -msgid: "“%(value)s” is not a valid UUID." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7150: -msgid: "Universally unique identifier" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7154: -msgid: "Image" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7158: -msgid: "A JSON object" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7162: -msgid: "Value must be valid JSON." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7167: -msgid: "%(model)s instance with %(field)s %(value)r is not a valid choice." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7171: -msgid: "Foreign Key (type determined by related field)" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7175: -msgid: "One-to-one relationship" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_24.txt b/translation_batch_24.txt deleted file mode 100644 index 3d7a5b4..0000000 --- a/translation_batch_24.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 24 === -Translations 576-600 of 843 -============================================================ - -Line 7180: -msgid: "%(from)s-%(to)s relationship" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7185: -msgid: "%(from)s-%(to)s relationships" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7189: -msgid: "Many-to-many relationship" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7195: -msgid: ":?.!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7199: -msgid: "This field is required." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7223: -msgid: "Enter a valid date/time." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7234: -msgid: "The number of days must be between {min_days} and {max_days}." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7238: -msgid: "No file was submitted. Check the encoding type on the form." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7242: -msgid: "No file was submitted." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7246: -msgid: "The submitted file is empty." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7262: -msgid: "Please either submit a file or check the clear checkbox, not both." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7266: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7275: -msgid: "Select a valid choice. %(value)s is not one of the available choices." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7293: -msgid: "Enter a valid UUID." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7297: -msgid: "Enter a valid JSON." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7302: -msgid: ":" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7307: -msgid: "(Hidden field %(name)s) %(error)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7312: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7341: -msgid: "Order" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7346: -msgid: "Please correct the duplicate data for %(field)s." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7351: -msgid: "Please correct the duplicate data for %(field)s, which must be unique." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7356: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7362: -msgid: "Please correct the duplicate values below." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7366: -msgid: "The inline value did not match the parent instance." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7370: -msgid: "Select a valid choice. That choice is not one of the available choices." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_25.txt b/translation_batch_25.txt deleted file mode 100644 index a155a8d..0000000 --- a/translation_batch_25.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 25 === -Translations 601-625 of 843 -============================================================ - -Line 7375: -msgid: "“%(pk)s” is not a valid value." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7380: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7386: -msgid: "Currently" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7400: -msgid: "Unknown" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7405: -msgid: "yes,no,maybe" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7422: -msgid: "%s KB" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7427: -msgid: "%s MB" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7432: -msgid: "%s GB" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7437: -msgid: "%s TB" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7442: -msgid: "%s PB" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7446: -msgid: "p.m." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7450: -msgid: "a.m." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7454: -msgid: "PM" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7458: -msgid: "AM" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7462: -msgid: "midnight" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7466: -msgid: "noon" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7470: -msgid: "Monday" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7474: -msgid: "Tuesday" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7478: -msgid: "Wednesday" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7482: -msgid: "Thursday" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7486: -msgid: "Friday" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7490: -msgid: "Saturday" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7494: -msgid: "Sunday" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7498: -msgid: "Mon" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7502: -msgid: "Tue" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_26.txt b/translation_batch_26.txt deleted file mode 100644 index 9bfcfcd..0000000 --- a/translation_batch_26.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 26 === -Translations 626-650 of 843 -============================================================ - -Line 7506: -msgid: "Wed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7510: -msgid: "Thu" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7514: -msgid: "Fri" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7524: -msgid: "Sun" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7528: -msgid: "January" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7532: -msgid: "February" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7542: -msgid: "April" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7546: -msgid: "May" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7550: -msgid: "June" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7554: -msgid: "July" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7558: -msgid: "August" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7562: -msgid: "September" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7566: -msgid: "October" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7570: -msgid: "November" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7574: -msgid: "December" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7578: -msgid: "jan" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7582: -msgid: "feb" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7592: -msgid: "apr" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7602: -msgid: "jun" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7606: -msgid: "jul" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7616: -msgid: "sep" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7620: -msgid: "oct" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7624: -msgid: "nov" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7628: -msgid: "dec" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7633: -msgid: "Jan." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_27.txt b/translation_batch_27.txt deleted file mode 100644 index f511b02..0000000 --- a/translation_batch_27.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 27 === -Translations 651-675 of 843 -============================================================ - -Line 7638: -msgid: "Feb." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7650: -msgid: "April" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7655: -msgid: "May" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7660: -msgid: "June" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7665: -msgid: "July" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7670: -msgid: "Aug." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7675: -msgid: "Sept." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7680: -msgid: "Oct." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7685: -msgid: "Nov." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7690: -msgid: "Dec." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7695: -msgid: "January" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7700: -msgid: "February" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7712: -msgid: "April" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7717: -msgid: "May" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7722: -msgid: "June" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7727: -msgid: "July" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7732: -msgid: "August" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7737: -msgid: "September" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7742: -msgid: "October" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7747: -msgid: "November" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7752: -msgid: "December" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7756: -msgid: "This is not a valid IPv6 address." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7762: -msgid: "%(truncated_text)s…" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7774: -msgid: ", " -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7844: -msgid: "Forbidden" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_28.txt b/translation_batch_28.txt deleted file mode 100644 index bb31ea4..0000000 --- a/translation_batch_28.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 28 === -Translations 676-700 of 843 -============================================================ - -Line 7848: -msgid: "CSRF verification failed. Request aborted." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7860: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7876: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7883: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7889: -msgid: "More information is available with DEBUG=True." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7893: -msgid: "No year specified" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7899: -msgid: "Date out of range" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7903: -msgid: "No month specified" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7907: -msgid: "No day specified" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7911: -msgid: "No week specified" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7917: -msgid: "No %(verbose_name_plural)s available" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7922: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7929: -msgid: "Invalid date string “%(datestr)s” given format “%(format)s”" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7934: -msgid: "No %(verbose_name)s found matching the query" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7938: -msgid: "Page is not “last”, nor can it be converted to an int." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7943: -msgid: "Invalid page (%(page_number)s): %(message)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7948: -msgid: "Empty list and “%(class_name)s.allow_empty” is False." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7952: -msgid: "Directory indexes are not allowed here." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7957: -msgid: "“%(path)s” does not exist" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7964: -msgid: "Index of %(directory)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7969: -msgid: "The install worked successfully! Congratulations!" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7974: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7989: -msgid: "Django Documentation" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7993: -msgid: "Topics, references, & how-to’s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 7997: -msgid: "Tutorial: A Polling App" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_29.txt b/translation_batch_29.txt deleted file mode 100644 index 4b8349a..0000000 --- a/translation_batch_29.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 29 === -Translations 701-725 of 843 -============================================================ - -Line 8001: -msgid: "Get started with Django" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8005: -msgid: "Django Community" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8009: -msgid: "Connect, get help, or contribute" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8013: -msgid: "You do not have permission to upload files." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8017: -msgid: "You must be logged in to upload files." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8022: -msgid: "File should be at most %(max_size)s MB." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8026: -msgid: "Invalid form data" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8030: -msgid: "Check the correct settings.CKEDITOR_5_CONFIGS " -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8034: -msgid: "Only POST method is allowed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8038: -msgid: "Attachment module is disabled" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8042: -msgid: "Only authenticated users are allowed" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8046: -msgid: "No files were requested" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8050: -msgid: "File size exceeds the limit allowed and cannot be saved" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8054: -msgid: "Failed to save attachment" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8059: -msgid: "Attempting to connect to qpid with SASL mechanism %s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8064: -msgid: "Connected to qpid with SASL mechanism %s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8069: -msgid: "Unable to connect to qpid with SASL mechanism %s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8074: -msgid: "required" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8079: -msgid: "Arguments" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8089: -msgid: "[default: {}]" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8093: -msgid: "[env var: {}]" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8097: -msgid: "[required]" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8101: -msgid: "Aborted." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8106: -msgid: "Try [blue]'{command_path} {help_option}'[/] for help." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8123: -msgid: "Collapse" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_30.txt b/translation_batch_30.txt deleted file mode 100644 index 7a17878..0000000 --- a/translation_batch_30.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 30 === -Translations 726-750 of 843 -============================================================ - -Line 8128: -msgid: "Value" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8132: -msgid: "Default" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8137: -msgid: "Code" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8141: -msgid: "Modified" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8145: -msgid: "Reset to default" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8166: -msgid: " By %(filter_title)s " -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8171: -msgid: "To" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8175: -msgid: "Date from" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8179: -msgid: "Date to" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8195: -msgid: "Paragraph" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8199: -msgid: "Underlined" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8203: -msgid: "Bold" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8207: -msgid: "Italic" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8211: -msgid: "Strike" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8218: -msgid: "Heading" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8222: -msgid: "Quote" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8226: -msgid: "Unordered list" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8230: -msgid: "Ordered list" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8234: -msgid: "Indent increase" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8238: -msgid: "Indent decrease" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8242: -msgid: "Undo" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8246: -msgid: "Redo" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8256: -msgid: "Unlink" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8260: -msgid: "Object permissions" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8267: -msgid: "Object" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_31.txt b/translation_batch_31.txt deleted file mode 100644 index 2237175..0000000 --- a/translation_batch_31.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 31 === -Translations 751-775 of 843 -============================================================ - -Line 8272: -msgid: "Group" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8276: -msgid: "Group permissions" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8286: -msgid: "User permissions" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8297: -msgid: "Export" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8301: -msgid: "Import" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8322: -msgid: "This exporter will export the following fields" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8326: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8344: -msgid: "Skipped" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8348: -msgid: "Some rows failed to validate" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8352: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8359: -msgid: "Row" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8370: -msgid: "Non field specific" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8374: -msgid: "This exporter will export the following fields: " -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8378: -msgid: "This importer will import the following fields: " -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8385: -msgid: "%(class_name)s %(instance)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8390: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8396: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8415: -msgid: "This object doesn't have a change history." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8419: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8424: -msgid: "Press the 'Change History' button below to edit the history." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8431: -msgid: "Date/time" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8449: -msgid: "None" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8453: -msgid: "Revert" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8469: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8483: -msgid: "Run the selected action" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_32.txt b/translation_batch_32.txt deleted file mode 100644 index 5fd9a66..0000000 --- a/translation_batch_32.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 32 === -Translations 776-800 of 843 -============================================================ - -Line 8487: -msgid: "Run" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8491: -msgid: "Click here to select the objects across all pages" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8496: -msgid: "Select all %(total_count)s %(module_name)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8500: -msgid: "Clear selection" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8506: -msgid: "Models in the %(name)s application" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8512: -msgid: "You don’t have permission to view or edit anything." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8516: -msgid: "After you've created a user, you’ll be able to edit more user options." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8521: -msgid: "Enter a new password for the user %(username)s." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8533: -msgid: "History" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8545: -msgid: "Filters" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8549: -msgid: "Select all rows" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8559: -msgid: "Remove from sorting" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8564: -msgid: "Sorting priority: %(priority_number)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8569: -msgid: "Expand row" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8574: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8582: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8589: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8596: -msgid: "Objects" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8601: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8609: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8616: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8626: -msgid: "Welcome back to" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8631: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8637: -msgid: "Log in" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8641: -msgid: "Forgotten your password or username?" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_33.txt b/translation_batch_33.txt deleted file mode 100644 index dbab128..0000000 --- a/translation_batch_33.txt +++ /dev/null @@ -1,204 +0,0 @@ -=== TRANSLATION BATCH 33 === -Translations 801-825 of 843 -============================================================ - -Line 8645: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8653: -msgid: "Show all" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8658: -msgid: "Type to search" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8662: -msgid: "Save and continue editing" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8666: -msgid: "Save and view" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8670: -msgid: "Save and add another" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8674: -msgid: "Save as new" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8678: -msgid: "You have been successfully logged out from the administration" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8682: -msgid: "Thanks for spending some quality time with the web site today." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8686: -msgid: "Log in again" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8690: -msgid: "Your password was changed." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8694: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8721: -msgid: "Add %(name)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8731: -msgid: "Add" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8735: -msgid: "True" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8739: -msgid: "False" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8743: -msgid: "Hide counts" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8753: -msgid: "Clear all filters" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8757: -msgid: "Recent searches" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8761: -msgid: "No recent searches" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8771: -msgid: "Loading more results..." -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8792: -msgid: "No, take me back" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8796: -msgid: "Yes, I’m sure" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8800: -msgid: "Record picture" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8816: -msgid: "" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_34.txt b/translation_batch_34.txt deleted file mode 100644 index 7ccfebd..0000000 --- a/translation_batch_34.txt +++ /dev/null @@ -1,148 +0,0 @@ -=== TRANSLATION BATCH 34 === -Translations 826-843 of 843 -============================================================ - -Line 8821: -msgid: "Reset filters" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8826: -msgid: "Go back" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8836: -msgid: "Unknown content" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8870: -msgid: "%(full_result_count)s total" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8888: -msgid: "Django administration" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8892: -msgid: "General" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8896: -msgid: "Dark" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8900: -msgid: "Light" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8904: -msgid: "System" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8908: -msgid: "Return to site" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8919: -msgid: "Choose file to upload" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8924: -msgid: "Change selected %(model)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8929: -msgid: "Add another %(model)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8934: -msgid: "View selected %(model)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8939: -msgid: "Delete selected %(model)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8943: -msgid: "Add row" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8947: -msgid: "Welcome" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8951: -msgid: "Select all objects on this page for an action" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/translation_batch_35.txt b/translation_batch_35.txt deleted file mode 100644 index bd38fd6..0000000 --- a/translation_batch_35.txt +++ /dev/null @@ -1,140 +0,0 @@ -=== TRANSLATION BATCH 35 === -Translations 851-867 of 867 -============================================================ - -Line 8826: -msgid: "Go back" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8836: -msgid: "Unknown content" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8870: -msgid: "%(full_result_count)s total" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8888: -msgid: "Django administration" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8892: -msgid: "General" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8896: -msgid: "Dark" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8900: -msgid: "Light" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8904: -msgid: "System" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8908: -msgid: "Return to site" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8919: -msgid: "Choose file to upload" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8924: -msgid: "Change selected %(model)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8929: -msgid: "Add another %(model)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8934: -msgid: "View selected %(model)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8939: -msgid: "Delete selected %(model)s" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8943: -msgid: "Add row" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8947: -msgid: "Welcome" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - -Line 8951: -msgid: "Select all objects on this page for an action" -msgstr: "" - -Arabic Translation: -msgstr: "" ----------------------------------------- - diff --git a/txt b/txt deleted file mode 100644 index c55b1e9..0000000 --- a/txt +++ /dev/null @@ -1 +0,0 @@ -Please Indicate the area that you are interested in the CV (ICU, OR, Medical Ward, Surgical Ward, Women`s Health). Bachelor’s degree in Nursing with minimum GPA (4 out of 5). SCFHS Nurse license classified as (Specialist). Country Specialist Nurse license. BLS Certified (ACLS, PALS, NALS dependent on unit requirement). Home Country equivalent Board Certifications must be maintained when appropriate. 2 year or more experience. Experience in same area. Key Accountabilities & Responsibilities Clinical: Is accountable for utilizing the nursing process, appropriate tools, evidence based knowledge, empathy and compassion in the assessment, planning, implementation and evaluation of nursing care for individual patients, while considering the individuals holistic needs and in accordance with scope of practice, hospital policy and procedure. Demonstrates the knowledge and skills, including critical thinking, necessary to implement the nursing plan of care, nursing interventions and procedures, as necessary for the care of the individual patient taking into consideration the patient’s condition, culture and medical plan of care. Advocates for patient by guiding best practice and standards of care within multidisciplinary team. Reports any deterioration in patient’s condition to physician, escalating via chain of command as necessary. Works towards reducing length of stay by advocating commencing discharge planning on admission. Is an advocate for patient safety, minimizes patient risk by ensuring a safe environment and conditions. Follows all policies and procedures, reporting observed or perceived risks in a timely fashion Suggests opportunities for improvement in care and in care environment. Uses transcultural awareness during all interactions with patients, families and colleagues. Works effectively with multidisciplinary team towards safe, effective and efficient patient outcomes. Maintains patient confidentiality according to policy. Ensures appropriate delegation of any duties when necessary. Takes appropriate action in emergencies. Documents all care accurately, completely and in a timely fashion. Demonstrates the computer skills necessary for carrying out duties. Education: Educates and informs patients and families on the care and management of condition, to adapt a problem-solving approach to managing and reporting complications. Provides health promotion and disease prevention advice. Participates in own and others education, training and professional development as needed. Shares appropriate, relevant and up to date information and knowledge with colleagues. Leadership: Utilizes leadership skills as nurse in charge of shift. Communicates effectively to ensure patient safety. Demonstrates knowledge of and follows all hospital related policies and procedures Reports potential or observed safety hazards immediately to supervisor, removes hazard or provides solution when possible. Reports any work-related risks such as equipment failures or resource insufficiencies to supervisor immediately. Uses communication and conflict negotiation skills to prevent and resolve complaints, reports through the chain of command as per hospital policy and procedure. Contributes to improving quality outcomes including patient and staff satisfaction indicators. Utilizes multidisciplinary team to ensure optimal patient experience. Exercises care in utilizing resources to maintain a cost efficient service. Actively participates in unit based meetings and councils. Supports a just culture, speaks up and promotes civility in the workplace. Research: Identifies opportunities for improvement that are evidence based. Maintains and shares up to date knowledge related to evidence based practice. Is involved in relevant projects related to practice, improvement and safety. Is actively involved in unit journal club. Hospital-wide: Respects patients and their families and promotes a patient-centered care culture. Participates and supports quality improvement and patient safety activities as an individual or as part of multidisciplinary teams. Performs other job-related duties as assigned. \ No newline at end of file