نشغّل منذ سنوات طويلة منصة تتبع GPS خاصة بنا لعملائنا: تُبلّغ المركبات والأجهزة بمواقعها إلى خادم التتبع لدينا، ويرى العملاء أسطولهم مباشرةً على الخريطة، ويمسكون دفاتر الرحلات، ويحددون المناطق الجغرافية، ويتلقون إشعارات عند الإنذارات. وكانت الواجهة لذلك تطبيق PHP نما بصورة عضوية بإدارة مستخدمين خاصة وفوترة خاصة وتقارير خاصة – بالتوازي مع كل ما نستخدمه عدا ذلك في الشركة.
لقد غيّرنا ذلك الآن. فالتتبع أصبح اعتبارًا من الآن وحدة في Odoo 19 Community لدينا، وبالتالي جزءًا من النظام نفسه الذي يعمل فيه العملاء والعقود والفواتير والدعم. وبالنسبة إلى عملاء التتبع يعني ذلك: تسجيل دخول واحد، وواجهة واحدة، وفاتورة التتبع موجودة حيث توجد جميع الفواتير الأخرى.
لماذا نقلنا التتبع إلى Odoo
نظامان منفصلان يعنيان بيانات رئيسية مزدوجة. فكان كل عميل موجودًا مرة في نظام التتبع ومرة في ERP، وكان كل تغيير عنوان يجب إجراؤه مرتين، وكانت دورة فوترة التتبع تنتج مستندات تنتقل بعد ذلك يدويًا إلى المحاسبة.
ومع الانتقال إلى Odoo يسري الآن مبدأ بسيط: البيانات الرئيسية في Odoo، والبيانات الضخمة خارجه. العملاء والمستخدمون وأجهزة التتبع والمجموعات والمناطق الجغرافية والمنتجات والأسعار موجودة في Odoo ومرتبطة هناك بالمحاسبة والبوابة وإدارة الصلاحيات. أما بيانات المواقع – أي التدفق الفعلي للبيانات من الأجهزة على مدار الساعة – فتبقى في مخزن مواقع خاص. وقاعدة بيانات ERP ليست المكان المناسب لملايين نقاط GPS، ولا يلزم أن تكون كذلك.
خادم التتبع الذي يستقبل الأجهزة لم يتأثر بالانتقال. وهذا بالذات ما جعل إعادة البناء واقعية أصلًا: فقد أمكن إنشاء الواجهة من جديد دون المساس باستقبال البيانات.
ما الذي يجده عملاؤنا الآن في البوابة
يسجّل عملاء التتبع الدخول إلى بوابة عملاء Odoo ويجدون هناك قسم التتبع. ومن يستخدم التتبع وحده يصل بعد تسجيل الدخول مباشرةً إلى الخريطة ولا يرى أي محتوى آخر من البوابة.
الخريطة المباشرة
تعرض الخريطة جميع المركبات الخاصة والمتاحة للمشاركة مع الحالة (في حركة، متوقفة، غير متصلة) والسرعة واتجاه السير والعنوان المحلَّل. وتصل المواقع في الزمن الحقيقي عبر اتصال WebSocket بخادم التتبع – اتصال واحد للتركيب بأكمله، وليس اتصالًا لكل متصفح مفتوح – وتُوزَّع بعد التصفية: يحصل كل عميل فقط على المركبات التي يملكها أو التي أُتيحت له. وتتحرك المركبات بسلاسة بين بلاغين بدلاً من أن تقفز.
وتتوفر خرائط أساسية للاختيار: OpenStreetMap وخريطة تضاريس وخريطة Basemap النمساوية الرسمية مع الصورة الجوية وخريطة بالأبيض والأسود؛ ويمكن إضافة التضاريس والمباني ثلاثية الأبعاد كطبقات. أما العرض الذي تُفتح به الخريطة – نوع الخريطة والنطاق والمجموعة الافتراضية – فيتذكره Odoo لكل مستخدم.
دفتر رحلات مع رحلات الشركة والرحلات الخاصة
تُكتشف الرحلات على الخادم وليس في المتصفح: فالرحلة تحدث حتى لو لم يفتح أحد الخريطة. ويُسجَّل لكل رحلة البداية والنهاية وعنوان الانطلاق والوصول وقراءة عداد المسافة والمسافة والمدة.
يمكن تصنيف كل رحلة بوصفها رحلة شركة أو رحلة خاصة – لكل رحلة وليس لكل مركبة، لأن السيارة نفسها تذهب صباحًا إلى العميل وتعود مساءً إلى المنزل، ولأن هذا التمييز ذو أهمية ضريبية في النمسا. وعند بدء الرحلة تظهر على الخريطة مباشرةً نافذة التصنيف؛ ومن يفعل ذلك لاحقًا يجد الرحلة في دفتر الرحلات مع حقل للملاحظات. ويُتعرَّف على السائقين عبر شرائح المفاتيح iButton إذا كانت المركبة مجهزة بها.
يتوفر تقريران، كلاهما بصيغتي PDF وExcel:
- دفتر الرحلة الفردي – رحلات مركبة واحدة في الفترة المحددة مع المسار والتصنيف والملاحظة
- دفتر رحلات الأسطول – سطر لكل مركبة مع زمن القيادة والمسافة والفصل بين الكيلومترات الخاصة بالشركة والخاصة والاستهلاك المقدَّر، إضافةً إلى مجاميع المجموعات والمجموع الكلي
المناطق الجغرافية والإنذارات
تُرسم المناطق الجغرافية مباشرةً على الخريطة – كدائرة أو مربع أو مضلع حر – أو تُؤخذ من قوالب مشتركة مثل «النمسا» أو «فيينا». ويمكن تحديد لكل منطقة ومركبة ما إذا كان يُنذَر عند الدخول أو الخروج وإلى أين: عبر SMS أو البريد الإلكتروني أو Webhook أو كرسالة إلى مركز الاتصال لدينا.
تظهر الإنذارات – تغيير المنطقة، السرعة، الإشعال، فقدان الجهد، الاستغاثة، الحركة، عدم الاتصال – كسجلات مستقلة في Odoo، مع الوقت والموقع وحالة المعالجة.
البحث: أي مركبة كانت هنا؟
تصل مخالفة مرورية ومكتوب عليها موضع القياس – لكن أي مركبة كانت؟ الجواب عن ذلك بالضبط هو البحث في مسار الرحلات: اختر نقطة على الخريطة أو عنوانًا، وحدّد النطاق والفترة، ويُظهر التتبع المركبات التي كانت هناك. وتتوفر مواضع قياس السرعة من OpenStreetMap لهذا الغرض بالفعل كطبقة على الخريطة.
الإدارة من العميل نفسه
ما كان يجب سابقًا تفويضه إلينا، ينجزه العملاء الآن في البوابة:
- تفعيل أجهزة التتبع – أدخل IMEI من ملصق الجهاز، واختر مجموعة أو أنشئ واحدة جديدة، وانتهى الأمر
- أجهزة التتبع والمجموعات – التسميات والرموز وتعيين المجموعة وعمليات التزود بالوقود مع الكمية والسعر وتقارير لكل مركبة
- الصلاحيات – إتاحة المركبات لمستخدمين أو شركات أخرى، بحق القراءة أو الكتابة، مع إمكانية إخفاء حقول معينة مثل العنوان أو قراءة العداد
- المناطق الجغرافية – الرسم والتعديل وتحديد الإنذار
- iButtons – ربط شرائح المفاتيح بأسماء السائقين
ما الذي تغيّر لدينا داخليًا
في الواجهة الخلفية لـ Odoo يوجد قسم التتبع مع الخريطة المباشرة وإدارة أجهزة التتبع والإنذارات والرحلات والبيانات الرئيسية (المجموعات والمناطق الجغرافية وأنواع الأجهزة والمصنّعون) والمحاسبة.
إدارة أجهزة التتبع. يحمل كل جهاز IMEI ورقم هاتف SIM ونوع الجهاز والمداخل والمخارج (الإشعال وقفل المحرك والتدفئة الثابتة وغيرها) والمعايرة وتصحيح العداد وعتبة عدم الاتصال ومعاملات دفتر الرحلات. ويسجّل سجل الدردشة (Chatter) في Odoo كل تغيير.
رسائل SMS إلى الأجهزة. تُضبط أجهزة التتبع عبر SMS. ويجري الإرسال الآن من Odoo، ويُسجَّل دون أي ثغرة، وهو محمي من سوء الاستخدام: فحدّ أقصى لكل عملية إرسال يمنع نقرة واحدة من إطلاق مئات الرسائل المدفوعة، ولا تُسلَّم أصلًا أرقام الهاتف غير المكتملة.
مركز الاتصال. تظهر بلاغات السرقة والحوادث كعمليات مع بيانات المركبة وبيانات اتصال المالك وسير عمل موجَّه: هل تم الوصول إلى المالك؟ إنذار كاذب؟ إجراءات أخرى؟ ويُسجَّل كل خطوة، ويُبلَّغ المعالجون المختصون عبر إشعار Push.
الفوترة. تأخذ دورة الفوترة في الاعتبار جميع أجهزة التتبع التي حان موعد فوترتها التالي، وتنتج منها مسودات فواتير في Odoo – بسعر العميل النهائي أو سعر الشريك. ويبقى الاعتماد عمدًا بيد المحاسبة: فالدورة لا ترحّل شيئًا، بل تُعدّ فقط. وفترة الفوترة والمنتج والموعد التالي مرتبطة بجهاز التتبع؛ وبعد الدورة تظهر بنود الفاتورة مباشرةً على الجهاز.
البنية الكامنة وراءه
أجهزة GPS
│
▼
خادم التتبع ──► مخزن المواقع Odoo 19 Community
(دون تغيير) اليوم: قاعدة ├─ البيانات الرئيسية (أجهزة التتبع، العملاء، المناطق الجغرافية)
البيانات القائمة ├─ بوابة العملاء /my/ortung
لاحقًا: PostGIS ├─ الواجهة الخلفية Ortung / …
▲ ├─ الفوترة (مسودات فواتير)
└── للقراءة فقط ─┘
يجري الوصول إلى المواقع حصريًا عبر واجهة قابلة للاستبدال. واليوم يقرأ Odoo من قاعدة بيانات التتبع القائمة التي يواصل خادم التتبع تعبئتها دون تغيير. وبذلك يكون الانتقال إلى خادم PostGIS خاص تغييرًا في الإعدادات وليس إعادة بناء – وتتولى PostGIS بنفسها حينئذٍ التحليلات المكانية مثل فحوص المناطق الجغرافية. وللتطوير والتدريب يوجد إضافةً إلى ذلك مخزن تجريبي ببيانات اصطناعية تعمل به الوحدة حتى دون خادم تتبع.
تُحلَّل العناوين عبر مُرمِّز جغرافي (Geocoder) خاص وتُخزَّن مؤقتًا في Odoo، مع تقريب إلى نحو أحد عشر مترًا: فلا يُعاد تحليل المركبة الواقفة مع كل تشويش في GPS، ولا تعتمد الخريطة على زمن استجابة خدمة خارجية.
كيف جرى الانتقال
لم ننتقل دفعة واحدة، بل خطوة خطوة وفق نمط Strangler: بقي النظام القديم قابلًا للتشغيل، وقرر وكيل عكسي (Reverse Proxy) لكل مسار من يجيب، وعملت الخريطة الجديدة في البداية لمجموعة تجريبية بالتوازي مع القديمة.
وكان نقل البيانات الرئيسية الجزء الأدق في ذلك. يقرأ سكربت ترحيل العملاء والمستخدمين وأجهزة التتبع والمجموعات والمناطق الجغرافية من التطبيق القديم وينشئها في Odoo – قابلًا للتكرار كتشغيل فروق (Delta)، مع المعرّف القديم كمفتاح. ولأن كثيرًا من عملاء التتبع كانوا موجودين في Odoo منذ زمن كشركاء، يقترح معالج مطابقات يجب تأكيد كل منها على حدة: فشركة رُبطت خطأً سترى مركبات غيرها، وهذا أغلى من تكرار سجل.
وما لم يُنقل عمدًا: قاعدة الشيفرة المزدوجة لسطح المكتب والجوال (واجهة Odoo الأمامية متجاوبة)، وجدول الترجمة الخاص، ومعالجة الصلاحيات والجلسات الخاصة، وعشرات التقارير التي لم يعد أحد يفتحها عمليًا.
ماذا يعني ذلك لكم كعملاء
إذا كنتم من عملاء التتبع لدينا، فقد تلقّيتم وصول البوابة بالفعل أو ستتلقونه في الأسابيع القادمة. وقد نُقلت مركباتكم ومجموعاتكم ومناطقكم الجغرافية وصلاحياتكم؛ ويستمر دفتر الرحلات دون انقطاع.
تجدون في بوابة واحدة التتبع والفواتير وطلبات الدعم. وإذا أردتم أكثر من التتبع – Helpdesk وعقود الصيانة وفوترة المشاريع – فالنظام هو نفسه.
يسعدنا الإجابة عن الأسئلة المتعلقة بالانتقال. ومن يبحث لشركته عن تتبع للمركبات مرتبط بنظام ERP بدلاً من أن يقف بجانبه: تواصلوا معنا.