غادرت شركة عميلة، وانتهى العقد، وتريد أرشفتها في Odoo. فيعرض Odoo رسالة خطأ: «لا يمكنك أرشفة جهات اتصال مرتبطة بمستخدم نشط. أرشف المستخدم المرتبط أولًا.» وإذا كانت للشركة عدة حسابات على البوابة، فهذا يعني البحث عن كل مستخدم وأرشفته على حدة، ثم العودة إلى الشركة ومحاولة أرشفتها مجددًا.
لهذا الغرض، طوّرنا الوحدة الصغيرة أرشفة الشركة مع مستخدمي البوابة (partner_archive_users) لـ Odoo 19. فبدلًا من رسالة الخطأ، يظهر طلب تأكيد، وعند اختيار «نعم» تُؤرشف حسابات مستخدمي البوابة والشركة في خطوة واحدة. والوحدة متاحة على GitHub كبرمجية حرة بموجب ترخيص AGPL-3:
github.com/Alex0176/odoo-partner-archive-users
نستخدم الوحدة في نظام الإنتاج لدينا في Biricon IT Services منذ 3 نوفمبر 2026. وهي جديدة، لذا ما تزال خبرتنا بها قصيرة. وينبغي لمن يعتمدها قراءة القسمَين المتعلقَين بـ نطاق العمل و الحدود .
المشكلة في سلوك Odoo الافتراضي
يتحقق Odoo عند أرشفة جهة اتصال مما إذا كان هناك مستخدم مرتبط بها، ويوقف العملية إن وُجد. وهذا التحقق منطقي، لأن كل مستخدم يحتاج إلى جهة اتصال. كما أن هذا المنع مقصود للمستخدمين الداخليين، أي الموظفين. لكنه يتسبب أساسًا بعمل يدوي عند التعامل مع مستخدمي البوابة من العملاء. فكل شركة عميلة لديها حسابات على البوابة، للاطلاع على الفواتير والتذاكر مثلًا، تتطلب الخطوات نفسها عند أرشفتها:
- البحث عن المستخدمين المرتبطين بالشركة وبالأشخاص المعنيين فيها،
- أرشفة كل مستخدم على حدة،
- العودة إلى الشركة،
- أرشفة الشركة.
الحل: طلب تأكيد
توسّع الوحدة وظيفة إجراء → أرشفة في جهة الاتصال، سواء في عرض النموذج أو القائمة. إذا كانت الشركة المحددة أو الأشخاص المعنيون بالتواصل فيها مرتبطين بمستخدمي بوابة نشطين، يظهر مربع حوار يسأل: «هل تريد حقًا أرشفة الشركة؟ لا يزال هناك مستخدمون نشطون في النظام.» وتظهر تحته قائمة المستخدمين المعنيين، مع الاسم واسم تسجيل الدخول وجهة الاتصال.
- نعم، أرشفة الشركة والمستخدمين: تُؤرشف حسابات المستخدمين أولًا، ثم الشركة.
- إلغاء: لا يتغير شيء.
- لا يوجد مستخدمو بوابة: يعمل Odoo كالمعتاد، ولا يظهر أي مربع حوار.
ما الذي يُؤرشف وما الذي لا يُؤرشف
نطاق الوظيفة محدود عن قصد:
- مستخدمو البوابة والمستخدمون العموميون فقط (
share = True). لا تُؤرشف حسابات المستخدمين الداخليين مطلقًا عبر هذا المسار. إذا كانت جهة الاتصال مرتبطة بحساب موظف، تظل رسالة خطأ Odoo تظهر. وهكذا لا يُعطّل أحد حساب موظف بالخطأ بسبب أرشفة شركة. - تبقى جهات اتصال الأشخاص المعنيين بالتواصل نشطة. ولا تُؤرشف إلا حساباتهم على البوابة. يتوافق ذلك مع سلوك Odoo الافتراضي، الذي لا يمس جهات الاتصال الفرعية أيضًا عند أرشفة شركة.
- مسار الأرشفة في الواجهة فقط. أما الاستدعاء المباشر لـ
write({'active': False})، في عملية استيراد أو برنامج نصي مثلًا، فيظل خاضعًا لفحص Odoo المعتاد.
التنفيذ التقني
لا تضيف الوحدة أي حقول جديدة إلى النماذج القائمة. وهي تتكوّن من امتداد لـ res.partner.action_archive ومعالج (partner.archive.users.wizard) يظهر في مربع حوار.
| المكوّن | الوظيفة |
|---|---|
action_archive في جهة الاتصال | يبحث عن المستخدمين النشطين ذوي share = True المرتبطين بجهة الاتصال أو، في حالة الشركات، بجهات اتصال الشركة. إذا وُجد أي منهم، يُرجع مربع الحوار بدلًا من تنفيذ الأرشفة. |
| المعالج | يحفظ الشركة والمستخدمين الذين عُثر عليهم، ويعرضهم، وينفّذ الأرشفة عند اختيار «نعم» باستخدام مفتاح السياق archive_linked_users. |
السياق skip_archive_users_wizard | يعطّل مربع الحوار، وعندئذ يُطبّق فحص Odoo المعتاد من جديد. |
| صلاحيات الوصول | يُسمح للمستخدمين الداخليين (base.group_user) بإنشاء المعالج واستخدامه. |
| الترجمة | تُرفق ترجمة ألمانية (de.po) وقالب ترجمة (.pot). |
يُبحث عن المستخدمين وتُؤرشف حساباتهم بصلاحيات مرتفعة (sudo). وبذلك يعمل مربع الحوار أيضًا للمستخدمين الذين لا يملكون صلاحية الوصول إلى إدارة المستخدمين. أما الجانب المقابل لذلك فموضّح ضمن الحدود.
اكتشاف: نجح الاختبار، لكن مربع الحوار ظل معطّلًا
ظهر في الوحدة عند استخدامها أول مرة خطأ لم تكتشفه الاختبارات الآلية. فعند النقر على «أرشفة» في الواجهة للمرة الأولى، ظهرت شاشة خطأ Odoo بدلًا من مربع الحوار، بالرسالة Cannot read properties of undefined (reading 'map').
السبب: يستدعي عميل الويب action_archive مباشرة، وينفّذ الإجراء المُرجع دون أي معالجة إضافية. ويتطلب ذلك قراءة المفتاح views في الإجراء. لكن الإجراء لدينا لم يتضمن سوى view_mode. يستكمل الخادم مسبقًا الإجراءات الصادرة عن الأزرار ذات type="object" (عبر clean_action داخل call_button)، لكنه لا يفعل ذلك عند الاستدعاء المباشر لـ action_archive. كانت الاختبارات تستدعي الدالة في Python فقط، ولذلك لم يظهر فيها غياب الحقل.
يتكوّن الإصلاح من سطر واحد ("views": [(False, "form")])، مع إضافة فحص في الاختبار يشترط وجود هذا المفتاح تحديدًا. لم تُؤرشف أي بيانات عند حدوث الخطأ. والدرس المستفاد: عند إرجاع إجراء من دالة يستدعيها العميل مباشرة (action_archive وaction_unarchive وما شابههما)، ينبغي تضمين views دائمًا.
التثبيت
git clone https://github.com/Alex0176/odoo-partner-archive-users.git
ln -s /pfad/odoo-partner-archive-users/partner_archive_users /pfad/addons/
odoo-bin -c odoo.conf -d <datenbank> -i partner_archive_users --stop-after-init
تعتمد الوحدة على base وcontacts. يجب إعادة تشغيل خدمة Odoo بعد التثبيت لأن الوحدة تحتوي على شيفرة Python. إذا كنت تدير نظامًا قيد التشغيل الفعلي، فثبّت الوحدة أولًا على نسخة من قاعدة البيانات.
الحدود
- الصلاحيات. بما أن حسابات المستخدمين تُؤرشف بصلاحيات مرتفعة، فكل من يحق له أرشفة جهة اتصال يستطيع أيضًا أرشفة حسابات بوابة هذه الشركة عبر مربع الحوار. ولا ينطبق ذلك على المستخدمين الداخليين. إذا أردت فرض قيود أدق على حسابات البوابة، فعليك تعديل الوحدة.
- لا توجد استعادة تلقائية. إذا أُعيد تفعيل الشركة لاحقًا، تبقى حسابات المستخدمين مؤرشفة، ويجب إعادة تفعيلها يدويًا.
- جهات الاتصال فقط. تتعامل الوحدة مع الشركات بوصفها جهات اتصال (
res.partner). أما أرشفة شركة في Odoo (res.company) فتخضع لفحوص أخرى، مثل التحقق مما إذا كانت لا تزال الشركة الافتراضية لبعض المستخدمين. لم تُصمّم الوحدة لهذا الغرض. - اختُبرت على Odoo 19.0 Community فقط. لم نختبرها على إصدارات أخرى.
الأسئلة الشائعة
لماذا لا تُؤرشف حسابات الموظفين أيضًا؟
يملك المستخدم الداخلي صلاحيات في النظام، وغالبًا ما يرتبط ببيانات ومهام وأذونات خاصة به. ونرى أن تعطيل حسابه كأثر جانبي لأرشفة شركة ينطوي على مخاطرة كبيرة. لذلك تظل رسالة خطأ Odoo قائمة في هذه الحالة.
هل يمكنني تعطيل طلب التأكيد؟
يمكن ذلك في الشيفرة عبر السياق skip_archive_users_wizard. ولا يوجد إعداد لهذا الغرض في الواجهة. عند إلغاء تثبيت الوحدة، يعود سلوك Odoo الافتراضي.
ما الترخيص الذي تخضع له الوحدة؟
بموجب AGPL-3. بلاغات الأخطاء واقتراحات التحسين المقدَّمة كتذاكر في مستودع GitHub موضع ترحيب.
الدعم من Biricon IT Services
نتولى دعم أنظمة Odoo للشركات الصغيرة والمتوسطة، بدءًا من التطبيق، مرورًا بالتخصيص والترحيل، ووصولًا إلى التشغيل المستمر. يسعدنا مساعدتك إذا أردت تبسيط إجراءات مثل أرشفة شركات العملاء في Odoo، أو إعداد بوابة لعملائك، أو تثبيت وحدة بأمان في بيئة التشغيل الفعلي لديك. تطويرات خاصة أخرى: أرقام المستندات من بادئة وسنة وعدّاد, السجل التجاري والتحقق من العناوين للعملاء النمساويين و مجموعات المنتجات كقسم في عرض السعر.
الحالة بتاريخ: 3 نوفمبر 2026. إصدار الوحدة 19.0.1.0.0 مع إصلاح اليوم نفسه. جميع الأسماء وأسماء الدخول في الصور مختارة اعتباطياً.