توثيق إدارة الخدمات الميدانية لأودو
دليل إدارة الخدمات الميدانية لأودو: تثبيت الوحدة وضبط التوزيع والعروض والتتبع والجداول الزمنية ومخزون السيارة والفوترة، وبناء تطبيق الفنيين ونشره واستخدامه.
يشرح الإصدار 1.0.0حُدّث في 29 أكتوبر 2026
ابدأ من هنا
ببساطة: تمنحك هذه الحزمة نظام خدمة ميدانية كاملًا لـ أودو Community: وحدة أودو (
taqnix_fsm) للمكتب، والشيفرة المصدرية بـ Flutter لـتطبيق الآيفون والأندرويد الذي يستخدمه فنيّوك على الطريق، حتى دون شبكة. يخطط المكتب المهام ويوزّعها ويتابع الفنيين على الخريطة ويفوتر العمل؛ ويقبل الفني المهمة ويقود إلى العميل ويعمل بمؤقت ويمسح القطع المستخدمة ويلتقط الصور ويأخذ التوقيع ويرسل الفاتورة من الهاتف.نصيحة: لا تحتاج إلى أودو Enterprise: تستخدم الوحدة التطبيقات المجانية المشروع والجداول الزمنية والمخزون والفوترة فقط، وOpenStreetMap للخرائط (دون مفتاح خرائط مدفوع).
محتويات الحزمة
| البند | ما هو |
|---|---|
taqnix_fsm.zip | وحدة أودو 19: أوامر الخدمة والتوزيع والعروض والخريطة الحية والسياج الجغرافي والمؤقت والجداول الزمنية ومخزون السيارة والتوقيع والصور والفوترة والإشعارات الفورية وواجهة برمجة التطبيق وترجمة عربية واختبارات آلية. |
flutter-app-source.zip | مشروع Flutter لتطبيق الفني (أندرويد وiOS): قاعدة بيانات دون اتصال ومحرك مزامنة وموقع في الخلفية وماسح باركود ولوحة توقيع وصور وفاتورة. مع سكربت إعداد وملف README خاص به واختبارات. |
documentation/ | هذا الدليل بالإنجليزية (index.html) والعربية (index-ar.html) مع ملفات PDF، والملف API.md للمطورين. |
licensing/ | الرخصة (OPL-1: شراء واحد = شركة واحدة وعلامة تطبيق واحدة مع التحديثات). |
preview-images/ | لقطات من التطبيق ومن شاشات أودو. |
changelog.txt | سجل الإصدارات. |
كيف يعمل
| الجزء | أين يعمل | ماذا يفعل |
|---|---|---|
| وحدة أودو | خادم أودو لديك | تحفظ أوامر الخدمة والفنيين والوقت والقطع والصور والتواقيع والفواتير؛ وتقرر من تُعرض عليه المهمة؛ وتجيب التطبيق على /api/fsm/v1/.... |
| خريطة التوزيع | متصفح المُوزِّع | تعرض الفنيين والمهام على OpenStreetMap وتتحدث تلقائيًا وترسم مسار اليوم. |
| تطبيق الفني | هواتف فنيّيك | يعمل من قاعدة بيانات محلية (SQLite). كل ما يفعله الفني يُحفظ على الهاتف أولًا ثم يُرسل عند توفر الشبكة. |
| Firebase (اختياري) | يوصل الإشعارات الفورية: مهمة جديدة، مهمة معروضة، مهمة تغيّرت أو أُلغيت. |
ببساطة: تمر المهمة بهذه الخطوات: جديد ← مُسنَد ← في الطريق ← (وصل) ← قيد التنفيذ ← (موقوف) ← منجز. تُختم كل خطوة بموقع GPS ووقت الهاتف، ولا يمكن تعديل هذه الأختام بعد ذلك. وفي النهاية يسجّل أودو الجدول الزمني ويُخرج القطع من مخزون السيارة ويجهّز الفاتورة.
ما تحتاج إليه
| البند | التفاصيل |
|---|---|
| أودو | الإصدار 19.0 Community أو Enterprise. تُثبَّت تلقائيًا مع الوحدة تطبيقات المشروع والجداول الزمنية والمخزون والفوترة والتموضع الجغرافي لجهات الاتصال. |
| مكتبات بايثون | PyJWT وrequests (للإشعارات الفورية). نفّذ pip install PyJWT requests إن لم تكن موجودة في أودو لديك. |
| محرك PDF | wkhtmltopdf كأي أودو (ملف PDF لتقرير الخدمة والفاتورة). |
| العنوان | عنوان https عام لأودو: يجب أن تصل الهواتف إليه. الشهادة الموقّعة ذاتيًا لا تعمل على الهواتف. |
| البريد الصادر | خادم بريد صادر في أودو (الإعدادات ← التقنية ← خوادم البريد الصادر) لإرسال الفواتير والتقارير بالبريد. |
| حاسوب لبناء التطبيق | جهاز Mac للآيفون والأندرويد (ويندوز أو لينكس يبنيان الأندرويد فقط) بمساحة حرة نحو 30 غيغابايت. |
| أدوات المطوّر | Flutter 3.41 أو أحدث وAndroid Studio وXcode (الإصدارات الحالية) مع CocoaPods. |
| حسابات المتاجر | Google Play Console (رسم لمرة واحدة) وبرنامج Apple Developer (رسم سنوي). ويمكنك أيضًا التوزيع على موظفيك دون المتاجر العامة (الاختبار الداخلي وTestFlight وApple Business Manager). |
| اختياري | مشروع Firebase مجاني للإشعارات الفورية. |
ثبّت وحدة أودو
- فُكّ ضغط الحزمة. بداخلها
taqnix_fsm.zip؛ فُكّه لتحصل على المجلدtaqnix_fsm. - انسخ المجلد إلى أحد مجلدات
addons_pathفي خادم أودو وأعد تشغيل أودو. - سجّل الدخول كمدير وفعّل وضع المطوّر ثم افتح التطبيقات واضغط تحديث قائمة التطبيقات.
- أزل مرشح «التطبيقات» وابحث عن Field Service Management واضغط تثبيت.
# or from the command line ./odoo-bin -c odoo.conf -d YOUR_DATABASE -i taqnix_fsm --stop-after-init
ببساطة: بعد التثبيت يظهر تطبيق جديد باسم الخدمة الميدانية في القائمة الرئيسية. ينشئ التثبيت أيضًا مشروع الخدمة الميدانية (للجداول الزمنية) والمنتجات عمالة الخدمة الميدانية ورسوم الاستدعاء والتنقل، وستة أنواع خدمة ومهارات وقوائم تحقق وأسباب إيقاف وقوالب البريد. ويمكنك تغيير كل ذلك أو حذفه.
مهم: خذ نسخة احتياطية قبل التثبيت على قاعدة بيانات الإنتاج كما تفعل مع أي وحدة.
الإعداد الأول في 10 دقائق
- افتح الخدمة الميدانية ← الإعداد ← الإعدادات وراجع الأقسام (الفصل 8). القيم الافتراضية تناسب معظم الشركات.
- تحقق من منتج العمالة وسعره في الفوترة (الإعدادات، الفصل 8) ومن منتجي الاستدعاء والتنقل.
- أنشئ الفنيين (الفصل 7): مستخدم أودو، وموظفًا للجداول الزمنية، ومهارات، وموقع مخزون للسيارة.
- ضع القطع في السيارات: تسوية مخزون عادية أو نقل في المخزون إلى موقع كل سيارة.
- عدّل أنواع الخدمة لتطابق خدماتك: المدة والسعر وقائمة التحقق والإثبات المطلوب (الفصل 9).
- أنشئ أول أمر خدمة (الفصل 10) ووزّعه وجرّبه في التطبيق (الفصلان 13 و14).
نصيحة: القيم الافتراضية محايدة بما يكفي للتكييف والسباكة والكهرباء وتقنية المعلومات وإصلاح الأجهزة والأمن والخدمات العقارية. ينتهي الفصل 8 بجدول وصفات حسب المجال.
الفنيون والمُوزِّعون والمديرون
ببساطة: توجد ثلاث مجموعات في الإعدادات ← المستخدمون ← الخدمة الميدانية:
| المجموعة | تستطيع | تستخدم |
|---|---|---|
| الفني | تسجيل الدخول إلى تطبيق الجوال ورؤية مهامه والمهام المعروضة عليه وتنفيذ العمل. في أودو لا يرى إلا أوامر الخدمة الخاصة به. | الهاتف |
| المُوزِّع | إنشاء أوامر الخدمة وإسنادها وإلغاءها، واستخدام الخريطة، وإنشاء الفواتير وإرسالها، ورؤية كل الأوامر والفنيين والتتبع. | أودو في المتصفح |
| المدير | كل ما يفعله المُوزِّع مع الإعدادات وأنواع الخدمة وقوائم التحقق والأجهزة، وحق إنجاز أمر خدمة دون الإثبات المطلوب. | أودو في المتصفح |
ببساطة: لإضافة فني افتح الخدمة الميدانية ← الفنيون ← الفنيون واضغط جديد: اختر مستخدم أودو (أنشئه أولًا في الإعدادات ← المستخدمون؛ ولا يحتاج إلى أي صلاحية أخرى)، والموظف الذي يستلم الجداول الزمنية، والفرق، والمهارات، وسعر الفوترة بالساعة (اختياري)، وموقع مخزون السيارة. اضغط إنشاء موقع السيارة لإنشاء موقع تحت مخزون مستودعك. ويحصل الفني على مجموعة الفني تلقائيًا.
نصيحة: اسم المستخدم وكلمة المرور في أودو هما ما يُستخدم في التطبيق. أعطِ الفنيين كلمة مرور قوية؛ وتسجيل الخروج من كل الأجهزة في نموذج الفني يلغي كل الهواتف دفعة واحدة.
الإعدادات قسمًا قسمًا
ببساطة: تضم الخدمة الميدانية ← الإعداد ← الإعدادات كل قواعد الشركة. تبيّن كل كتلة أدناه ما تفعله ومتى تغيّرها. الإعدادات خاصة بكل شركة.
| الإعداد | ماذا يفعل |
|---|---|
| التوزيع الافتراضي | مُسنَد إلى فني: يختار المُوزِّع فنيًا. مفتوح للفريق: يرى كل فني في الفريق (بالمهارات المطلوبة) المهمة ويحصل عليها أول من يقبلها. معروضة على الفنيين القريبين: الفنيون ضمن نطاق المهمة فقط، من آخر موقع لهم، بدءًا بالأقرب. يمكن تغييره لكل أمر خدمة. |
| نطاق العرض (كم)، أقصى عدد من الفنيين تُعرض عليهم المهمة، ينتهي العرض بعد (دقائق)، جولات العرض قبل تنبيه المُوزِّع | إلى أي مدى، وعلى كم فني، وكم تدوم صلاحية العرض (بالدقائق)، وكم جولة تُجرَّب. إن لم يقبل أحد يتضاعف النطاق (اختياريًا) وتُعرض المهمة من جديد؛ وبعد الجولة الأخيرة يتلقى المُوزِّع مهمة متابعة. |
| يمكن للفنيين رفض مهمة / يمكن للفنيين إعادة مهمة | يستطيع الفني رفض مهمة مُسنَدة إليه، أو إعادتها قبل بدء العمل. فتعود إلى المُوزِّع (أو إلى العرض). |
| يمكن للفنيين إنشاء الأوامر في التطبيق | للعملاء الذين يحضرون مباشرة وللأعمال الإضافية المكتشفة في الموقع: ينشئ الفني أمر خدمة من الهاتف ويُسنَد إليه. |
| الإعداد | ماذا يفعل |
|---|---|
| توقيع العميل مطلوب | لا يمكن إنجاز الأمر دون التوقيع (يمكن تجاوزه لكل نوع خدمة). |
| صورة قبل العمل مطلوبة / صورة بعد العمل مطلوبة | تُشترط صورة واحدة على الأقل من كل نوع. |
| قائمة التحقق | يجب تحديد البنود المعلَّمة مطلوبة في قائمة التحقق. |
| مهلة تصحيح أمر منجز | يستطيع الفني إضافة ملاحظات وقطع وصور خلال هذا العدد من الساعات بعد الإنجاز. |
| الإعداد | ماذا يفعل |
|---|---|
| تتبع الموقع | متوقف؛ فقط أثناء تنفيذ المهمة (من «في الطريق» حتى «منجز»)؛ خلال ساعات العمل (حتى في وقت الخمول، فتتمكن من عرض المهام على أقرب فني). |
| أخذ عينات موفّر للبطارية | الفاصل أثناء الحركة (30 ث افتراضيًا) وأثناء السكون (300 ث) وأدنى مسافة بين النقاط (25 م) ومستوى البطارية الذي يقلل التطبيق دونه أخذ العينات. |
| اكتشاف الوصول (السياج الجغرافي) | نطاق حول المهمة (150 م افتراضيًا) والمدة التي يجب أن يبقى فيها الفني داخله (بالثواني). ثم: اسأل الفني (إشعار فوري مع سؤال في التطبيق) أو تعليم كوصول أو تعليم كوصول وبدء العمل (يشغّل المؤقت). |
| الخصوصية | النص الظاهر في التطبيق قبل طلب إذن الموقع، وعدد الأيام التي تُحفظ فيها نقاط الموقع (30 افتراضيًا). |
| الإعداد | ماذا يفعل |
|---|---|
| الجداول الزمنية | عند الإنجاز يُسجَّل وقت العمل (دون فترات الإيقاف التي توقف المؤقت) على موظف الفني، في مهمة الأمر. سطر لكل أمر أو سطر لكل فترة عمل؛ وتقريب للأعلى اختياري (مثلًا 15 دقيقة). |
| مهمة مشروع لكل أمر | يحصل كل أمر على مهمة في مشروع الخدمة الميدانية، لتقارير الجداول الزمنية ولتطبيق المشروع. |
| تنبيه عندما لا يكون للفني موظف | يتلقى المُوزِّع مهمة متابعة عند تعذّر تسجيل جدول زمني. |
| الإعداد | ماذا يفعل |
|---|---|
| عند استخدام القطع | اعتماد حركات المخزون: عند إنجاز الأمر يُنشأ نقل من السيارة إلى العميل ويُعتمد. إنشاء النقل لاعتماده لاحقًا: ينتظر النقل أمين المخزن. عدم تحريك المخزون: للفوترة فقط. |
| الموقع الأب لمواقع السيارات | تُنشأ مواقع السيارات الجديدة تحت هذا الموقع. |
| السماح بقطع ليست في السيارة / يمكن للفنيين إضافة أي منتج | الوضع الصارم: لا يستطيع الفني استخدام إلا ما في السيارة. |
| الأسعار في التطبيق | إظهار الأسعار للفني، والسماح له بتغييرها كخيار منفصل. |
| الإعداد | ماذا يفعل |
|---|---|
| الفوترة الافتراضية | الوقت والمواد أو سعر ثابت أو المواد فقط؛ ومنتج العمالة، وهل يُستخدم سعر الفني بالساعة (الفصل 15). |
| فوترة حسب المدة | فوترة الوقت بكتل (15 دقيقة افتراضيًا)، وأدنى وقت قابل للفوترة (60 دقيقة افتراضيًا)، والدقائق التي يغطيها رسم الاستدعاء. |
| الاستدعاء والتنقل | رسم لكل زيارة ورسم عن كل كيلومتر يتجاوز مسافة مجانية، يُقاس من المواقع المسجَّلة بين «في الطريق» و«وصل». |
| إنشاء الفاتورة | يدويًا، أو تلقائيًا عند إنجاز الأمر، مع التأكيد والإرسال بالبريد اختياريًا. |
| الفوترة من التطبيق | ما يستطيع الفني فعله على الهاتف: إنشاء مسودة الفاتورة وتأكيدها وإرسالها إلى العميل بالبريد. |
| الإعداد | ماذا يفعل |
|---|---|
| إشعارات فورية للفنيين | إلى الفني: إسناد مهمة أو تغييرها، عرض مهمة، إلغاء مهمة. |
| رسائل البريد إلى العميل | رسالة عندما يكون الفني في الطريق؛ وتقرير الخدمة (PDF) عند إنجاز العمل. |
| Firebase (التطبيق والخادم) | معرّفات مشروع Firebase وملف JSON لحساب الخدمة (الفصل 17). |
| المجال | الإعدادات المقترحة |
|---|---|
| التكييف والتبريد | أنواع الخدمة: إصلاح (الوقت والمواد) وصيانة وقائية (سعر ثابت مع دقائق مشمولة). مخزون السيارة صارم، وصورة بعد العمل مطلوبة، وقائمة التحقق مطلوبة، والسياج الجغرافي بسؤال الفني. |
| السباكة والإصلاح الطارئ | التوزيع الافتراضي القريبون، نطاق العرض 15-25 كم، التتبع خلال ساعات العمل، رسم استدعاء ورسم تنقل، تعليم الوصول تلقائيًا عبر السياج الجغرافي، دون صور مطلوبة. |
| الكهرباء | قائمة تحقق ببند سلامة (مطلوب)، وسبب الإيقاف مشكلة تتعلق بالسلامة، والتوقيع مطلوب، وصور قبل العمل وبعده. |
| تقنية المعلومات والشبكات | بلا قطع أو بقطع قليلة؛ فوترة الوقت بكتل 15 دقيقة وحد أدنى 30؛ التتبع أثناء المهمة فقط؛ التوقيع مطلوب. |
| إصلاح الأجهزة المنزلية | الوقت والمواد، ومخزون السيارة، ونوع الخدمة زيارة ضمان بالمواد فقط؛ وصور قبل العمل وبعده. |
| الأمن وتركيب كاميرات المراقبة | سعر ثابت لكل تركيب، وصور بعد العمل مطلوبة، وقائمة تحقق تُدوَّن فيها الأرقام التسلسلية. |
| الخدمات العقارية والتنظيف | سعر ثابت، وقائمة التحقق مطلوبة، وتوقيع مدير الموقع، والتتبع أثناء المهمة فقط. |
| المعدات الطبية والمخبرية | التوقيع مطلوب دائمًا، وقائمة التحقق مطلوبة، وإنجاز بدون إثبات للمديرين فقط. |
أنواع الخدمة والمهارات وقوائم التحقق وأسباب الإيقاف
ببساطة: تصف هذه القوائم عملك. توجد في الخدمة الميدانية ← الإعداد وتُنسخ إلى كل أمر خدمة، فتغييرها لا يغيّر الأوامر القديمة أبدًا.
| القائمة | ما يجب معرفته |
|---|---|
| أنواع الخدمة | المدة المخطط لها (تُستخدم في التقويم)، والمهارات المطلوبة، وقائمة التحقق، وهل التوقيع والصور مطلوبة (كما في الإعدادات، نعم أو لا)، وطريقة الفوترة، والسعر، والدقائق المشمولة، والسعر بالساعة، ورسم الاستدعاء. يعرضها التطبيق بلونها. |
| المهارات | تُربط بالفنيين وأنواع الخدمة. عند وجود مهارات في الأمر يُعرض العمل على الفنيين المؤهلين فقط ويأتون أولًا في معالج الإسناد. |
| قوائم التحقق | قوالب مهام؛ يجب إنجاز البنود المعلَّمة مطلوبة قبل الإنجاز عندما يكون الإعداد مفعّلًا. يحدّدها الفني في التطبيق ويستطيع إضافة ملاحظة. |
| أسباب الإيقاف | تُعرض عندما يوقف الفني مهمة مؤقتًا (بانتظار القطع، العميل غير متوفر، استراحة...). يحدد يوقف المؤقت هل تُحتسب فترة الإيقاف وقت عمل؛ ويفرض يتطلب ملاحظة كتابة تعليق. |
أنشئ أوامر الخدمة ووزّعها
ببساطة: تعرض الخدمة الميدانية ← التوزيع ← أوامر الخدمة الأوامر كلوحة حسب الحالة وكقائمة وكتقويم حسب الفني وكتقارير محوري ورسم بياني.
- اضغط جديد واختر العميل. يؤخذ عنوان الخدمة والهاتف والإحداثيات من العميل؛ اضغط بحث لتحديد موقع عنوان عبر OpenStreetMap، أو افتح تبويب الخريطة وانقر على المكان الدقيق.
- اختر نوع الخدمة (يملأ المدة والمهارات وقائمة التحقق) وبداية الموعد والأولوية، واكتب الوصف وتعليمات للفني (رمز البوابة، عمّن يُسأل، المخاطر).
- اختر طريقة التوزيع: حدّد فنيًا، أو اتركه مفتوحًا للفريق أو للفنيين القريبين.
- اضغط التوزيع. يصبح الأمر المباشر مُسنَد ويتلقى الفني إشعارًا فوريًا؛ ويصبح الأمر المفتوح معروضة على الفنيين المؤهلين.
ببساطة: يفتح الزر إسناد... معالج الإسناد: يسرد الفنيين أصحاب المهارات أولًا ثم حسب المسافة إلى المهمة، مع عدد أوامرهم المفتوحة، ويتيح لك الإسناد مباشرة أو تحويل الأمر إلى عرض.
| ما تريده | افعل هذا |
|---|---|
| إعطاء المهمة لشخص آخر | غيّر حقل الفني أو استخدم إسناد...؛ يُخبَر الفني الأول بإزالة المهمة، ويُنبَّه الجديد. |
| الإلغاء | اضغط إلغاء؛ يُخبَر الفني. وإعادة إلى جديد تعيده. |
| معرفة من فعل ماذا وأين | يسرد تبويب السجل كل خطوة بوقت الهاتف وموقع GPS والمسافة من المهمة والمصدر (التطبيق أو أودو أو اكتشاف الوصول). |
| تكرار مهمة متكررة | استخدم إجراء تكرار القياسي في أودو؛ عقود الصيانة المتكررة غير مشمولة (الفصل 20). |
العروض: يستطيع أي فني قبول مهمة
ببساطة: عندما يكون التوزيع مفتوح للفريق أو معروضة على الفنيين القريبين تُرسل المهمة كـعرض إلى الفنيين المؤهلين (الفريق والمهارات، وللقريبين: ضمن نطاق آخر موقع معروف لهم). يتلقون إشعارًا فوريًا ويرونها في قائمة العروض في التطبيق مع المسافة. أول من يضغط قبول يحصل على المهمة؛ ويُخبَر الآخرون بأنها أُخذت، وتُرفض أي إجابة متأخرة.
| الخطوة | ماذا يحدث |
|---|---|
| العرض | يُتخطى الفنيون المنشغلون بمهمة إلا إذا لم يتأهل غيرهم. يُختار حتى أقصى عدد من الفنيين تُعرض عليهم المهمة، بدءًا بالأقرب. |
| الانتهاء | بعد ينتهي العرض بعد دقائق يُجدَّد العرض بنطاق أكبر (إذا كان توسيع النطاق مفعّلًا). |
| التصعيد | بعد الجولة الأخيرة لا تُعرض المهمة بعد الآن ويتلقى قائد الفريق (أو المُوزِّعون) مهمة متابعة: لم يقبل أحد المهمة. |
| الرفض | يستطيع الفني رفض عرض (فيختفي من قائمته) أو مهمة مُسنَدة (فتعود إلى المُوزِّع). |
خريطة التوزيع والموقع الحي
ببساطة: تعرض الخدمة الميدانية ← التوزيع ← الخريطة الفنيين والأوامر على OpenStreetMap. الفنيون شارات دائرية بأحرفهم الأولى ونقطة حالة (أخضر متصل، برتقالي لم يظهر منذ فترة، رمادي غير متصل)، والأوامر دبابيس ملوّنة حسب الحالة وبحلقة حمراء للمهام العاجلة. تتحدث الخريطة تلقائيًا كل 30 ثانية.
| افعل | كيف |
|---|---|
| التصفية | حسب الفريق، أو الأوامر المفتوحة فقط، وإظهار الأوامر والفنيين أو إخفاؤهم. |
| متابعة فني | انقر على الاسم، ثم اضغط مسار اليوم (يُبنى الخط من نقاط الموقع في آخر 8 ساعات). |
| الإسناد من الخريطة | تعرض القائمة للتوزيع الأوامر المنتظرة؛ انقر على أحدها واضغط إسناد. |
| سجل المواقع | يسرد التقارير ← سجل المواقع النقاط (الوقت والدقة والسرعة والبطارية والشبكة). |
ببساطة: ما يرسله التطبيق: خط العرض وخط الطول والدقة والسرعة والاتجاه والارتفاع ومستوى البطارية وحالة الشحن ونوع الشبكة ووقت الهاتف. تُخزَّن النقاط على الهاتف عند غياب الشبكة وتُرسل دفعات (حتى 500) عند عودتها؛ وتُتجاهل النسخ المكررة. ويستخدم الخادم كل نقطة أيضًا لاكتشاف الوصول.
نصيحة: تأتي بلاطات الخريطة من خوادم OpenStreetMap العامة التي لها سياسة استخدام عادل. إن كان لديك عدد كبير من المُوزِّعين فأدخل عنوان مزوّد بلاطات خاص بك أو مدفوع في الإعدادات ← خريطة التوزيع.
ماذا يفعل الفني
ببساطة: بُني التطبيق حول المهمة قيد التنفيذ. في قائمة اليوم يرى الفني المهام والتالية أولًا، مع العميل والعنوان والوقت والخدمة والمسافة.
| الخطوة | في التطبيق | في أودو |
|---|---|---|
| القبول | قبول عرض أو رفضه. | يُسنَد الأمر إلى الفني؛ ويُخبَر الفنيون الآخرون. |
| في طريقي | لمسة واحدة، مع زر الملاحة (يفتح تطبيق الخرائط). | حالة في الطريق؛ يُسجَّل الموقع والوقت؛ يبدأ التتبع؛ بريد اختياري إلى العميل. |
| وصل | يظهر سؤال عندما يكون الهاتف داخل النطاق، أو يلمس الفني «وصل». | حالة وصل، مع المسافة من عنوان العميل. |
| بدء العمل | يشغّل المؤقت. | تبدأ فترة عمل. |
| إيقاف / استئناف | اختيار السبب (بانتظار القطع...) وإضافة ملاحظة. | يتوقف المؤقت مؤقتًا؛ وتُسجَّل فترة الإيقاف مع سببها. |
| القطع | بحث أو مسح الباركود وتحديد الكمية. | أسطر في الأمر؛ ويتحرك المخزون عند الإنجاز. |
| الصور | صور قبل العمل وبعده من الكاميرا أو المعرض. | صور في الأمر، مضغوطة على الهاتف. |
| قائمة التحقق والملاحظات | تحديد البنود وكتابة ما أُنجز. | تُحفظ في الأمر. |
| التوقيع | يوقّع العميل على الشاشة. | الصورة والاسم والوقت والموقع. |
| الإنجاز | يتحقق من وجود كل المطلوب. | الجدول الزمني ونقل المخزون وفاتورة اختيارية وبريد التقرير. |
القطع والباركود والصور والتوقيع
ببساطة: تأتي القطع من مخزون السيارة: موقع الفني في المخزون. في التطبيق يفتح إضافة قطعة بحثًا بالاسم أو الرمز أو الباركود، أو الماسح (الباركود ورموز QR). يُخزَّن الكتالوج وكميات السيارة على الهاتف، فيعمل البحث والمسح دون اتصال.
| القاعدة | التفصيل |
|---|---|
| المخزون | عند الإنجاز يُنشأ نقل استهلاك الخدمة الميدانية من السيارة إلى موقع العميل ويُعتمد (أو يُترك للاعتماد لاحقًا، انظر الإعدادات). وتُحرَّك الإضافات المتأخرة بعد الإنجاز فورًا. |
| نفاد المخزون | افتراضيًا يستطيع الفني إضافة قطعة ليست في السيارة (فيصبح المخزون سالبًا)؛ أوقف ذلك في الإعدادات لرقابة صارمة. |
| القابلية للفوترة | لكل سطر قابل للفوترة؛ والقطعة غير القابلة للفوترة تُخرَج من المخزون مع ذلك. |
| الأسطر المقفلة | بعد تحريك المخزون لا يمكن تغيير السطر أو حذفه؛ أضف سطرًا آخر للتصحيح. |
الوقت والجداول الزمنية والفواتير
ببساطة: يعمل المؤقت ما دام الأمر قيد التنفيذ. توقفه فترة الإيقاف ما لم يقل سببها غير ذلك (مثل انتظار في الموقع (وقت مدفوع)). يسرد تبويب الوقت كل فترة.
ببساطة: الفاتورة فاتورة عميل عادية (
account.move) تُنشأ من الأمر كمسودة. ويعتمد محتواها على طريقة الفوترة:| الطريقة | سطر العمالة | أسطر أخرى |
|---|---|---|
| الوقت والمواد | وقت العمل (مطروحًا منه الدقائق التي يغطيها رسم الاستدعاء)، مقرّبًا للأعلى إلى الكتلة (15 د) وبما لا يقل عن الحد الأدنى (60 د)، بالسعر بالساعة. | القطع القابلة للفوترة؛ رسم الاستدعاء؛ التنقل بعد الكيلومترات المجانية. |
| سعر ثابت | سطر واحد بسعر الأمر أو نوع الخدمة؛ ويُضاف الوقت الذي يتجاوز الدقائق المشمولة كـوقت إضافي بالسعر بالساعة. | كما سبق. |
| المواد فقط | لا شيء. | القطع القابلة للفوترة (والرسوم إن حُددت). |
ببساطة: السعر بالساعة هو أول سعر موجود: سعر نوع الخدمة، ثم سعر الفني (إذا كان الإعداد مفعّلًا)، ثم سعر منتج العمالة. مثال: 79 دقيقة عمل، كتل 15، حد أدنى 60، السعر 85 ← 90 دقيقة ← 127.50؛ وفلتران بسعر 18 ← 36؛ واستدعاء 45 ← 208.50 قبل الضريبة.
- في أودو اضغط إنشاء فاتورة على أمر منجز (أو جده في الفوترة ← للفوترة)، وراجع المسودة وأكّدها كالمعتاد.
- يؤكد إرسال الفاتورة الفاتورة عند الحاجة ويرسلها بالبريد مع ملف PDF إلى جهة اتصال الفاتورة لدى العميل؛ ويمكنك فعل ذلك من التطبيق أيضًا.
- يطبع تقرير الخدمة ملف PDF بقائمة التحقق والقطع والصور والتوقيع؛ ويُرسل إلى العميل تلقائيًا إذا كان الإعداد مفعّلًا.
مهم: يمر البريد عبر خادم البريد الصادر في أودو. فإن لم يكن مهيّأً، أو رفض الخادم الرسالة، يعرض أودو الخطأ ولا يعلّم الفاتورة كمُرسلة.
تطبيق الجوال باختصار
ببساطة: كُتب التطبيق بـ Flutter: قاعدة شيفرة واحدة للأندرويد وiOS، بالإنجليزية والعربية (من اليمين إلى اليسار). ويواصل العمل دون شبكة.
| المجال | ماذا يفعل |
|---|---|
| تسجيل الدخول | عنوان الخادم واسم المستخدم وكلمة المرور في أودو. يُحفظ الرمز في التخزين الآمن للهاتف. |
| المهام | مهام اليوم والقادمة والعروض والمهام المنجزة؛ والتفاصيل والملاحة والاتصال بالعميل. |
| المهمة النشطة | المؤقت وأزرار الحالة وأسباب الإيقاف والقطع والماسح والصور والتوقيع والملاحظات وقائمة التحقق والفاتورة. |
| الخريطة | المهام وموقع الفني على OpenStreetMap. |
| التتبع | موقع في الخلفية يُخزَّن مؤقتًا دون اتصال، مع أخذ عينات موفّر للبطارية؛ ونص الخصوصية وخطوات الإذن. |
| المزامنة | صندوق الصادر للإجراءات وإعادة المحاولة ورسائل التعارض وشاشة بالمشكلات التي يجب حلها. |
| الإعدادات | اللغة والمظهر والمزامنة الآن ومشكلات المزامنة وتشخيص التتبع ومسح البيانات المحلية وتسجيل الخروج (وفي نسخ التطوير فقط مفتاح لمحاكاة العمل دون اتصال). |
ببساطة: دون اتصال أولًا. كل ما يفعله الفني يُكتب في قاعدة البيانات المحلية وفي صندوق الصادر؛ وتقرأ الشاشات من قاعدة البيانات المحلية فقط، فيكون التطبيق سريعًا وقابلًا للاستخدام دون اتصال كما مع الاتصال. وعند توفر الشبكة يرسل التطبيق صندوق الصادر بالترتيب، كل إجراء بمعرّف فريد (فلا يمكن لإعادة المحاولة أن تطبّقه مرتين)، ثم ينزّل ما تغيّر. القواعد: الخادم يقرر الإسناد والإلغاء؛ والهاتف يقرر ما حدث في الميدان (الأوقات والقطع والصور والتوقيع والملاحظات وقائمة التحقق)؛ ولا يُستبدل إجراء معلّق في الهاتف ببيانات أقدم من الخادم أبدًا.
| الحالة | النتيجة |
|---|---|
| ألغى المُوزِّع المهمة بينما كان الفني دون اتصال | تعود الإجراءات بـتعارض: الأمر مغلق وتُسرد في مشكلات المزامنة؛ وتظهر المهمة ملغاة. |
| فنيّان يقبلان العرض نفسه | يفوز الطلب الأول؛ ويحصل الآخر على أُخذت بالفعل. |
| فني يبدأ مهمة أُعيد إسنادها | غير مُسنَدة: تُرفض وتُسرد. |
| ساعة الهاتف خاطئة | يُحفظ وقت الهاتف، لكن ليس قبل الخطوة السابقة في الأمر نفسه. |
| لا مخزون في السيارة (الوضع الصارم) | تُرفض القطعة بـمخزون غير كاف. |
ابنِ التطبيق وانشره
ببساطة: تخطَّ هذا الفصل إن أردت الاختبار فقط:
flutter run يعمل على محاكٍ أو على هاتف موصول.- ثبّت Flutter (3.41 أو أحدث) وAndroid Studio، وعلى Mac ثبّت Xcode مع CocoaPods؛ ونفّذ
flutter doctorوأصلح ما يبلغ عنه. - فُكّ ضغط
flutter-app-source.zipفي مجلد بلا مسافات. - شغّل سكربت الإعداد بعنوان أودو لديك واسم الحزمة الخاص بك:
dart run tools/setup.dart --url https://odoo.example.com --package com.yourcompany.fieldservice. يكتب العنوان والمعرّفات في المشروع؛ وأضف--name "Your Company Service"و--color "#0f766e"و--icon your-icon-1024.pngلضبط اسم التطبيق ولون العلامة والأيقونة (تشغيل السكربت مجددًا آمن). - نفّذ
flutter pub getثمflutter runلتجربته، مسجّلًا الدخول بفني من أودو لديك.
cd flutter-app dart run tools/setup.dart --url https://odoo.example.com --package com.yourcompany.fieldservice flutter pub get flutter run --dart-define=SITE_URL=https://odoo.example.com
| الهدف | الأمر | ثم |
|---|---|---|
| أندرويد (Google Play) | flutter build appbundle --release | ارفع ملف .aab في Play Console. أنشئ مفتاح التوقيع مرة واحدة واحتفظ به بأمان. |
| أندرويد (داخلي، دون متجر) | flutter build apk --release | أرسل ملف .apk إلى فنيّيك (اسمح بالتثبيت من هذا المصدر). |
| آيفون (App Store وTestFlight) | flutter build ipa --release | ارفع بـ Xcode أو Transporter؛ وأنشئ App ID بالإمكانيتين Push Notifications وBackground Modes (location updates). |
مهم: يطلب المتجران تبرير الموقع في الخلفية: استخدم الجملة يسجّل التطبيق موقع الفني خلال ساعات العمل وأثناء تنفيذ المهمة لتوزيع المهام والملاحة وإثبات الوصول، وانشر سياسة خصوصية. ويعرض التطبيق شرحه الخاص قبل أن يطلب الإذن.
ببساطة: الإشعارات الفورية (Firebase): 1) أنشئ مشروع Firebase؛ 2) أضف تطبيق أندرويد وتطبيق iOS باسمي حزمتيك؛ 3) في Project settings ← Cloud Messaging ارفع مفتاح APNs لنظام iOS؛ 4) في أودو (الإعدادات ← الإشعارات) أدخل معرّف المشروع ومفتاح API ومعرّفات التطبيقين، والصق محتوى ملف JSON لحساب الخدمة (Project settings ← Service accounts ← Generate new private key). يقرأ التطبيق المعرّفات من خادمك عند تسجيل الدخول، فلا تحتوي الشيفرة المصدرية أي مفتاح.
العمل اليومي للمُوزِّع
| المهمة | أين |
|---|---|
| فحص الصباح | التوزيع ← للتوزيع (الأوامر الجديدة) والخريطة (من هو متصل). |
| المتأخر | مرشح متأخر في الأوامر (لم تبدأ بعد الموعد المحدد). |
| عروض لم يقبلها أحد | مرشح عُرضت ولم يقبلها أحد، أو مهمة المتابعة في أنشطتك. |
| إنجاز أمر أو إصلاحه | افتحه؛ يستطيع المديرون إنجاز بدون إثبات عندما تعذّر أخذ التوقيع. |
| الفواتير | الفوترة ← للفوترة، ثم الفواتير. |
| القطع المستهلكة | تسرد الفوترة ← القطع المستخدمة عمليات النقل من السيارات. |
| مراسلة فني | ترسل الفنيون ← إرسال إشعار رسالة فورية إلى فنيين تختارهم. |
| التحليل | التقارير ← التحليل: الأوامر وساعات العمل حسب الخدمة والفني والحالة. |
الأمان والخصوصية
| الموضوع | كيف يُعالج |
|---|---|
| الوصول | يسجّل التطبيق الدخول ببيانات أودو؛ ولمستخدمي أودو الداخليين في مجموعة الفني فقط. قواعد السجلات: يرى الفني أوامره والأوامر المعروضة عليه فقط. ولا تستطيع الحسابات ذات المصادقة الثنائية تسجيل الدخول إلى التطبيق. |
| الرموز | رمز عشوائي لكل جهاز، ولا يُخزَّن في أودو إلا بصمته؛ وتُنسى الأجهزة غير المستخدمة منذ 180 يومًا. تسردها الأجهزة؛ ويمكن إخراج الفني من كل مكان. وتبطّئ حماية أودو نفسها كلمات المرور الخاطئة المتكررة (مهلة بعد خمس محاولات فاشلة). |
| حماية الأوامر | يُتحقق من كل إجراء في التطبيق على الخادم: يجب أن يكون الأمر مُسنَدًا إلى المستخدم، وأن تسمح آلة الحالات بالانتقال، وأن تُطبَّق قواعد الإثبات. |
| السجل لا يتغير | الأحداث (الحالة والوقت وGPS) لا يمكن تعديلها أو حذفها، حتى من مدير. |
| الموقع | يُجمع فقط حسب الإعداد، مع نص خصوصية وإذن النظام؛ وتُحذف النقاط الأقدم من مدة الاحتفاظ (30 يومًا افتراضيًا) كل يوم. ولا يرى العملاء موقع الفني. |
| الأسرار | حساب خدمة Firebase يقرؤه مديرو أودو فقط. ولا يحتوي التطبيق إلا معرّفات عامة. |
نصيحة: أخبر فنيّيك بما يُجمع ومتى. في بعض البلدان يتطلب تتبع موقع الموظفين إشعارًا كتابيًا أو موافقة: استخدم نص الخصوصية في الإعدادات وسياستك الخاصة.
أمور يجب معرفتها
| الحد | التفصيل |
|---|---|
| عقود الصيانة المتكررة | غير مشمولة. كرّر الأوامر أو استخدم الإجراءات المجدولة في أودو. |
| تحسين المسارات | غير مشمول. تساعد الخريطة ومعالج الإسناد على الاختيار حسب المسافة؛ وتفتح الملاحة تطبيق الخرائط في الهاتف. |
| أرقام الدفعات والأرقام التسلسلية | يضيف التطبيق القطع بالكمية؛ ويمكن تدوين الأرقام التسلسلية في قائمة التحقق أو الملاحظات. |
| بوابة العميل | غير مشمولة. يتلقى العميل رسائل بريد (في الطريق، تقرير الخدمة، الفاتورة). |
| الموقع في الخلفية على الهواتف | قد يوقف أندرويد وiOS التطبيقات لتوفير البطارية. اطلب من الفنيين السماح بالموقع دائمًا وتعطيل تحسين البطارية للتطبيق؛ ويحتفظ المخزن المؤقت بالنقاط حتى يعود الهاتف إلى الاتصال. |
| إصدار أودو | مبني ومختبر على أودو 19.0. تحتاج الإصدارات الأخرى إلى تكييف الواجهات وبعض الدوال. |
| الخرائط | بلاطات OpenStreetMap العامة للاستخدام المعتدل؛ اضبط خادم بلاطات آخر للاستخدام الكثيف. |
للمطورين
ببساطة: تخطَّ هذا الفصل إن كنت تستخدم المنتج فقط. العقد الكامل لواجهة برمجة التطبيق في
documentation/API.md.# is the server reachable?
curl https://odoo.example.com/api/fsm/v1/ping
# {"ok": true, "api_version": 1, "server_time": "2026-10-26T08:00:00Z"}
# sign in (returns a token and the configuration)
curl -X POST https://odoo.example.com/api/fsm/v1/auth/login -H 'Content-Type: application/json' \
-d '{"login": "sara@example.com", "password": "...", "device": {"id": "abc", "platform": "android"}}'
# send buffered location points
curl -X POST https://odoo.example.com/api/fsm/v1/tracking/batch -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"points": [{"uuid": "1", "lat": 25.2, "lng": 55.27, "speed": 8.3, "heading": 90, "battery": 80, "network": "cellular", "recorded_at": "2026-10-26T08:00:00Z"}]}'
# push the queued actions and pull the changes
curl -X POST https://odoo.example.com/api/fsm/v1/sync -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"cursor": null, "ops": [{"uuid": "9d1c...", "type": "transition", "order_id": 12, "device_time": "2026-10-26T08:01:00Z", "payload": {"to": "en_route", "lat": 25.2, "lng": 55.27}}]}'| المجال | نقاط النهاية تحت /api/fsm/v1 |
|---|---|
| الجلسة | GET /ping و/config و/auth/me؛ POST /auth/login و/auth/logout و/auth/push-token |
| المزامنة | POST /sync (العمليات: transition وclaim وdecline وmaterial_set وphoto_add وsignature_set وnotes_set وchecklist_set وorder_create وinvoice) |
| التتبع | POST /tracking/batch (وأيضًا /api/fsm/tracking/batch) |
| البيانات | GET /jobs/available و/orders/<id> و/catalog/products و/catalog/lookup?barcode= و/van-stock و/customers |
| الملفات | GET /photos/<id> و/orders/<id>/signature و/orders/<id>/invoice.pdf و/orders/<id>/report.pdf |
ببساطة: ترسل الطلبات
Authorization: Bearer <token> واختياريًا Accept-Language. لكل عملية في /sync معرّف فريد uuid وتُجاب بـ applied أو duplicate أو rejected أو conflict مع رمز. للوحدة أكثر من 130 اختبارًا آليًا (--test-tags /taqnix_fsm) وللتطبيق اختبارات وحدة (flutter test).استكشاف الأخطاء
| المشكلة | ما العمل |
|---|---|
| لا يستطيع التطبيق الاتصال | افتح https://your-odoo/api/fsm/v1/ping على الهاتف: يجب أن يجيب {"ok": true}. افحص https والشهادة والعنوان بلا شرطة مائلة في النهاية وأن الوحدة مثبتة في قاعدة البيانات تلك (الصحيحة إن كان لديك عدة قواعد: أضف --db-filter أو إعداد dbfilter). |
| يقول تسجيل الدخول إن الحساب ليس لفني | أضف المستخدم في الفنيون (يحصل على المجموعة تلقائيًا). |
| لا يرى الفني أي مهام | يجب أن يكون الأمر مُسنَد إلى ذلك المستخدم (وليس جديد). افتح الأمر واضغط التوزيع. |
| لا تظهر عروض | افحص الفريق والمهارات والنطاق، وأن للفني موقعًا حديثًا (التتبع مفعّل) للعروض القريبة. |
| الخريطة فارغة أو بيضاء | يجب أن يصل المتصفح إلى خادم البلاطات؛ اضبط عنوان البلاطات في الإعدادات. |
| لا جدول زمني | يحتاج الفني إلى موظف ومشروع الإعدادات؛ راجع مهمة المتابعة المنشأة للمُوزِّع. |
| لا تتحرك القطع في المخزون | افحص إعداد عند استخدام القطع وأن المنتجات قابلة للتخزين؛ وانظر الفوترة ← القطع المستخدمة. |
| لا تُرسل الفاتورة بالبريد | هيّئ خادم البريد الصادر في أودو وافحص بريد العميل. |
| لا إشعارات فورية | افحص معرّفات Firebase وحساب الخدمة في الإعدادات، ومفتاح APNs للآيفون، وأن الفني سمح بالإشعارات. تخبرك الفنيون ← إرسال إشعار عندما يتعذّر الوصول إلى أي شخص. |
| يتوقف الموقع في الخلفية | اسمح بالموقع دائمًا وأزل تحسين البطارية للتطبيق على الهاتف. |
الدعم
المساعدة في التثبيت وإصلاح الأخطاء مشمولان لمدة 6 أشهر مع تحديثات مدى الحياة. تواصل معنا عبر صفحة السوق التي اشتريت منها الوحدة أو راسل support@taqnix.com مع إصدار أودو ولقطة شاشة.