Merge pull request #1183 from expsa/pla-e4we55-new-expense-flow

add new expense flow
This commit is contained in:
Moutaz Muhammad 2024-09-16 14:34:55 +03:00 committed by GitHub
commit a893e0be5a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 610 additions and 363 deletions

View File

@ -33,6 +33,7 @@
'views/sms_view.xml',
'reports/benefit_template.xml',
'views/benefit_services_view.xml',
'views/family_expense_view.xml',
'views/benefit_config_view.xml',
'views/generate_reports.xml',
'views/actions_and_menus.xml',
@ -40,7 +41,6 @@
'data/sequence_data.xml',
'wizards/entity_refused_wizard_view.xml',
'wizards/entity_black_list_wizard_view.xml',
'wizards/family_expense_move_wiz_view.xml',
],
'external_dependencies': {
'python': ['num2words'],

View File

@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-12 03:26+0000\n"
"PO-Revision-Date: 2024-09-12 03:26+0000\n"
"POT-Creation-Date: 2024-09-16 11:24+0000\n"
"PO-Revision-Date: 2024-09-16 11:24+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -1001,6 +1001,16 @@ msgstr "قبول"
msgid "Account"
msgstr "حساب"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__account_holder
msgid "Account Holder"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__acc_number
msgid "Account Number"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__property_account_payable_id
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__property_account_payable_id
@ -1283,14 +1293,12 @@ msgid "All expenses"
msgstr "جميع المصاريف"
#. module: odex_benefit
#: code:addons/odex_benefit/wizards/family_expense_move_wiz.py:0
#: code:addons/odex_benefit/models/family_expense.py:0
#, python-format
msgid ""
"All selected benefits should be either state of "
"'second_approve','temporarily_suspend','suspend' state."
msgstr ""
"كل الاسر المحددة يجب أن تكون في حالة 'الموافقة الثانية' أو 'التعليق المؤقت' "
"أو 'التعليق'."
#. module: odex_benefit
#: model:ir.model.fields,help:odex_benefit.field_benefits_representative__lang
@ -1542,6 +1550,12 @@ msgstr ""
msgid "Associations Description"
msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_expense.py:0
#, python-format
msgid "At least one expense type should be selected."
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_expenses__attach
#: model:ir.model.fields,field_description:odex_benefit.field_generate_reports_log__attach
@ -1627,6 +1641,7 @@ msgstr "اسم المرفق"
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_size__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_type__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_committees_line__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_divorcee_family__attachment_ids
#: model:ir.model.fields,field_description:odex_benefit.field_domestic_labor__attachment_ids
@ -1738,6 +1753,11 @@ msgid ""
"expected receipt date, asking him to confirm the exact date."
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__available_payment_method_line_ids
msgid "Available Payment Method Line"
msgstr "طرق الدفع المتاحة"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.benefit_housing_kanban_view
msgid "Avatar"
@ -1828,6 +1848,11 @@ msgstr "فئات الأسر"
msgid "Beneficiaries Edit User"
msgstr "تعديل المستفيدين"
#. module: odex_benefit
#: model:res.groups,name:odex_benefit.group_benefit_info
msgid "Beneficiaries Inforamtion"
msgstr ""
#. module: odex_benefit
#: model:ir.module.category,name:odex_benefit.module_category_benefit
msgid "Beneficiaries Management"
@ -1974,6 +1999,11 @@ msgstr "خدمات النادي"
msgid "Benefit Count"
msgstr "عدد أفراد الأسرة/المستفيدين"
#. module: odex_benefit
#: model:ir.ui.menu,name:odex_benefit.menu_confirm_benefit_expense
msgid "Benefit Expense Flow"
msgstr "اجراءت مصاريف الاسر"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#, python-format
@ -1986,7 +2016,10 @@ msgid "Benefit F Needs Percent"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_account_move_line__benefit_family_id
#: model:ir.model.fields,field_description:odex_benefit.field_account_bank_statement_line__family_confirm_id
#: model:ir.model.fields,field_description:odex_benefit.field_account_move__family_confirm_id
#: model:ir.model.fields,field_description:odex_benefit.field_account_move_line__family_confirm_id
#: model:ir.model.fields,field_description:odex_benefit.field_account_payment__family_confirm_id
#: model:ir.model.fields,field_description:odex_benefit.field_food_basket_benefits_line__family_id
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__family_id
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_benefit_family_form
@ -2443,7 +2476,9 @@ msgstr ""
#: code:addons/odex_benefit/models/benefit_config.py:0
#: code:addons/odex_benefit/models/benefit_need.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__associations_line__support_type__both
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_category__gender__both
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_club__benefit_type__both
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefits_needs__benefit_type__both
#: model:ir.model.fields.selection,name:odex_benefit.selection__changes_requests__team_type__both
#: model:ir.model.fields.selection,name:odex_benefit.selection__food_basket_line__donation_type__both
#: model:ir.model.fields.selection,name:odex_benefit.selection__payment_collection_line__donation_type__both
@ -2495,11 +2530,9 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:odex_benefit.benefit_zkat_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.generate_reports_view_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.receive_food_basket_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_black_list_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_final_refused_reason_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_refused_reason_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resarcher_family_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resarcher_member_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_member_reason_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_reason_wizard_form
@ -2546,12 +2579,12 @@ msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_family_validation_setting__cash_expense
msgid "Cash Expense"
msgstr "مصاريف الاسرة"
msgstr "مصاريف النقد"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_family_validation_setting__cash_expense_account_id
msgid "Cash Expense Account"
msgstr "حساب مصاريف الاسرة"
msgstr "حساب مصاريف النقد"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_validation_setting.py:0
@ -2749,6 +2782,9 @@ msgstr "انشطة النادي"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_zkat__code
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__code
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__code
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__code
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__code
#: model:ir.model.fields,field_description:odex_benefit.field_receive_benefit_zkat__code
#: model:ir.model.fields,field_description:odex_benefit.field_receive_food_basket__code
@ -2910,19 +2946,25 @@ msgid "Configuration"
msgstr "إعدادات ملف المستفيد"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_form
msgid "Confirm"
msgstr "تاكيد"
msgstr "تأكيد"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_wizard_form
msgid "Confirm Benefit"
msgstr "انشاء قيود"
#: model:ir.model,name:odex_benefit.model_confirm_benefit_expense
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_form
msgid "Confirm Benefit Expense"
msgstr "اجراءت مصاريف الاسر"
#. module: odex_benefit
#: model:ir.model,name:odex_benefit.model_confirm_benefit_wizard
msgid "Confirm Benefit Wizard"
msgstr "انشاء قيود"
#: model:ir.actions.act_window,name:odex_benefit.action_confirm_benefit_expense
msgid "Confirm Benefit Expenses"
msgstr "مصاريف الاسر"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__confirm_benefit_expense__state__confirm
msgid "Confirmed"
msgstr "مؤكد"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__child_ids
@ -3004,11 +3046,6 @@ msgstr ""
msgid "Create A Club"
msgstr ""
#. module: odex_benefit
#: model:ir.actions.server,name:odex_benefit.action_confirm_benefit_from_list
msgid "Create Move"
msgstr "إنشاء قيود"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form
msgid "Create Periodic visit"
@ -3226,7 +3263,7 @@ msgstr ""
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_size__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_type__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_committees_line__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_divorcee_family__create_uid
#: model:ir.model.fields,field_description:odex_benefit.field_domestic_labor__create_uid
@ -3330,7 +3367,7 @@ msgstr "انشئ بواسطة"
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_size__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_type__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_committees_line__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_divorcee_family__create_date
#: model:ir.model.fields,field_description:odex_benefit.field_domestic_labor__create_date
@ -3490,7 +3527,7 @@ msgstr "لوحات المعلومات"
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_zkat_line__date
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_needs__date
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__date
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__date
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__date
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__date
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__date
#: model:ir.model.fields,field_description:odex_benefit.field_food_basket_benefits_line__date
@ -3585,6 +3622,7 @@ msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__relation__daughter
#, python-format
msgid "Daughter"
msgstr "الابنة"
@ -3600,6 +3638,8 @@ msgstr "الايام قبل الاستلام"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__dead
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__dead
#, python-format
msgid "Dead"
msgstr "متوفية"
@ -3663,6 +3703,7 @@ msgstr "تاريخ التوصيل"
#. module: odex_benefit
#: model:ir.model,name:odex_benefit.model_hr_department
#: model:ir.model.fields,field_description:odex_benefit.field_researcher_family_wizard__branch_id
msgid "Department"
msgstr "القسم"
@ -3762,7 +3803,7 @@ msgstr "نوع المرض"
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_size__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_type__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_committees_line__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_divorcee_family__display_name
#: model:ir.model.fields,field_description:odex_benefit.field_domestic_labor__display_name
@ -3855,6 +3896,9 @@ msgstr "الأحياء"
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__divorced
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__father_marital__divorced
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__divorced
#, python-format
msgid "Divorced"
msgstr "مطلقة"
@ -3862,6 +3906,8 @@ msgstr "مطلقة"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__divorced_from_another_man
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__divorced_from_another_man
#, python-format
msgid "Divorced From Another Man"
msgstr "مطلقة من رجل اخر"
@ -3971,6 +4017,7 @@ msgstr ""
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_zkat__state__draft
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefits_needs__state__draft
#: model:ir.model.fields.selection,name:odex_benefit.selection__changes_requests__state__draft
#: model:ir.model.fields.selection,name:odex_benefit.selection__confirm_benefit_expense__state__draft
#: model:ir.model.fields.selection,name:odex_benefit.selection__entity_black_list_wizard__state__draft
#: model:ir.model.fields.selection,name:odex_benefit.selection__entity_refused_reason_wizard__state__draft
#: model:ir.model.fields.selection,name:odex_benefit.selection__external_request__state__draft
@ -4246,6 +4293,11 @@ msgstr "خدمات استثنائية"
msgid "Excluded from suspension?"
msgstr "مستثنى من إيقاف الخدمة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__expense_type
msgid "Expense Type"
msgstr "نوع الاجراء"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_category__expenses_ids
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_need__expenses_ids
@ -4335,6 +4387,12 @@ msgstr "ادوات اضافية"
msgid "F Amount"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__family_ids
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_form
msgid "Families"
msgstr "الاسر المستفدية"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_loans__family_id
#: model:ir.model.fields,field_description:odex_benefit.field_changes_requests__benefit_id
@ -4372,10 +4430,15 @@ msgid "Family Debits"
msgstr "ديون الأسرة"
#. module: odex_benefit
#: code:addons/odex_benefit/wizards/family_expense_move_wiz.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__confirm_benefit_expense__expense_type__family_expense
msgid "Family Expense"
msgstr "مصروف الغذاء الشهري"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_expense.py:0
#, python-format
msgid "Family Expense - %s"
msgstr ""
msgstr "مصروفات الاسرة - %s"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form
@ -4400,22 +4463,22 @@ msgstr "أعضاء الأسر"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__family_monthly_clotting
msgid "Family Monthly Clotting"
msgstr ""
msgstr "مصروف الكساء للأسرة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__family_monthly_income
msgid "Family Monthly Income"
msgstr "مصاريف الاسره الشهريه"
msgstr "المصروف النقدي للأسرة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__family_monthly_meals
msgid "Family Monthly Meals"
msgstr "مصاريف غذاء الاسره الشهري"
msgstr "مصروف الغذاء للأسرة"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form
msgid "Family Monthly salary"
msgstr "راتب الاسره الشهري"
msgstr "التغذية الشهرية للأسرة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__family_name
@ -4504,6 +4567,7 @@ msgstr "انواع المصاريف"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit_config.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_category__gender__female
#: model:ir.model.fields.selection,name:odex_benefit.selection__changes_requests__team_type__female
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__gender__female
#, python-format
@ -4931,6 +4995,7 @@ msgstr "تاريخ التخرج"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__hanging
#, python-format
msgid "Hanging"
msgstr "معلقة"
@ -5133,7 +5198,7 @@ msgstr "رقم الآي بان"
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_size__id
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_type__id
#: model:ir.model.fields,field_description:odex_benefit.field_committees_line__id
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__id
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__id
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills__id
#: model:ir.model.fields,field_description:odex_benefit.field_divorcee_family__id
#: model:ir.model.fields,field_description:odex_benefit.field_domestic_labor__id
@ -5585,6 +5650,22 @@ msgstr ""
msgid "In-kind"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__cash_expense
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__cloth_expense
msgid "Include Cash Expense"
msgstr "يشمل مصاريف نقدية"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__meal_expense
msgid "Include Meal Expense"
msgstr "يشمل مصاريف الوجبات"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__cloth_expense
msgid "Include Clothing Expense"
msgstr "يشمل مصاريف الكساء"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_need__income_ids
msgid "Income"
@ -5724,8 +5805,9 @@ msgstr ""
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__invoice_ids
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__invoice_ids
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__invoice_ids
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_form
msgid "Invoices"
msgstr ""
msgstr "فواتير"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_housing_rooms_members__is_accept
@ -5761,7 +5843,7 @@ msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__is_dead
msgid "Is Dead?"
msgstr ""
msgstr "متوفي؟"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills__is_development
@ -5999,11 +6081,16 @@ msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_loans__journal_id
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_zkat__journal_id
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__journal_id
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__journal_id
#: model:ir.model.fields,field_description:odex_benefit.field_receive_benefit_zkat__journal_id
#: model:ir.model.fields,field_description:odex_benefit.field_receive_food_basket__journal_id
msgid "Journal"
msgstr "اليومية"
msgstr "قيد اليومية"
#. module: odex_benefit
#: model:ir.model,name:odex_benefit.model_account_move
msgid "Journal Entry"
msgstr "قيد اليومية"
#. module: odex_benefit
#: model:ir.model,name:odex_benefit.model_account_move_line
@ -6011,10 +6098,12 @@ msgid "Journal Item"
msgstr "عنصر اليومية"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_expense.py:0
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__journal_item_count
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__journal_item_count
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__journal_item_count
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__journal_item_count
#, python-format
msgid "Journal Items"
msgstr ""
@ -6100,7 +6189,7 @@ msgstr "الجهة التعليمية السابقة"
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_size____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_type____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_committees_line____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_divorcee_family____last_update
#: model:ir.model.fields,field_description:odex_benefit.field_domestic_labor____last_update
@ -6235,7 +6324,7 @@ msgstr "التخصص السابق"
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_size__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_type__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_committees_line__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_divorcee_family__write_uid
#: model:ir.model.fields,field_description:odex_benefit.field_domestic_labor__write_uid
@ -6339,7 +6428,7 @@ msgstr ""
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_size__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_type__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_committees_line__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_divorcee_family__write_date
#: model:ir.model.fields,field_description:odex_benefit.field_domestic_labor__write_date
@ -6579,6 +6668,7 @@ msgstr "نوع الخدمة الرئيسية"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit_config.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_category__gender__male
#: model:ir.model.fields.selection,name:odex_benefit.selection__changes_requests__team_type__male
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__gender__male
#, python-format
@ -6601,6 +6691,23 @@ msgstr ""
msgid "Manual"
msgstr "يدوي"
#. module: odex_benefit
#: model:ir.model.fields,help:odex_benefit.field_confirm_benefit_expense__payment_method_id
msgid ""
"Manual: Pay or Get paid by any method outside of Odoo.\n"
"Payment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\n"
"Check: Pay bills by check and print it from Odoo.\n"
"Batch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\n"
"SEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\n"
"SEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n"
msgstr ""
"Manual: Pay or Get paid by any method outside of Odex.\n"
"Payment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\n"
"Check: Pay bills by check and print it from Odex.\n"
"Batch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\n"
"SEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\n"
"SEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.benefit_food_surplus_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.benefit_surplus_tree
@ -6613,6 +6720,13 @@ msgstr "الخريطة"
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__marital_status
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__marital_status
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__marital_status
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__mother_marital
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__father_marital
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__marital_status
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__mother_marital
#, python-format
msgid "Marital Status"
msgstr "الحالة الاجتماعية"
@ -6621,6 +6735,9 @@ msgstr "الحالة الاجتماعية"
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__married
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__father_marital__married
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__married
#, python-format
msgid "Married"
msgstr "متزوجة"
@ -6665,7 +6782,12 @@ msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_res_districts__meal_card
msgid "Meal Card"
msgstr "كرت الغذاء"
msgstr "بطاقة الغذاء"
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__confirm_benefit_expense__expense_type__family_invoice
msgid "Meal Card Invoice"
msgstr "فاتورة كرت الغذاء"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_family_validation_setting__meal_expense
@ -7008,6 +7130,7 @@ msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__mother_id
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__relation__mother
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form
#, python-format
msgid "Mother"
@ -7060,9 +7183,9 @@ msgid "MotherFamily Name"
msgstr "اسم عائلة الأم"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_form
msgid "Moves"
msgstr "عناصر اليومية"
msgstr "الحركات"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_appliances_furniture__my_activity_date_deadline
@ -7122,7 +7245,7 @@ msgstr ""
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_size__name
#: model:ir.model.fields,field_description:odex_benefit.field_cloth_type__name
#: model:ir.model.fields,field_description:odex_benefit.field_committees_line__name
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__name
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__name
#: model:ir.model.fields,field_description:odex_benefit.field_craft_skills__name
#: model:ir.model.fields,field_description:odex_benefit.field_donations_type__name
#: model:ir.model.fields,field_description:odex_benefit.field_education_classroom__name
@ -7464,6 +7587,8 @@ msgstr "المتوفيين"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_location__not_live_with_children
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_location__not_live_with_children
#, python-format
msgid "Not live with children"
msgstr "لا تسكن مع الأطفال"
@ -7886,6 +8011,11 @@ msgstr ""
msgid "Payment Collection"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__payment_method_id
msgid "Payment Method"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__payment_token_ids
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__payment_token_ids
@ -7896,16 +8026,15 @@ msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_loans__payment_method_id
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_wizard__payment_method_id
msgid "Payment Type"
msgstr "نوع الدفع"
msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/wizards/family_expense_move_wiz.py:0
#: code:addons/odex_benefit/wizards/family_expense_move_wiz.py:0
#: code:addons/odex_benefit/models/family_expense.py:0
#: code:addons/odex_benefit/models/family_expense.py:0
#, python-format
msgid "Payment method is not configured for the selected journal."
msgstr "برجاء اختيار انواع الدفع فى اليومية"
msgstr "يجب اختيار طريقة الدفع لليومية المحددة."
#. module: odex_benefit
#: model:ir.model,name:odex_benefit.model_account_payment
@ -8000,10 +8129,16 @@ msgid "Please Upload More Than One Image"
msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/wizards/family_expense_move_wiz.py:0
#: code:addons/odex_benefit/models/family_expense.py:0
#, python-format
msgid "Please configure the expense accounts in the validation settings."
msgstr "برجاء تكوين حسابات المصروفات فى اعدادات الاسر"
msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_expense.py:0
#, python-format
msgid "Please select at least one family to create an invoice."
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__pos_order_ids
@ -8052,6 +8187,8 @@ msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__prisoner
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__prisoner
#, python-format
msgid "Prisoner"
msgstr "سجينة"
@ -8505,6 +8642,7 @@ msgstr "المستأجر"
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__relation__replacement_mother
#, python-format
msgid "Replacement Mother"
msgstr "الأم البديلة"
@ -9007,6 +9145,7 @@ msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__father_marital__single
#, python-format
msgid "Single"
msgstr ""
@ -9028,6 +9167,7 @@ msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__relation__son
#, python-format
msgid "Son"
msgstr "الابن"
@ -9158,6 +9298,7 @@ msgstr "المناطق"
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_housing_rooms_items__status
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__state
#: model:ir.model.fields,field_description:odex_benefit.field_cars_line__status
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__state
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__state
#: model:ir.model.fields,field_description:odex_benefit.field_needs_payment_line__state
msgid "Status"
@ -9473,6 +9614,12 @@ msgstr "إيقاف مبدئي"
msgid "Temporarily suspended"
msgstr "إيقاف مبدئي"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#, python-format
msgid "The Account number Already Exist!"
msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#, python-format
@ -9792,7 +9939,7 @@ msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__total_family_expenses
msgid "Total Family Expenses"
msgstr "إجمالي مصاريع الاسرة"
msgstr "إجمالي المصروف الشهري للأسرة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_housing__total_income
@ -9816,9 +9963,14 @@ msgid "Total Invoiced"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__total_move_lines
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__total_move_lines
msgid "Total Move Lines"
msgstr ""
msgstr "القيود اليومية"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__total_moves
msgid "Total Moves"
msgstr "الفواتير"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_housing__total_net
@ -10173,6 +10325,12 @@ msgstr "ساري المفعول"
msgid "ValidationError"
msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/family_expense.py:0
#, python-format
msgid "Vendor Bills"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__property_stock_supplier
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__property_stock_supplier
@ -10438,6 +10596,9 @@ msgstr ""
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__widower
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__father_marital__widower
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__widower
#, python-format
msgid "Widower"
msgstr "ارملة"
@ -10472,6 +10633,8 @@ msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_location__with_children
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_location__with_children
#, python-format
msgid "With Children"
msgstr "مع الأطفال"
@ -10484,6 +10647,8 @@ msgstr "مع الأسرة"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#: code:addons/odex_benefit/models/family_members.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_location__with_husband_and_children
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_location__with_husband_and_children
#, python-format
msgid "With Husband And Children"
msgstr "مع الزوج والأطفال"
@ -11470,7 +11635,6 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_black_list_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_final_refused_reason_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_refused_reason_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resarcher_family_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_resarcher_member_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_member_reason_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_suspend_reason_wizard_form
@ -11490,6 +11654,7 @@ msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit_need.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefits_needs__benefit_type__orphans
#, python-format
msgid "orphans"
msgstr "ايتام"
@ -11858,6 +12023,7 @@ msgid "tent"
msgstr "مخيم"
#. module: odex_benefit
#: model:res.groups,comment:odex_benefit.group_benefit_info
#: model:res.groups,comment:odex_benefit.group_benefit_manager
msgid "the user will be able to approve Beneficiaries requests."
msgstr ""
@ -11995,6 +12161,7 @@ msgstr ""
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit_need.py:0
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefits_needs__benefit_type__widows
#, python-format
msgid "widows"
msgstr "الأرامل"
@ -12040,69 +12207,16 @@ msgstr ""
msgid "zkat.line"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_category__gender__female
msgid "أنثى"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__widower
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__father_marital__widower
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__widower
msgid "ارملة"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__father_marital__single
msgid "اعزب"
msgstr ""
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_kanban
msgid "الأب:"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefits_needs__benefit_type__widows
msgid "الأرامل"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__relation__mother
msgid "الأم"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__relation__replacement_mother
msgid "الأم البديلة"
msgstr ""
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_kanban
msgid "الأم:"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__relation__son
msgid "الابن"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__relation__daughter
msgid "الابنة"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__marital_status
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__marital_status
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__marital_status
#: model:ir.model.fields,field_description:odex_benefit.field_family_member__mother_marital
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__father_marital
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__marital_status
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__mother_marital
msgid "الحالة الاجتماعية"
msgstr ""
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_sms_form
msgid "الرجاء استخدام هذه المفاتيح لاستخدام في القالب :"
@ -12118,22 +12232,6 @@ msgstr ""
msgid "المرشحات"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefits_needs__benefit_type__orphans
msgid "ايتام"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_category__gender__male
msgid "ذكر"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__prisoner
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__prisoner
msgid "سجينة"
msgstr ""
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_final_refused_reason_wizard_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_entity_refused_reason_wizard_form
@ -12157,58 +12255,3 @@ msgstr ""
#, python-format
msgid "عفواءً القالب المخصص يتوجب وجود رقم الهوية"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_location__not_live_with_children
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_location__not_live_with_children
msgid "لا تسكن مع الأطفال"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__married
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__father_marital__married
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__married
msgid "متزوجة"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__dead
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__dead
msgid "متوفية"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_category__gender__both
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefits_needs__benefit_type__both
msgid "مشترك"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__divorced
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__father_marital__divorced
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__divorced
msgid "مطلقة"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_marital__divorced_from_another_man
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__divorced_from_another_man
msgid "مطلقة من رجل اخر"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_location__with_children
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_location__with_children
msgid "مع الأطفال"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__family_member__mother_location__with_husband_and_children
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_location__with_husband_and_children
msgid "مع الزوج والأطفال"
msgstr ""
#. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__mother_marital__hanging
msgid "معلقة"
msgstr ""

View File

@ -21,4 +21,5 @@ from . import changes_requests
from . import education_settings
from . import hr_department
from . import account_move_line
from . import family_expense
# from . import res_config_settings

View File

@ -3,4 +3,8 @@ from odoo import models,fields
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'
benefit_family_id = fields.Many2one(comodel_name='grant.benefit', string='Benefit Family')
family_confirm_id = fields.Many2one(comodel_name='confirm.benefit.expense', string='Benefit Family')
class AccountMove(models.Model):
_inherit = 'account.move'
family_confirm_id = fields.Many2one(comodel_name='confirm.benefit.expense', string='Benefit Family')

View File

@ -415,50 +415,20 @@ class GrantBenefitProfile(models.Model):
family_monthly_clotting = fields.Float(string="Family Monthly Clotting", compute='_get_family_monthly_values')
total_family_expenses = fields.Float(string="Total Family Expenses", compute='_get_family_monthly_values')
total_move_lines = fields.Integer(string="Total Move Lines", compute='_get_total_move_lines')
def _get_total_move_lines(self):
for rec in self:
rec.total_move_lines = self.env['account.move.line'].search_count([
('benefit_family_id', '=', rec.id),
])
def action_confirm_benefit(self):
"""Open the confirm.benefit.wizard form dynamically."""
active_ids = self.env.context.get('active_ids', [])
return {
'type': 'ir.actions.act_window',
'name': 'Confirm Benefit',
'res_model': 'confirm.benefit.wizard',
'view_mode': 'form',
'target': 'new',
'context': {'default_benefit_ids': active_ids}, # Pass any context you need to the wizard
}
def action_open_related_move_line_records(self):
""" Opens a tree view with related records filtered by a dynamic domain """
move_lines = self.env['account.move.line'].search([
('benefit_family_id', '=', self.id),
]).ids
return {
'name': _('Journal Items'),
'type': 'ir.actions.act_window',
'res_model': 'account.move.line',
'view_mode': 'tree',
'view_id': self.env.ref('account.view_move_line_tree_grouped').id,
'domain': [('id', 'in', move_lines)],
}
def _get_family_monthly_values(self):
validation_setting = self.env["family.validation.setting"].search([], limit=1)
for rec in self:
total_family_members = rec.benefit_member_count
rec.family_monthly_income = total_family_members * validation_setting.cash_expense
rec.family_monthly_meals = total_family_members * validation_setting.meal_expense
rec.family_monthly_clotting = total_family_members * validation_setting.clothing_expense
rec.total_family_expenses = rec.family_monthly_income + rec.family_monthly_meals + rec.family_monthly_clotting
if rec.benefit_category_id.id in validation_setting.benefit_category_ids.ids:
total_family_members = rec.benefit_member_count
rec.family_monthly_income = total_family_members * validation_setting.cash_expense
rec.family_monthly_meals = total_family_members * validation_setting.meal_expense
rec.family_monthly_clotting = total_family_members * validation_setting.clothing_expense
rec.total_family_expenses = rec.family_monthly_income + rec.family_monthly_meals + rec.family_monthly_clotting
else:
rec.family_monthly_income = 0
rec.family_monthly_meals = 0
rec.family_monthly_clotting = 0
rec.total_family_expenses = 0
def get_html(self):
for rec in self:

View File

@ -0,0 +1,284 @@
# -*- coding: utf-8 -*-
from dateutil.relativedelta import relativedelta
from odoo import models, fields, api, _
from odoo.exceptions import UserError
class ConfirmBenefitExpense(models.Model):
_name = 'confirm.benefit.expense'
_description = 'Confirm Benefit Expense'
state = fields.Selection([
('draft', 'Draft'),
('confirm', 'Confirmed'),
], string='Status', default='draft', required=True, copy=False)
expense_type = fields.Selection([
('family_expense', 'Family Expense'),
('family_invoice', 'Meal Card Invoice'),
], string='Expense Type', default='family_expense', required=True, states={'confirm': [('readonly', True)]})
journal_id = fields.Many2one(comodel_name='account.journal', string="Journal", required=True,
states={'confirm': [('readonly', True)]}, copy=False)
name = fields.Char(string="Name", states={'confirm': [('readonly', True)]}, copy=False)
date = fields.Date(string="Date", default=fields.Date.context_today, required=True,
states={'confirm': [('readonly', True)]})
family_ids = fields.Many2many(comodel_name='grant.benefit', relation='benefit_expense_grant_rel',
column1='expense_id',
column2='family_id', string='Families', states={'confirm': [('readonly', True)]},
copy=False)
cash_expense = fields.Boolean(string='Include Cash Expense', states={'confirm': [('readonly', True)]})
meal_expense = fields.Boolean(string='Include Meal Expense', states={'confirm': [('readonly', True)]})
cloth_expense = fields.Boolean(string='Include Clothing Expense', states={'confirm': [('readonly', True)]})
payment_method_id = fields.Many2one('account.payment.method.line', string='Payment Method',
readonly=False, store=True, copy=False,
states={'confirm': [('readonly', True)]},
compute='_compute_payment_method_line_id',
domain="[('id', 'in', available_payment_method_line_ids)]",
help="Manual: Pay or Get paid by any method outside of Odoo.\n"
"Payment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\n"
"Check: Pay bills by check and print it from Odoo.\n"
"Batch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\n"
"SEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\n"
"SEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n")
available_payment_method_line_ids = fields.Many2many('account.payment.method.line',
compute='_compute_payment_method_line_fields')
total_move_lines = fields.Integer(string="Total Move Lines", compute='_get_total_move_lines')
total_moves = fields.Integer(string="Total Moves", compute='_get_total_move_lines')
@api.constrains('expense_type', 'cash_expense', 'meal_expense', 'cloth_expense')
def _constraint_check_at_least_one_expense(self):
for rec in self:
if rec.expense_type == 'family_expense':
if not rec.cash_expense and not rec.meal_expense and not rec.cloth_expense:
raise UserError(_("At least one expense type should be selected."))
def _get_total_move_lines(self):
for rec in self:
rec.total_move_lines = self.env['account.move.line'].search_count([
('family_confirm_id', '=', rec.id),
])
rec.total_moves = self.env['account.move'].search_count([
('family_confirm_id', '=', rec.id),
])
def action_open_related_move_line_records(self):
""" Opens a tree view with related records filtered by a dynamic domain """
move_lines = self.env['account.move.line'].search([
('family_confirm_id', '=', self.id),
]).ids
return {
'name': _('Journal Items'),
'type': 'ir.actions.act_window',
'res_model': 'account.move.line',
'view_mode': 'tree',
'view_id': self.env.ref('account.view_move_line_tree_grouped').id,
'domain': [('id', 'in', move_lines)],
}
def action_open_related_move_records(self):
""" Opens a tree view with related records filtered by a dynamic domain """
move_lines = self.env['account.move'].search([
('family_confirm_id', '=', self.id),
]).ids
return {
'name': _('Vendor Bills'),
'type': 'ir.actions.act_window',
'res_model': 'account.move',
'view_mode': 'tree',
'view_id': self.env.ref('account.view_in_invoice_tree').id,
'domain': [('id', 'in', move_lines)],
}
@api.depends('available_payment_method_line_ids')
def _compute_payment_method_line_id(self):
''' Compute the 'payment_method_line_id' field.
This field is not computed in '_compute_payment_method_line_fields' because it's a stored editable one.
'''
for pay in self:
available_payment_method_lines = pay.available_payment_method_line_ids
# Select the first available one by default.
if pay.payment_method_id in available_payment_method_lines:
pay.payment_method_id = pay.payment_method_id
elif available_payment_method_lines:
pay.payment_method_id = available_payment_method_lines[0]._origin
else:
pay.payment_method_id = False
@api.depends('journal_id')
def _compute_payment_method_line_fields(self):
for pay in self:
pay.available_payment_method_line_ids = pay.journal_id._get_available_payment_method_lines('outbound')
@api.onchange('expense_type', 'date')
def _onchange_expense_type(self):
"""Ensure that families can only be added to one expense type per month."""
if self.expense_type == 'family_expense':
journal_domain = [('type', 'in', ['bank', 'cash'])]
elif self.expense_type == 'family_invoice':
journal_domain = [('type', 'in', ['purchase'])]
else:
journal_domain = []
if self.date:
month_ago = self.date - relativedelta(months=1)
# Search for records of the same expense_type within the last month
conflicting_records = self.search([
('date', '>=', month_ago),
('date', '<=', self.date),
('expense_type', '=', self.expense_type),
])
if conflicting_records:
# Collect the family IDs that are already in records of the same expense type within the past month
conflicting_family_ids = conflicting_records.mapped('family_ids').ids
return {
'domain': {
'family_ids': [('id', 'not in', conflicting_family_ids),
('state', 'in', ('second_approve', 'temporarily_suspend', 'suspend'))],
'journal_id': journal_domain,
}
}
else:
# No conflicting records found; no restrictions on family selection
return {
'domain': {
'family_ids': [('state', 'in', ('second_approve', 'temporarily_suspend', 'suspend'))],
'journal_id': journal_domain,
}
}
else:
return {
'domain': {
'family_ids': [('state', 'in', ('second_approve', 'temporarily_suspend', 'suspend'))],
'journal_id': journal_domain,
}
}
def action_confirm_selected(self):
for rec in self:
if rec.expense_type == 'family_expense':
benefits = rec.family_ids
if any(benefit.state not in ('second_approve', 'temporarily_suspend', 'suspend') for benefit in
benefits):
raise UserError(_("All selected benefits should be either state of "
"'second_approve','temporarily_suspend','suspend' state."))
validation_setting = self.env["family.validation.setting"].search([], limit=1)
payment_method_line = rec.payment_method_id
if not validation_setting.cash_expense_account_id or not validation_setting.meal_expense_account_id or not validation_setting.clothing_expense_account_id:
raise UserError(_("Please configure the expense accounts in the validation settings."))
if not payment_method_line:
raise UserError(_("Payment method is not configured for the selected journal."))
credit_account_id = payment_method_line.payment_account_id.id
if not credit_account_id:
raise UserError(_("Payment method is not configured for the selected journal."))
if benefits:
lines = []
for benefit in benefits:
lines += rec._prepare_entry_lines(benefit, validation_setting, credit_account_id)
rec.create_entry(rec.journal_id.id, lines)
else:
if not rec.family_ids:
raise UserError(_("Please select at least one family to create an invoice."))
validation_setting = self.env["family.validation.setting"].search([], limit=1)
account_id = validation_setting.meal_expense_account_id
invoice_lines = []
for family in rec.family_ids:
invoice_lines.append((0, 0, {
'name': f'{family.name}/{family.code}', # Family name as the description
'account_id': account_id.id, # The same account for all lines
'quantity': 1, # Qty is 1
'price_unit': family.family_monthly_meals, # Amount is 1
'analytic_account_id': family.branch_id.analytic_account_id.id, # The same analytic account
}))
# Create the invoice
invoice_vals = {
'move_type': 'in_invoice', # Set this to 'in_invoice' if it's a vendor bill
'partner_id': validation_setting.meal_partner_id.id, # The partner for the invoice
'invoice_date': rec.date, # The date of the invoice
'family_confirm_id': rec.id, # Link to the family expense record
'journal_id': rec.journal_id.id, # The journal for the invoice
'invoice_line_ids': invoice_lines, # The invoice lines
'ref': rec.name, # The reference for the invoice
}
self.env['account.move'].create(invoice_vals)
rec.state = 'confirm'
return True
def _prepare_entry_lines(self, benefit, validation_setting, credit_account_id):
"""Prepare debit and credit lines for a benefit"""
entry_lines = []
expense_types = [
('meal', 'family_monthly_meals', validation_setting.meal_expense_account_id.id),
('cash', 'family_monthly_income', validation_setting.cash_expense_account_id.id),
('clothing', 'family_monthly_clotting', validation_setting.clothing_expense_account_id.id),
]
for expense_type, field, debit_account_id in expense_types:
amount = getattr(benefit, field, 0.0)
if benefit.district_id.meal_card and expense_type == 'meal' and not self.meal_expense:
continue
if not self.cash_expense and expense_type == 'cash':
continue
if not self.cloth_expense and expense_type == 'clothing':
continue
if amount:
name = _("Family Expense - %s") % expense_type
entry_lines.append(self._create_debit_line(benefit, debit_account_id, amount, name))
entry_lines.append(self._create_credit_line(benefit, credit_account_id, amount, name))
return entry_lines
def _create_debit_line(self, benefit, account_id, amount, name):
"""Create a debit line"""
return (0, 0, {
'name': name,
'family_confirm_id': self.id,
'partner_id': benefit.partner_id.id,
'analytic_account_id': benefit.branch_id.analytic_account_id.id,
'account_id': account_id,
'debit': amount,
'credit': 0.0,
})
def _create_credit_line(self, benefit, account_id, amount, name):
"""Create a credit line"""
return (0, 0, {
'name': name,
'family_confirm_id': self.id,
'partner_id': benefit.partner_id.id,
'analytic_account_id': benefit.branch_id.analytic_account_id.id,
'account_id': account_id,
'debit': 0.0,
'credit': amount,
})
def create_entry(self, journal_id, lines):
"""Create an account move entry"""
move_vals = {
'journal_id': journal_id,
'date': self.date,
'ref': self.name,
'line_ids': lines,
}
self.env['account.move'].create(move_vals)
return True

View File

@ -107,4 +107,4 @@ access_education_result,access_education_result,model_education_result,,1,1,1,1
access_study_material,access_study_material,model_study_material,,1,1,1,1
access_suspend_reason,access_suspend_reason,model_suspend_reason,,1,1,1,1
access_suspend_reason_wizard,access_suspend_reason_wizard,model_suspend_reason_wizard,,1,1,1,1
access_confirm_benefit_wizard,access_confirm_benefit_wizard,model_confirm_benefit_wizard,base.group_user,1,1,1,1
access_confirm_benefit_expense,access_confirm_benefit_expense,model_confirm_benefit_expense,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
107 access_study_material access_study_material model_study_material 1 1 1 1
108 access_suspend_reason access_suspend_reason model_suspend_reason 1 1 1 1
109 access_suspend_reason_wizard access_suspend_reason_wizard model_suspend_reason_wizard 1 1 1 1
110 access_confirm_benefit_wizard access_confirm_benefit_expense access_confirm_benefit_wizard access_confirm_benefit_expense model_confirm_benefit_wizard model_confirm_benefit_expense base.group_user 1 1 1 1

View File

@ -146,9 +146,7 @@
<button icon="fa-usd">
<field name="total_expenses" string="Total Expenses" widget="statinfo"/>
</button>
<button icon="fa-usd" name="action_open_related_move_line_records">
<field name="total_move_lines" string="Moves" widget="statinfo"/>
</button>
<button icon="fa-usd">
<field name="total_income" string="Total Income" widget="statinfo"/>
</button>
@ -1086,17 +1084,5 @@
</form>
</field>
</record>
<record id="action_confirm_benefit_from_list" model="ir.actions.server">
<field name="name">Create Move</field>
<field name="model_id" ref="model_grant_benefit"/>
<field name="binding_model_id" ref="model_grant_benefit"/>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_confirm_benefit()
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Tree View -->
<record id="view_confirm_benefit_expense_tree" model="ir.ui.view">
<field name="name">confirm.benefit.expense.tree</field>
<field name="model">confirm.benefit.expense</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="expense_type"/>
<field name="date"/>
<field name="state"/>
</tree>
</field>
</record>
<!-- Form View -->
<record id="view_confirm_benefit_expense_form" model="ir.ui.view">
<field name="name">confirm.benefit.expense.form</field>
<field name="model">confirm.benefit.expense</field>
<field name="arch" type="xml">
<form string="Confirm Benefit Expense">
<header>
<field name="state" widget="statusbar" statusbar_visible="draft,confirm"/>
<button string="Confirm" type="object" name="action_confirm_selected" class="oe_highlight"
states="draft"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button icon="fa-usd" name="action_open_related_move_line_records" type="object"
attrs="{'invisible':[('expense_type','!=','family_expense')]}">
<field name="total_move_lines" string="Moves" widget="statinfo"/>
</button>
<button icon="fa-usd" name="action_open_related_move_records" type="object"
attrs="{'invisible':[('expense_type','!=','family_invoice')]}">
<field name="total_moves" string="Invoices" widget="statinfo"/>
</button>
</div>
<group>
<field name="expense_type" required="1"/>
<field name="journal_id" required="1"/>
</group>
<group>
<field name="name" required="1"/>
<field name="date" required="1"/>
</group>
<!-- Conditional fields based on expense_type -->
<group>
<field name="available_payment_method_line_ids" invisible="1"/>
<field name="payment_method_id"
attrs="{'invisible': [('expense_type', '=', 'family_invoice')], 'required': [('expense_type', '=', 'family_expense')]}"/>
<field name="cash_expense"
attrs="{'invisible': [('expense_type', '=', 'family_invoice')]}"/>
<field name="meal_expense"
attrs="{'invisible': [('expense_type', '=', 'family_invoice')]}"/>
<field name="cloth_expense"
attrs="{'invisible': [('expense_type', '=', 'family_invoice')]}"/>
</group>
<!-- Notebook with Families page -->
<notebook>
<page string="Families">
<field name="family_ids"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- Action -->
<record id="action_confirm_benefit_expense" model="ir.actions.act_window">
<field name="name">Confirm Benefit Expenses</field>
<field name="res_model">confirm.benefit.expense</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_confirm_benefit_expense_tree"/>
</record>
<!-- Menu Item -->
<menuitem id="menu_confirm_benefit_expense" name="Benefit Expense Flow" parent="odex_benefit.benefit_main_menu"
action="action_confirm_benefit_expense" sequence="10"/>
</odoo>

View File

@ -3,5 +3,4 @@ from . import entity_refused_wizard
from . import entity_black_list_wizard
from . import researcher_wizard
from . import suspend_reason_wizard
from . import family_expense_move_wiz

View File

@ -1,102 +0,0 @@
from datetime import date
from odoo import models, fields, _
from odoo.exceptions import UserError
class ConfirmBenefitWizard(models.TransientModel):
_name = 'confirm.benefit.wizard'
_description = 'Confirm Benefit Wizard'
journal_id = fields.Many2one(comodel_name='account.journal', string="Journal", required=True)
payment_method_id = fields.Many2one(comodel_name='account.payment.method', string='Payment Type', required=True)
name = fields.Char(string="Name", default=lambda self: "Family Expense -%s" % date.today())
date = fields.Date(string="Date", default=fields.Date.context_today, required=True)
def action_confirm_selected(self):
active_ids = self.env.context.get('default_benefit_ids', [])
benefits = self.env['grant.benefit'].browse(active_ids)
if any(benefit.state not in ('second_approve', 'temporarily_suspend', 'suspend') for benefit in benefits):
raise UserError(_("All selected benefits should be either state of "
"'second_approve','temporarily_suspend','suspend' state."))
validation_setting = self.env["family.validation.setting"].search([], limit=1)
payment_method_line = self.env['account.payment.method.line'].search(
[('payment_method_id', '=', self.payment_method_id.id)], limit=1)
if not validation_setting.cash_expense_account_id or not validation_setting.meal_expense_account_id or not validation_setting.clothing_expense_account_id:
raise UserError(_("Please configure the expense accounts in the validation settings."))
if not payment_method_line:
raise UserError(_("Payment method is not configured for the selected journal."))
credit_account_id = payment_method_line.payment_account_id.id
if not credit_account_id:
raise UserError(_("Payment method is not configured for the selected journal."))
if benefits:
lines = []
for benefit in benefits:
lines += self._prepare_entry_lines(benefit, validation_setting, credit_account_id)
self.create_entry(self.journal_id.id, lines)
return {'type': 'ir.actions.act_window_close'}
def _prepare_entry_lines(self, benefit, validation_setting, credit_account_id):
"""Prepare debit and credit lines for a benefit"""
entry_lines = []
expense_types = [
('meal', 'family_monthly_meals', validation_setting.meal_expense_account_id.id),
('cash', 'family_monthly_income', validation_setting.cash_expense_account_id.id),
('clothing', 'family_monthly_clotting', validation_setting.clothing_expense_account_id.id),
]
for expense_type, field, debit_account_id in expense_types:
amount = getattr(benefit, field, 0.0)
if benefit.district_id.meal_card and expense_type == 'meal':
continue
if amount:
name = _("Family Expense - %s") % expense_type
entry_lines.append(self._create_debit_line(benefit, debit_account_id, amount, name))
entry_lines.append(self._create_credit_line(benefit, credit_account_id, amount, name))
return entry_lines
def _create_debit_line(self, benefit, account_id, amount, name):
"""Create a debit line"""
return (0, 0, {
'name': name,
'benefit_family_id': benefit.id,
'partner_id': benefit.partner_id.id,
'analytic_account_id': benefit.branch_id.analytic_account_id.id,
'account_id': account_id,
'debit': amount,
'credit': 0.0,
})
def _create_credit_line(self, benefit, account_id, amount, name):
"""Create a credit line"""
return (0, 0, {
'name': name,
'benefit_family_id': benefit.id,
'partner_id': benefit.partner_id.id,
'analytic_account_id': benefit.branch_id.analytic_account_id.id,
'account_id': account_id,
'debit': 0.0,
'credit': amount,
})
def create_entry(self, journal_id, lines):
"""Create an account move entry"""
move_vals = {
'journal_id': journal_id,
'date': self.date,
'ref': self.name,
'line_ids': lines,
}
self.env['account.move'].create(move_vals)
return True

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="view_confirm_benefit_wizard_form" model="ir.ui.view">
<field name="name">confirm.benefit.wizard.form</field>
<field name="model">confirm.benefit.wizard</field>
<field name="arch" type="xml">
<form string="Confirm Benefit">
<group>
<field name="journal_id" required="1"/>
<field name="payment_method_id" required="1"/>
<field name="name" readonly="1"/>
<field name="date" required="1"/>
</group>
<footer>
<button string="Confirm" type="object" name="action_confirm_selected" class="oe_highlight"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
</odoo>