empowerment_management

This commit is contained in:
blackbelts 2025-07-23 14:35:31 +03:00
parent 053454849b
commit a4f945469d
14 changed files with 1869 additions and 1 deletions

View File

@ -0,0 +1 @@
from . import models

View File

@ -0,0 +1,19 @@
{
'name': 'Odex25 empowerment management',
'description': 'This module empowerment management ',
'author': 'Expert Co. Ltd.',
'website': 'http://exp-sa.com',
'category': 'Odex25-Ensan activity',
'depends': ['base','mail','odex_takaful'],
'data': [
'security/security.xml',
'security/ir.model.access.csv',
'data/ir_sequence_data.xml',
'views/empowerment_management.xml',
],
'installable': True,
'auto_install': False
}

View File

@ -0,0 +1,52 @@
<odoo>
<record id="seq_pa_program_level" model="ir.sequence">
<field name="name">Level Code</field>
<field name="code">pa.program.level</field>
<field name="prefix">LVL/</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="padding">4</field>
</record>
<record id="seq_pa_program_track" model="ir.sequence">
<field name="name">Track Code</field>
<field name="code">pa.program.track</field>
<field name="prefix">TRK/</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="padding">4</field>
</record>
<record id="seq_pa_program" model="ir.sequence">
<field name="name">Program Code</field>
<field name="code">pa.program</field>
<field name="prefix">PRG/</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="padding">4</field>
</record>
<record id="seq_pa_program_activity" model="ir.sequence">
<field name="name">Activity Code</field>
<field name="code">pa.program.activity</field>
<field name="prefix">ACT/</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="padding">4</field>
</record>
<record id="seq_pa_program_medad" model="ir.sequence">
<field name="name">Medad Code</field>
<field name="code">pa.program.medad</field>
<field name="prefix">MD/</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="padding">4</field>
</record>
<record id="seq_pa_program_registration" model="ir.sequence">
<field name="name">Registration Code</field>
<field name="code">pa.program.registration</field>
<field name="prefix">PA/</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="padding">4</field>
</record>
</odoo>

View File

@ -0,0 +1,569 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * ensan_real_estate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-22 12:14+0000\n"
"PO-Revision-Date: 2024-10-22 15:14+0300\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: ar\n"
"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"
"X-Generator: Poedit 3.5\n"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_kanban_inherit
msgid ""
"<b>\n"
" Evaluation:\n"
" </b>"
msgstr ""
"<b>\n"
" التقييم:\n"
" </b>"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_form_inherit
msgid "<span class=\"oe_inline\">( On</span>"
msgstr "<span class=\"oe_inline\"> ( التاريخ </span>"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_form_inherit
msgid "<span>: Lat :</span>"
msgstr "<span> : خط العرض : </span>"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_form_inherit
msgid "<span>; Long:</span>"
msgstr "<span> ; خط الطول : </span>"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_needaction
msgid "Action Needed"
msgstr "إجراء مطلوب"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__activity_ids
msgid "Activities"
msgstr "الأنشطة"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "زخرفة استثناء النشاط"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__activity_state
msgid "Activity State"
msgstr "حالة النشاط"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__activity_type_icon
msgid "Activity Type Icon"
msgstr "أيقونة نوع النشاط"
#. module: ensan_real_estate
#: model:res.groups,name:ensan_real_estate.group_real_estate_evaluation_admin
msgid "Admin"
msgstr "مدير"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__account_asset_id
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_form_inherit
msgid "Asset"
msgstr " الأصل الثابت"
#. module: ensan_real_estate
#: model:ir.model,name:ensan_real_estate.model_account_asset
msgid "Asset/Revenue Recognition"
msgstr "إثبات الأصل/الربح"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__attach_nbr
msgid "Attach Nbr"
msgstr "عدد المرفقات"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_attachment_count
msgid "Attachment Count"
msgstr "عدد المرفقات"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.property_evaluation_form_view
msgid "Close"
msgstr "إغلاق"
#. module: ensan_real_estate
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__internal_property__last_evaluation_state__closed
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__property_evaluation__state__closed
msgid "Closed"
msgstr "مغلق"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__conditional_percentage_owner
msgid "Conditional Percentage Owner"
msgstr "النسبة المشروطة من الواقف"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__country_id
msgid "Country"
msgstr "البلد"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__create_uid
msgid "Created by"
msgstr "أنشأ من قبل"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__create_date
msgid "Created on"
msgstr "تاريخ الإنشاء"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_kanban_inherit
msgid "Date:"
msgstr "تاريخ التقييم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__display_name
msgid "Display Name"
msgstr "الاسم المعروض"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_form_inherit
msgid "Documents"
msgstr "الوثائق"
#. module: ensan_real_estate
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__internal_property__last_evaluation_state__draft
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__property_evaluation__state__draft
msgid "Draft"
msgstr "مسودة"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.property_evaluation_form_view
msgid "Evaluate"
msgstr "تقييم"
#. module: ensan_real_estate
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__internal_property__last_evaluation_state__evaluated
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__property_evaluation__state__evaluated
msgid "Evaluated"
msgstr "تم التقييم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__evaluated_value
msgid "Evaluated Value"
msgstr "القيمة بعد التقييم"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_form_inherit
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.view_account_asset_form_inherits
msgid "Evaluation"
msgstr "نتائج التقييم العقاري"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__date
msgid "Evaluation Date"
msgstr "تاريخ التقييم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_account_asset__evaluation_nbr
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__evaluation_nbr
msgid "Evaluation Nbr"
msgstr "رقم التقييم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_follower_ids
msgid "Followers"
msgstr "المتابعون"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_channel_ids
msgid "Followers (Channels)"
msgstr "المتابعون (القنوات)"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_partner_ids
msgid "Followers (Partners)"
msgstr "المتابعون (الشركاء)"
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "رمز الخط الرائع ، على سبيل المثال FA- المهام"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__building_latitude
msgid "Geo Latitude"
msgstr "خط العرض الجغرافي"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__building_longitude
msgid "Geo Longitude"
msgstr "خط الطول الجغرافي"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_form_inherit
msgid "Geolocate"
msgstr "الموقع الجغرافي"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_form_inherit
msgid "Geolocation"
msgstr "إحداثيات العقار"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__date_localization
msgid "Geolocation Date"
msgstr "تاريخ الحصول على الإحداثيات"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__id
msgid "ID"
msgstr "المُعرف"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__activity_exception_icon
msgid "Icon"
msgstr "الأيقونة"
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "الأيقونة للإشارة إلى استثناء النشاط"
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__message_needaction
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__message_unread
msgid "If checked, new messages require your attention."
msgstr "إذا كان محددًا، فهناك رسائل جديدة تحتاج لرؤيتها."
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__message_has_error
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr "إذا كان محددًا، فقد حدث خطأ في تسليم بعض الرسائل."
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_is_follower
msgid "Is Follower"
msgstr "متابع"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_account_asset__is_property
msgid "Is Property"
msgstr "هل هو عقار؟"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_benefits_representative__is_property_evaluator
#: model:ir.model.fields,field_description:ensan_real_estate.field_external_benefits__is_property_evaluator
#: model:ir.model.fields,field_description:ensan_real_estate.field_grant_benefit__is_property_evaluator
#: model:ir.model.fields,field_description:ensan_real_estate.field_res_partner__is_property_evaluator
#: model:ir.model.fields,field_description:ensan_real_estate.field_res_users__is_property_evaluator
#: model:ir.model.fields,field_description:ensan_real_estate.field_takaful_sponsor__is_property_evaluator
msgid "Is Property Evaluator"
msgstr "مقيّم العقار"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__is_waqf
msgid "Is Waqf"
msgstr "هل وقف"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_benefits_representative__is_waqf_owner
#: model:ir.model.fields,field_description:ensan_real_estate.field_external_benefits__is_waqf_owner
#: model:ir.model.fields,field_description:ensan_real_estate.field_grant_benefit__is_waqf_owner
#: model:ir.model.fields,field_description:ensan_real_estate.field_res_partner__is_waqf_owner
#: model:ir.model.fields,field_description:ensan_real_estate.field_res_users__is_waqf_owner
#: model:ir.model.fields,field_description:ensan_real_estate.field_takaful_sponsor__is_waqf_owner
msgid "Is Waqf Owner"
msgstr "مالك وقف؟"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__last_evaluation_date
msgid "Last Evaluation Date"
msgstr "تاريخ آخر تقييم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__last_evaluation_state
msgid "Last Evaluation State"
msgstr "حالة آخر تقييم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__last_evaluation_pric
msgid "Last Evaluation Price"
msgstr "سعر آخر تقييم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation____last_update
msgid "Last Modified on"
msgstr "آخر تعديل في"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__write_uid
msgid "Last Updated by"
msgstr "آخر تحديث من قبل"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__write_date
msgid "Last Updated on"
msgstr "آخر تحديث في"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_main_attachment_id
msgid "Main Attachment"
msgstr "المرفق الرئيسي"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_has_error
msgid "Message Delivery error"
msgstr "خطأ في تسليم الرسائل"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_ids
msgid "Messages"
msgstr "الرسائل"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "نهاية الوقت المعين للنشاط"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__name
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.property_evaluation_form_view
msgid "Name"
msgstr "الاسم"
#. module: ensan_real_estate
#: code:addons/ensan_real_estate/models/property_evaluation.py:0
#, python-format
msgid "New"
msgstr ""
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "الموعد النهائي للنشاط التالي"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__activity_summary
msgid "Next Activity Summary"
msgstr "ملخص النشاط التالي"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__activity_type_id
msgid "Next Activity Type"
msgstr "نوع النشاط التالي"
#. module: ensan_real_estate
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__internal_property__stamping_state__not_updated
msgid "Not Updated"
msgstr "لم يتم التحديث"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_needaction_counter
msgid "Number of Actions"
msgstr "عدد الإجراءات"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_has_error_counter
msgid "Number of errors"
msgstr "عدد الاخطاء"
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr "عدد الرسائل التي تتطلب إجراء"
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "عدد الرسائل الحادث بها خطأ في التسليم"
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__message_unread_counter
msgid "Number of unread messages"
msgstr "عدد الرسائل الجديدة"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__price_per_meter
msgid "Price Per Meter"
msgstr "سعر المتر"
#. module: ensan_real_estate
#: model:ir.model,name:ensan_real_estate.model_internal_property
#: model:ir.model.fields,field_description:ensan_real_estate.field_account_asset__property_id
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__property_id
msgid "Property"
msgstr "العقار"
#. module: ensan_real_estate
#: model:ir.actions.act_window,name:ensan_real_estate.property_evaluation_act_window
#: model:ir.model,name:ensan_real_estate.model_property_evaluation
#: model:ir.model.fields,field_description:ensan_real_estate.field_account_asset__property_evaluation_id
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__property_evaluation_ids
#: model:ir.ui.menu,name:ensan_real_estate.property_evaluation_main_menu
#: model:ir.ui.menu,name:ensan_real_estate.property_evaluation_menu
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.property_evaluation_form_view
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.property_evaluation_tree_view
msgid "Property Evaluation"
msgstr "تقييم العقار"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_form_inherit
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.view_account_asset_form_inherits
msgid "Property Evaluation(s)"
msgstr "تقييمات العقار"
#. module: ensan_real_estate
#: model:ir.actions.act_window,name:ensan_real_estate.property_evaluator_act_window
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__property_evaluator
msgid "Property Evaluator"
msgstr "مقيّم العقار"
#. module: ensan_real_estate
#: model:ir.ui.menu,name:ensan_real_estate.property_evaluator_menu
msgid "Property Evaluators"
msgstr "مقيّمي العقار"
#. module: ensan_real_estate
#: code:addons/ensan_real_estate/models/property_evaluation.py:0
#, python-format
msgid "Property Evalutation for %s already exist in %s"
msgstr "تقييم العقار %s موجودة بالفعل في سنة %s"
#. module: ensan_real_estate
#: model:ir.module.category,name:ensan_real_estate.real_estate_evaluation_category
msgid "Real State/Evaluation"
msgstr "العقارات/التقييم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__reason
msgid "Reason/Justification"
msgstr "السببظ المبرر"
#. module: ensan_real_estate
#: model:ir.model,name:ensan_real_estate.model_res_partner
msgid "Renter"
msgstr ""
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.property_evaluation_form_view
msgid "Reset To Draft"
msgstr "إعادة التقييم إلى مبدئ"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__activity_user_id
msgid "Responsible User"
msgstr "المستخدم المسؤول"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_has_sms_error
msgid "SMS Delivery error"
msgstr "خطأ في تسليم الرسائل القصيرة"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__stamping_state
msgid "Stamping State"
msgstr "حالة الصك"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__state_id
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__state
msgid "State"
msgstr "المحافظة"
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.internal_property_kanban_inherit
msgid "State:"
msgstr "حالة التقييم:"
#. module: ensan_real_estate
#: model:ir.actions.act_window,name:ensan_real_estate.action_country_state_real_estate
#: model:ir.ui.menu,name:ensan_real_estate.menu_country_state_real_estate
msgid "States"
msgstr "المحافظات"
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
"الحالة على أساس الأنشطة\n"
"المتأخرة: تاريخ الاستحقاق مر\n"
"اليوم: تاريخ النشاط هو اليوم\n"
"المخطط: الأنشطة المستقبلية."
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "نوع النشاط الاستثنائي المسجل."
#. module: ensan_real_estate
#: model_terms:ir.ui.view,arch_db:ensan_real_estate.property_evaluation_form_view
msgid "Under Evaluation"
msgstr "تحت التقييم"
#. module: ensan_real_estate
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__internal_property__last_evaluation_state__under_evaluation
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__property_evaluation__state__under_evaluation
msgid "Under evaluation"
msgstr "تحت التقييم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_unread
msgid "Unread Messages"
msgstr "الرسائل الجديدة"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__message_unread_counter
msgid "Unread Messages Counter"
msgstr "عدد الرسائل الجديدة"
#. module: ensan_real_estate
#: model:ir.model.fields.selection,name:ensan_real_estate.selection__internal_property__stamping_state__updated
msgid "Updated"
msgstr "تم التحديث"
#. module: ensan_real_estate
#: model:res.groups,name:ensan_real_estate.group_real_estate_evaluation_user
msgid "User"
msgstr "مستخدم"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_internal_property__waqf_owner
msgid "Waqf Owner"
msgstr "مالك الوقف"
#. module: ensan_real_estate
#: model:ir.actions.act_window,name:ensan_real_estate.waqf_owners_act_window
#: model:ir.ui.menu,name:ensan_real_estate.waqf_owners_menu
msgid "Waqf Owners"
msgstr "أصحاب الوقف"
#. module: ensan_real_estate
#: model:ir.model.fields,field_description:ensan_real_estate.field_property_evaluation__website_message_ids
msgid "Website Messages"
msgstr "رسائل الموقع"
#. module: ensan_real_estate
#: model:ir.model.fields,help:ensan_real_estate.field_property_evaluation__website_message_ids
msgid "Website communication history"
msgstr "سجل تواصل الموقع"
#. module: ensan_real_estate
#: model:ir.ui.view,arch_db:ensan_real_estate.property_evaluation_form_view
msgid "Are you sure you want to reset the request to draft?"
msgstr "هل أنت متأكد من إعادة الطلب إلى مبدئي؟"

View File

@ -0,0 +1,5 @@
from . import empowerment_management
# from . import empowerment_request
from . import service_settings
from . import education_entity

View File

@ -0,0 +1,449 @@
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class PaProgramLevel(models.Model):
_name = 'pa.program.level'
_description = 'شاشة المستويات (Levels)'
_rec_name = 'name'
_order = 'code'
code = fields.Char(
string='كود المستوى',
required=True,
copy=False,
readonly=True,
index=True,
default=lambda self: self.env['ir.sequence'].next_by_code('pa.program.level') or _('New'),
)
name = fields.Char(
string='اسم المستوى',
required=True,
default=lambda self: _('مسارات تقنية'),
help='اكتب اسم المستوى مثل: ثقافية، معرفية، دينية، تنموية، وقائية، علاجية',
)
type = fields.Selection([
('route', 'مسارات'),
('activity', 'أنشطة'),
('medad', 'مداد'),
], string='نوع المستوى', required=True, help='حدد نوع المستوى')
description = fields.Text(string='وصف المستوى')
active = fields.Boolean(string='حالة المستوى', default=True)
track_ids = fields.One2many(
'pa.program.track', # Related model
'level_id', # Many2one field on pa.program.track
string='المسارات المرتبطة',
help='المسارات التي تنتمي إلى هذا المستوى',
)
# Optional: enforce unique code at Python level
@api.model
def create(self, vals):
if 'code' in vals:
existing = self.search([('code', '=', vals['code'])])
if existing:
raise ValidationError(_('كود المستوى يجب أن يكون فريدًا'))
return super(PaProgramLevel, self).create(vals)
class PaProgramTrack(models.Model):
_name = 'pa.program.track'
_description = 'شاشة المسارات (Tracks)'
_rec_name = 'name'
_order = 'code'
code = fields.Char(
string='كود المسار',
required=True,
copy=False,
readonly=True,
index=True,
default=lambda self: self.env['ir.sequence'].next_by_code('pa.program.track') or _('New'),
)
name = fields.Char(string='اسم المسار', required=True)
description = fields.Text(string='وصف المسار')
branch = fields.Char(string='الفرع') # link to branch model if available
gender = fields.Selection(
[('male', 'ذكر'), ('female', 'انثى')],
string='الجنس',
)
age_category = fields.Many2one(
'age.category', # replace with your actual age category model
string='الفئة العمرية',
help='تصفية المسار على حسب الفئة العمرية',
)
study_category = fields.Char(string='الفئة الدراسية')
hobby = fields.Char(string='الهواية')
study_status = fields.Char(string='الحالة الدراسية')
health_status = fields.Char(string='الحالة الصحية')
education_status = fields.Char(string='الحالة التعليمية')
partner_id = fields.Many2one(
'res.partner',
string='الشريك المرتبط',
help='الشريك المرتبط بالمسار'
)
active = fields.Boolean(string='حالة المسار', default=True)
level_id = fields.Many2one(
'pa.program.level',
string='المستوى المرتبط',
required=True,
ondelete='cascade'
)
class PaProgram(models.Model):
_name = 'pa.program'
_description = 'شاشة البرامج (Programs)'
_rec_name = 'name'
_order = 'code'
code = fields.Char(
string='كود البرنامج',
required=True,
copy=False,
readonly=True,
index=True,
default=lambda self: self.env['ir.sequence'].next_by_code('pa.program') or _('New'),
)
name = fields.Char(string='اسم البرنامج', required=True)
program_type_id = fields.Many2one(
'pa.program.type',
string='نوع البرنامج',
required=True,
help='نوع البرنامج المسجل في إعدادات أنواع البرامج'
)
payment_type = fields.Selection([
('paid', 'مدفوع'),
('unpaid', 'غير مدفوع')
], string='نوع الدفع', required=True)
sponsor_id = fields.Many2one('takaful.sponsorship', string='الكافل المرتبط',
help='الكافل المسجل ويتم اظهاره فقط في حالة الدفع مدفوع')
sponsor_support_amount = fields.Float(
string='المبلغ المخصص للدعم',
related='sponsor_id.total_sponsorship_amount',
readonly=True,
help='المبلغ المخصص للدعم حسب بيانات الكافل'
)
budget = fields.Float(
string='الموازنة المخصصة للبرنامج',
help='تستخدم في حالة نوع الدفع = غير مدفوع'
)
location = fields.Selection([
('inside', 'داخلي'),
('outside', 'خارجي')
], string='موقع البرنامج', required=True)
description = fields.Text(string='وصف البرنامج')
track_id = fields.Many2one(
'pa.program.track',
string='المسار المرتبط بالبرنامج',
help='كل برنامج مرتبط بمسار واحد يحتوي على عدة أنشطة'
)
analytic_account_id = fields.Many2one(
'account.analytic.account',
string='الحساب التحليلي المرتبط',
readonly=True,
help='ينشأ تلقائياً بحساب تحليلي بنفس اسم البرنامج ولا يمكن حذفه'
)
estimated_budget = fields.Float(
string='الموازنة التقديرية المرتبطة',
help='الموازنة المرتبطة بالحساب التحليلي'
)
active = fields.Boolean(string='حالة البرنامج', default=True)
@api.constrains('payment_type', 'sponsor_id')
def _check_sponsor_if_paid(self):
for record in self:
if record.payment_type == 'paid' and not record.sponsor_id:
raise ValidationError(_('يجب اختيار الكافل في حالة نوع الدفع مدفوع'))
if record.payment_type == 'unpaid' and record.sponsor_id:
raise ValidationError(_('لا يجب اختيار كافل في حالة نوع الدفع غير مدفوع'))
@api.model
def create(self, vals):
# You can add logic here to create analytic account automatically if needed
res = super(PaProgram, self).create(vals)
if not res.analytic_account_id:
account = self.env['account.analytic.account'].create({
'name': res.name,
'active': True,
})
res.analytic_account_id = account.id
return res
def write(self, vals):
res = super(PaProgram, self).write(vals)
for record in self:
# Ensure analytic account exists
if not record.analytic_account_id:
account = self.env['account.analytic.account'].create({
'name': record.name,
'active': True,
})
record.analytic_account_id = account.id
return res
class PaProgramActivity(models.Model):
_name = 'pa.program.activity'
_description = 'Program Activity'
_rec_name = 'name'
code = fields.Char("كود النشاط", required=True, copy=False, default=lambda self: self.env['ir.sequence'].next_by_code('pa.program.activity'))
name = fields.Char("اسم النشاط", required=True)
description = fields.Text("وصف النشاط")
program_id = fields.Many2one('pa.program', string="البرنامج المرتبط")
location = fields.Selection([('inside','داخلي'), ('outside','خارجي')], required=True, string="موقع النشاط")
date_start = fields.Datetime("تاريخ بداية النشاط")
date_end = fields.Datetime("تاريخ انتهاء النشاط")
analytic_account_id = fields.Many2one('account.analytic.account', string="الحساب التحليلي المرتبط")
estimated_budget = fields.Float("الموازنة التقديرية المرتبطة")
active = fields.Boolean("نشط", default=True)
class PaProgramMedad(models.Model):
_name = 'pa.program.medad'
_description = 'Medad'
_rec_name = 'name'
code = fields.Char("كود مداد", required=True, copy=False, default=lambda self: self.env['ir.sequence'].next_by_code('pa.program.medad'))
name = fields.Char("اسم المداد", required=True)
description = fields.Text("وصف المداد")
medad_type = fields.Selection([('skills','مهارات'),('training','تدريب'),('innovation','دعم ابتكار')], string="نوع مداد", required=True)
activity_id = fields.Many2one('pa.program.activity', string="النشاط المرتبط")
analytic_account_id = fields.Many2one('account.analytic.account', string="الحساب التحليلي المرتبط")
estimated_budget = fields.Float("الموازنة التقديرية المرتبطة")
active = fields.Boolean("نشط", default=True)
# Example family/beneficiary for demo: you should replace with your actual model
class Family(models.Model):
_name = 'pa.family'
_description = 'Family'
code = fields.Char("كود الأسرة", required=True)
mobile = fields.Char("رقم الجوال")
category = fields.Char("فئة الأسرة")
branch = fields.Char("الفرع")
gender = fields.Selection([('male', 'ذكر'), ('female', 'انثى')], string="جنس الأسرة")
age_category = fields.Char("الفئة العمرية")
study_category = fields.Char("الفئة الدراسية")
hobby = fields.Char("الهواية")
study_status = fields.Char("الحالة الدراسية")
health_status = fields.Char("الحالة الصحية")
education_status = fields.Char("الحالة التعليمية")
widow = fields.Boolean("الأم أرملة؟")
sons = fields.Integer("عدد الأولاد")
daughters = fields.Integer("عدد البنات")
mother_name = fields.Char("اسم الأم")
mother_alive = fields.Boolean("هل الأم على قيد الحياة")
mother_residence = fields.Char("سكن الأم")
mother_education = fields.Char("الحالة التعليمية للأم")
mother_employed = fields.Boolean("هل الأم تعمل")
residence_type = fields.Char("نوع السكن")
child_education = fields.Char("الحالة التعليمية للابن/الابنة")
child_health = fields.Char("الحالة الصحية للابن/الابنة")
need_transport = fields.Boolean("هل يحتاج إلى مواصلات؟")
has_disability = fields.Boolean("هل لديه اعاقة؟")
takes_medicine = fields.Boolean("هل يتناول ادوية؟")
has_psych_issues = fields.Boolean("هل يوجد اضطرابات نفسية؟")
class PaProgramActivityRegistration(models.Model):
_name = 'pa.program.activity.registration'
_description = 'تسجيل الأنشطة'
_inherit = ['mail.thread']
name = fields.Char(string='رقم الطلب', readonly=True, index=True,
default=lambda self: self.env['ir.sequence'].next_by_code('pa.program.activity.registration') or 'New')
request_date = fields.Datetime(string='تاريخ الطلب', default=fields.Datetime.now, readonly=True)
creator_id = fields.Many2one('res.users', string='المنشئ', default=lambda self: self.env.user, readonly=True)
date_from = fields.Datetime(string='التاريخ من')
date_to = fields.Datetime(string='التاريخ الى')
family_id = fields.Many2one('pa.family', string='الأسرة')
familye_id = fields.Many2one('grant.benefit', string='الأسرة')
member_ids = fields.One2many(
'family.member',
'benefit_id',
string='عضو الأسرة',
)
branch_custom_id = fields.Many2one(string='الفرع', related='familye_id.branch_custom_id', readonly=True)
gender = fields.Selection(related='familye_id.gender', readonly=True)
# age_category = fields.Char(string='الفئة العمرية', related='familye_id.age_category', readonly=True)
# study_category = fields.Char(string='الفئة الدراسية', related='familye_id.study_category', readonly=True)
nationality_id = fields.Many2one(string='الهواية', related='familye_id.nationality_id', readonly=True)
graduation_status = fields.Selection(string='الحالة الدراسية', related='familye_id.graduation_status', readonly=True)
health_status = fields.Selection(string='الحالة الصحية', related='familye_id.health_status', readonly=True)
education_status = fields.Selection(string='الحالة التعليمية', related='familye_id.education_status', readonly=True)
# sons_count = fields.Integer(string='عدد الأولاد في الأسرة', related='familye_id.sons_count', readonly=True)
# daughters_count = fields.Integer(string='عدد البنات في الأسرة', related='familye_id.daughters_count', readonly=True)
mother_is_life = fields.Boolean(string='هل الأم على قيد الحياة', related='familye_id.mother_is_life', readonly=True)
mother_location_conf = fields.Many2one(string='سكن الأم', related='familye_id.mother_location_conf', readonly=True)
# mother_education_status_ids = fields.Many2many(string='الحالة التعليمية للأم',
# related='familye_id.mother_education_status_ids', readonly=True)
is_mother_work = fields.Boolean(string='هل الأم تعمل', related='familye_id.is_mother_work', readonly=True)
housing_type = fields.Selection(string='نوع السكن', related='familye_id.housing_type', readonly=True)
beneficiary_relation = fields.Selection([('mother', 'أم'), ('son', 'ابن'), ('daughter', 'ابنه')], string='الجهة المستفيدة')
beneficiary_ids = fields.Many2many('res.partner', string='اسم المستفيد')
mobile = fields.Char(string='رقم الجوال', related='family_id.mobile', readonly=True)
# familye_member = fields.Many2one(
# 'family.member',
# string='عضو الأسرة',
# domain="[('member_status', '=', 'benefit'), ('benfit_id', '=', familye_id)]"
# )
#
widow = fields.Boolean(string="الأم أرملة؟", related='family_id.widow', readonly=True)
sons = fields.Integer(
string="عدد الأولاد",
compute='_compute_sons_daughters',
store=False
)
daughters = fields.Integer(
string="عدد البنات",
compute='_compute_sons_daughters',
store=False
)
@api.depends('familye_id', 'familye_id.member_ids', 'familye_id.member_ids.relationn',
'familye_id.member_ids.relationn.relation_type')
def _compute_sons_daughters(self):
for rec in self:
sons = 0
daughters = 0
members = rec.familye_id.member_ids.filtered(lambda m: m.relationn)
for member in members:
if member.relationn.relation_type == 'son':
sons += 1
elif member.relationn.relation_type == 'daughter':
daughters += 1
rec.sons = sons
rec.daughters = daughters
level_id = fields.Many2one('pa.program.level', string='مستويات البرامج', required=True)
track_id = fields.Many2one('pa.program.track', string='مسارات البرامج')
program_id = fields.Many2one('pa.program', string='البرامج')
activity_id = fields.Many2one('pa.program.activity', string='الانشطة')
medad_id = fields.Many2one('pa.program.medad', string='مداد')
want_transport = fields.Selection([('yes', 'نعم'), ('no', 'لا')], string='هل يرغب المستفيد في مواصلات')
state = fields.Selection([
('draft', 'مسودة'),
('social_specialist', 'اخصائي اجتماعي'),
('operation_manager', 'رئيس العمليات'),
('branch_manager', 'مدير الفرع'),
('activity_head', 'رئيس الأنشطة'),
('finance_manager', 'إدارة المالية'),
('approved', 'معتمد'),
('refused', 'مرفوض')
], default='draft', tracking=True)
rejection_reason = fields.Text('سبب الارجاع') # To hold the last rejection note
@api.onchange('familye_id')
def _onchange_familye_id(self):
if self.familye_id:
# Set member_ids to the current members of the selected familye_id
# This links existing family.member records (no create)
self.member_ids = [(6, 0, self.familye_id.member_ids.ids)]
else:
self.member_ids = [(5, 0, 0)] # Clear if no familye_id
# Validation of required fields based on level type
@api.constrains('level_id', 'track_id', 'program_id', 'activity_id', 'medad_id')
def _check_required_fields_based_on_level(self):
for rec in self:
if not rec.level_id:
continue
lvl_type = rec.level_id.type
if lvl_type == 'route': # مسارات
if not rec.track_id or not rec.program_id:
raise ValidationError(_('لحالة المستوى "مسارات"، الحقول "المسار" و "البرنامج" مطلوبان'))
elif lvl_type == 'activity': # أنشطة
if not rec.track_id or not rec.program_id or not rec.activity_id:
raise ValidationError(_('لحالة المستوى "أنشطة"، الحقول "المسار" و "البرنامج" و "النشاط" مطلوبة'))
elif lvl_type == 'medad': # مداد
if not rec.track_id or not rec.program_id or not rec.activity_id or not rec.medad_id:
raise ValidationError(_('لحالة المستوى "مداد"، جميع الحقول "المسار"، "البرنامج"، "النشاط"، "المداد" مطلوبة'))
def action_to_social_specialist(self):
self.ensure_one()
self.state = 'social_specialist'
def action_approve(self):
self.ensure_one()
transition_map = {
'social_specialist': 'operation_manager',
'operation_manager': 'branch_manager',
'branch_manager': 'activity_head',
'activity_head': 'finance_manager',
'finance_manager': 'approved',
}
next_state = transition_map.get(self.state)
if next_state:
self.state = next_state
def action_refuse(self):
self.ensure_one()
self.state = 'refused'
def action_reset_to_draft(self):
self.ensure_one()
self.state = 'draft'
def action_return_to_specialist(self):
self.ensure_one()
self.state = 'social_specialist'
class PaReturnReasonWizard(models.TransientModel):
_name = 'pa.return.reason.wizard'
_description = 'معالج سبب الارجاع'
reason = fields.Text(string='سبب الارجاع', required=True)
registration_id = fields.Many2one('pa.program.activity.registration', string='طلب التسجيل')
def action_confirm_return(self):
if self.registration_id:
self.registration_id.rejection_reason = self.reason
# move back to draft or social_specialist depending on the context/state
if self.registration_id.state == 'operation_manager':
self.registration_id.state = 'social_specialist'
else:
self.registration_id.state = 'draft'
return {'type': 'ir.actions.act_window_close'}

View File

@ -0,0 +1,113 @@
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class ServicesSettings(models.Model):
_name = 'services.settings'
_description = 'Empowerment Services Settings'
_rec_name = 'service_name'
service_name = fields.Char('Service Name', required=True)
parent_service_id = fields.Many2one('services.settings', string='Parent Service')
is_main_service = fields.Boolean('Is Main Service?')
hr_department_id = fields.Many2one('hr.department', string='Linked Department', readonly=True)
linked_to_department = fields.Boolean('Linked to Department?')
service_type = fields.Selection([
('education_care', 'خدمة الرعاية التعليمية'),
('bachelor', 'خدمة البكالريوس'),
('diploma', 'خدمة الدبلوم'),
('shafaa_bachelor', 'خدمة شفاعة البكالريوس'),
('shafaa_diploma', 'خدمة شفاعة الدبلوم'),
('training', 'خدمة التدريب'),
('shafaa_training', 'خدمة شفاعة التدريب'),
('finance', 'خدمة التمويل'),
('shafaa_finance', 'خدمة شفاعة التمويل'),
('employment', 'خدمة التوظيف'),
('shafaa_employment', 'خدمة شفاعة التوظيف'),
], string='Service Type')
expense_account_id = fields.Many2one(
'account.account', 'Expense Account', domain="[('user_type_id.type', '=', 'expense')]"
)
accountant_id = fields.Many2one('res.users', 'Accountant')
has_supplier = fields.Boolean('Has Supplier?')
allow_family_request = fields.Boolean('Allow Family Member to Submit Request')
create_project = fields.Boolean('Create Project for Service')
required_files = fields.Text('Required Files')
allowed_family_categories = fields.Many2many('empowerment.family.category', 'emp_service_family_rel', 'service_id',
'family_id',
string='Allowed Family Categories')
@api.model
def create(self, vals):
record = super().create(vals)
if record.linked_to_department:
# Auto-create HR Department if not exists
dept = self.env['hr.department'].search([('name', '=', record.service_name)], limit=1)
if not dept:
dept = self.env['hr.department'].create({
'name': record.service_name,
'service_link_id': record.id
})
record.hr_department_id = dept.id
return record
def write(self, vals):
res = super().write(vals)
for rec in self:
if 'linked_to_department' in vals:
if rec.linked_to_department and not rec.hr_department_id:
dept = self.env['hr.department'].search([('name', '=', rec.service_name)], limit=1)
if not dept:
dept = self.env['hr.department'].create({
'name': rec.service_name,
'service_link_id': rec.id
})
rec.hr_department_id = dept.id
elif not rec.linked_to_department and rec.hr_department_id:
if not rec.hr_department_id.employee_ids and not self.env['empowerment.request'].search_count(
[('department_id', '=', rec.hr_department_id.id)]):
rec.hr_department_id.unlink()
rec.hr_department_id = False
return res
def unlink(self):
for rec in self:
if rec.linked_to_department:
if rec.hr_department_id and (
rec.hr_department_id.employee_ids or self.env['empowerment.request'].search_count(
[('department_id', '=', rec.hr_department_id.id)])):
raise ValidationError(
_("Cannot delete service linked to department with employees or associated requests"))
if rec.hr_department_id:
rec.hr_department_id.unlink()
return super().unlink()
class HrDepartment(models.Model):
_inherit = 'hr.department'
service_link_id = fields.Many2one('services.settings', string='Linked Service', readonly=True)
class EmpowermentEducationEntity(models.Model):
_name = 'empowerment.education.entity'
_description = 'Educational Entity'
name = fields.Char('Entity Name', required=True)
entity_type = fields.Selection([
('university', 'جامعة'),
('college', 'كلية'),
('institute', 'معهد'),
('school', 'مدرسة')
], string='Entity Type', required=True)
study_specialization = fields.Selection([
('bachelor', 'بكالريوس'),
('diploma', 'دبلوم')
], string='Study Specialization', required=True)

View File

@ -0,0 +1,9 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
pa_program_level_all,pa.program.level,model_pa_program_level,,1,1,1,1
pa_program_track_all,pa.program.track,model_pa_program_track,,1,1,1,1
pa_program_all,pa.program,model_pa_program,,1,1,1,1
pa_program_activity_all,pa.program.activity,model_pa_program_activity,,1,1,1,1
pa_program_medad_all,pa.program.medad,model_pa_program_medad,,1,1,1,1
pa_program_registration_all,pa.program.registration,model_pa_program_activity_registration,,1,1,1,1
pa_family_all,pa.family,model_pa_family,,1,1,1,1
pa_return_reason_wizard,pa.return.reason.wizard,model_pa_return_reason_wizard,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 pa_program_level_all pa.program.level model_pa_program_level 1 1 1 1
3 pa_program_track_all pa.program.track model_pa_program_track 1 1 1 1
4 pa_program_all pa.program model_pa_program 1 1 1 1
5 pa_program_activity_all pa.program.activity model_pa_program_activity 1 1 1 1
6 pa_program_medad_all pa.program.medad model_pa_program_medad 1 1 1 1
7 pa_program_registration_all pa.program.registration model_pa_program_activity_registration 1 1 1 1
8 pa_family_all pa.family model_pa_family 1 1 1 1
9 pa_return_reason_wizard pa.return.reason.wizard model_pa_return_reason_wizard 1 1 1 1

View File

@ -0,0 +1,22 @@
<odoo>
<record id="group_pa_social_specialist" model="res.groups">
<field name="name">اخصائى اجتماعى</field>
<field name="category_id" ref="base.module_category_human_resources"/>
</record>
<record id="group_pa_operation_manager" model="res.groups">
<field name="name">رئيس العمليات</field>
<field name="category_id" ref="base.module_category_human_resources"/>
</record>
<record id="group_pa_branch_manager" model="res.groups">
<field name="name">مدير الفرع</field>
<field name="category_id" ref="base.module_category_human_resources"/>
</record>
<record id="group_pa_activity_head" model="res.groups">
<field name="name">رئيس الأنشطة</field>
<field name="category_id" ref="base.module_category_human_resources"/>
</record>
<record id="group_pa_finance_manager" model="res.groups">
<field name="name">ادارة المالية</field>
<field name="category_id" ref="base.module_category_human_resources"/>
</record>
</odoo>

View File

@ -0,0 +1,629 @@
<odoo>
<record id="action_open_return_reason_wizard" model="ir.actions.act_window">
<field name="name">سبب الإرجاع</field>
<field name="res_model">pa.return.reason.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<!-- Levels Views -->
<record id="view_pa_program_level_tree" model="ir.ui.view">
<field name="name">pa.program.level.tree</field>
<field name="model">pa.program.level</field>
<field name="arch" type="xml">
<tree>
<field name="code"/>
<field name="name"/>
<field name="type"/>
<field name="active"/>
<field name="track_ids" string="المسارات المرتبطة" widget="many2many_tags"/>
</tree>
</field>
</record>
<record id="view_pa_program_level_form" model="ir.ui.view">
<field name="name">pa.program.level.form</field>
<field name="model">pa.program.level</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="code" readonly="1"/>
<field name="name" required="1" placeholder="مسارات تقنية - ثقافية معرفية دينية"/>
<field name="type" widget="selection" required="1"/>
<field name="description"/>
<field name="active"/>
</group>
<notebook>
<page string="المسارات المرتبطة">
<field name="track_ids" context="{'default_level_id': active_id}">
<tree editable="bottom">
<field name="code"/>
<field name="name"/>
<field name="branch"/>
<field name="gender"/>
<field name="age_category"/>
<field name="study_category"/>
<field name="hobby"/>
<field name="study_status"/>
<field name="health_status"/>
<field name="education_status"/>
<field name="partner_id"/>
<field name="active"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_pa_program_level_search" model="ir.ui.view">
<field name="name">pa.program.level.search</field>
<field name="model">pa.program.level</field>
<field name="arch" type="xml">
<search>
<field name="code"/>
<field name="name"/>
<filter name="active_filter" string="نشط" domain="[('active', '=', True)]"/>
</search>
</field>
</record>
<record id="action_pa_program_level" model="ir.actions.act_window">
<field name="name">مستويات البرامج</field>
<field name="res_model">pa.program.level</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_pa_program_level_search"/>
</record>
<!-- Tracks Views -->
<record id="view_pa_program_track_tree" model="ir.ui.view">
<field name="name">pa.program.track.tree</field>
<field name="model">pa.program.track</field>
<field name="arch" type="xml">
<tree>
<field name="code"/>
<field name="name"/>
<field name="branch"/>
<field name="gender"/>
<field name="age_category"/>
<field name="study_category"/>
<field name="hobby"/>
<field name="study_status"/>
<field name="health_status"/>
<field name="education_status"/>
<field name="partner_id"/>
<field name="active"/>
<field name="level_id"/>
</tree>
</field>
</record>
<record id="view_pa_program_track_form" model="ir.ui.view">
<field name="name">pa.program.track.form</field>
<field name="model">pa.program.track</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="code" readonly="1"/>
<field name="name" required="1"/>
<field name="description"/>
</group>
<group>
<field name="branch"/>
<field name="gender" widget="selection"/>
<field name="age_category" />
<field name="study_category"/>
<field name="hobby"/>
<field name="study_status"/>
<field name="health_status"/>
<field name="education_status"/>
<field name="partner_id"/>
<field name="active"/>
<field name="level_id" required="1"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_pa_program_track_search" model="ir.ui.view">
<field name="name">pa.program.track.search</field>
<field name="model">pa.program.track</field>
<field name="arch" type="xml">
<search>
<field name="code"/>
<field name="name"/>
<field name="level_id" string="المستوى المرتبط"/>
<filter name="active_filter" string="نشط" domain="[('active', '=', True)]"/>
</search>
</field>
</record>
<record id="action_pa_program_track" model="ir.actions.act_window">
<field name="name">مسارات البرامج</field>
<field name="res_model">pa.program.track</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_pa_program_track_search"/>
</record>
<!-- Programs Views -->
<record id="view_pa_program_tree" model="ir.ui.view">
<field name="name">pa.program.tree</field>
<field name="model">pa.program</field>
<field name="arch" type="xml">
<tree>
<field name="code"/>
<field name="name"/>
<!-- <field name="kind"/>-->
<field name="payment_type"/>
<field name="sponsor_id"/>
<field name="sponsor_support_amount"/>
<field name="budget"/>
<field name="location"/>
<field name="active"/>
<field name="track_id"/>
</tree>
</field>
</record>
<record id="view_pa_program_form" model="ir.ui.view">
<field name="name">pa.program.form</field>
<field name="model">pa.program</field>
<field name="arch" type="xml">
<form string="البرنامج">
<sheet>
<group>
<field name="code" readonly="1"/>
<field name="name" required="1"/>
<!-- <field name="kind" widget="selection" required="1"/>-->
<field name="payment_type" required="1"/>
<field name="sponsor_id" attrs="{'invisible': [('payment_type','!=','paid')]}"/>
<field name="sponsor_support_amount"/>
<field name="budget"/>
<field name="location" widget="selection" required="1"/>
<field name="description"/>
</group>
<group>
<field name="track_id" required="1"/>
<field name="analytic_account_id" options="{'no_create': True}" readonly="1"/>
<field name="estimated_budget"/>
<field name="active"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_pa_program" model="ir.actions.act_window">
<field name="name">البرامج</field>
<field name="res_model">pa.program</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Activities Views -->
<record id="view_pa_program_activity_tree" model="ir.ui.view">
<field name="name">pa.program.activity.tree</field>
<field name="model">pa.program.activity</field>
<field name="arch" type="xml">
<tree>
<field name="code"/>
<field name="name"/>
<field name="program_id"/>
<field name="location"/>
<field name="date_start"/>
<field name="date_end"/>
<field name="active"/>
</tree>
</field>
</record>
<record id="view_pa_program_activity_form" model="ir.ui.view">
<field name="name">pa.program.activity.form</field>
<field name="model">pa.program.activity</field>
<field name="arch" type="xml">
<form string="النشاط">
<sheet>
<group>
<field name="code" readonly="1"/>
<field name="name" required="1"/>
<field name="description"/>
</group>
<group>
<field name="program_id" required="1"/>
<field name="location" widget="selection" required="1"/>
<field name="date_start"/>
<field name="date_end"/>
<field name="analytic_account_id" options="{'no_create': True}" readonly="1"/>
<field name="estimated_budget"/>
<field name="active"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_pa_program_activity" model="ir.actions.act_window">
<field name="name">الأنشطة</field>
<field name="res_model">pa.program.activity</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Medad Views -->
<record id="view_pa_program_medad_tree" model="ir.ui.view">
<field name="name">pa.program.medad.tree</field>
<field name="model">pa.program.medad</field>
<field name="arch" type="xml">
<tree>
<field name="code"/>
<field name="name"/>
<field name="medad_type"/>
<field name="activity_id"/>
<field name="active"/>
</tree>
</field>
</record>
<record id="view_pa_program_medad_form" model="ir.ui.view">
<field name="name">pa.program.medad.form</field>
<field name="model">pa.program.medad</field>
<field name="arch" type="xml">
<form string="مداد">
<sheet>
<group>
<field name="code" readonly="1"/>
<field name="name" required="1"/>
<field name="description"/>
</group>
<group>
<field name="medad_type" widget="selection" required="1"/>
<field name="activity_id" required="0"/>
<field name="analytic_account_id" options="{'no_create': True}" readonly="1"/>
<field name="estimated_budget"/>
<field name="active"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_pa_program_medad" model="ir.actions.act_window">
<field name="name">مداد</field>
<field name="res_model">pa.program.medad</field>
<field name="view_mode">tree,form</field>
</record>
<record id="view_pa_program_activity_registration_form" model="ir.ui.view">
<field name="name">pa.program.activity.registration.form</field>
<field name="model">pa.program.activity.registration</field>
<field name="arch" type="xml">
<form string="تسجيل الأنشطة">
<sheet>
<header>
<field name="state" widget="statusbar"
statusbar_visible="draft,social_specialist,operation_manager,branch_manager,activity_head,finance_manager,approved,refused"/>
<button name="action_to_social_specialist" string="اعتماد الاخصائي الاجتماعي" type="object"
class="oe_highlight" states="draft"
groups="odex25_program_activity.group_social_specialist"/>
<button name="action_approve" string="اعتماد" type="object"
states="social_specialist,operation_manager,branch_manager,activity_head,finance_manager"
groups="odex25_program_activity.group_operation_manager,odex25_program_activity.group_branch_manager,odex25_program_activity.group_activity_head,odex25_program_activity.group_finance_manager"/>
<button name="action_refuse" string="رفض" type="object"
states="draft,social_specialist,operation_manager,branch_manager,activity_head,finance_manager"
groups="odex25_program_activity.group_social_specialist,odex25_program_activity.group_operation_manager,odex25_program_activity.group_branch_manager,odex25_program_activity.group_activity_head,odex25_program_activity.group_finance_manager"/>
<button name="%(action_open_return_reason_wizard)d" string="إعادة إلى المسودة" type="action"
groups="odex25_program_activity.group_social_specialist,odex25_program_activity.group_operation_manager"
states="social_specialist,operation_manager"/>
<button name="%(action_open_return_reason_wizard)d" string="إعادة إلى الأخصائي الاجتماعي" type="action"
groups="odex25_program_activity.group_operation_manager" states="operation_manager"/>
</header>
<group string="معلومات الإنشاء" col="2">
<field name="name" readonly="1"/>
<field name="request_date" readonly="1"/>
<field name="creator_id" readonly="1"/>
<field name="date_from"/>
<field name="date_to"/>
</group>
<group string="معلومات الأسرة" col="2">
<!-- domain="[('mother_marital_status','=','widow')]"-->
<field name="family_id" />
<field name="familye_id" />
<field name="branch_custom_id" />
<field name="gender" />
<field name="nationality_id" />
<field name="graduation_status" />
<field name="health_status" />
<field name="education_status" />
<!-- <field name="familye_member"/>-->
<field name="beneficiary_relation"/>
<field name="beneficiary_ids"/>
<field name="mobile" readonly="1"/>
</group>
<group string="معلومات البرامج والأنشطة" col="2">
<field name="level_id" required="1"/>
<field name="track_id"/>
<field name="program_id"/>
<field name="activity_id"/>
<field name="medad_id"/>
<field name="want_transport"/>
</group>
<notebook string="بيانات احصائية">
<page string="بيانات الأبناء">
<group>
<field name="sons" readonly="1"/>
<field name="daughters" readonly="1"/>
</group>
</page>
<page string="بيانات الأم">
<group>
<field name="mother_is_life" readonly="1"/>
<field name="mother_location_conf" readonly="1"/>
<field name="is_mother_work" readonly="1"/>
<!-- <field name="mother_education" readonly="1"/>-->
<field name="housing_type" readonly="1"/>
</group>
</page>
<page string="بيانات المستفيد">
<field name="member_ids" widget="one2many_list"
readonly="0" edit="0" create="0">
<form string="Family Member">
<widget name="web_ribbon" title="Non Benefit Member" bg_color="bg-danger"
attrs="{'invisible': [('member_status', '!=', 'non_benefit')]}"/>
<widget name="web_ribbon" title="Benefit Member" bg_color="bg-success"
attrs="{'invisible': [('member_status', '!=', 'benefit')]}"/>
<sheet>
<group>
<label for="relationn" string="Relation"/>
<div>
<field name="relationn" class="oe_inline" nolabel="1"
attrs="{'readonly':[('parent.state','not in',['draft','new','complete_info','edit_info'])]}"
options='{"no_open": True,"no_create_edit": True}'
required="1"/>
<field name="relation" class="oe_inline" nolabel="1" invisible="1"/>
</div>
</group>
<group>
<group>
<field placeholder="Name" name="name" class="oe_inline" readonly="1"
force_save="1" invisible="1"/>
<field name="is_mother" invisible="1"/>
<field name="member_first_name" force_save="1"
attrs="{'invisible':[('is_mother','=',True)],'required':[('is_mother','=',False)]}"/>
<field name="mother_first_name" force_save="1"
attrs="{'invisible':[('is_mother','=',False)],'required':[('is_mother','=',True)]}"/>
<field name="member_third_name" force_save="1"
attrs="{'invisible':[('is_mother','=',True)],'required':[('is_mother','=',False)]}"/>
<field name="mother_third_name" force_save="1"
attrs="{'invisible':[('is_mother','=',False)],'required':[('is_mother','=',True)]}"/>
<field name="member_id_number" required="1"/>
<field name="is_dead"/>
<!-- <field name="gender" required="1"/>-->
<field name="member_location" force_save="1" invisible="1"/>
<field name="member_location_conf" force_save="1"
attrs="{'invisible':[('is_mother','=',True)]}"/>
<field name="is_work" attrs="{'invisible':[('age','&lt;',18)]}"/>
<field name="member_income"
attrs="{'invisible':[('age','&lt;',18)], 'required':[('is_work','=',True), ('age','>=',18)]}"/>
<field name="need_transportation"/>
<field name="has_disabilities"/>
<field name="minor_siblings"/>
<field name="sponsor_id"/>
<field name="is_excluded_suspension" readonly="1" force_save="1"/>
<field name="member_status" readonly="1" widget="badge"
decoration-success="member_status == 'benefit'"
decoration-danger="member_status == 'non_benefit'"/>
</group>
<group>
<field name="member_second_name" force_save="1"
attrs="{'invisible':[('is_mother','=',True)],'required':[('is_mother','=',False)]}"/>
<field name="mother_second_name" force_save="1"
attrs="{'invisible':[('is_mother','=',False)],'required':[('is_mother','=',True)]}"/>
<field name="member_family_name" force_save="1"
attrs="{'invisible':[('is_mother','=',True)],'required':[('is_mother','=',False)]}"/>
<field name="mother_family_name" force_save="1"
attrs="{'invisible':[('is_mother','=',False)],'required':[('is_mother','=',True)]}"/>
<field name="benefit_id" invisible="1"/>
<field name="member_phone"
attrs="{'invisible':[('is_mother','=',True)]}"/>
<field name="birth_date" required="1"/>
<field name="age" required="1"/>
<field name="age_status"/>
<field name="is_married"
attrs="{'invisible':[('is_mother','=',True)]}"/>
<field name="is_alhaju" widget="boolean_toggle"/>
<field name="is_amra" widget="boolean_toggle"/>
<field name="mother_marital_conf"
attrs="{'invisible':[('is_mother','=',False)]}"
options="{'no_create': True, 'no_create_edit': True}"
groups="!odex_benefit.group_benefit_manager"/>
<field name="mother_location" invisible="1"/>
<field name="mother_location_conf"
attrs="{'invisible':[('is_mother','=',False)]}"
options="{'no_create': True, 'no_create_edit': True}"
groups="!odex_benefit.group_benefit_manager"/>
</group>
</group>
<notebook>
<page string="Hobbies">
<field name="hobbies_attachment_ids" widget="one2many_list">
<tree editable="bottom">
<field name="hobbies_id" required="1"/>
<field name="name"/>
<field name="datas" widget="binary"
filename="attachment_file_name"/>
<button name="action_preview_attachment" type="object"
string="Preview Attachment"/>
<field name="expiration_date"/>
<field name="attach_status"/>
<field name="member_id" invisible="1"/>
</tree>
</field>
</page>
<page string="Diseases">
<field name="diseases_attachment_ids" widget="one2many_list">
<tree editable="bottom">
<field name="diseases_id" required="1"/>
<field name="name"/>
<field name="datas" widget="binary"
filename="attachment_file_name"/>
<button name="action_preview_attachment" type="object"
string="Preview Attachment"/>
<field name="expiration_date"/>
<field name="attach_status"/>
<field name="member_id" invisible="1"/>
</tree>
</field>
</page>
<page string="Disabilities">
<field name="disabilities_attachment_ids" widget="one2many_list">
<tree editable="bottom">
<field name="disabilities_id" required="1"/>
<field name="name"/>
<field name="datas" widget="binary"
filename="attachment_file_name"/>
<button name="action_preview_attachment" type="object"
string="Preview Attachment"/>
<field name="expiration_date"/>
<field name="attach_status"/>
<field name="member_id" invisible="1"/>
</tree>
</field>
</page>
<page string="Education">
<h3>Education Status</h3>
<field name="member_education_status_ids" mode="tree,form"/>
</page>
<page string="Attachments">
<field name="attachment_ids" widget="one2many_list">
<tree editable="bottom" delete="0">
<field name="name" string="Attachment Name"
attrs="{'readonly':[('is_default','=',True)]}"
force_save="1"/>
<field name="attach_id" invisible="1"/>
<field name="datas" widget="binary"
filename="attachment_file_name"/>
<button name="action_preview_attachment" type="object"
string="Preview Attachment"/>
<field name="expiration_date"/>
<field name="attach_status"/>
<field name="allow_days"/>
<field name="benefit_id" invisible="1"/>
<field name="is_required" invisible="1"/>
<field name="is_default" invisible="1"/>
</tree>
</field>
<group>
<field name="state" invisible="1"/>
<field name="required_attach"
attrs="{'required':[('state','not in',['draft','new'])]}"/>
</group>
</page>
</notebook>
</sheet>
</form>
<tree string="Family Members">
<field name="name" force_save="1"/>
<!-- <field name="gender" required="1"/>-->
<field name="relationn"/>
<field name="member_location_conf"/>
<field name="member_status" string="Is Benefit?"/>
<field name="age"/>
<field name="benefit_id"/>
<field name="state"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- Tree View -->
<record id="view_pa_program_activity_registration_tree" model="ir.ui.view">
<field name="name">pa.program.activity.registration.tree</field>
<field name="model">pa.program.activity.registration</field>
<field name="arch" type="xml">
<tree string="طلبات تسجيل الأنشطة">
<field name="name"/>
<field name="family_id"/>
<field name="level_id"/>
<field name="state"/>
<field name="request_date"/>
</tree>
</field>
</record>
<!-- Action -->
<record id="action_pa_program_activity_registration" model="ir.actions.act_window">
<field name="name">تسجيل الأنشطة</field>
<field name="res_model">pa.program.activity.registration</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Wizard form and action -->
<record id="view_pa_return_reason_wizard_form" model="ir.ui.view">
<field name="name">pa.return.reason.wizard.form</field>
<field name="model">pa.return.reason.wizard</field>
<field name="arch" type="xml">
<form string="سبب الإرجاع" >
<group>
<field name="reason" />
</group>
<footer>
<button string="تأكيد" type="object" name="action_confirm_return" class="btn-primary"/>
<button string="إلغاء" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
<!-- Root Settings Menu -->
<!-- Menu -->
<menuitem id="menu_pa_root" name="البرامج والأنشطة" sequence="1"/>
<menuitem id="menu_pa_registration" parent="menu_pa_root" name="تسجيل الأنشطة" sequence="20" action="action_pa_program_activity_registration"/>
<menuitem id="menu_pa_settings" name="الإعدادات" parent="menu_pa_root" sequence="90"/>
<!-- Levels menu -->
<menuitem id="menu_pa_levels" name="مستويات البرامج" parent="menu_pa_settings" action="action_pa_program_level"/>
<!-- Tracks menu -->
<menuitem id="menu_pa_tracks" name="مسارات البرامج" parent="menu_pa_settings" action="action_pa_program_track"/>
<!-- Programs menu -->
<menuitem id="menu_pa_programs" name="البرامج" parent="menu_pa_settings" action="action_pa_program"/>
<!-- Activities menu -->
<menuitem id="menu_pa_activities" name="الأنشطة" parent="menu_pa_settings" action="action_pa_program_activity"/>
<!-- Medad menu -->
<menuitem id="menu_pa_medad" name="مداد" parent="menu_pa_settings" action="action_pa_program_medad"/>
</odoo>

View File

@ -10,7 +10,7 @@
'security/ir.model.access.csv',
'data/ir_sequence_data.xml',
'views/program.xml',
'views/empowerment_management.xml',
],