تخطي للذهاب إلى المحتوى

Odoo 19: أرشفة الشركة مع مستخدمي البوابة – وحدة partner_archive_users مع سؤال تأكيد بدلاً من رسالة خطأ

3 نوفمبر 2026 | Odoo 19 Community | تطوير ذاتي
3 نوفمبر 2026 بواسطة
Odoo 19: أرشفة الشركة مع مستخدمي البوابة – وحدة partner_archive_users مع سؤال تأكيد بدلاً من رسالة خطأ

وحدة Odoo 19 المسماة partner_archive_users: سؤال تأكيد عند أرشفة شركة لها مستخدمو بوابة

غادرت شركة عميلة، وانتهى العقد، وتريدون أرشفتها في Odoo. فيرد Odoo برسالة خطأ: «لا يمكنك أرشفة جهات اتصال مرتبطة بمستخدم نشط. أرشف المستخدم التابع لها أولاً.» وإذا كان للشركة عدة حسابات دخول إلى البوابة، فهذا يعني: البحث عن كل مستخدم على حدة، وأرشفته على حدة، والعودة إلى الشركة، وأرشفتها مرة أخرى.

ولهذا كتبنا الوحدة الصغيرة أرشفة الشركة مع مستخدمي البوابة (partner_archive_users) لـ Odoo 19. فبدلاً من رسالة الخطأ يظهر سؤال تأكيد، وعند «نعم» يُؤرشف مستخدمو البوابة والشركة في خطوة واحدة. والوحدة متوفرة كبرمجية حرة بموجب رخصة AGPL-3 على GitHub:

github.com/Alex0176/odoo-partner-archive-users

نستخدم الوحدة في Biricon IT Services منذ 3 نوفمبر 2026 في نظامنا الإنتاجي. وهي جديدة، أي أن الخبرة بها قصيرة. ومن يعتمدها ينبغي أن يقرأ الأقسام الخاصة بـ النطاق و الحدود .

المشكلة في Odoo القياسي

يفحص Odoo عند أرشفة جهة اتصال ما إذا كان هناك مستخدم مرتبط بها، ويتوقف إن وُجد. والفحص منطقي، لأن كل مستخدم يحتاج إلى جهة اتصال. وبالنسبة للمستخدمين الداخليين، أي الموظفين، فالمنع مقصود أيضاً. أما مع مستخدمي البوابة من العملاء فهو في الأساس عمل يدوي. فكل شركة عميلة لها حسابات دخول إلى البوابة، مثلاً للاطلاع على الفواتير والتذاكر، تحتاج عند الأرشفة إلى المسار نفسه:

  1. البحث عن مستخدمي الشركة وجهات الاتصال المسؤولة لديها،
  2. أرشفة كل واحد على حدة،
  3. العودة إلى الشركة،
  4. أرشفة الشركة.

الحل: سؤال تأكيد

توسّع الوحدة المسار إجراء ← أرشفة في جهة الاتصال، في النموذج وفي القائمة. وإذا كان بالشركة المحددة أو بجهات الاتصال المسؤولة لديها مستخدمو بوابة نشطون، يُفتح حوار يطرح السؤال «هل تريد حقاً أرشفة الشركة؟ لا يزال هناك مستخدمون نشطون في النظام.» وتحته يظهر المستخدمون المعنيون بالاسم واسم الدخول وجهة الاتصال.

مقارنة: رسالة خطأ 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. والأخطاء والتحسينات مرحَّب بها كمسألة (Issue) في مستودع GitHub .

الدعم من Biricon IT Services

نرعى تثبيتات Odoo للشركات الصغيرة والمتوسطة: من التطبيق الأولي مروراً بالتخصيصات والترحيلات وصولاً إلى التشغيل المستمر. وإذا أردتم تبسيط إجراءات مثل أرشفة الشركات العميلة في Odoo، أو إعداد بوابة لعملائكم، أو إدخال وحدة بأمان إلى نسختكم الإنتاجية، فيسعدنا مساعدتكم. تطويرات ذاتية أخرى: أرقام مستندات من بادئة وسنة وعدّاد, السجل التجاري والتحقق من العناوين للعملاء النمساويين و مجموعات المنتجات في عرض السعر كقسم.

تواصلوا معنا الآن

الحالة بتاريخ: 3 نوفمبر 2026. إصدار الوحدة 19.0.1.0.0 مع إصلاح اليوم نفسه. جميع الأسماء وأسماء الدخول في الصور مختارة اعتباطياً.