diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a8a34de..1b306ae 100644 Binary files a/core/__pycache__/admin.cpython-311.pyc and b/core/__pycache__/admin.cpython-311.pyc differ diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 2d03087..673917c 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index e6e8455..655ec40 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/admin.py b/core/admin.py index fd116b7..364115f 100644 --- a/core/admin.py +++ b/core/admin.py @@ -130,7 +130,7 @@ class MessageAdmin(admin.ModelAdmin): @admin.register(WhatsAppConfig) class WhatsAppConfigAdmin(admin.ModelAdmin): - list_display = ('__str__', 'is_active') + list_display = ('__str__', 'admin_phone', 'is_active') def has_add_permission(self, request): # Only allow one configuration record diff --git a/core/migrations/0025_banner_admin_phone_homesection_admin_phone_and_more.py b/core/migrations/0025_banner_admin_phone_homesection_admin_phone_and_more.py new file mode 100644 index 0000000..7a68684 --- /dev/null +++ b/core/migrations/0025_banner_admin_phone_homesection_admin_phone_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 5.2.7 on 2026-01-24 09:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0024_testimonial'), + ] + + operations = [ + migrations.AddField( + model_name='banner', + name='admin_phone', + field=models.CharField(blank=True, help_text='WhatsApp number to receive admin notifications (with country code, e.g., 96812345678)', max_length=20, null=True, verbose_name='Admin Notification Phone'), + ), + migrations.AddField( + model_name='homesection', + name='admin_phone', + field=models.CharField(blank=True, help_text='WhatsApp number to receive admin notifications (with country code, e.g., 96812345678)', max_length=20, null=True, verbose_name='Admin Notification Phone'), + ), + migrations.AddField( + model_name='testimonial', + name='admin_phone', + field=models.CharField(blank=True, help_text='WhatsApp number to receive admin notifications (with country code, e.g., 96812345678)', max_length=20, null=True, verbose_name='Admin Notification Phone'), + ), + migrations.AddField( + model_name='whatsappconfig', + name='admin_phone', + field=models.CharField(blank=True, help_text='WhatsApp number to receive admin notifications (with country code, e.g., 96812345678)', max_length=20, null=True, verbose_name='Admin Notification Phone'), + ), + ] diff --git a/core/migrations/0026_remove_banner_admin_phone_and_more.py b/core/migrations/0026_remove_banner_admin_phone_and_more.py new file mode 100644 index 0000000..9584e82 --- /dev/null +++ b/core/migrations/0026_remove_banner_admin_phone_and_more.py @@ -0,0 +1,25 @@ +# Generated by Django 5.2.7 on 2026-01-24 09:19 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0025_banner_admin_phone_homesection_admin_phone_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='banner', + name='admin_phone', + ), + migrations.RemoveField( + model_name='homesection', + name='admin_phone', + ), + migrations.RemoveField( + model_name='testimonial', + name='admin_phone', + ), + ] diff --git a/core/migrations/__pycache__/0025_banner_admin_phone_homesection_admin_phone_and_more.cpython-311.pyc b/core/migrations/__pycache__/0025_banner_admin_phone_homesection_admin_phone_and_more.cpython-311.pyc new file mode 100644 index 0000000..35430eb Binary files /dev/null and b/core/migrations/__pycache__/0025_banner_admin_phone_homesection_admin_phone_and_more.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0026_remove_banner_admin_phone_and_more.cpython-311.pyc b/core/migrations/__pycache__/0026_remove_banner_admin_phone_and_more.cpython-311.pyc new file mode 100644 index 0000000..0b1297a Binary files /dev/null and b/core/migrations/__pycache__/0026_remove_banner_admin_phone_and_more.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index fad8694..1eb5552 100644 --- a/core/models.py +++ b/core/models.py @@ -294,6 +294,7 @@ class WhatsAppConfig(models.Model): api_token = models.CharField(_('Wablas API Token'), max_length=255) secret_key = models.CharField(_('Wablas Secret Key'), max_length=255, blank=True, null=True) is_active = models.BooleanField(_('Is Active'), default=True) + admin_phone = models.CharField(_("Admin Notification Phone"), max_length=20, blank=True, null=True, help_text=_("WhatsApp number to receive admin notifications (with country code, e.g., 96812345678)")) class Meta: verbose_name = _('WhatsApp Configuration') diff --git a/core/views.py b/core/views.py index 32e0082..73f0602 100644 --- a/core/views.py +++ b/core/views.py @@ -264,6 +264,15 @@ def truck_register(request): truck.owner = request.user truck.is_approved = False truck.save() + + # Notify Admin via WhatsApp + config = WhatsAppConfig.objects.filter(is_active=True).first() + if config and config.admin_phone: + admin_msg = _("New Truck Registration: %(owner)s registered a truck with plate %(plate)s. Please review it in the admin dashboard.") % { + "owner": truck.owner.username, + "plate": truck.plate_no + } + send_whatsapp_message(config.admin_phone, admin_msg) messages.success(request, _("Truck registered successfully! It will be visible after admin approval.")) return redirect('dashboard') else: @@ -283,6 +292,15 @@ def edit_truck(request, truck_id): truck = form.save(commit=False) truck.is_approved = False truck.save() + + # Notify Admin via WhatsApp + config = WhatsAppConfig.objects.filter(is_active=True).first() + if config and config.admin_phone: + admin_msg = _("Truck Update: %(owner)s updated truck with plate %(plate)s. Please review it again in the admin dashboard.") % { + "owner": truck.owner.username, + "plate": truck.plate_no + } + send_whatsapp_message(config.admin_phone, admin_msg) messages.success(request, _("Truck data updated successfully! It will be reviewed by admin again.")) return redirect('dashboard') else: diff --git a/locale/ar/LC_MESSAGES/django.mo b/locale/ar/LC_MESSAGES/django.mo index 2bb717e..ad4841a 100644 Binary files a/locale/ar/LC_MESSAGES/django.mo and b/locale/ar/LC_MESSAGES/django.mo differ diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po index 395ed80..975e2e4 100644 --- a/locale/ar/LC_MESSAGES/django.po +++ b/locale/ar/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-24 09:10+0000\n" +"POT-Creation-Date: 2026-01-24 09:20+0000\n" "PO-Revision-Date: 2026-01-23 10:45+0000\n" "Last-Translator: Gemini\n" "Language-Team: Arabic\n" @@ -10,8 +10,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: config/settings.py:198 msgid "English" @@ -116,9 +115,7 @@ msgstr "تم نشر الشحنة بنجاح!" #: core/admin.py:157 msgid "Failed to send test message. Check your API credentials and logs." -msgstr "" -"فشل إرسال رسالة الاختبار. تحقق من بيانات اعتماد واجهة برمجة التطبيقات " -"والسجلات." +msgstr "فشل إرسال رسالة الاختبار. تحقق من بيانات اعتماد واجهة برمجة التطبيقات والسجلات." #: core/admin.py:162 msgid "Send Test WhatsApp Message" @@ -241,9 +238,9 @@ msgstr "اسم الدولة" msgid "Your Email" msgstr "تأكيد البريد الإلكتروني" -#: core/forms.py:199 core/models.py:482 core/templates/core/contact.html:76 +#: core/forms.py:199 core/models.py:483 core/templates/core/contact.html:76 msgid "Subject" -msgstr "رفض" +msgstr "الموضوع" #: core/forms.py:200 #, fuzzy @@ -253,16 +250,12 @@ msgstr "الرسالة" #: core/management/commands/check_subscriptions.py:28 #, python-format -msgid "" -"Hello %(user)s, your MASAR CARGO subscription (%(plan)s) will expire in " -"%(days)s days on %(date)s. Please renew to avoid account suspension." +msgid "Hello %(user)s, your MASAR CARGO subscription (%(plan)s) will expire in %(days)s days on %(date)s. Please renew to avoid account suspension." msgstr "" #: core/management/commands/check_subscriptions.py:49 #, python-format -msgid "" -"Hello %(user)s, your MASAR CARGO subscription has EXPIRED today. Your " -"account is now suspended. Please contact support to renew." +msgid "Hello %(user)s, your MASAR CARGO subscription has EXPIRED today. Your account is now suspended. Please contact support to renew." msgstr "" #: core/models.py:16 @@ -414,11 +407,11 @@ msgstr "مفتوح للعروض" msgid "In Progress" msgstr "قيد التنفيذ" -#: core/models.py:226 core/models.py:445 +#: core/models.py:226 core/models.py:446 msgid "Completed" msgstr "مكتمل" -#: core/models.py:227 core/models.py:447 +#: core/models.py:227 core/models.py:448 msgid "Cancelled" msgstr "ملغي" @@ -430,7 +423,7 @@ msgstr "المصدر (قديم)" msgid "Destination (Legacy)" msgstr "الوجهة" -#: core/models.py:268 core/models.py:444 +#: core/models.py:268 core/models.py:445 #: core/templates/core/shipper_dashboard.html:98 #: core/templates/core/truck_owner_dashboard.html:90 #: core/templates/core/truck_owner_dashboard.html:156 @@ -455,295 +448,303 @@ msgstr "رمز Wablas API" msgid "Wablas Secret Key" msgstr "مفتاح Wablas السري" -#: core/models.py:296 core/models.py:341 core/models.py:379 core/models.py:504 +#: core/models.py:296 core/models.py:342 core/models.py:380 core/models.py:505 msgid "Is Active" msgstr "نشط" -#: core/models.py:299 core/models.py:300 core/models.py:303 +#: core/models.py:297 +msgid "Admin Notification Phone" +msgstr "رقم هاتف إشعارات المسؤول" + +#: core/models.py:297 +msgid "WhatsApp number to receive admin notifications (with country code, e.g., 96812345678)" +msgstr "رقم الواتساب لاستلام إشعارات المسؤول (مع رمز الدولة، مثال: 96812345678)" + +#: core/models.py:300 core/models.py:301 core/models.py:304 msgid "WhatsApp Configuration" msgstr "تكامل واتساب" -#: core/models.py:306 +#: core/models.py:307 msgid "App Name" msgstr "اسم التطبيق" -#: core/models.py:307 +#: core/models.py:308 msgid "Logo" msgstr "الشعار" -#: core/models.py:308 +#: core/models.py:309 msgid "Slogan" msgstr "الشعار اللفظي" -#: core/models.py:309 +#: core/models.py:310 msgid "Registration Number" msgstr "رقم السجل التجاري" -#: core/models.py:310 +#: core/models.py:311 msgid "Tax Number" msgstr "الرقم الضريبي" -#: core/models.py:311 +#: core/models.py:312 msgid "Contact Phone" msgstr "هاتف التواصل" -#: core/models.py:312 +#: core/models.py:313 msgid "Contact Email" msgstr "بريد التواصل" -#: core/models.py:313 +#: core/models.py:314 msgid "Contact Address" msgstr "عنوان التواصل" -#: core/models.py:314 core/templates/base.html:161 -#: core/templates/registration/register.html:67 core/views.py:466 +#: core/models.py:315 core/templates/base.html:161 +#: core/templates/registration/register.html:67 core/views.py:484 msgid "Terms of Service" msgstr "شروط الخدمة" -#: core/models.py:315 core/templates/base.html:160 -#: core/templates/registration/register.html:69 core/views.py:456 +#: core/models.py:316 core/templates/base.html:160 +#: core/templates/registration/register.html:69 core/views.py:474 msgid "Privacy Policy" msgstr "سياسة الخصوصية" -#: core/models.py:316 +#: core/models.py:317 msgid "Enable Subscription Fee" msgstr "تفعيل رسوم الاشتراك" -#: core/models.py:317 +#: core/models.py:318 msgid "Enable Thawani Payment" msgstr "تفعيل دفع ثواني" -#: core/models.py:320 +#: core/models.py:321 msgid "Shipper Monthly Fee" msgstr "رسوم الشاحن الشهرية" -#: core/models.py:321 +#: core/models.py:322 msgid "Shipper Annual Fee" msgstr "رسوم الشاحن السنوية" -#: core/models.py:324 +#: core/models.py:325 msgid "Truck Owner Monthly Fee" msgstr "رسوم صاحب الشاحنة الشهرية" -#: core/models.py:325 +#: core/models.py:326 msgid "Truck Owner Annual Fee" msgstr "رسوم صاحب الشاحنة السنوية" -#: core/models.py:328 +#: core/models.py:329 msgid "App Setting" msgstr "إعداد التطبيق" -#: core/models.py:329 +#: core/models.py:330 msgid "App Settings" msgstr "إعدادات التطبيق" -#: core/models.py:335 core/models.py:371 +#: core/models.py:336 core/models.py:372 msgid "Title (EN)" msgstr "العنوان (بالإنجليزية)" -#: core/models.py:336 core/models.py:372 +#: core/models.py:337 core/models.py:373 msgid "Title (AR)" msgstr "العنوان (بالعربية)" -#: core/models.py:337 core/models.py:373 +#: core/models.py:338 core/models.py:374 msgid "Subtitle (EN)" msgstr "العنوان الفرعي (بالإنجليزية)" -#: core/models.py:338 core/models.py:374 +#: core/models.py:339 core/models.py:375 msgid "Subtitle (AR)" msgstr "العنوان الفرعي (بالعربية)" -#: core/models.py:339 +#: core/models.py:340 msgid "Banner Image" msgstr "صورة البانر" -#: core/models.py:340 +#: core/models.py:341 msgid "Link URL" msgstr "رابط" -#: core/models.py:340 +#: core/models.py:341 msgid "Internal or external URL" msgstr "رابط داخلي أو خارجي" -#: core/models.py:342 core/models.py:378 core/models.py:505 +#: core/models.py:343 core/models.py:379 core/models.py:506 msgid "Order" msgstr "الترتيب" -#: core/models.py:346 +#: core/models.py:347 msgid "Banner" msgstr "بانر" -#: core/models.py:347 +#: core/models.py:348 msgid "Banners" msgstr "البانرات" -#: core/models.py:367 +#: core/models.py:368 msgid "Simple Text & Image" msgstr "نص بسيط وصورة" -#: core/models.py:368 +#: core/models.py:369 msgid "Features List" msgstr "قائمة المميزات" -#: core/models.py:369 +#: core/models.py:370 msgid "Call to Action" msgstr "دعوة لاتخاذ إجراء" -#: core/models.py:375 +#: core/models.py:376 msgid "Content (EN)" msgstr "المحتوى (بالإنجليزية)" -#: core/models.py:376 +#: core/models.py:377 msgid "Content (AR)" msgstr "المحتوى (بالعربية)" -#: core/models.py:377 +#: core/models.py:378 msgid "Image" msgstr "صورة" -#: core/models.py:384 +#: core/models.py:385 msgid "Home Section" msgstr "قسم في الصفحة الرئيسية" -#: core/models.py:385 +#: core/models.py:386 msgid "Home Sections" msgstr "أقسام الصفحة الرئيسية" -#: core/models.py:440 core/templates/core/financial_history.html:37 +#: core/models.py:441 core/templates/core/financial_history.html:37 msgid "Payment" msgstr "دفع" -#: core/models.py:441 core/templates/core/financial_history.html:39 +#: core/models.py:442 core/templates/core/financial_history.html:39 msgid "Refund" msgstr "استرداد" -#: core/models.py:446 +#: core/models.py:447 msgid "Failed" msgstr "فشل" -#: core/models.py:450 core/templates/core/admin_financials.html:30 +#: core/models.py:451 core/templates/core/admin_financials.html:30 #: core/templates/core/financial_history.html:24 #: core/templates/core/shipment_detail.html:73 #: core/templates/core/shipper_dashboard.html:76 msgid "Amount" msgstr "المبلغ" -#: core/models.py:453 core/templates/core/financial_history.html:22 +#: core/models.py:454 core/templates/core/financial_history.html:22 #: core/templates/core/receipt.html:48 #: core/templates/core/shipper_dashboard.html:134 msgid "Description" msgstr "الوصف" -#: core/models.py:454 core/templates/core/receipt.html:39 +#: core/models.py:455 core/templates/core/receipt.html:39 msgid "Payment Method" msgstr "طريقة الدفع" -#: core/models.py:455 +#: core/models.py:456 #, fuzzy #| msgid "Phone Number" msgid "Reference Number" msgstr "رقم الهاتف" -#: core/models.py:456 +#: core/models.py:457 #, fuzzy #| msgid "Registration Number" msgid "Receipt Number" msgstr "رقم السجل التجاري" -#: core/models.py:457 +#: core/models.py:458 msgid "Session ID" msgstr "معرف الجلسة" -#: core/models.py:458 +#: core/models.py:459 #, fuzzy #| msgid "Status" msgid "Payment Status" msgstr "الحالة" -#: core/models.py:464 +#: core/models.py:465 msgid "Transaction" msgstr "معاملة" -#: core/models.py:465 +#: core/models.py:466 #, fuzzy #| msgid "Actions" msgid "Transactions" msgstr "الإجراءات" -#: core/models.py:480 +#: core/models.py:481 #, fuzzy #| msgid "App Name" msgid "Name" msgstr "اسم التطبيق" -#: core/models.py:481 core/templates/core/contact.html:36 +#: core/models.py:482 core/templates/core/contact.html:36 msgid "Email" msgstr "البريد الإلكتروني" -#: core/models.py:483 core/templates/admin/core/whatsapp_test.html:28 +#: core/models.py:484 core/templates/admin/core/whatsapp_test.html:28 #: core/templates/core/contact.html:83 msgid "Message" msgstr "الرسالة" -#: core/models.py:488 +#: core/models.py:489 #, fuzzy #| msgid "Contact Address" msgid "Contact Message" msgstr "عنوان التواصل" -#: core/models.py:489 +#: core/models.py:490 #, fuzzy #| msgid "Contact Address" msgid "Contact Messages" msgstr "عنوان التواصل" -#: core/models.py:496 +#: core/models.py:497 #, fuzzy #| msgid "Name (EN)" msgid "Customer Name (EN)" msgstr "الموديل (بالإنجليزية)" -#: core/models.py:497 +#: core/models.py:498 #, fuzzy #| msgid "Name (AR)" msgid "Customer Name (AR)" msgstr "الموديل" -#: core/models.py:498 +#: core/models.py:499 msgid "Customer Role (EN)" msgstr "وظيفة العميل (EN)" -#: core/models.py:499 +#: core/models.py:500 msgid "Customer Role (AR)" msgstr "وظيفة العميل (AR)" -#: core/models.py:500 +#: core/models.py:501 #, fuzzy #| msgid "Details" msgid "Testimony (EN)" msgstr "التفاصيل" -#: core/models.py:501 +#: core/models.py:502 #, fuzzy #| msgid "Details" msgid "Testimony (AR)" msgstr "التفاصيل" -#: core/models.py:502 +#: core/models.py:503 msgid "Rating (1-5)" msgstr "التقييم (1-5)" -#: core/models.py:503 +#: core/models.py:504 #, fuzzy #| msgid "Banner Image" msgid "Customer Image" msgstr "صورة البانر" -#: core/models.py:509 +#: core/models.py:510 msgid "Testimonial" msgstr "شهادة عميل" -#: core/models.py:510 +#: core/models.py:511 msgid "Testimonials" msgstr "شهادات العملاء" @@ -1174,12 +1175,8 @@ msgid "Get in Touch" msgstr "اتصل بنا" #: core/templates/core/contact.html:13 -msgid "" -"Have questions about our services or need assistance? Fill out the form and " -"our team will get back to you shortly." -msgstr "" -"لديك أسئلة حول خدماتنا أو تحتاج إلى مساعدة؟ املأ النموذج وسيقوم فريقنا بالرد " -"عليك قريباً." +msgid "Have questions about our services or need assistance? Fill out the form and our team will get back to you shortly." +msgstr "لديك أسئلة حول خدماتنا أو تحتاج إلى مساعدة؟ املأ النموذج وسيقوم فريقنا بالرد عليك قريباً." #: core/templates/core/contact.html:24 msgid "Phone" @@ -1224,12 +1221,8 @@ msgid "Locally & Abroad" msgstr "محلياً ودولياً" #: core/templates/core/index.html:64 -msgid "" -"The most reliable platform connecting shippers with truck owners across the " -"region. Transparent, fast, and secure." -msgstr "" -"المنصة الأكثر موثوقية لربط الشاحنين مع أسطول الشاحنات في جميع أنحاء المنطقة. " -"شفافة، سريعة، وآمنة." +msgid "The most reliable platform connecting shippers with truck owners across the region. Transparent, fast, and secure." +msgstr "المنصة الأكثر موثوقية لربط الشاحنين مع أسطول الشاحنات في جميع أنحاء المنطقة. شفافة، سريعة، وآمنة." #: core/templates/core/index.html:67 msgid "Start Shipping" @@ -1248,12 +1241,8 @@ msgid "I am a Shipper" msgstr "أنا شاحن" #: core/templates/core/index.html:140 -msgid "" -"I need to move goods locally or abroad. Post your shipment, receive offers " -"from verified drivers, and track your cargo in real-time." -msgstr "" -"أريد نقل بضائع محلياً أو دولياً. انشر شحنتك، واستقبل عروضاً من سائقين موثقين، " -"وتتبع شحنتك في الوقت الفعلي." +msgid "I need to move goods locally or abroad. Post your shipment, receive offers from verified drivers, and track your cargo in real-time." +msgstr "أريد نقل بضائع محلياً أو دولياً. انشر شحنتك، واستقبل عروضاً من سائقين موثقين، وتتبع شحنتك في الوقت الفعلي." #: core/templates/core/index.html:143 msgid "Post shipments easily" @@ -1277,12 +1266,8 @@ msgid "I am a Truck Owner" msgstr "أنا صاحب شاحنة" #: core/templates/core/index.html:158 -msgid "" -"I have trucks and want to find cargo to transport. Register your fleet, bid " -"on available jobs, and grow your business." -msgstr "" -"لدي شاحنات وأريد العثور على بضائع لنقلها. سجل أسطولك، وقدم عروضك على الوظائف " -"المتاحة، ونمِ عملك." +msgid "I have trucks and want to find cargo to transport. Register your fleet, bid on available jobs, and grow your business." +msgstr "لدي شاحنات وأريد العثور على بضائع لنقلها. سجل أسطولك، وقدم عروضك على الوظائف المتاحة، ونمِ عملك." #: core/templates/core/index.html:161 msgid "Access daily cargo leads" @@ -1355,11 +1340,8 @@ msgid "Truck Marketplace" msgstr "سوق الشاحنات" #: core/templates/core/marketplace.html:28 -msgid "" -"Browse available trucks and send your shipping offers directly to truck " -"owners." -msgstr "" -"تصفح الشاحنات المتاحة وأرسل عروض الشحن الخاصة بك مباشرة إلى أصحاب الشاحنات." +msgid "Browse available trucks and send your shipping offers directly to truck owners." +msgstr "تصفح الشاحنات المتاحة وأرسل عروض الشحن الخاصة بك مباشرة إلى أصحاب الشاحنات." #: core/templates/core/marketplace.html:43 msgid "Available" @@ -1496,9 +1478,7 @@ msgid "Note:" msgstr "ملاحظة:" #: core/templates/core/receipt.html:68 -msgid "" -"This is an electronically generated receipt and does not require a physical " -"signature." +msgid "This is an electronically generated receipt and does not require a physical signature." msgstr "" #: core/templates/core/receipt.html:72 @@ -1689,8 +1669,7 @@ msgstr "انتهى الاشتراك" #| msgid "Hello %(name)s, your subscription to MASAR CARGO has expired." msgid "" "\n" -" Hello %(name)s, your subscription to MASAR CARGO has " -"expired.\n" +" Hello %(name)s, your subscription to MASAR CARGO has expired.\n" " " msgstr "مرحباً %(name)s، لقد انتهى اشتراكك في مسار كارغو." @@ -1721,8 +1700,7 @@ msgid "Renew Now" msgstr "تجديد الآن" #: core/templates/core/subscription_expired.html:52 -msgid "" -"Online payment is currently disabled. Please contact support for renewal." +msgid "Online payment is currently disabled. Please contact support for renewal." msgstr "الدفع عبر الإنترنت معطل حالياً. يرجى الاتصال بالدعم للتجديد." #: core/templates/core/subscription_expired.html:61 @@ -1821,9 +1799,7 @@ msgid "Documents & Photos" msgstr "المستندات والصور" #: core/templates/core/truck_register.html:128 -msgid "" -"Photos will be automatically resized for better performance. PDF files are " -"accepted for documents." +msgid "Photos will be automatically resized for better performance. PDF files are accepted for documents." msgstr "" #: core/templates/core/truck_register.html:151 @@ -1893,19 +1869,12 @@ msgid "Verify Your Account" msgstr "التحقق من حسابك" #: core/templates/registration/verify_otp.html:18 -msgid "" -"We have sent a verification code to your WhatsApp number. Please enter it " -"below to complete your registration." -msgstr "" -"لقد أرسلنا رمز تحقق إلى رقم واتساب الخاص بك. يرجى إدخاله أدناه لإكمال عملية " -"التسجيل." +msgid "We have sent a verification code to your WhatsApp number. Please enter it below to complete your registration." +msgstr "لقد أرسلنا رمز تحقق إلى رقم واتساب الخاص بك. يرجى إدخاله أدناه لإكمال عملية التسجيل." #: core/templates/registration/verify_otp.html:20 -msgid "" -"We have sent a verification code to your WhatsApp number. Please enter it " -"below to log in." -msgstr "" -"لقد أرسلنا رمز تحقق إلى رقم واتساب الخاص بك. يرجى إدخاله أدناه لتسجيل الدخول." +msgid "We have sent a verification code to your WhatsApp number. Please enter it below to log in." +msgstr "لقد أرسلنا رمز تحقق إلى رقم واتساب الخاص بك. يرجى إدخاله أدناه لتسجيل الدخول." #: core/templates/registration/verify_otp.html:37 msgid "Verify" @@ -1961,155 +1930,146 @@ msgstr "اسم المستخدم أو كلمة المرور غير صالحة." msgid "Logged in successfully!" msgstr "تم تسجيل الدخول بنجاح!" -#: core/views.py:267 +#: core/views.py:271 +#, python-format +msgid "New Truck Registration: %(owner)s registered a truck with plate %(plate)s. Please review it in the admin dashboard." +msgstr "تسجيل شاحنة جديدة: قام %(owner)s بتسجيل شاحنة برقم لوحة %(plate)s. يرجى مراجعتها في لوحة تحكم المسؤول." + +#: core/views.py:276 msgid "Truck registered successfully! It will be visible after admin approval." msgstr "تم تسجيل الشاحنة بنجاح! ستكون مرئية بعد اعتماد المسؤول." -#: core/views.py:270 +#: core/views.py:279 msgid "There was an error in your registration. Please check the form." msgstr "حدث خطأ في التسجيل. يرجى التحقق من النموذج." -#: core/views.py:286 +#: core/views.py:299 +#, python-format +msgid "Truck Update: %(owner)s updated truck with plate %(plate)s. Please review it again in the admin dashboard." +msgstr "تحديث شاحنة: قام %(owner)s بتحديث بيانات الشاحنة ذات رقم لوحة %(plate)s. يرجى مراجعتها مرة أخرى في لوحة تحكم المسؤول." + +#: core/views.py:304 msgid "Truck data updated successfully! It will be reviewed by admin again." msgstr "تم تحديث بيانات الشاحنة بنجاح! سيتم مراجعتها من قبل المسؤول مرة أخرى." -#: core/views.py:289 +#: core/views.py:307 msgid "There was an error updating your truck. Please check the form." msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج." -#: core/views.py:306 +#: core/views.py:324 #, python-format -msgid "" -"Your truck (%(plate)s) has been approved! You can now receive offers for " -"shipments." +msgid "Your truck (%(plate)s) has been approved! You can now receive offers for shipments." msgstr "تمت الموافقة على شاحنتك (%(plate)s)! يمكنك الآن تلقي عروض للشحنات." -#: core/views.py:309 +#: core/views.py:327 msgid "Truck approved successfully!" msgstr "تم اعتماد الشاحنة بنجاح!" -#: core/views.py:320 +#: core/views.py:338 msgid "Truck has been suspended." msgstr "تم تعليق الشاحنة." -#: core/views.py:335 -msgid "" -"Shipment posted successfully! It is now open for bids or you can browse " -"trucks to send it as an offer." -msgstr "" -"تم نشر الشحنة بنجاح! هي الآن مفتوحة للمزايدة أو يمكنك تصفح الشاحنات لإرسالها " -"كعرض.تم نشر الشحنة بنجاح! هي الآن مفتوحة للعروض أو يمكنك تصفح الشاحنات " -"لإرسالها كعرض." +#: core/views.py:353 +msgid "Shipment posted successfully! It is now open for bids or you can browse trucks to send it as an offer." +msgstr "تم نشر الشحنة بنجاح! هي الآن مفتوحة للمزايدة أو يمكنك تصفح الشاحنات لإرسالها كعرض.تم نشر الشحنة بنجاح! هي الآن مفتوحة للعروض أو يمكنك تصفح الشاحنات لإرسالها كعرض." -#: core/views.py:339 +#: core/views.py:357 msgid "Please correct the errors in the form." msgstr "يرجى تصحيح الأخطاء في النموذج." -#: core/views.py:390 +#: core/views.py:408 #, python-format -msgid "" -"New offer received for your truck (%(plate)s)! Route: %(origin)s to " -"%(dest)s. Amount: %(amount)s" -msgstr "" -"تم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s إلى %(dest)s. " -"المبلغ: %(amount)sتم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s " -"إلى %(dest)s. المبلغ: %(amount)s" +msgid "New offer received for your truck (%(plate)s)! Route: %(origin)s to %(dest)s. Amount: %(amount)s" +msgstr "تم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s إلى %(dest)s. المبلغ: %(amount)sتم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s إلى %(dest)s. المبلغ: %(amount)s" -#: core/views.py:393 +#: core/views.py:411 msgid "Offer sent successfully!" msgstr "تم إرسال العرض بنجاح!" -#: core/views.py:397 +#: core/views.py:415 msgid "Error sending offer. Please check the form." msgstr "خطأ في إرسال العرض. يرجى التحقق من النموذج." -#: core/views.py:419 +#: core/views.py:437 msgid "You are not authorized to accept this offer." msgstr "أنت غير مخول لقبول هذا العرض." -#: core/views.py:434 +#: core/views.py:452 #, python-format -msgid "" -"Your offer for truck %(plate)s (%(origin)s to %(dest)s) has been accepted!" +msgid "Your offer for truck %(plate)s (%(origin)s to %(dest)s) has been accepted!" msgstr "تم قبول عرضك للشاحنة %(plate)s (%(origin)s إلى %(dest)s)!" -#: core/views.py:437 +#: core/views.py:455 msgid "Offer accepted! Shipment is now in progress." msgstr "تم قبول العرض! الشحنة قيد التنفيذ الآن." -#: core/views.py:449 +#: core/views.py:467 msgid "Offer rejected." msgstr "تم رفض العرض." -#: core/views.py:457 +#: core/views.py:475 msgid "Privacy policy is coming soon." msgstr "سياسة الخصوصية ستتوفر قريباً." -#: core/views.py:467 +#: core/views.py:485 msgid "Terms of service are soon." msgstr "شروط الخدمة ستتوفر قريباً." -#: core/views.py:514 +#: core/views.py:532 msgid "Online payment is currently disabled. Please contact support." msgstr "الدفع عبر الإنترنت معطل حالياً. يرجى الاتصال بالدعم." -#: core/views.py:563 +#: core/views.py:581 msgid "Failed to initiate payment. Please try again later." msgstr "فشل بدء الدفع. يرجى المحاولة مرة أخرى لاحقاً." -#: core/views.py:592 +#: core/views.py:610 #, fuzzy, python-format -#| msgid "" -#| "Your subscription for MASAR CARGO has been successfully renewed! Your new " -#| "expiry date is %(date)s. Thank you for using our service." -msgid "" -"Your subscription for MASAR CARGO has been successfully renewed! Your new " -"expiry date is %(date)s. You can view your receipt here: %(url)s" -msgstr "" -"تم تجديد اشتراكك في مسار للشحن بنجاح! تاريخ انتهاء اشتراكك الجديد هو " -"%(date)s. شكراً لاستخدامك خدمتنا." +#| msgid "Your subscription for MASAR CARGO has been successfully renewed! Your new expiry date is %(date)s. Thank you for using our service." +msgid "Your subscription for MASAR CARGO has been successfully renewed! Your new expiry date is %(date)s. You can view your receipt here: %(url)s" +msgstr "تم تجديد اشتراكك في مسار للشحن بنجاح! تاريخ انتهاء اشتراكك الجديد هو %(date)s. شكراً لاستخدامك خدمتنا." -#: core/views.py:602 +#: core/views.py:620 #, fuzzy #| msgid "Subscription Renewed - MASAR CARGO" msgid "Subscription Activated - MASAR CARGO" msgstr "تم تجديد الاشتراك - مسار للشحن" -#: core/views.py:632 +#: core/views.py:650 msgid "Payment successful! Your subscription is now active." msgstr "تم الدفع بنجاح! اشتراكك نشط الآن." -#: core/views.py:638 +#: core/views.py:656 #, python-format msgid "Payment was not successful. Status: %(status)s" msgstr "لم يكن الدفع ناجحاً. الحالة: %(status)s" -#: core/views.py:640 +#: core/views.py:658 msgid "Failed to verify payment status." msgstr "فشل التحقق من حالة الدفع." -#: core/views.py:646 +#: core/views.py:664 msgid "Payment was cancelled." msgstr "تم إلغاء الدفع." -#: core/views.py:710 +#: core/views.py:728 msgid "This is already a refund transaction." msgstr "هذا البريد الإلكتروني مستخدم بالفعل." -#: core/views.py:723 +#: core/views.py:741 #, python-format msgid "Refund issued successfully! Receipt: %(receipt)s" msgstr "تم إصدار الاسترداد بنجاح! الإيصال: %(receipt)s" -#: core/views.py:736 +#: core/views.py:754 msgid "Application settings updated successfully." msgstr "تم تحديث إعدادات التطبيق بنجاح." -#: core/views.py:749 +#: core/views.py:767 msgid "Your message has been sent successfully! We will get back to you soon." msgstr "تم إرسال رسالتك بنجاح! سنقوم بالرد عليك قريباً." -#: core/views.py:752 +#: core/views.py:770 msgid "There was an error in your form. Please check the fields below." msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج." @@ -2128,12 +2088,8 @@ msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق #~ msgid "Registered Trucks" #~ msgstr "الشاحنات المسجلة" -#~ msgid "" -#~ "To continue using our services, please renew your subscription. You can " -#~ "contact our support team for renewal details." -#~ msgstr "" -#~ "لمواصلة استخدام خدماتنا، يرجى تجديد اشتراكك. يمكنك الاتصال بفريق الدعم " -#~ "لدينا للحصول على تفاصيل التجديد." +#~ msgid "To continue using our services, please renew your subscription. You can contact our support team for renewal details." +#~ msgstr "لمواصلة استخدام خدماتنا، يرجى تجديد اشتراكك. يمكنك الاتصال بفريق الدعم لدينا للحصول على تفاصيل التجديد." #~ msgid "Contact for Renewal" #~ msgstr "الاتصال للتجديد"