From e0520a326ff037922c8d5f474deb8e81da8b7b85 Mon Sep 17 00:00:00 2001 From: shashikala1998 Date: Mon, 25 Nov 2024 07:25:59 +0530 Subject: [PATCH 1/8] [FIX] g2p_programs: access error on approve --- g2p_programs/README.md | 16 + g2p_programs/__init__.py | 4 + g2p_programs/__manifest__.py | 78 + g2p_programs/data/queue_data.xml | 18 + g2p_programs/data/sequences.xml | 14 + g2p_programs/i18n/ar.po | 3841 ++++++++++++++++ g2p_programs/i18n/ckb.po | 3860 ++++++++++++++++ g2p_programs/i18n/fr.po | 3923 +++++++++++++++++ g2p_programs/i18n/g2p_programs.pot | 92 +- g2p_programs/models/__init__.py | 17 + g2p_programs/models/accounting/__init__.py | 5 + .../models/accounting/account_journal.py | 10 + .../models/accounting/fund_management.py | 117 + g2p_programs/models/accounting/fund_report.py | 79 + g2p_programs/models/constants.py | 30 + g2p_programs/models/cycle.py | 459 ++ g2p_programs/models/cycle_membership.py | 106 + g2p_programs/models/disable_edit_mixin.py | 24 + g2p_programs/models/duplicate.py | 22 + g2p_programs/models/entitlement.py | 250 ++ g2p_programs/models/job_relate_mixin.py | 39 + g2p_programs/models/managers/__init__.py | 13 + g2p_programs/models/managers/base_manager.py | 28 + g2p_programs/models/managers/cycle_manager.py | 597 +++ .../models/managers/deduplication_manager.py | 679 +++ .../models/managers/eligibility_manager.py | 179 + .../models/managers/entitlement_manager.py | 643 +++ g2p_programs/models/managers/manager_mixin.py | 48 + .../models/managers/notification_manager.py | 68 + .../models/managers/payment_manager.py | 391 ++ .../models/managers/program_manager.py | 249 ++ .../models/managers/recurrence_mixin.py | 76 + g2p_programs/models/managers/source_mixin.py | 57 + g2p_programs/models/payment.py | 157 + g2p_programs/models/program_config.py | 30 + g2p_programs/models/program_membership.py | 272 ++ g2p_programs/models/programs.py | 556 +++ g2p_programs/models/queue_job_channel.py | 12 + g2p_programs/models/registrant.py | 49 + g2p_programs/models/res_user.py | 23 + g2p_programs/pyproject.toml | 3 + g2p_programs/report/report_format.xml | 26 + g2p_programs/report/summary_report.xml | 110 + g2p_programs/report/voucher_card.xml | 76 + g2p_programs/security/ir.model.access.csv | 149 + g2p_programs/security/program_security.xml | 22 + g2p_programs/security/registrant_rule.xml | 27 + g2p_programs/static/description/icon.png | Bin 0 -> 3985 bytes g2p_programs/static/src/css/style.css | 3 + g2p_programs/static/src/img/logo.png | Bin 0 -> 28451 bytes g2p_programs/static/src/js/create_program.js | 39 + .../src/xml/create_program_template.xml | 36 + g2p_programs/tests/__init__.py | 6 + .../tests/test_cycle_manager_new_cycle.py | 145 + g2p_programs/tests/test_programs.py | 192 + .../test_programs_id_eligibility_dedup.py | 271 ++ ..._programs_phone_eligibility_deduplicate.py | 252 ++ .../account_journal_config_view.xml | 68 + .../views/accounting/account_journal_view.xml | 77 + .../views/accounting/fund_management_view.xml | 200 + .../views/accounting/fund_report_view.xml | 90 + g2p_programs/views/cycle_membership_view.xml | 160 + g2p_programs/views/cycle_view.xml | 476 ++ g2p_programs/views/duplicate_view.xml | 118 + g2p_programs/views/entitlement_view.xml | 245 + g2p_programs/views/main_view.xml | 44 + .../views/managers/cycle_manager_view.xml | 200 + .../managers/deduplication_manager_view.xml | 594 +++ .../managers/eligibility_manager_view.xml | 156 + .../managers/entitlement_manager_view.xml | 179 + .../managers/notification_manager_view.xml | 182 + .../views/managers/payment_manager_view.xml | 184 + .../views/managers/program_manager_view.xml | 157 + g2p_programs/views/payment_batch_tag_view.xml | 54 + g2p_programs/views/payment_batch_view.xml | 185 + g2p_programs/views/payment_view.xml | 228 + .../views/program_membership_view.xml | 393 ++ g2p_programs/views/programs_view.xml | 905 ++++ g2p_programs/views/registrant_view.xml | 156 + g2p_programs/wizard/__init__.py | 6 + .../wizard/assign_payments_batch_wizard.py | 86 + .../wizard/assign_payments_batch_wizard.xml | 39 + .../wizard/assign_to_program_wizard.py | 180 + .../wizard/assign_to_program_wizard.xml | 40 + g2p_programs/wizard/create_program_wizard.py | 284 ++ g2p_programs/wizard/create_program_wizard.xml | 162 + .../multi_entitlement_approval_wizard.py | 125 + .../multi_entitlement_approval_wizard.xml | 62 + 88 files changed, 24446 insertions(+), 77 deletions(-) create mode 100644 g2p_programs/README.md create mode 100644 g2p_programs/__init__.py create mode 100644 g2p_programs/__manifest__.py create mode 100644 g2p_programs/data/queue_data.xml create mode 100644 g2p_programs/data/sequences.xml create mode 100644 g2p_programs/i18n/ar.po create mode 100644 g2p_programs/i18n/ckb.po create mode 100644 g2p_programs/i18n/fr.po create mode 100644 g2p_programs/models/__init__.py create mode 100644 g2p_programs/models/accounting/__init__.py create mode 100644 g2p_programs/models/accounting/account_journal.py create mode 100644 g2p_programs/models/accounting/fund_management.py create mode 100644 g2p_programs/models/accounting/fund_report.py create mode 100644 g2p_programs/models/constants.py create mode 100644 g2p_programs/models/cycle.py create mode 100644 g2p_programs/models/cycle_membership.py create mode 100644 g2p_programs/models/disable_edit_mixin.py create mode 100644 g2p_programs/models/duplicate.py create mode 100644 g2p_programs/models/entitlement.py create mode 100644 g2p_programs/models/job_relate_mixin.py create mode 100644 g2p_programs/models/managers/__init__.py create mode 100644 g2p_programs/models/managers/base_manager.py create mode 100644 g2p_programs/models/managers/cycle_manager.py create mode 100644 g2p_programs/models/managers/deduplication_manager.py create mode 100644 g2p_programs/models/managers/eligibility_manager.py create mode 100644 g2p_programs/models/managers/entitlement_manager.py create mode 100644 g2p_programs/models/managers/manager_mixin.py create mode 100644 g2p_programs/models/managers/notification_manager.py create mode 100644 g2p_programs/models/managers/payment_manager.py create mode 100644 g2p_programs/models/managers/program_manager.py create mode 100644 g2p_programs/models/managers/recurrence_mixin.py create mode 100644 g2p_programs/models/managers/source_mixin.py create mode 100644 g2p_programs/models/payment.py create mode 100644 g2p_programs/models/program_config.py create mode 100644 g2p_programs/models/program_membership.py create mode 100644 g2p_programs/models/programs.py create mode 100644 g2p_programs/models/queue_job_channel.py create mode 100644 g2p_programs/models/registrant.py create mode 100644 g2p_programs/models/res_user.py create mode 100644 g2p_programs/pyproject.toml create mode 100644 g2p_programs/report/report_format.xml create mode 100644 g2p_programs/report/summary_report.xml create mode 100644 g2p_programs/report/voucher_card.xml create mode 100644 g2p_programs/security/ir.model.access.csv create mode 100644 g2p_programs/security/program_security.xml create mode 100644 g2p_programs/security/registrant_rule.xml create mode 100644 g2p_programs/static/description/icon.png create mode 100644 g2p_programs/static/src/css/style.css create mode 100644 g2p_programs/static/src/img/logo.png create mode 100644 g2p_programs/static/src/js/create_program.js create mode 100644 g2p_programs/static/src/xml/create_program_template.xml create mode 100644 g2p_programs/tests/__init__.py create mode 100644 g2p_programs/tests/test_cycle_manager_new_cycle.py create mode 100644 g2p_programs/tests/test_programs.py create mode 100644 g2p_programs/tests/test_programs_id_eligibility_dedup.py create mode 100644 g2p_programs/tests/test_programs_phone_eligibility_deduplicate.py create mode 100644 g2p_programs/views/accounting/account_journal_config_view.xml create mode 100644 g2p_programs/views/accounting/account_journal_view.xml create mode 100644 g2p_programs/views/accounting/fund_management_view.xml create mode 100644 g2p_programs/views/accounting/fund_report_view.xml create mode 100644 g2p_programs/views/cycle_membership_view.xml create mode 100644 g2p_programs/views/cycle_view.xml create mode 100644 g2p_programs/views/duplicate_view.xml create mode 100644 g2p_programs/views/entitlement_view.xml create mode 100644 g2p_programs/views/main_view.xml create mode 100644 g2p_programs/views/managers/cycle_manager_view.xml create mode 100644 g2p_programs/views/managers/deduplication_manager_view.xml create mode 100644 g2p_programs/views/managers/eligibility_manager_view.xml create mode 100644 g2p_programs/views/managers/entitlement_manager_view.xml create mode 100644 g2p_programs/views/managers/notification_manager_view.xml create mode 100644 g2p_programs/views/managers/payment_manager_view.xml create mode 100644 g2p_programs/views/managers/program_manager_view.xml create mode 100644 g2p_programs/views/payment_batch_tag_view.xml create mode 100644 g2p_programs/views/payment_batch_view.xml create mode 100644 g2p_programs/views/payment_view.xml create mode 100644 g2p_programs/views/program_membership_view.xml create mode 100644 g2p_programs/views/programs_view.xml create mode 100644 g2p_programs/views/registrant_view.xml create mode 100644 g2p_programs/wizard/__init__.py create mode 100644 g2p_programs/wizard/assign_payments_batch_wizard.py create mode 100644 g2p_programs/wizard/assign_payments_batch_wizard.xml create mode 100644 g2p_programs/wizard/assign_to_program_wizard.py create mode 100644 g2p_programs/wizard/assign_to_program_wizard.xml create mode 100644 g2p_programs/wizard/create_program_wizard.py create mode 100644 g2p_programs/wizard/create_program_wizard.xml create mode 100644 g2p_programs/wizard/multi_entitlement_approval_wizard.py create mode 100644 g2p_programs/wizard/multi_entitlement_approval_wizard.xml diff --git a/g2p_programs/README.md b/g2p_programs/README.md new file mode 100644 index 000000000..eebc7b2c7 --- /dev/null +++ b/g2p_programs/README.md @@ -0,0 +1,16 @@ +# OpenG2P Programs + +This addon is the core to manage Social Protection programs. + +This project is based around the concepts of programs and cycles as defined in the +[World Bank Source Book](https://openknowledge.worldbank.org/bitstream/handle/10986/34044/9781464815775.pdf?sequence=9&isAllowed=y). + +Refer to https://docs.openg2p.org. + +## Features + +- Program creation wizard +- Individuals or groups can be enrolled in a program +- Modular API +- Multiple programs +- Multiple cycles diff --git a/g2p_programs/__init__.py b/g2p_programs/__init__.py new file mode 100644 index 000000000..e57045776 --- /dev/null +++ b/g2p_programs/__init__.py @@ -0,0 +1,4 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +from . import models +from . import wizard diff --git a/g2p_programs/__manifest__.py b/g2p_programs/__manifest__.py new file mode 100644 index 000000000..dedd285e2 --- /dev/null +++ b/g2p_programs/__manifest__.py @@ -0,0 +1,78 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +{ + "name": "OpenG2P Programs", + "category": "G2P/G2P", + "version": "17.0.1.2.1", + "sequence": 1, + "author": "OpenG2P (OpenSPP fork)", + "website": "https://openg2p.org", + "license": "LGPL-3", + "development_status": "Production/Stable", + "depends": [ + "account", + "web", + "base", + "mail", + "g2p_registry_base", + "g2p_registry_individual", + "g2p_registry_group", + "g2p_registry_membership", + "g2p_bank", + "event_sms", + "calendar", + "queue_job", + ], + "data": [ + "security/program_security.xml", + "security/ir.model.access.csv", + "security/registrant_rule.xml", + "data/sequences.xml", + "data/queue_data.xml", + "report/voucher_card.xml", + "report/report_format.xml", + "report/summary_report.xml", + "views/main_view.xml", + "views/programs_view.xml", + "views/program_membership_view.xml", + "views/cycle_view.xml", + "views/cycle_membership_view.xml", + "views/entitlement_view.xml", + "views/payment_view.xml", + "views/payment_batch_view.xml", + "views/payment_batch_tag_view.xml", + "views/registrant_view.xml", + "views/managers/eligibility_manager_view.xml", + "views/managers/deduplication_manager_view.xml", + "views/managers/notification_manager_view.xml", + "views/managers/program_manager_view.xml", + "views/managers/cycle_manager_view.xml", + "views/managers/entitlement_manager_view.xml", + "views/managers/payment_manager_view.xml", + "views/accounting/fund_management_view.xml", + "views/accounting/account_journal_view.xml", + "views/accounting/fund_report_view.xml", + "views/accounting/account_journal_config_view.xml", + "views/duplicate_view.xml", + "wizard/assign_to_program_wizard.xml", + "wizard/multi_entitlement_approval_wizard.xml", + "wizard/create_program_wizard.xml", + "wizard/assign_payments_batch_wizard.xml", + ], + "assets": { + "web.assets_backend": [ + "/g2p_programs/static/src/js/create_program.js", + "/g2p_programs/static/src/css/style.css", + "/g2p_programs/static/src/xml/create_program_template.xml", + ], + }, + "demo": [], + "images": [], + "external_dependencies": { + "python": [ + "python-dateutil", + ] + }, + "application": True, + "installable": True, + "auto_install": False, +} diff --git a/g2p_programs/data/queue_data.xml b/g2p_programs/data/queue_data.xml new file mode 100644 index 000000000..c347bb2fe --- /dev/null +++ b/g2p_programs/data/queue_data.xml @@ -0,0 +1,18 @@ + + + + root_program + + + cycle + + + + eligibility_manager + + + + program_manager + + + diff --git a/g2p_programs/data/sequences.xml b/g2p_programs/data/sequences.xml new file mode 100644 index 000000000..d80c7c645 --- /dev/null +++ b/g2p_programs/data/sequences.xml @@ -0,0 +1,14 @@ + + + + Program Fund Reference Number + program.fund.ref.num + no_gap + 6 + + + PF-%(range_year)s- + + + + diff --git a/g2p_programs/i18n/ar.po b/g2p_programs/i18n/ar.po new file mode 100644 index 000000000..7dd9e242b --- /dev/null +++ b/g2p_programs/i18n/ar.po @@ -0,0 +1,3841 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * g2p_programs +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-02-21 09:23+0000\n" +"Last-Translator: Mohammed Alateya \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \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 ? 4 : 5;\n" +"X-Generator: Weblate 4.14\n" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__members_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__beneficiaries_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree +msgid "# Beneficiaries" +msgstr "# المستفيدين" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__entitlements_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__entitlements_count +msgid "# Cash Entitlements" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__cycles_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__cycles_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__cycles_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree +msgid "# Cycles" +msgstr "القطع" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__eligible_beneficiaries_count +msgid "# Eligible Beneficiaries" +msgstr "# المستفيدين المستحقين" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__entitlements_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_tree +msgid "# Entitlements" +msgstr "# المستحقات" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_tree +msgid "# IDs" +msgstr "# البطاقات التعريفية" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__duplicate_membership_count +msgid "# Membership Duplicates" +msgstr "# عضوية مكررة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__payments_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "# Payments" +msgstr "الدفعات" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__program_membership_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__program_membership_count +msgid "# Program Memberships" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "%s Beneficiaries duplicate." +msgstr "%s مستفيدين مكررين." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "%s Beneficiaries enrolled." +msgstr "%s المستفيدين المدرجين." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "%s beneficiaries imported." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#, python-format +msgid "%s new payments was issued." +msgstr "%s تم انشاء دفعات جديدة" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "'Accounting'" +msgstr "الحسابات" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "'Configuration'" +msgstr "الاعدادات" + +#. module: g2p_programs +#: model:ir.actions.report,print_report_name:g2p_programs.action_print_entitlement +msgid "'Entitlement Card'" +msgstr ""بطاقة المستحقات"" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__max_individual_in_group +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__max_individual_in_group +msgid "0 means no limit" +msgstr "لا يوجد حدود" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Beneficiaries" +msgstr " المستفيدين " + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycles" +msgstr "القطوعات" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "" +"Disbursement\n" +" Form" +msgstr "" +"الصرف\n" +" نموذج" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Duplicates" +msgstr " تكرارات " + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Entitlements" +msgstr " المستحقات " + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#, fuzzy +msgid "Payments" +msgstr "القطوعات" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +#| msgid "Duplicates" +msgid "Related Job(s)" +msgstr " تكرارات " + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Warning: Operation in progress: " +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__cycle_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval_wizard__cycle_id +msgid "A Cycle" +msgstr "القطوعات" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__entitlement_id +msgid "A Entitlement" +msgstr "مستحقات" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__wizard_id +msgid "A Wizard" +msgstr "المساعد" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_membership__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_entitlement__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_payment__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__partner_id +msgid "A beneficiary" +msgstr "المستفيد" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_membership__cycle_id +msgid "A cycle" +msgstr "القطع" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "A journal must be defined for this program. Select a journal in the" +msgstr "يجب تحديد اساسيات لهذا البرنامج. حدد اساسيات في" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_assign_program_wizard__program_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__program_id +msgid "A program" +msgstr "برنامج المستحقات" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_account_journal_conf +msgid "Account Journals" +msgstr "سجل الحسابات" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__account_number +msgid "Account Number" +msgstr "رقم الحساب" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_accounting_config_menu_root +#: model:ir.ui.menu,name:g2p_programs.g2p_accounting_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Accounting" +msgstr "يحسب" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_account_journal_prog_benf +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__journal_id +#: model:ir.ui.menu,name:g2p_programs.menu_account_journal_prog_benf +msgid "Accounting Journal" +msgstr "سجل الحسابات" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Accounting Journal Entry" +msgstr "إدخال دفتر اليومية للمحاسبة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_needaction +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_needaction +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_needaction +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_needaction +msgid "Action Needed" +msgstr "الإجراءات اللازمة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__active +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__state__active +msgid "Active" +msgstr "مفعل" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_ids +msgid "Activities" +msgstr "أنشطة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_exception_decoration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_exception_decoration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "تعيين استثناء النشاط" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_state +msgid "Activity State" +msgstr "حالة النشاط" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_type_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_type_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_type_icon +msgid "Activity Type Icon" +msgstr "رمز نوع النشاط" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_assign_payments_batch_wizard +#, fuzzy +msgid "Add Payments to Batch Wizard" +msgstr "إضافة المسجلين إلى معالج البرنامج" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_assign_program_wizard +msgid "Add Registrants to Program Wizard" +msgstr "إضافة المسجلين إلى معالج البرنامج" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_conf +msgid "Add a Beneficiary Disbursement Journal!" +msgstr "أضف سجل صرف المستفيد!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_manager_default +msgid "Add a Cycle Manager!" +msgstr "أضف مدير القطع!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_manager_default +#, fuzzy +msgid "Add a Payment Manager!" +msgstr "أضف مدير برنامج!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_phone_number +msgid "Add a Phone Number Deduplication Eligibility Manager!" +msgstr "اضف رقم هاتف مدير اللغاء التكرارية!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_phone_number +msgid "Add a Phone Number Deduplication Manager!" +msgstr "اضف رقم هاتف مدير اللغاء التكرارية!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_manager_default +msgid "Add a Program Manager!" +msgstr "أضف مدير برنامج!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_notification_manager_sms +msgid "Add a SMS Notification Manager!" +msgstr "اضف مدير اشعارات الرسائل القصيرة!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_membership +msgid "Add a new cycle membership!" +msgstr "اضف عضو جديد في القطع!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle +msgid "Add a new cycle!" +msgstr "اضف قطع جديد!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement +msgid "Add a new entitlement!" +msgstr "أضف استحقاق جديد!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership_duplicate +msgid "Add a new program membership duplicate!" +msgstr "أضف عصو جديد في برنامج توزيع مكرر!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership +msgid "Add a new program membership!" +msgstr "اضف عضو جديد في برنامج توزيع جديد!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_list +msgid "Add a new program!" +msgstr "اضف برنامج جديد!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_default +msgid "Add an Eligibility Manager!" +msgstr "أضف مدير الاستحقاق!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement_manager_default +msgid "Add an Entitlement Manager!" +msgstr "أضف مدير المستحقات!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_id_dedup +msgid "Add an ID Deduplication Eligibility Manager!" +msgstr "أضف مدير الغاء البطاقات المكررة!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_id_dedup +msgid "Add an ID Deduplication Manager!" +msgstr "إضافة مدير إلغاء تكرار المعرف!" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.assign_to_program +msgid "Add to Program" +msgstr "اضافة برنامج توزيع" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Address:" +msgstr "عنوان:" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#, python-format +msgid "All entitlements selected are not approved!" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/assign_payments_batch_wizard.py:0 +#, python-format +msgid "All selected payments are already assigned to another batch." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__amount +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__amount +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +msgid "Amount" +msgstr "كمية" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__amount_issued +#, fuzzy +msgid "Amount Issued" +msgstr "كمية" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__amount_paid +#, fuzzy +msgid "Amount Paid" +msgstr "كمية" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__amount_per_cycle +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__amount_per_cycle +msgid "Amount Per Cycle" +msgstr "الكمية حسب القطع" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__amount_per_individual_in_group +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__amount_per_individual_in_group +msgid "Amount Per Individual In Group" +msgstr "الكمية لكل فرد في العائلة" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.multiple_entitlement_approval +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Approve" +msgstr "موافقة" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Approve Entitlement" +msgstr "الموافقة على المستحقات" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__approved +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__approved +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__approved +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Approved" +msgstr "موافق عليه" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__approver_group_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__approver_group_id +msgid "Approver Group" +msgstr "مجموعة الموافقين" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +msgid "Archived" +msgstr "مؤرشف" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_to_program_wizard_form_view +msgid "Assign" +msgstr "تعيين" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.assign_payment_batch +msgid "Assign Payments to Batch" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +msgid "Assign to Batch" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__assigned +msgid "Assigned" +msgstr "تعيين" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_attachment_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_attachment_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_attachment_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_attachment_count +msgid "Attachment Count" +msgstr "عدد المرفقات" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_cycle_manager__auto_approve_entitlements +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__auto_approve_entitlements +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__auto_approve_entitlements +msgid "Auto-approve Entitlements" +msgstr "الموافقة التلقائية على الاستحقاقات" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__auto_approve_entitlements +msgid "Auto-approve entitlements" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "" +"Auto-approve entitlements is set but there are no entitlements to process." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__create_batch +msgid "Automatically Create Batch" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Back" +msgstr "رجوع" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__balance +msgid "Balance" +msgstr "رصيد" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_cycle_manager +msgid "Base Cycle Manager" +msgstr "مدير القطوعات الاساسية" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_deduplication_manager +msgid "Base Deduplication Manager" +msgstr "مدير التكرارات الاساسية" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager +msgid "Base Eligibility" +msgstr "الاستحقاق الاساسي" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_entitlement_manager +msgid "Base Entitlement Manager" +msgstr "مدير الاستحقاقات الاساسية" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__base_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__base_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__base_event_id +msgid "Base Event" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_base_programs_manager +msgid "Base Manager" +msgstr "مدير الاساسيات" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_payment_manager +#, fuzzy +msgid "Base Payment Manager" +msgstr "مدير برنامج التوزيع الاساسي" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_manager +msgid "Base Program Manager" +msgstr "مدير برنامج التوزيع الاساسي" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_notification_manager +msgid "Base Program Notification Manager" +msgstr "مدير برنامج الاشعارات الاساسي" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__batch_has_completed +msgid "Batch Has Completed" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__beneficiary_ids +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +#, python-format +msgid "Beneficiaries" +msgstr "المستفيدين" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Beneficiaries Duplicates" +msgstr "تكرارية المستفيدين" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__partner_id +msgid "Beneficiary" +msgstr "المستفيدين" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_account_journal_beneficiary +#: model:ir.model.fields,field_description:g2p_programs.field_account_journal__beneficiary_disb +#: model:ir.ui.menu,name:g2p_programs.menu_action_account_moves_journal_benf +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_account_move_line_beneficiary_filter +msgid "Beneficiary Funds" +msgstr "ميزانية المستفيدين" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Beneficiary import finished." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.constraint,message:g2p_programs.constraint_g2p_cycle_membership_cycle_membership_unique +msgid "Beneficiary must be unique per cycle." +msgstr "يجب أن يكون المستفيد فريدًا في كل قطع." + +#. module: g2p_programs +#: model:ir.model.constraint,message:g2p_programs.constraint_g2p_program_membership_program_membership_unique +msgid "Beneficiary must be unique per program." +msgstr "يجب أن يكون المستفيد فريدًا لكل برنامج توزيع." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#, fuzzy +msgid "Beneficiary:" +msgstr "المستفيدين" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__byday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__byday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__byday +msgid "By day" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__calendar_event_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__calendar_event_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__calendar_event_ids +msgid "Calendar Event" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/duplicate.py:0 +#, python-format +msgid "Can't delete duplicated membership" +msgstr "لا يمكن حذف العضوية المكررة" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_to_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Cancel" +msgstr "إلغاء" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Cancel %s entitlements started." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Cancel entitlements for cycle." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__cancelled +msgid "Canceled" +msgstr "ملغى" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__cancelled +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_fund__state__cancelled +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +msgid "Cancelled" +msgstr "ألغيت" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__is_cash_entitlement +msgid "Cash Entitlement" +msgstr "الاستحقاق النقدي" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_group_ext_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_registrant_ext_form +msgid "Cash Entitlements" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_id_dedup +msgid "" +"Click the create button to enter a new ID deduplication eligibility manager." +msgstr "انقر فوق الزر إنشاء لإدخال مدير أستحقاقية جديد لإلغاء تكرار الهوية." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_id_dedup +msgid "Click the create button to enter a new ID deduplication manager." +msgstr "انقر فوق الزر إنشاء لإدخال مدير جديد لإلغاء تكرار المعرف." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_phone_number +msgid "" +"Click the create button to enter a new Phone Number deduplication " +"eligibility manager." +msgstr "" +"انقر فوق الزر \"إنشاء\" لإدخال مدير استحقاقية جديد لإلغاء تكرار رقم الهاتف." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_phone_number +msgid "" +"Click the create button to enter a new Phone Number deduplication manager." +msgstr "انقر فوق الزر \"إنشاء\" لإدخال مدير جديد لإلغاء تكرار رقم الهاتف." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_notification_manager_sms +msgid "Click the create button to enter a new SMS notification manager." +msgstr "انقر فوق الزر \"إنشاء\" للدخول إلى مدير إشعارات رسائل نصية جديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_conf +msgid "" +"Click the create button to enter a new beneficiary disbursement journal." +msgstr "انقر فوق الزر \"إنشاء\" لإدخال سجل يومية جديد لصرف المستفيد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_manager_default +msgid "Click the create button to enter a new cycle manager." +msgstr "انقر فوق زر إنشاء للدخول إلى مدير قطع جديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_default +msgid "Click the create button to enter a new eligibility manager." +msgstr "انقر فوق الزر إنشاء للدخول إلى مدير أستحقاقية جديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement_manager_default +msgid "Click the create button to enter a new entitlement manager." +msgstr "انقر فوق الزر \"إنشاء\" لإدخال مدير استحقاقات جديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_manager_default +#, fuzzy +msgid "Click the create button to enter a new payment manager." +msgstr "انقر فوق الزر \"إنشاء\" للدخول إلى مدير برنامج توزيع جديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_fund +msgid "Click the create button to enter a new program fund information." +msgstr "انقر فوق الزر \"إنشاء\" لإدخال معلومات صندوق البرنامج التوزيع الجديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_manager_default +msgid "Click the create button to enter a new program manager." +msgstr "انقر فوق الزر \"إنشاء\" للدخول إلى مدير برنامج توزيع جديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle +msgid "Click the create button to enter the new cycle information." +msgstr "انقر فوق زر إنشاء لإدخال معلومات القطع الجديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_membership +msgid "Click the create button to enter the new cycle membership information." +msgstr "انقر فوق الزر \"إنشاء\" لإدخال معلومات اعضاء القطع الجديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement +msgid "Click the create button to enter the new entitlement." +msgstr "انقر فوق الزر إنشاء لإدخال الاستحقاق الجديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_list +msgid "Click the create button to enter the new program information." +msgstr "انقر فوق الزر \"إنشاء\" لإدخال معلومات البرنامج التوزيع الجديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership +msgid "" +"Click the create button to enter the new program membership information." +msgstr "انقر فوق الزر \"إنشاء\" لإدخال معلومات عضوية برنامج التوزيع الجديد." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership_duplicate +msgid "" +"Click the create button to enter the program membership duplicate " +"information." +msgstr "انقر فوق الزر \"إنشاء\" لإدخال معلومات مكررة لعضوية برنامج التوزيع." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__code +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__code +msgid "Code" +msgstr "رمز" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Code:" +msgstr "رمز:" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_tree +msgid "Comment" +msgstr "ملاحظة" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Comment:" +msgstr "ملاحظة:" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__company_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +msgid "Company" +msgstr "شركة" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Company:" +msgstr "شركة:" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_program_configuration_menu_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Configuration" +msgstr "اعداد" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Configure the Cycle Manager" +msgstr "اعدادات مدير القطع" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Configure the Default Eligibility Criteria" +msgstr "تكوين معايير الأستحقاق الافتراضية" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Configure the Entitlement Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__conflict +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__conflict +msgid "Conflict" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_res_partner +msgid "Contact" +msgstr "اتصال" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Copy Beneficiaries from Program" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__copy_last_cycle_on_new_cycle +msgid "Copy previous cycle" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__count +msgid "Count" +msgstr "" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#, python-format +msgid "Create" +msgstr "انشاء" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Create New Cycle" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Create New Journal" +msgstr "" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#, python-format +msgid "Create Program" +msgstr "" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#, python-format +msgid "Create a New Program" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_create_wizard +msgid "Create a New Program Wizard" +msgstr "" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#, python-format +msgid "Create record" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__create_uid +msgid "Created by" +msgstr "انشأ من قبل" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__create_date +msgid "Created on" +msgstr "تم إنشاؤها على" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__currency_id +msgid "Currency" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_cycle +#: model:ir.model,name:g2p_programs.model_g2p_cycle +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__cycle_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_batch_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Cycle" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Cycle Entitlements" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_cycle_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycle Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_cycle_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__cycle_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycle Managers" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#, python-format +msgid "Cycle Members" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_cycle_membership +#: model:ir.model,name:g2p_programs.model_g2p_cycle_membership +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +msgid "Cycle Membership" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__cycle_membership_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__cycle_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__cycle_ids +msgid "Cycle Memberships" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_cycle_recurrence_mixin +msgid "Cycle Recurrence Mixin" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "Cycle Settings" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycle:" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__cycle_ids +#: model:ir.ui.menu,name:g2p_programs.g2p_program_cycle_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Cycles" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "Cycles Ended" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "Cycles Started" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "DRAFT" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__date_posted +msgid "Date" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__date_approved +msgid "Date Approved" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__date_ended +msgid "Date Ended" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Date Entered" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__date_posted +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +msgid "Date Posted" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__day +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__day +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__day +msgid "Day" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "Day of Month" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__daily +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__daily +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__daily +msgid "Days" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Deduplicate" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Deduplication" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__comment +msgid "Deduplication Comment" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__deduplication_manager_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Deduplication Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__deduplication_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Deduplication Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__reason +msgid "Deduplication Reason" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__deduplication_status +msgid "Deduplication Status" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__entitlement_kind__default +msgid "Default" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_cycle_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "Default Cycle Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_cycle_manager_default +msgid "Default Cycle Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager_default +msgid "Default Deduplication Manager" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +msgid "Default Eligibility Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_eligibility_manager_default +#: model:ir.ui.menu,name:g2p_programs.menu_eligibility_manager_default +msgid "Default Eligibility Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_entitlement_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +msgid "Default Entitlement Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_entitlement_manager_default +msgid "Default Entitlement Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_payment_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#, fuzzy +msgid "Default Payment Manager" +msgstr "مدير برنامج التوزيع الاساسي" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_payment_manager_default +msgid "Default Payment Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +msgid "Default Program Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_program_manager_default +msgid "Default Program Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__delivery_mechanism_value +msgid "Delivery Mechanism Value" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Disbursement" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Disbursement Entry" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__journal_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__journal_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__journal_id +msgid "Disbursement Journal" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__disbursement_id +msgid "Disbursement Journal Entry" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__display_name +msgid "Display Name" +msgstr "اسم المعروض" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__distributed +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Distributed" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__eligibility_domain +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__eligibility_domain +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__eligibility_domain +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__eligibility_domain +msgid "Domain" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_fund__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__draft +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Draft" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__dtstart +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__dtstart +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__dtstart +msgid "Dtstart" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership_duplicate__state__duplicate +msgid "Duplicate" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__duplicated +msgid "Duplicated" +msgstr "" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_program_membership_duplicate +msgid "Duplicates" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "ENROLLED" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "EXITED" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_eligibility_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Eligibility Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__eligibility_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Eligibility Managers" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "Eligibility check finished." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "Eligibility check of %s beneficiaries started." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__end_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "End Date" +msgstr "تاريخ الانتهاء" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.end_program +msgid "End Program" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__end_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__end_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__end_type +msgid "End Type" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__ended +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__state__ended +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Ended" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Enroll Eligible Registrants" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__enrolled +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__enrolled +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Enrolled" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "Enrolled Programs" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "Enrollment" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__enrollment_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__enrollment_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Enrollment Date" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +msgid "Enter the Manager Name..." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Enter the cycle name..." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Enter the program name..." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Enter the reason..." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Enter the registrant name..." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/entitlement.py:0 +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#: model:ir.model,name:g2p_programs.model_g2p_entitlement +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__entitlement_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__entitlement_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Entitlement" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Entitlement Cash" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_entitlement_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Entitlement Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_entitlement_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__entitlement_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Entitlement Managers" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Entitlement Ready." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "" +"Entitlement State Error! Entitlements not in 'pending validation' state:\n" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__entitlement_validation_group_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__entitlement_validation_group_id +msgid "Entitlement Validation Group" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Entitlement manager" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Entitlement:" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_entitlement +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__entitlement_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__entitlement_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__entitlement_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__entitlement_ids +#: model:ir.ui.menu,name:g2p_programs.g2p_program_entitlement_root +#: model:ir.ui.menu,name:g2p_programs.menu_entitlement +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Entitlements" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements Cancelled." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements Set to Pending Validation." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements Validated and Approved." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements are validated and approved." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__exit_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Exit Date" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__exited +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__exited +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Exited" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__expired +msgid "Expired" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__external_batch_ref +msgid "External Batch Reference #" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "FILTER:" +msgstr "تصفية :" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__status__failed +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Failed" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Failed Amount" +msgstr "كمية" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_failed_amount +msgid "Failed Amount Statistics" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Failed Transactions" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_failed_transactions +msgid "Failed Transactions Statistics" +msgstr "" + +#. module: g2p_programs +#: model:res.groups,name:g2p_programs.g2p_finance_validator +msgid "Finance Validator" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__1 +msgid "First" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_follower_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_follower_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_follower_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_follower_ids +msgid "Followers" +msgstr "متابع" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_partner_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_partner_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_partner_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_type_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_type_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__4 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__4 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__4 +msgid "Fourth" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__fri +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__fri +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__fri +msgid "Fri" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_wizard__target_type__group +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__target_type__group +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__target_type__group +msgid "Group" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.notification_manager_sms_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_batch_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Group By" +msgstr "مجموعة بواسطة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__has_message +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__has_message +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__has_message +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__has_message +msgid "Has Message" +msgstr "رسالة موجودة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__have_members +msgid "Have Beneficiaries" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__id +msgid "ID" +msgstr "بطاقة تعريف" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +msgid "ID Deduplication Elibility Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager_id_dedup +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +msgid "ID Deduplication Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_deduplication_manager_id_dedup +#: model:ir.ui.menu,name:g2p_programs.menu_deduplication_manager_id_dedup +msgid "ID Deduplication Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager_id_dedup +msgid "ID Document Deduplication Eligibility" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_eligibility_manager_id_dedup +#: model:ir.ui.menu,name:g2p_programs.menu_eligibility_manager_id_dedup +msgid "ID Document Eligibility Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_exception_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_exception_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_exception_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_exception_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_unread +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_unread +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_unread +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_unread +msgid "If checked, new messages require your attention." +msgstr "الرسائل الجديدة تتطلب انتباهك" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_has_sms_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_has_sms_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_has_sms_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__import_beneficiaries +msgid "Import Beneficiaries" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__state__step2 +msgid "Import Registrants" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/eligibility_manager.py:0 +#, python-format +msgid "Import finished." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Import of %s beneficiaries started." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Importing beneficiaries." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_wizard__target_type__individual +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__target_type__individual +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__target_type__individual +msgid "Individual" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__initial_amount +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__initial_amount +msgid "Initial Amount" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__internal_batch_ref +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__name +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +msgid "Internal Batch Reference #" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__name +msgid "Internal Reference #" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__interval +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__interval +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__interval +msgid "Interval" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_is_follower +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_is_follower +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_is_follower +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status_is_final +msgid "Is final payment status" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__issuance_date +msgid "Issuance Date" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__state__issued +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +msgid "Issued" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Issued Amount" +msgstr "كمية" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_issued_amount +msgid "Issued Amount Statistics" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Issued Transaction" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_issued_transactions +msgid "Issued Transaction Statistics" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_queue_job_channel +msgid "Job Channels" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_job_relate_mixin +msgid "Job Relate Mixin" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_account_journal +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Journal" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__account_move_id +msgid "Journal Entry" +msgstr "" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_account_journal_conf +msgid "Journals" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__-1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__-1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__-1 +msgid "Last" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__last_deduplication +msgid "Last Deduplication Date" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default____last_update +msgid "Last Modified on" +msgstr "تاريخ آخر تعديل" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_manager_default__rrule_type +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_recurrence_mixin__rrule_type +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__rrule_type +msgid "Let the event automatically repeat at that interval" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_batch +msgid "List of payment transactions generated from entitlements." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__locked +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__locked +msgid "Locked" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__locked_reason +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__locked_reason +msgid "Locked Reason" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_main_attachment_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_main_attachment_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_main_attachment_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_main_attachment_id +msgid "Main Attachment" +msgstr "المرفق الرئيسي" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_manager_mixin__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__entitlement_kind +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__manager_ref_id +msgid "Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_manager_source_mixin +msgid "Manager Data Source Mixin" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_manager_mixin__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__manager_id +msgid "Manager ID" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_manager_mixin +msgid "Manager Mixin" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_cycle_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_deduplication_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_entitlement_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_notification_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_payment_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__name +msgid "Manager Name" +msgstr "" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_manager_menu_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__max_individual_in_group +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__max_individual_in_group +msgid "Maximum number of individual in group" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_has_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_has_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_has_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_has_error +msgid "Message Delivery error" +msgstr "خطأ في تسليم الرسالة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_ids +msgid "Messages" +msgstr "الرسائل" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__mon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__mon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__mon +msgid "Mon" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__month_by +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__month_by +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__month_by +msgid "Month By" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__monthly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__monthly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__monthly +msgid "Months" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_multi_entitlement_approval +msgid "Multi Entitlement Approval" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_multi_entitlement_approval_wizard +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__wizard_id +msgid "Multi Entitlement Approval Wizard" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__my_activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__my_activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__name +msgid "Name" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +msgid "Name:" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__new +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__new +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__new +msgid "New" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "New cycle %s created." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Next" +msgstr "التالي" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_calendar_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_calendar_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_calendar_event_id +msgid "Next Activity Calendar Event" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_summary +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_summary +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_type_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_type_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__import_beneficiaries__no +msgid "No" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "No Approved Entitlements Selected" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "No Deduplication Manager defined." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "No Eligibility Manager defined." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "No Program Manager defined." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "No beneficiaries to import." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership_duplicate__state__not_duplicate +msgid "Not Duplicate" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__not_eligible +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__not_eligible +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Not Eligible" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Notification Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__notification_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Notification Managers" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Notify Registrants" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__number_of_cycles +msgid "Number Of Cycles" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_needaction_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_needaction_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_needaction_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_needaction_counter +msgid "Number of Actions" +msgstr "عدد الإجراءات" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_has_error_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_has_error_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_has_error_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_has_error_counter +msgid "Number of errors" +msgstr "عدد الأخطاء" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_needaction_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_needaction_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_needaction_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "عدد الرسائل التي تتطلب اتخاذ إجراء" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_has_error_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_has_error_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_has_error_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "عدد الرسائل التي بها خطأ في التسليم" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_unread_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_unread_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_unread_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_unread_counter +msgid "Number of unread messages" +msgstr "عدد الرسائل غير المقروءة" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__okay +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__okay +msgid "Okay" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__on_cycle_ended_template +msgid "On Cycle Ended Template" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__on_cycle_started_template +msgid "On Cycle Started Template" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__on_enrolled_in_program_template +msgid "On Enrolled In Program Template" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Only 'to approve' cycles can be approved." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "Only cancelled program funds can be reset to draft." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/entitlement.py:0 +#, python-format +msgid "Only draft entitlements are allowed to be deleted" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "Only draft program funds can be cancelled." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "Only draft program funds can be posted." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Ony 'active' programs can be ended." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#, python-format +msgid "Ony 'draft' cycles can be set for approval." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Ony 'ended' programs can be re-activated." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#, python-format +msgid "Ony 'to approve' cycles can be reset to draft." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "PAUSED" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__status__paid +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Paid" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Paid Amount" +msgstr "كمية" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_paid_amount +msgid "Paid Amount Statistics" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Paid Transactions" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_paid_transactions +msgid "Paid Transactions Statistics" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/queue_job_channel.py:0 +#, python-format +msgid "Parent channel required." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__paused +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__paused +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Paused" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#: model:ir.model,name:g2p_programs.model_g2p_payment +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#, python-format +msgid "Payment" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_payment_batch +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__batch_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +msgid "Payment Batch" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__payment_batch_ids +#: model:ir.ui.menu,name:g2p_programs.menu_payment_batch +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Payment Batches" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__payment_datetime +msgid "Payment Datetime" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__payment_fee +msgid "Payment Fee" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_payment_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Payment Manager" +msgstr "مدير الاساسيات" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_payment_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__payment_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Payment Managers" +msgstr "مدير الاساسيات" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Payment Status" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_batch +msgid "Payment Transactions" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_payment +#: model:ir.actions.act_window,name:g2p_programs.action_payment_batch +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__payment_ids +#: model:ir.ui.menu,name:g2p_programs.menu_payment +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Payments" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__pending_validation +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Pending Validation" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager_phone_number +msgid "Phone Number Deduplication Eligibility" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +msgid "Phone Number Deduplication Eligibility Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager_phone_number +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +msgid "Phone Number Deduplication Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_deduplication_manager_phone_number +#: model:ir.ui.menu,name:g2p_programs.menu_deduplication_manager_phone_number +msgid "Phone Number Deduplication Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_eligibility_manager_phone_number +#: model:ir.ui.menu,name:g2p_programs.menu_eligibility_manager_phone_number +msgid "Phone Number Eligibility Managers" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Post" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_fund__state__posted +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +msgid "Posted" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Prepare Entitlement" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Prepare Payments" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Prepare entitlement for %s beneficiaries started." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Prepare entitlement for beneficiaries." +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.report,name:g2p_programs.action_print_entitlement +msgid "Print Vouchers" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_beneficiary +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_prog_benf +msgid "Process entitlements to automatically post the journal entries here." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__processing +msgid "Processing" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.model,name:g2p_programs.model_g2p_program +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_cycle_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_deduplication_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_entitlement_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_notification_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_payment_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__program_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_to_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.notification_manager_sms_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Program" +msgstr "" + +#. module: g2p_programs +#: model:res.groups,name:g2p_programs.g2p_program_cycle_approver +msgid "Program Cycle Approver" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +#, python-format +msgid "Program Fund" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_fund +msgid "Program Fund Entries" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_fund_report +#: model:ir.model,name:g2p_programs.model_g2p_program_fund_report_view +#: model:ir.ui.menu,name:g2p_programs.menu_program_fund_report +msgid "Program Fund Report" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_fund +#: model:ir.ui.menu,name:g2p_programs.menu_program_fund +msgid "Program Funds" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__journal_id +#, fuzzy +msgid "Program Journal" +msgstr "اساس الحسابات" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_manager +#: model:res.groups,name:g2p_programs.g2p_program_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_form +msgid "Program Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__program_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Program Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Program Membership" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Program Membership Duplicate" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_duplicate +msgid "Program Membership duplicate" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__program_membership_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__program_membership_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__program_membership_ids +msgid "Program Memberships" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__name +msgid "Program Name" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_notification_manager +msgid "Program Notification Manager" +msgstr "" + +#. module: g2p_programs +#: model:res.groups,name:g2p_programs.g2p_program_validator +msgid "Program Validator" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Program:" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Program: %(prg)s, Beneficiary: %(partner)s.\n" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/create_program_wizard.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_program_list +#: model:ir.ui.menu,name:g2p_programs.g2p_program_menu_root +#: model:ir.ui.menu,name:g2p_programs.menu_program_list +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_group_ext_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_registrant_ext_form +#, python-format +msgid "Programs" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_membership +msgid "Programs Membership" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_membership_duplicate +msgid "Programs Membership Duplicate" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Project" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.reactivate_program +msgid "Re-activate Program" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_tree +msgid "Reason" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Reason:" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__state__reconciled +msgid "Reconciled" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__reconciliation_managers +msgid "Reconciliation Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__cycle_duration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__rrule_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__rrule_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__cycle_duration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__rrule_type +msgid "Recurrence" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rdpd2ben +msgid "Redeemed/Paid to Beneficiary" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__name +msgid "Reference Number" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Reference Number:" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Refresh" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__partner_id +msgid "Registrant" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_assign_program_registrants +msgid "Registrant Assign to Program" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Registrant:" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rejected2 +msgid "Rejected: Beneficiary account does not exist" +msgstr "مرفوض: حساب المستفيد غير موجود" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rejected1 +msgid "Rejected: Beneficiary didn't want the entitlement" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rejected3 +msgid "Rejected: Other reason" +msgstr "مرفوض: سبب آخر" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__remarks +msgid "Remarks" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__until +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__until +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__until +msgid "Repeat Until" +msgstr "" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_accounting_reports_menu_root +msgid "Reports" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Reset to Draft" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_user_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_user_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__rrule +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__rrule +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__rrule +msgid "Rrule" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_has_sms_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_has_sms_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_has_sms_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_has_sms_error +msgid "SMS Delivery error" +msgstr "فشل تسليم الرسائل القصيرة" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "SMS Notification Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_notification_manager_sms +#: model:ir.ui.menu,name:g2p_programs.menu_notification_manager_sms +msgid "SMS Notification Managers" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_notification_manager_sms +#: model:ir.model.fields,field_description:g2p_programs.field_sms_template__g2p_sms_id +msgid "SMS Program Notification Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_sms_template +msgid "SMS Templates" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__sat +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__sat +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__sat +msgid "Sat" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +msgid "Search Cycle Memberships" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Search Cycles" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_manager_default_filter +msgid "Search Default Cycle Manager" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_manager_default_filter +msgid "Search Default Entitlement Manager" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_manager_default_filter +msgid "Search Default Payment Manager" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_manager_default_filter +msgid "Search Default Program Manager" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_default_filter +msgid "Search Eligibility Manager" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Search Entitlements" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_id_dedup_filter +msgid "Search ID Deduplication Eligibility Managers" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_id_dedup_filter +msgid "Search ID Deduplication Managers" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_batch_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +msgid "Search Payments" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_phone_number_filter +msgid "Search Phone Number Deduplication Eligibility Managers" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_phone_number_filter +msgid "Search Phone Number Deduplication Managers" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +msgid "Search Program Fund Report" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +msgid "Search Program Funds" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Search Program Memberships" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +msgid "Search Programs" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.notification_manager_sms_filter +msgid "Search SMS Notification Manager" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__2 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__2 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__2 +msgid "Second" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_form +msgid "Select a program..." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Send Payment" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +msgid "Send Payments" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__state__sent +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +msgid "Sent" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Sent Amount" +msgstr "كمية" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_sent_amount +msgid "Sent Amount Statistics" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Sent Transactions" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_sent_transactions +msgid "Sent Transactions Statistics" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__sequence +msgid "Sequence" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Service Fee Entry" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__service_fee_disbursement_id +#, fuzzy +msgid "Service Fee Journal Entry" +msgstr "إدخال دفتر اليومية للمحاسبة" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__state__step1 +msgid "Set Defaults" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Set as Ended" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Set entitlements to pending validation for cycle." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__transfer_fee_amt +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_amt +msgid "Set fixed transfer fee amount" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Setting %s entitlements to pending validation has started." +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager_default +msgid "Simple Eligibility" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__name +msgid "Source Document" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__start_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Start Date" +msgstr "تاريخ البدء" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__state +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_tree +msgid "State" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Statistics" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_datetime +#, fuzzy +msgid "Statistics Date/Time" +msgstr "تاريخ البدء" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__state +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_group_ext_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_registrant_ext_form +msgid "Status" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status_datetime +#, fuzzy +msgid "Status Datetime" +msgstr "تاريخ البدء" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_state +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_state +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__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 "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Status:" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__sun +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__sun +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__sun +msgid "Sun" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__supported_id_document_types +msgid "Supported ID Document Types" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "TEMPLATES" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__target_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__target_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__target_type +msgid "Target Type" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Target Type:" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "The" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/create_program_wizard.py:0 +#, python-format +msgid "" +"The 'Amount per cycle' or 'Amount per individual in group' must be filled-up " +"for the default entitlement manager." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "The Cycle is not in draft mode" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_entitlement__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_payment__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_payment_manager_default__currency_id +msgid "The currency used to enter statement" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "The cycle approver group is not specified!" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.constraint,message:g2p_programs.constraint_g2p_entitlement_unique_entitlement_code +msgid "The entitlement code must be unique." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "" +"The fund for the program: %(program)s [%(fund).2f] is insufficient for the " +"entitlement: %(entitlement)s" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_beneficiary +msgid "There are no Beneficiary Fund Journal Entries Entered!" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_prog_benf +msgid "There are no Program Beneficiary Fund Journal Entries Entered!" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_fund_report +msgid "There are no Program Fund Entries based on the current filter!" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_fund +msgid "There are no Program Funds Entered!" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#, python-format +msgid "There are no new payments issued!" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/assign_payments_batch_wizard.py:0 +#, python-format +msgid "There are no selected payments!" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/assign_to_program_wizard.py:0 +#, python-format +msgid "There are no selected registrants!" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__3 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__3 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__3 +msgid "Third" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "This fund is already posted and cannot be deleted." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "This fund is now posted!" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "This fund was cancelled on" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__thu +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__thu +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__thu +msgid "Thu" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__event_tz +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__event_tz +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__event_tz +msgid "Timezone" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__to_approve +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "To Approve" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__transfer_fee +msgid "Transfer Fee" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__transfer_fee_amt +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_amt +msgid "Transfer Fee Amount" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__transfer_fee_pct +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_pct +msgid "Transfer Fee(%)" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__transfer_fee_pct +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_pct +msgid "Transfer fee will be a percentage of amount" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__trans2fsp +msgid "Transferred to FSP" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__tue +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__tue +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__tue +msgid "Tue" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_exception_decoration +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_exception_decoration +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_unread +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_unread +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_unread +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_unread +msgid "Unread Messages" +msgstr "الرسائل الغير مقروءة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_unread_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_unread_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_unread_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_unread_counter +msgid "Unread Messages Counter" +msgstr "عداد الرسائل الغير المقروءة" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__valid_from +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Valid From" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Valid From:" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Valid To:" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__valid_until +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Valid Until" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Validate %s entitlements started." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Validate Entitlements" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Validate and approve entitlements for cycle." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__verified +msgid "Verified" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Verify Eligibility" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Verify eligibility" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__website_message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__website_message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__website_message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__website_message_ids +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__website_message_ids +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__website_message_ids +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__wed +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__wed +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__wed +msgid "Wed" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__weekday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__weekday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__weekday +msgid "Weekday" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__weekly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__weekly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__weekly +msgid "Weeks" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Would you like to import the matching registrants to this program?" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__yearly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__yearly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__yearly +msgid "Years" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__import_beneficiaries__yes +msgid "Yes" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "You are not allowed to approve this cycle!" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/multi_entitlement_approval_wizard.py:0 +#, python-format +msgid "You can approve only entitlements from approved cycles." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/entitlement.py:0 +#, python-format +msgid "You have no access in the Entitlement List View" +msgstr "" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/js/create_program.js:0 +#, python-format +msgid "action_invoices" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "barcode" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "button." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "code..." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +msgid "cycle..." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__duplicated +msgid "duplicated" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "program..." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "section of the" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "" +"tab.\n" +" You can also create a new journal by clicking this" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_report_tree +msgid "total_amount" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_tree +msgid "total_amount_per_cycle" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_tree +msgid "total_amount_per_individual_in_group" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "| Company:" +msgstr "" diff --git a/g2p_programs/i18n/ckb.po b/g2p_programs/i18n/ckb.po new file mode 100644 index 000000000..5837ed29f --- /dev/null +++ b/g2p_programs/i18n/ckb.po @@ -0,0 +1,3860 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * g2p_programs +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-08-22 09:24+0000\n" +"Last-Translator: mansour rehman \n" +"Language-Team: Kurdish (Central) \n" +"Language: ckb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14\n" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__members_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__beneficiaries_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree +msgid "# Beneficiaries" +msgstr "# سودمەندبووان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__entitlements_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__entitlements_count +msgid "# Cash Entitlements" +msgstr "# مافە نەختینەییەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__cycles_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__cycles_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__cycles_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree +msgid "# Cycles" +msgstr "# دابەشکردنی مانگانە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__eligible_beneficiaries_count +msgid "# Eligible Beneficiaries" +msgstr "# سودمەندبووانی شایستە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__entitlements_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_tree +msgid "# Entitlements" +msgstr "# ماددەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_tree +msgid "# IDs" +msgstr "# ناسنامەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__duplicate_membership_count +msgid "# Membership Duplicates" +msgstr "# ئەندامە دووبارەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__payments_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "# Payments" +msgstr "# پارەدانەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__program_membership_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__program_membership_count +msgid "# Program Memberships" +msgstr "# ئەندامێتی لە بەرنامەکان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "%s Beneficiaries duplicate." +msgstr "%s سودمەندبووانی دووبارەبووەوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "%s Beneficiaries enrolled." +msgstr "%s سودمەندبووان ناویان تۆمارکراوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "%s beneficiaries imported." +msgstr "%s سودمەندبووان داخڵکران." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#, python-format +msgid "%s new payments was issued." +msgstr "%s بەشە پارەی نوێ دەرچوو." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "'Accounting'" +msgstr "'ژمێریاری'" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "'Configuration'" +msgstr "' ڕێکخستن'" + +#. module: g2p_programs +#: model:ir.actions.report,print_report_name:g2p_programs.action_print_entitlement +msgid "'Entitlement Card'" +msgstr "' کارتی ماددەکان'" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__max_individual_in_group +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__max_individual_in_group +msgid "0 means no limit" +msgstr "0 واتا بێ سنوور" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Beneficiaries" +msgstr "سودمەندبووان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycles" +msgstr "دابەشکردنەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "" +"Disbursement\n" +" Form" +msgstr "" +"خەرجکردن\n" +" فۆڕم" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Duplicates" +msgstr "دوبارەبووەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Entitlements" +msgstr "ماف و شایستەییەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Payments" +msgstr "پارەدانەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Related Job(s)" +msgstr "ئەرکە پەیوەندیدارەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Warning: Operation in progress: " +msgstr "ئاگاداری: کارکردن بەردەوامە: " + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__cycle_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval_wizard__cycle_id +msgid "A Cycle" +msgstr "دابەشکردنێکی مانگانە" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__entitlement_id +msgid "A Entitlement" +msgstr "شایستەییەک" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__wizard_id +msgid "A Wizard" +msgstr "ڕێنمایی" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_membership__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_entitlement__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_payment__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__partner_id +msgid "A beneficiary" +msgstr "سودمەندبوویەک" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_membership__cycle_id +msgid "A cycle" +msgstr "دابەشکردنێکی مانگانە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "A journal must be defined for this program. Select a journal in the" +msgstr "بۆ ئەم بەرنامەیە دەبێت بنەماکان پێناسەبکرێن. بنەماکان لە ناو" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_assign_program_wizard__program_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__program_id +msgid "A program" +msgstr "بەرنامەیەک" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_account_journal_conf +msgid "Account Journals" +msgstr "تۆمارکردنی هەژمار" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__account_number +msgid "Account Number" +msgstr "ژمارەی هەژمار" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_accounting_config_menu_root +#: model:ir.ui.menu,name:g2p_programs.g2p_accounting_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Accounting" +msgstr "ژمێریاری" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_account_journal_prog_benf +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__journal_id +#: model:ir.ui.menu,name:g2p_programs.menu_account_journal_prog_benf +msgid "Accounting Journal" +msgstr "ژمێریاری" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Accounting Journal Entry" +msgstr "نووسینی ژمێریاری رۆژانە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_needaction +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_needaction +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_needaction +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_needaction +msgid "Action Needed" +msgstr "کردار پێویستە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__active +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__state__active +msgid "Active" +msgstr "چالاک" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_ids +msgid "Activities" +msgstr "چالاکییەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_exception_decoration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_exception_decoration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "دیاریکردنی چالاکییە تایبەتەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_state +msgid "Activity State" +msgstr "دۆخی چالاکییەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_type_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_type_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_type_icon +msgid "Activity Type Icon" +msgstr "هێمای جۆری چالاکی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_assign_payments_batch_wizard +msgid "Add Payments to Batch Wizard" +msgstr "زیادکردنی پارەدان بۆ وەجبەکە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_assign_program_wizard +msgid "Add Registrants to Program Wizard" +msgstr "زیادکردنی تۆمارکەران بۆ بەرنامە" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_conf +msgid "Add a Beneficiary Disbursement Journal!" +msgstr "یەکەیەکی خەرجکردنی سودمەندبوو زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_manager_default +msgid "Add a Cycle Manager!" +msgstr "بەڕێوەبەریی دابەشکردنی مانگانە زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_manager_default +msgid "Add a Payment Manager!" +msgstr "بەڕێوەبەریی پارەدان زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_phone_number +msgid "Add a Phone Number Deduplication Eligibility Manager!" +msgstr "بەڕێوەبەری هەڵسەنگاندنی ژمارەی تەلەفۆنی دووبارە زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_phone_number +msgid "Add a Phone Number Deduplication Manager!" +msgstr "بەڕێوەبەری هەڵسەنگاندنی ژمارە تەلەفۆنی دووبارە زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_manager_default +msgid "Add a Program Manager!" +msgstr "بەڕێوەبەری بەرنامە زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_notification_manager_sms +msgid "Add a SMS Notification Manager!" +msgstr "بەڕێوەبەری کورتەنامەی ئاگادارکردنەوە زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_membership +msgid "Add a new cycle membership!" +msgstr "ئەندامێتی بۆ دابەشکردنێکی نوێ زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle +msgid "Add a new cycle!" +msgstr "دابەشکردنێکی نوێ زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement +msgid "Add a new entitlement!" +msgstr "ماددەی نوێ زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership_duplicate +msgid "Add a new program membership duplicate!" +msgstr "ئەندامێتی دووبارەبوو لە بەرنامەیەکی نوێ زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership +msgid "Add a new program membership!" +msgstr "ئەندامێتی لە بەرنامەیەکی نوێ زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_list +msgid "Add a new program!" +msgstr "بەرنامەیەکی نوێ زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_default +msgid "Add an Eligibility Manager!" +msgstr "بەڕێوەبەری هەڵسەنگاندنی شایستەیی زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement_manager_default +msgid "Add an Entitlement Manager!" +msgstr "بەڕێوەبەری شایستەییەکان زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_id_dedup +msgid "Add an ID Deduplication Eligibility Manager!" +msgstr "بەڕێوەبەری هەڵسەنگاندنی ناسنامەی دووبارە زیاد بکە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_id_dedup +msgid "Add an ID Deduplication Manager!" +msgstr "بەڕێوەبەری ناسنامەی دووبارە زیاد بکە!" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.assign_to_program +msgid "Add to Program" +msgstr "زیادکردن بۆ بەرنامە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Address:" +msgstr "ناونیشان:" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#, python-format +msgid "All entitlements selected are not approved!" +msgstr "هەموو شایستەییە دیاریکراوەکان پەسەند ناکرێن!" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/assign_payments_batch_wizard.py:0 +#, python-format +msgid "All selected payments are already assigned to another batch." +msgstr "هەموو ئەو پارە دیاریکراوانە پێشتر بۆ وەجبەیەکی تر تەرخان کراون." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__amount +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__amount +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +msgid "Amount" +msgstr "بڕ" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__amount_issued +msgid "Amount Issued" +msgstr "بڕی دەرچوو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__amount_paid +msgid "Amount Paid" +msgstr "بڕی پێدراو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__amount_per_cycle +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__amount_per_cycle +msgid "Amount Per Cycle" +msgstr "بڕی هەر دابەشکردنێک" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__amount_per_individual_in_group +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__amount_per_individual_in_group +msgid "Amount Per Individual In Group" +msgstr "بڕی پارە بۆ هەر تاکێکی گروپ" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.multiple_entitlement_approval +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Approve" +msgstr "پەسەندکردن" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Approve Entitlement" +msgstr "پەسەندکردنی شایستەییەکان" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__approved +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__approved +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__approved +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Approved" +msgstr "پەسەندکرا" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__approver_group_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__approver_group_id +msgid "Approver Group" +msgstr "گروپی پەسەندکەر" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +msgid "Archived" +msgstr "ئەرشیڤکرا" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_to_program_wizard_form_view +msgid "Assign" +msgstr "تەرخان کردن" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.assign_payment_batch +msgid "Assign Payments to Batch" +msgstr "پارەدانەکان بۆ وەجبەکە تەرخان بکە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +msgid "Assign to Batch" +msgstr "بۆ وەجبەکە تەرخان بکە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__assigned +msgid "Assigned" +msgstr "تەرخان کرا" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_attachment_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_attachment_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_attachment_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_attachment_count +msgid "Attachment Count" +msgstr "ژمارەی هاوپێچەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_cycle_manager__auto_approve_entitlements +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__auto_approve_entitlements +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__auto_approve_entitlements +msgid "Auto-approve Entitlements" +msgstr "شایستەییە ئۆتۆ-پەسەندکراوەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__auto_approve_entitlements +msgid "Auto-approve entitlements" +msgstr "پەسەندکردنی ئۆتۆماتیکی شایستەییەکان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "" +"Auto-approve entitlements is set but there are no entitlements to process." +msgstr "" +"پەسەندکردنی ئۆتۆماتیکی شایستەییەکان کارایە بەڵام هیچ شایستەییەک نییە بۆ " +"پرۆسێسکردن." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__create_batch +msgid "Automatically Create Batch" +msgstr "بە شێوەیەکی ئۆتۆماتیکی وەجبەی دابەشکردن دروست بکە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Back" +msgstr "گەڕانەوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__balance +msgid "Balance" +msgstr "باڵانس" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_cycle_manager +msgid "Base Cycle Manager" +msgstr "بەڕێوەبەری دابەشکردنی بنەڕەتی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_deduplication_manager +msgid "Base Deduplication Manager" +msgstr "بەڕێوەبەری سڕینەوەی دووبارەبووەکان" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager +msgid "Base Eligibility" +msgstr "شایستەیی بنەڕەتی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_entitlement_manager +msgid "Base Entitlement Manager" +msgstr "بەڕێوەبەری شایستەییە بنەڕەتییەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__base_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__base_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__base_event_id +msgid "Base Event" +msgstr "ڕووداوی بنەڕەتی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_base_programs_manager +msgid "Base Manager" +msgstr "بەڕێوەبەری بنەڕەتی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_payment_manager +msgid "Base Payment Manager" +msgstr "بەڕێوەبەری پارەدانی بنەڕەتی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_manager +msgid "Base Program Manager" +msgstr "بەڕێوەبەری بەرنامەی بنەڕەتی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_notification_manager +msgid "Base Program Notification Manager" +msgstr "بەڕێوەبەری ئاگادارکردنەوەی بەرنامەی بنەڕەتی" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__batch_has_completed +msgid "Batch Has Completed" +msgstr "وەجبە تەواو بووە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__beneficiary_ids +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +#, python-format +msgid "Beneficiaries" +msgstr "سودمەندبووان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Beneficiaries Duplicates" +msgstr "سودمەندبووانی دووبارە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__partner_id +msgid "Beneficiary" +msgstr "سودمەندبوو" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_account_journal_beneficiary +#: model:ir.model.fields,field_description:g2p_programs.field_account_journal__beneficiary_disb +#: model:ir.ui.menu,name:g2p_programs.menu_action_account_moves_journal_benf +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_account_move_line_beneficiary_filter +msgid "Beneficiary Funds" +msgstr "بودجەکانی سودمەندبووان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Beneficiary import finished." +msgstr "هاوردەکردنی داتای سودمەندبوو تەواو بوو." + +#. module: g2p_programs +#: model:ir.model.constraint,message:g2p_programs.constraint_g2p_cycle_membership_cycle_membership_unique +msgid "Beneficiary must be unique per cycle." +msgstr "سودمەندبوو دەبێت لە دابەشکردنەکاندا بێهاوتا بێت." + +#. module: g2p_programs +#: model:ir.model.constraint,message:g2p_programs.constraint_g2p_program_membership_program_membership_unique +msgid "Beneficiary must be unique per program." +msgstr "سودمەند دەبێت لە هەر بەرنامەیەک بێهاوتا بێت." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Beneficiary:" +msgstr "سودمەندبوو:" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__byday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__byday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__byday +msgid "By day" +msgstr "بەپێی ڕۆژ" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__calendar_event_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__calendar_event_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__calendar_event_ids +msgid "Calendar Event" +msgstr "بۆنەی ڕۆژمێر" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/duplicate.py:0 +#, python-format +msgid "Can't delete duplicated membership" +msgstr "ناکرێت ئەندامێتی دووبارە بسڕدرێتەوە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_to_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Cancel" +msgstr "هەڵوەشاندنەوە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Cancel %s entitlements started." +msgstr "هەڵوەشاندنەوە %s شایستەییەکان دەستیپێکرد." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Cancel entitlements for cycle." +msgstr "هەڵوەشاندنەوەی شایستەییەکان بۆ دابەشکردنی مانگانە." + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__cancelled +msgid "Canceled" +msgstr "هەڵوەشایەوە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__cancelled +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_fund__state__cancelled +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +msgid "Cancelled" +msgstr "هەڵوەشایەوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__is_cash_entitlement +msgid "Cash Entitlement" +msgstr "شایستەیی دارایی" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_group_ext_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_registrant_ext_form +msgid "Cash Entitlements" +msgstr "شایستەییە داراییەکان" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_id_dedup +msgid "" +"Click the create button to enter a new ID deduplication eligibility manager." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو یەکەی بەڕێوەبەری نوێی " +"هەڵسەنگاندنیی ناسنامەی دووبارە." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_id_dedup +msgid "Click the create button to enter a new ID deduplication manager." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو یەکەی بەڕێوەبەری ناسنامەی " +"دووبارە." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_phone_number +msgid "" +"Click the create button to enter a new Phone Number deduplication " +"eligibility manager." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ نووسینی ژمارە تەلەفۆنیی بەڕێوەبەری " +"هەڵسەنگاندنی دووبارەنەبوونە." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_phone_number +msgid "" +"Click the create button to enter a new Phone Number deduplication manager." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو یەکەی بەڕێوەبەری نوێی نە‌هێشتنی " +"ژمارە تەلەفۆنی دووبارە." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_notification_manager_sms +msgid "Click the create button to enter a new SMS notification manager." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو یەکەی بەڕێوەبەری کورتەنامەی " +"ئاگادارکەرەوەی نوێ." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_conf +msgid "" +"Click the create button to enter a new beneficiary disbursement journal." +msgstr "کلیک لەسەر دوگمەی دروستکردن بکە بۆ نووسینی خەرجییەکانی سودمەندبووان." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_manager_default +msgid "Click the create button to enter a new cycle manager." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو بەڕێوەبەری دابەشکردنێکی " +"مانگانەی نوێ." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_default +msgid "Click the create button to enter a new eligibility manager." +msgstr "کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو بەڕێوەبەریی نوێی شایستەیی." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement_manager_default +msgid "Click the create button to enter a new entitlement manager." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو بەڕێوەبەریی نوێی شایستەییەکان." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_manager_default +msgid "Click the create button to enter a new payment manager." +msgstr "کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو بەڕێوەبەریی نوێی پارەدان." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_fund +msgid "Click the create button to enter a new program fund information." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو بەڕێوەبەریی بودجەی پرۆژەی نوێ." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_manager_default +msgid "Click the create button to enter a new program manager." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ چوونە ناو بەڕێوەبەریی بەرنامەیەکی نوێ." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle +msgid "Click the create button to enter the new cycle information." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ داخڵکردنی زانیارییەکانی دابەشکردنێکی نوێ." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_membership +msgid "Click the create button to enter the new cycle membership information." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ داخڵکردنی زانیارییەکانی ئەندامێتیی بۆ " +"دابەشکردنێکی نوێ." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement +msgid "Click the create button to enter the new entitlement." +msgstr "کلیک لەسەر دوگمەی دروستکردن بکە بۆ داخڵکردنی شایستەییەکانی نوێ." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_list +msgid "Click the create button to enter the new program information." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ داخڵکردنی زانیارییەکانی بەرنامەی نوێ." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership +msgid "" +"Click the create button to enter the new program membership information." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ داخڵکردنی زانیاری ئەندامێتی لە بەرنامەی " +"نوێ." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership_duplicate +msgid "" +"Click the create button to enter the program membership duplicate " +"information." +msgstr "" +"کلیک لەسەر دوگمەی دروستکردن بکە بۆ داخڵکردنی زانیاریی ئەندامە دووبارەکانی " +"بەرنامەکە." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__code +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__code +msgid "Code" +msgstr "کۆد" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Code:" +msgstr "کۆد:" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_tree +msgid "Comment" +msgstr "تێبینی" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Comment:" +msgstr "تێبینی:" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__company_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +msgid "Company" +msgstr "کۆمپانیا" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Company:" +msgstr "کۆمپانیا:" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_program_configuration_menu_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Configuration" +msgstr "ڕێکخستن" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Configure the Cycle Manager" +msgstr "بەڕێوەبردنی دابەشکارییەکان ڕێکبخە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Configure the Default Eligibility Criteria" +msgstr "پێوەرەکانی پێشوەختەی شایستەیی ڕێکبخە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Configure the Entitlement Manager" +msgstr "بەڕێوەبەری شایستەییەکان ڕێکبخە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__conflict +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__conflict +msgid "Conflict" +msgstr "ناکۆکی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_res_partner +msgid "Contact" +msgstr "پەیوەندی" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Copy Beneficiaries from Program" +msgstr "کۆپی سودمەندبووانی بەرنامە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__copy_last_cycle_on_new_cycle +msgid "Copy previous cycle" +msgstr "دابەشکاری مانگی پێشوو کۆپی بکە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__count +msgid "Count" +msgstr "ژماردن" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#, python-format +msgid "Create" +msgstr "دروستکردن" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Create New Cycle" +msgstr "دروستکردنی دابەشکاریی نوێ" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Create New Journal" +msgstr "دروستکردنی یەکەی نوێ" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#, python-format +msgid "Create Program" +msgstr "دروستکردنی بەرنامە" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#, python-format +msgid "Create a New Program" +msgstr "بەرنامەیەکی نوێ دروست بکە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_create_wizard +msgid "Create a New Program Wizard" +msgstr "ویزاردی بەرنامەیەکی نوێ دروست بکە" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#, python-format +msgid "Create record" +msgstr "تۆماری بکە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__create_uid +msgid "Created by" +msgstr "دروست کراوە لەلایەن" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__create_date +msgid "Created on" +msgstr "دروستکراوە لەناو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__currency_id +msgid "Currency" +msgstr "پارە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_cycle +#: model:ir.model,name:g2p_programs.model_g2p_cycle +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__cycle_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_batch_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Cycle" +msgstr "دابەشکردنی مانگانە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Cycle Entitlements" +msgstr "شایستەییەکانی دابەشکردنیی مانگانە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_cycle_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycle Manager" +msgstr "بەڕێوەبەری دابەشکاری مانگانە" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_cycle_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__cycle_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycle Managers" +msgstr "بەڕێوەبەرانی دابەشکارییەکان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#, python-format +msgid "Cycle Members" +msgstr "ئەندامانی دابەشکارییەکان" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_cycle_membership +#: model:ir.model,name:g2p_programs.model_g2p_cycle_membership +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +msgid "Cycle Membership" +msgstr "ئەندامێتی لە دابەشکارییە مانگانەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__cycle_membership_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__cycle_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__cycle_ids +msgid "Cycle Memberships" +msgstr "ئەندامێتی لە دابەشکارییە مانگانەکان" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_cycle_recurrence_mixin +msgid "Cycle Recurrence Mixin" +msgstr "دووبارە دابەشکردنەوەی تێکەڵاو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "Cycle Settings" +msgstr "ڕێکخستنەکانی دابەشکردنی مانگانە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycle:" +msgstr "دابەشکردنی مانگانە:" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__cycle_ids +#: model:ir.ui.menu,name:g2p_programs.g2p_program_cycle_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Cycles" +msgstr "دابەشکردنەکانی مانگانە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "Cycles Ended" +msgstr "دابەشکردن کۆتایی هات" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "Cycles Started" +msgstr "دابەشکردنەکان دەستیپێکرد" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "DRAFT" +msgstr "ڕەشنووس" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__date_posted +msgid "Date" +msgstr "ڕێکەوت" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__date_approved +msgid "Date Approved" +msgstr "ڕێکەوت پەسەندکرا" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__date_ended +msgid "Date Ended" +msgstr "ماوەکە کۆتایی هات" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Date Entered" +msgstr "ڕێکەوتی دیاریکراو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__date_posted +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +msgid "Date Posted" +msgstr "ڕێکەوتی پۆستکردن" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__day +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__day +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__day +msgid "Day" +msgstr "ڕۆژ" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "Day of Month" +msgstr "ڕۆژی مانگ" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__daily +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__daily +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__daily +msgid "Days" +msgstr "ڕۆژەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Deduplicate" +msgstr "دووبارە نەبوونەوە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Deduplication" +msgstr "سڕینەوەی دووبارەبووان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__comment +msgid "Deduplication Comment" +msgstr "تێبینی لەسەر سڕینەوەی دووبارەبووان" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__deduplication_manager_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Deduplication Manager" +msgstr "بەڕێوەبەری سڕینەوەی دووبارەبووان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__deduplication_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Deduplication Managers" +msgstr "بەڕێوەبەرانی سڕینەوەی دووبارەبووان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__reason +msgid "Deduplication Reason" +msgstr "هۆکاری دووبارە بوونەوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__deduplication_status +msgid "Deduplication Status" +msgstr "دۆخی سڕینەوەی دووبارەبووان" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__entitlement_kind__default +msgid "Default" +msgstr "پێشوەختە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_cycle_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "Default Cycle Manager" +msgstr "بەڕێوەبەریی پێشوەختەی دابەشکردنی مانگانە" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_cycle_manager_default +msgid "Default Cycle Managers" +msgstr "بەڕێوەبەرانی پێشوەختەی دابەشکردنی مانگانە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager_default +msgid "Default Deduplication Manager" +msgstr "بەڕێوەبەری پێشوەختەی سڕینەوەی دووبارەبووان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +msgid "Default Eligibility Manager" +msgstr "بەڕێوەبەریی پێشوەختە شایستەیی" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_eligibility_manager_default +#: model:ir.ui.menu,name:g2p_programs.menu_eligibility_manager_default +msgid "Default Eligibility Managers" +msgstr "بەڕێوەبەرانیی پێشوەختەی شایستەیی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_entitlement_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +msgid "Default Entitlement Manager" +msgstr "بەڕێوەبەری پێشوەختەی شایستەییەکان" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_entitlement_manager_default +msgid "Default Entitlement Managers" +msgstr "بەڕێوەبەرانی پێشوەختەی شایستەییەکان" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_payment_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +msgid "Default Payment Manager" +msgstr "بەڕێوەبەریی پێشوەختە پارەدان" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_payment_manager_default +msgid "Default Payment Managers" +msgstr "بەڕێوەبەرانی پێشوەختەی پارەدان" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +msgid "Default Program Manager" +msgstr "بەڕێوەبەریی پێشوەختەی بەرنامە" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_program_manager_default +msgid "Default Program Managers" +msgstr "بەڕێوەبەرانیی پێشوەختەی بەرنامە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__delivery_mechanism_value +msgid "Delivery Mechanism Value" +msgstr "بەهای شێوازی گەیاندن" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Disbursement" +msgstr "خەرجکردن" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Disbursement Entry" +msgstr "داخڵکردنی خەرجییەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__journal_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__journal_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__journal_id +msgid "Disbursement Journal" +msgstr "بەشی خەرجییەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__disbursement_id +msgid "Disbursement Journal Entry" +msgstr "داخڵکردن لە بەشی خەرجییەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__display_name +msgid "Display Name" +msgstr "ناوی پێشاندراو" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__distributed +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Distributed" +msgstr "دابەشکراوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__eligibility_domain +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__eligibility_domain +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__eligibility_domain +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__eligibility_domain +msgid "Domain" +msgstr "دۆمەین" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_fund__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__draft +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Draft" +msgstr "ڕەشنووس" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__dtstart +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__dtstart +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__dtstart +msgid "Dtstart" +msgstr "ڕیکەوت/کاتی دەستپێکردن" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership_duplicate__state__duplicate +msgid "Duplicate" +msgstr "دووبارەبوونەوە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__duplicated +msgid "Duplicated" +msgstr "دووبارەبووەوە" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_program_membership_duplicate +msgid "Duplicates" +msgstr "دووبارەبووان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "ENROLLED" +msgstr "تۆمار کراوە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "EXITED" +msgstr "دەرکرا" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_eligibility_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Eligibility Manager" +msgstr "بەڕێوەبەری شایستەیی" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__eligibility_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Eligibility Managers" +msgstr "بەڕێوەبەرانی شایستەیی" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "Eligibility check finished." +msgstr "هەڵسەنگاندنی شایستەیی تەواو بوو." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "Eligibility check of %s beneficiaries started." +msgstr "هەڵسەنگاندنی شایستەیی سودمەندان %s دەستی پێکرد." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__end_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "End Date" +msgstr "رێکەوتی کۆتایی" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.end_program +msgid "End Program" +msgstr "کۆتایی بەرنامە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__end_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__end_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__end_type +msgid "End Type" +msgstr "کۆتایی جۆر" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__ended +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__state__ended +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Ended" +msgstr "کۆتایی هات" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Enroll Eligible Registrants" +msgstr "تۆمارکەرانی شایستە تۆمار بکە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__enrolled +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__enrolled +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Enrolled" +msgstr "تۆمار کرا" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "Enrolled Programs" +msgstr "بەرنامە تۆمارکراوەکان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "Enrollment" +msgstr "تۆمارکردن" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__enrollment_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__enrollment_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Enrollment Date" +msgstr "ڕێکەوتی تۆمارکردن" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +msgid "Enter the Manager Name..." +msgstr "ناوی بەڕێوەبەرەکە بنووسە..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Enter the cycle name..." +msgstr "ناوی دابەشکردنەکە بنووسە..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Enter the program name..." +msgstr "ناوی بەرنامەکە بنووسە..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Enter the reason..." +msgstr "هۆکارەکە بنووسە..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Enter the registrant name..." +msgstr "ناوی تۆمارکەر بنووسە..." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/entitlement.py:0 +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#: model:ir.model,name:g2p_programs.model_g2p_entitlement +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__entitlement_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__entitlement_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Entitlement" +msgstr "شایستەییەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Entitlement Cash" +msgstr "شایستەییە نەختینەییەکان" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_entitlement_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Entitlement Manager" +msgstr "بەڕێوەبەری شایستەییەکان" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_entitlement_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__entitlement_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Entitlement Managers" +msgstr "بەڕێوەبەرانی شایستەییەکان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Entitlement Ready." +msgstr "شایستەییەکان ئامادەن." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "" +"Entitlement State Error! Entitlements not in 'pending validation' state:\n" +msgstr "" +"هەڵە لە دۆخی شایستەییەکان! ئەو شایستەییانەی کە لە 'چاوەڕوانی پەسەندکردن'دا " +"نین:\n" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__entitlement_validation_group_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__entitlement_validation_group_id +msgid "Entitlement Validation Group" +msgstr "گروپی پەسەندکردنی شایستەییەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Entitlement manager" +msgstr "بەڕێوەبەری شایستەییەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Entitlement:" +msgstr "شایستەیی:" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_entitlement +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__entitlement_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__entitlement_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__entitlement_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__entitlement_ids +#: model:ir.ui.menu,name:g2p_programs.g2p_program_entitlement_root +#: model:ir.ui.menu,name:g2p_programs.menu_entitlement +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Entitlements" +msgstr "شایستەییەکان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements Cancelled." +msgstr "شایستەییەکان هەڵوەشانەوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements Set to Pending Validation." +msgstr "شایستەییەکان لە چاوەڕوانی پەسەندکردن دان." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements Validated and Approved." +msgstr "شایستەییەکان پەسەند و پشتڕاست کرانەوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements are validated and approved." +msgstr "شایستەییەکان پەسەند و پشتڕاست کرانەوە." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__exit_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Exit Date" +msgstr "ڕێکەوتی دەرچوون" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__exited +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__exited +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Exited" +msgstr "دەرچووە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__expired +msgid "Expired" +msgstr "بەسەرچووە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__external_batch_ref +msgid "External Batch Reference #" +msgstr "ئاماژەی بەشی دەرەکی #" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "FILTER:" +msgstr "پاڵاوتن:" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__status__failed +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Failed" +msgstr "شکستی هێنا" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Failed Amount" +msgstr "بڕەپارەی نەگەیشتوو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_failed_amount +msgid "Failed Amount Statistics" +msgstr "ئاماری بڕەپارەی نەگەیشتوو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Failed Transactions" +msgstr "مامەڵە ناسەرکەتووەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_failed_transactions +msgid "Failed Transactions Statistics" +msgstr "ئاماری مامەڵە ناسەرکەوتووەکان" + +#. module: g2p_programs +#: model:res.groups,name:g2p_programs.g2p_finance_validator +msgid "Finance Validator" +msgstr "پشتڕاستکەرەوەی دارایی" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__1 +msgid "First" +msgstr "یەکەم" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_follower_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_follower_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_follower_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_follower_ids +msgid "Followers" +msgstr "شوێنکەوتووان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_partner_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_partner_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_partner_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_partner_ids +msgid "Followers (Partners)" +msgstr "شوێنکەوتووان" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_type_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_type_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "ئایکۆنی ناوازەی فۆنت وەک. فا-کردارەکان" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__4 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__4 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__4 +msgid "Fourth" +msgstr "چوارەم" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__fri +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__fri +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__fri +msgid "Fri" +msgstr "هەینی" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_wizard__target_type__group +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__target_type__group +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__target_type__group +msgid "Group" +msgstr "گروپ" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.notification_manager_sms_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_batch_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Group By" +msgstr "گروپ بەپێی" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__has_message +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__has_message +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__has_message +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__has_message +msgid "Has Message" +msgstr "پەیام هەیە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__have_members +msgid "Have Beneficiaries" +msgstr "سودمەندی هەیە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__id +msgid "ID" +msgstr "ناسنامە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +msgid "ID Deduplication Elibility Manager" +msgstr "بەڕێوەبەریی هەڵسەنگاندنی دووبارەبوونی ناسنامە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager_id_dedup +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +msgid "ID Deduplication Manager" +msgstr "بەڕێوەبەری سڕینەوەی ناسنامەی دووبارە" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_deduplication_manager_id_dedup +#: model:ir.ui.menu,name:g2p_programs.menu_deduplication_manager_id_dedup +msgid "ID Deduplication Managers" +msgstr "بەڕێوەبەرانی سڕینەوەی ناسنامەی دووبارە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager_id_dedup +msgid "ID Document Deduplication Eligibility" +msgstr "هەڵسەنگاندنی سڕینەوەی ناسنامەی دووبارە" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_eligibility_manager_id_dedup +#: model:ir.ui.menu,name:g2p_programs.menu_eligibility_manager_id_dedup +msgid "ID Document Eligibility Managers" +msgstr "بەڕێوەبەرانی هەڵسەنگاندنی بەڵگەنامەی ناسنامە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_exception_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_exception_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_icon +msgid "Icon" +msgstr "ئایکۆن" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_exception_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_exception_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "ئایکۆنی ئاماژەدان بە چالاکییەکی تایبەت." + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_unread +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_unread +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_unread +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_unread +msgid "If checked, new messages require your attention." +msgstr "سەیر بکە، پەیامە نوێیەکان سەرنجی تۆیان دەوێ." + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_has_sms_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_has_sms_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_has_sms_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "سەیر بکە، هەندێک لە پەیامەکان نەگەیشتوون." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__import_beneficiaries +msgid "Import Beneficiaries" +msgstr "هێنانی سودمەندان" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__state__step2 +msgid "Import Registrants" +msgstr "تۆمارکەرانی داخڵکراو" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/eligibility_manager.py:0 +#, python-format +msgid "Import finished." +msgstr "هێنانەکە تەواو بوو." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Import of %s beneficiaries started." +msgstr "هێنانی سودمەندانی %s دەستی پێکرد." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Importing beneficiaries." +msgstr "هێنانی سودمەندان." + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_wizard__target_type__individual +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__target_type__individual +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__target_type__individual +msgid "Individual" +msgstr "تاکەکەسی" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__initial_amount +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__initial_amount +msgid "Initial Amount" +msgstr "بڕی سەرەتایی" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__internal_batch_ref +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__name +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +msgid "Internal Batch Reference #" +msgstr "ئاماژەی بەشی ناوخۆیی #" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__name +msgid "Internal Reference #" +msgstr "ئاماژەی ناوخۆیی #" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__interval +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__interval +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__interval +msgid "Interval" +msgstr "نێوان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_is_follower +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_is_follower +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_is_follower +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_is_follower +msgid "Is Follower" +msgstr "فۆڵۆوەرە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status_is_final +msgid "Is final payment status" +msgstr "دۆخی کۆتا پارەدانە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__issuance_date +msgid "Issuance Date" +msgstr "ڕۆژی دەرچوون" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__state__issued +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +msgid "Issued" +msgstr "دەرچوو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Issued Amount" +msgstr "بڕی دەرچوو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_issued_amount +msgid "Issued Amount Statistics" +msgstr "ئاماری بڕی دەرچوو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Issued Transaction" +msgstr "مامەڵەی دەرچوو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_issued_transactions +msgid "Issued Transaction Statistics" +msgstr "ئاماری مامەڵەی دەرچوو" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_queue_job_channel +msgid "Job Channels" +msgstr "کەناڵەکانی کار" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_job_relate_mixin +msgid "Job Relate Mixin" +msgstr "تێکەڵکردنی پەیوەندیدار بە کارەوە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_account_journal +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Journal" +msgstr "بەش" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__account_move_id +msgid "Journal Entry" +msgstr "بەشی هاتنەناوەوە" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_account_journal_conf +msgid "Journals" +msgstr "بەشەکان" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__-1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__-1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__-1 +msgid "Last" +msgstr "دوایین" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__last_deduplication +msgid "Last Deduplication Date" +msgstr "دوا ڕێکەوتی سڕینەوەی دووبارەبووان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default____last_update +msgid "Last Modified on" +msgstr "دوا دەستکاریکردن لە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__write_uid +msgid "Last Updated by" +msgstr "دوا نوێکردنەوە لەلایەن" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__write_date +msgid "Last Updated on" +msgstr "دوا نوێکردنەوە لە" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_manager_default__rrule_type +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_recurrence_mixin__rrule_type +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__rrule_type +msgid "Let the event automatically repeat at that interval" +msgstr "با ڕووداوەکە بە شێوەیەکی خودکار لەو ماوەیەدا دووبارەبێتەوە" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_batch +msgid "List of payment transactions generated from entitlements." +msgstr "لیستی ئەو مامەڵەی پارەدانانەی کە لە شایستەییەکانەوە وەگیراوە." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__locked +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__locked +msgid "Locked" +msgstr "داخراوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__locked_reason +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__locked_reason +msgid "Locked Reason" +msgstr "هۆکاری داخران" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_main_attachment_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_main_attachment_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_main_attachment_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_main_attachment_id +msgid "Main Attachment" +msgstr "هاوپێچی سەرەکی" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_manager_mixin__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__entitlement_kind +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__manager_ref_id +msgid "Manager" +msgstr "بەڕێوەبەر" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_manager_source_mixin +msgid "Manager Data Source Mixin" +msgstr "بەڕێوەبەری لێکدانی سەرچاوەکانی داتا" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_manager_mixin__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__manager_id +msgid "Manager ID" +msgstr "ناسنامەی بەڕێوەبەر" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_manager_mixin +msgid "Manager Mixin" +msgstr "بەڕێوەبەری لێکدان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_cycle_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_deduplication_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_entitlement_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_notification_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_payment_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__name +msgid "Manager Name" +msgstr "ناوی بەڕێوەبەر" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_manager_menu_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Managers" +msgstr "بەڕێوەبەران" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__max_individual_in_group +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__max_individual_in_group +msgid "Maximum number of individual in group" +msgstr "زۆرترین ژمارەی تاکەکەسەکان لەناو گروپدا" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_has_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_has_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_has_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_has_error +msgid "Message Delivery error" +msgstr "هەڵە لەکاتی گەیاندنی پەیام" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_ids +msgid "Messages" +msgstr "پەیامەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__mon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__mon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__mon +msgid "Mon" +msgstr "دووشەممە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__month_by +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__month_by +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__month_by +msgid "Month By" +msgstr "مانگ لە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__monthly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__monthly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__monthly +msgid "Months" +msgstr "مانگەکان" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_multi_entitlement_approval +msgid "Multi Entitlement Approval" +msgstr "پەسەندکرانی چەند شایستەیی" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_multi_entitlement_approval_wizard +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__wizard_id +msgid "Multi Entitlement Approval Wizard" +msgstr "یارمەتیدەری پەسەندکرانی چەند شایستەیی" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__my_activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__my_activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "دوا وادەی چالاکییەکانم" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__name +msgid "Name" +msgstr "ناو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +msgid "Name:" +msgstr "ناو:" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__new +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__new +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__new +msgid "New" +msgstr "نوێ" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "New cycle %s created." +msgstr "دابەشکردنی نوێ %s دروستکراوە." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Next" +msgstr "دواتر" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_calendar_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_calendar_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_calendar_event_id +msgid "Next Activity Calendar Event" +msgstr "ڕۆژمێری چالاکییەکانی دواتر" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "ساڵنامەی چالاکییەکانی دواتر" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_summary +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_summary +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_summary +msgid "Next Activity Summary" +msgstr "پوختەی چالاکییەکانی دواتر" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_type_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_type_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_type_id +msgid "Next Activity Type" +msgstr "جۆری چالاکیی دواتر" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__import_beneficiaries__no +msgid "No" +msgstr "نەخێر" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "No Approved Entitlements Selected" +msgstr "هیچ شایستەییەکی پەسەندکراو هەڵنەبژێردراوە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "No Deduplication Manager defined." +msgstr "هیچ بەڕێوەبەرێکی سڕێنەوەی ناسنامە دووبارەکان پێناسەنەکراوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "No Eligibility Manager defined." +msgstr "هیچ بەڕێوەبەرێکی شایستەیی پێناسەنەکراوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "No Program Manager defined." +msgstr "هیچ بەڕێوەبەرێکی بەرنامە پێناسەنەکراوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "No beneficiaries to import." +msgstr "هیچ سودمەندێک نییە بیهێنیت." + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership_duplicate__state__not_duplicate +msgid "Not Duplicate" +msgstr "دووبارە نییه" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__not_eligible +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__not_eligible +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Not Eligible" +msgstr "شایستە نییە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Notification Manager" +msgstr "بەڕێوەبەری ئاگادارکردنەوەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__notification_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Notification Managers" +msgstr "بەڕێوەبەرانی ئاگادارکردنەوە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Notify Registrants" +msgstr "تۆمارکەران ئاگاداربکەوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__number_of_cycles +msgid "Number Of Cycles" +msgstr "ژمارەی دابەشکردنەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_needaction_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_needaction_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_needaction_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_needaction_counter +msgid "Number of Actions" +msgstr "ژمارەی کردارەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_has_error_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_has_error_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_has_error_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_has_error_counter +msgid "Number of errors" +msgstr "ژمارەی هەڵەکان" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_needaction_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_needaction_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_needaction_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "ژمارەی ئەو پەیامانەی کە پێویستە کاریان لەسەر بکرێت" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_has_error_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_has_error_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_has_error_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "ژمارەی ئەو پەیامانەی کە نەگەیشتوون" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_unread_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_unread_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_unread_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_unread_counter +msgid "Number of unread messages" +msgstr "ژمارەی پەیامە نەخوێنراوەکان" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__okay +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__okay +msgid "Okay" +msgstr "باشە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__on_cycle_ended_template +msgid "On Cycle Ended Template" +msgstr "لەسەر قاڵبی کۆتاییهاتنی دابەشکردن" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__on_cycle_started_template +msgid "On Cycle Started Template" +msgstr "لەسەر قاڵبی دەستپێکردنی دابەشکردن" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__on_enrolled_in_program_template +msgid "On Enrolled In Program Template" +msgstr "لەسەر قاڵبی لە بەرنامەکە ناونووسکرا" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Only 'to approve' cycles can be approved." +msgstr "تەنها دابەشکردنەکانی'چاوەڕێی پەسەندکردن' دەتوانرێت پەسەند بکرێن." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "Only cancelled program funds can be reset to draft." +msgstr "تەنها پارەی بەرنامە هەڵوەشاوەکان دەکرێت بگەڕێتەوە بۆ ڕەشنووس." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/entitlement.py:0 +#, python-format +msgid "Only draft entitlements are allowed to be deleted" +msgstr "تەنها ڕەشنووسی شایستەییەکان دەکرێت بسڕدرێتەوە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "Only draft program funds can be cancelled." +msgstr "تەنها ڕەشنووسی پارەی بەرنامەکان دەکرێت بسڕدرێتەوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "Only draft program funds can be posted." +msgstr "تەنها ڕەشنووسی پارەی بەرنامەکان دەکرێت بخرێتەڕوو." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Ony 'active' programs can be ended." +msgstr "هەر بەرنامەیەکی 'چالاک' دەکرێت کۆتایی پێبهێنرێت." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#, python-format +msgid "Ony 'draft' cycles can be set for approval." +msgstr "هەر 'ڕەشنووسی' دابەشکردنێکی مانگانە دەکرێت بۆ پەسەندکردن بخرێتەڕوو." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Ony 'ended' programs can be re-activated." +msgstr "هەر بەرنامەیەکی 'کۆتاییهاتوو' دەکرێت چالاک بکرێتەوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#, python-format +msgid "Ony 'to approve' cycles can be reset to draft." +msgstr "" +"هەر دابەشکردنێکی مانگانەی لە دۆخی 'بۆ پەسەندکردن' دەکرێت بگەڕێتەوە بۆ " +"ڕەشنووس." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "PAUSED" +msgstr "وەستاوە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__status__paid +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Paid" +msgstr "پارەدرا" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Paid Amount" +msgstr "بڕە پارەی دراو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_paid_amount +msgid "Paid Amount Statistics" +msgstr "ئاماری بڕە پارەی دراو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Paid Transactions" +msgstr "مامەڵەی بەپارە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_paid_transactions +msgid "Paid Transactions Statistics" +msgstr "ئاماری مامەڵەی بەپارە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/queue_job_channel.py:0 +#, python-format +msgid "Parent channel required." +msgstr "کەناڵی سەرووتر پێویستە." + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__paused +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__paused +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Paused" +msgstr "وەستاوە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#: model:ir.model,name:g2p_programs.model_g2p_payment +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#, python-format +msgid "Payment" +msgstr "پارەدان" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_payment_batch +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__batch_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +msgid "Payment Batch" +msgstr "بەشی پارەدان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__payment_batch_ids +#: model:ir.ui.menu,name:g2p_programs.menu_payment_batch +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Payment Batches" +msgstr "بەشە پارەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__payment_datetime +msgid "Payment Datetime" +msgstr "ڕێکەوتی پارەدان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__payment_fee +msgid "Payment Fee" +msgstr "نرخی پارەدان" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_payment_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Payment Manager" +msgstr "بەڕێوەبەری پارەدان" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_payment_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__payment_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Payment Managers" +msgstr "بەڕێوەبەرانی پارەدان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Payment Status" +msgstr "دۆخی پارەدان" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_batch +msgid "Payment Transactions" +msgstr "مامەڵەکانی پارەدان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_payment +#: model:ir.actions.act_window,name:g2p_programs.action_payment_batch +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__payment_ids +#: model:ir.ui.menu,name:g2p_programs.menu_payment +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Payments" +msgstr "پارەدانەکان" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__pending_validation +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Pending Validation" +msgstr "چاوەڕێی پەسەندکردن" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager_phone_number +msgid "Phone Number Deduplication Eligibility" +msgstr "هەڵسەنگاندنی سڕینەوەی ژمارە تەلەفۆنی دووبارە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +msgid "Phone Number Deduplication Eligibility Manager" +msgstr "بەڕێوەبەری هەڵسەنگاندنی سڕینەوەی ژمارە تەلەفۆنی دووبارە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager_phone_number +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +msgid "Phone Number Deduplication Manager" +msgstr "بەڕێوەبەری سڕینەوەی ژمارەی تەلەفۆنی دووبارە" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_deduplication_manager_phone_number +#: model:ir.ui.menu,name:g2p_programs.menu_deduplication_manager_phone_number +msgid "Phone Number Deduplication Managers" +msgstr "بەڕێوەبەرانی سڕینەوەی ژمارەی تەلەفۆنی دووبارە" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_eligibility_manager_phone_number +#: model:ir.ui.menu,name:g2p_programs.menu_eligibility_manager_phone_number +msgid "Phone Number Eligibility Managers" +msgstr "بەڕێوەبەرانی سڕینەوەی ژمارەی تەلەفۆنی دووبارە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Post" +msgstr "بیخەڕوو" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_fund__state__posted +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +msgid "Posted" +msgstr "خرایەڕوو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Prepare Entitlement" +msgstr "ئامادەکردنی شایستەییەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Prepare Payments" +msgstr "ئامادەکردنی پارەدان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Prepare entitlement for %s beneficiaries started." +msgstr "ئامادەکردنی شایستەییەکان بۆ %s سودمەندان دەستیپێکرد." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Prepare entitlement for beneficiaries." +msgstr "ئامادەکردنی شایستەییەکان بۆ سودمەندان." + +#. module: g2p_programs +#: model:ir.actions.report,name:g2p_programs.action_print_entitlement +msgid "Print Vouchers" +msgstr "کۆدەکان چاپ بکە" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_beneficiary +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_prog_benf +msgid "Process entitlements to automatically post the journal entries here." +msgstr "لێرە شایستەییەکان بۆ خستنەڕووی خودکاری نووسراوەکانی بەشەکان ڕایی بکە." + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__processing +msgid "Processing" +msgstr "ڕاییکردن" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.model,name:g2p_programs.model_g2p_program +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_cycle_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_deduplication_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_entitlement_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_notification_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_payment_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__program_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_to_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.notification_manager_sms_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Program" +msgstr "بەرنامە" + +#. module: g2p_programs +#: model:res.groups,name:g2p_programs.g2p_program_cycle_approver +msgid "Program Cycle Approver" +msgstr "پەسەندکەری دابەشکردنی بەرنامە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +#, python-format +msgid "Program Fund" +msgstr "پارەی بەرنامە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_fund +msgid "Program Fund Entries" +msgstr "نووسراوەکانی پارەدانی بەرنامە" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_fund_report +#: model:ir.model,name:g2p_programs.model_g2p_program_fund_report_view +#: model:ir.ui.menu,name:g2p_programs.menu_program_fund_report +msgid "Program Fund Report" +msgstr "ڕاپۆرتی پارەدانی بەرنامە" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_fund +#: model:ir.ui.menu,name:g2p_programs.menu_program_fund +msgid "Program Funds" +msgstr "پارەدانی بەرنامە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__journal_id +msgid "Program Journal" +msgstr "بەشی بەرنامە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_manager +#: model:res.groups,name:g2p_programs.g2p_program_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_form +msgid "Program Manager" +msgstr "بەڕێوەبەری بەرنامە" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__program_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Program Managers" +msgstr "بەڕێوەبەرانی بەرنامە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Program Membership" +msgstr "ئەندامێتی لە بەرنامە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Program Membership Duplicate" +msgstr "دووبارەبوونەوەی ئەندامێتی لە بەرنامە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_duplicate +msgid "Program Membership duplicate" +msgstr "دووبارەبوونەوەی ئەندامێتی لە بەرنامە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__program_membership_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__program_membership_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__program_membership_ids +msgid "Program Memberships" +msgstr "ئەندامێتیییەکان لە بەرنامە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__name +msgid "Program Name" +msgstr "ناوی بەرنامە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_notification_manager +msgid "Program Notification Manager" +msgstr "بەڕێوەبەری ئاگادارکردنەوەی بەرنامە" + +#. module: g2p_programs +#: model:res.groups,name:g2p_programs.g2p_program_validator +msgid "Program Validator" +msgstr "پەسەندکەری بەرنامە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Program:" +msgstr "بەرنامە:" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Program: %(prg)s, Beneficiary: %(partner)s.\n" +msgstr "بەرنامە: %(prg)s، سودمەند: %(partner)s.\n" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/create_program_wizard.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_program_list +#: model:ir.ui.menu,name:g2p_programs.g2p_program_menu_root +#: model:ir.ui.menu,name:g2p_programs.menu_program_list +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_group_ext_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_registrant_ext_form +#, python-format +msgid "Programs" +msgstr "بەرنامەکان" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_membership +msgid "Programs Membership" +msgstr "ئەندامێتی لە بەرنامەکان" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_membership_duplicate +msgid "Programs Membership Duplicate" +msgstr "ئەندامێتییە دووبارەبووەکان لە بەرنامەکان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Project" +msgstr "پرۆژە" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.reactivate_program +msgid "Re-activate Program" +msgstr "چالاککردنەوەی بەرنامە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_tree +msgid "Reason" +msgstr "هۆکار" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Reason:" +msgstr "هۆکار:" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__state__reconciled +msgid "Reconciled" +msgstr "وردبینی بۆکراوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__reconciliation_managers +msgid "Reconciliation Managers" +msgstr "بەڕێوەبەرانی وردبینی" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__cycle_duration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__rrule_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__rrule_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__cycle_duration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__rrule_type +msgid "Recurrence" +msgstr "دووبارەبوونەوە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rdpd2ben +msgid "Redeemed/Paid to Beneficiary" +msgstr "وەرگرتن/پارەدان بە سودمەند" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__name +msgid "Reference Number" +msgstr "ژمارەی ئاماژه" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Reference Number:" +msgstr "ژمارەی ئاماژه:" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Refresh" +msgstr "نوێکردنەوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__partner_id +msgid "Registrant" +msgstr "تۆمارکەر" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_assign_program_registrants +msgid "Registrant Assign to Program" +msgstr "تۆمارکەرێک تەرخانی بەرنامەکە بکە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Registrant:" +msgstr "ناوی تۆمارکەر:" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rejected2 +msgid "Rejected: Beneficiary account does not exist" +msgstr "ڕەتکراوەتەوە: هەژماری سودمەند بوونی نییە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rejected1 +msgid "Rejected: Beneficiary didn't want the entitlement" +msgstr "ڕەتکرایەوە: سودمەند شایستەییکانی نەدەویست" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rejected3 +msgid "Rejected: Other reason" +msgstr "ڕەتکراوەتەوە: بە هۆکاری دیکە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__remarks +msgid "Remarks" +msgstr "تێبینییەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__until +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__until +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__until +msgid "Repeat Until" +msgstr "دووبارەی بکەوە تا" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_accounting_reports_menu_root +msgid "Reports" +msgstr "ڕاپۆرتەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Reset to Draft" +msgstr "بیکەوە بە ڕەشنووس" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_user_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_user_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_user_id +msgid "Responsible User" +msgstr "بەکارهێنەری بەرپرسیار" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__rrule +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__rrule +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__rrule +msgid "Rrule" +msgstr "ڕێسا" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_has_sms_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_has_sms_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_has_sms_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_has_sms_error +msgid "SMS Delivery error" +msgstr "کورتەنامە نەگەیشت" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "SMS Notification Manager" +msgstr "بەڕێوەبەری کورتەنامەی ئاگادارکردنەوە" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_notification_manager_sms +#: model:ir.ui.menu,name:g2p_programs.menu_notification_manager_sms +msgid "SMS Notification Managers" +msgstr "بەڕێوەبەرانی کورتەنامەی ئاگادارکردنەوە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_notification_manager_sms +#: model:ir.model.fields,field_description:g2p_programs.field_sms_template__g2p_sms_id +msgid "SMS Program Notification Manager" +msgstr "بەڕێوەبەری بەرنامەی کورتەنامەی ئاگادارکردنەوە" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_sms_template +msgid "SMS Templates" +msgstr "قاڵبی کورتەنامە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__sat +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__sat +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__sat +msgid "Sat" +msgstr "گونجا" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +msgid "Search Cycle Memberships" +msgstr "گەڕان بۆ ئەندامێتی لە دابەشکردنەکانی مانگانە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Search Cycles" +msgstr "گەڕان لە دابەشکردنەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_manager_default_filter +msgid "Search Default Cycle Manager" +msgstr "گەڕان بۆ بەڕێوەبەری پێشوەختەی دابەشکردنەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_manager_default_filter +msgid "Search Default Entitlement Manager" +msgstr "گەڕان بۆ بەڕێوەبەری پێشوەختەی شایستەییەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_manager_default_filter +msgid "Search Default Payment Manager" +msgstr "گەڕان بەدوای بەڕێوەبەری پێشوەختەی پارەدان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_manager_default_filter +msgid "Search Default Program Manager" +msgstr "گەڕان بەدوای بەڕێوەبەری پێشوەختەی پارەدان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_default_filter +msgid "Search Eligibility Manager" +msgstr "گەڕان بۆ بەڕێوەبەری شایستەیی" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Search Entitlements" +msgstr "گەڕان بۆ شایستەییەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_id_dedup_filter +msgid "Search ID Deduplication Eligibility Managers" +msgstr "گەڕان بەدوای بەڕێوەبەرانی دووبارەی هەڵسەنگاندنی شایستەیی" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_id_dedup_filter +msgid "Search ID Deduplication Managers" +msgstr "گەڕان بەدوای ناسنامەی بەڕێوەبەرانی دووبارەبوو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_batch_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +msgid "Search Payments" +msgstr "گەڕان بەدوای پارەدانەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_phone_number_filter +msgid "Search Phone Number Deduplication Eligibility Managers" +msgstr "گەڕان بەدوای ژمارەی تەلەفۆن بەڕێوەبەرانی شایستەیی دووبارەبوو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_phone_number_filter +msgid "Search Phone Number Deduplication Managers" +msgstr "گەڕان بەدوای ژمارەی تەلەفۆنی بەڕێوەبەرانی دووبارە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +msgid "Search Program Fund Report" +msgstr "گەڕان بەدوای ڕاپۆڕتی پارەدانی بەرنامە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +msgid "Search Program Funds" +msgstr "گەڕان بەدوای پارەی بەرنامەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Search Program Memberships" +msgstr "گەڕان بەدوای ئەندامێتییەکان لە بەرنامە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +msgid "Search Programs" +msgstr "گەڕان لە بەرنامەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.notification_manager_sms_filter +msgid "Search SMS Notification Manager" +msgstr "گەڕان بەدوای بەڕێوەبەری کورتەنامەکانی ئاگادارکردنەوە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__2 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__2 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__2 +msgid "Second" +msgstr "دووەم" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_form +msgid "Select a program..." +msgstr "بەرنامەیەک هەڵبژێرە..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Send Payment" +msgstr "پارەکە بنێرە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +msgid "Send Payments" +msgstr "پارەدانەکان بنێرە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__state__sent +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +msgid "Sent" +msgstr "ناردرا" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Sent Amount" +msgstr "بڕی نێردراو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_sent_amount +msgid "Sent Amount Statistics" +msgstr "ئاماری بڕی نێردراو" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Sent Transactions" +msgstr "مامەڵەکان بنێرە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_sent_transactions +msgid "Sent Transactions Statistics" +msgstr "ئاماری مامەڵە نێردراوەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__sequence +msgid "Sequence" +msgstr "زنجیرە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Service Fee Entry" +msgstr "نووسینی نرخی خزمەتگوزاری" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__service_fee_disbursement_id +msgid "Service Fee Journal Entry" +msgstr "نووسین لە بەشی نرخی خزمەتگوزاری" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__state__step1 +msgid "Set Defaults" +msgstr "ڕێکخستنی پێشوەختە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Set as Ended" +msgstr "دیاری بکە وەک کۆتاییهاتوو" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Set entitlements to pending validation for cycle." +msgstr "شایستەییەکان وەک 'چاوەڕێی پشتڕاستکردنەوە' لە دابەشکردنەکاندا دیاری بکە." + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__transfer_fee_amt +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_amt +msgid "Set fixed transfer fee amount" +msgstr "نرخی جێگیری گواستنەوە دیاری بکە" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Setting %s entitlements to pending validation has started." +msgstr "" +"ڕێکخستنی شایستەییەکان %s بۆ دیاریکردنی 'چاوەڕێی پشتڕاستکردنەوە' دەستی " +"پێکردووە." + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager_default +msgid "Simple Eligibility" +msgstr "شایستەیی سادە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__name +msgid "Source Document" +msgstr "بەڵگەنامەی سەرەکی" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__start_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Start Date" +msgstr "ڕێکەوتی دەستپێكردن" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__state +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_tree +msgid "State" +msgstr "دۆخ" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Statistics" +msgstr "ئامارەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_datetime +msgid "Statistics Date/Time" +msgstr "ئاماری ڕێکەوت/کات" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__state +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_group_ext_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_registrant_ext_form +msgid "Status" +msgstr "دۆخ" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status_datetime +msgid "Status Datetime" +msgstr "دۆخی ڕێکەوت و کات" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_state +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_state +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__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: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Status:" +msgstr "دۆخ:" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__sun +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__sun +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__sun +msgid "Sun" +msgstr "یەکشەممە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__supported_id_document_types +msgid "Supported ID Document Types" +msgstr "جۆرەکانی بەڵگەنامە پەسەندکراوەکانی ناسنامە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "TEMPLATES" +msgstr "قاڵبەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__target_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__target_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__target_type +msgid "Target Type" +msgstr "جۆری ئامانج" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Target Type:" +msgstr "جۆری ئامانج:" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "The" +msgstr "ەکە" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/create_program_wizard.py:0 +#, python-format +msgid "" +"The 'Amount per cycle' or 'Amount per individual in group' must be filled-up " +"for the default entitlement manager." +msgstr "" +"'بڕی پارە بەپێی دابەشکردن' یان 'بڕی هەر تاکێک لە گروپدا' دەبێت بۆ بەڕێوەبەری " +"پێشوەختەی شایستەییەکان دیاری بکرێت." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "The Cycle is not in draft mode" +msgstr "دابەشکردنەکە لە حاڵەتی ڕەشنووسدا نییە" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_entitlement__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_payment__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_payment_manager_default__currency_id +msgid "The currency used to enter statement" +msgstr "ئەو جۆرە پارەی کە بەکاردێت" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "The cycle approver group is not specified!" +msgstr "گروپی پەسەندکەری دابەشکردنەکە دیاری نەکراوە!" + +#. module: g2p_programs +#: model:ir.model.constraint,message:g2p_programs.constraint_g2p_entitlement_unique_entitlement_code +msgid "The entitlement code must be unique." +msgstr "کۆدی شایستەییەکان دەبێت بێهاوتا بێت." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "" +"The fund for the program: %(program)s [%(fund).2f] is insufficient for the " +"entitlement: %(entitlement)s" +msgstr "" +"پارە بۆ بەرنامەکە: %(program)s [%(fund).2f] بەس نییە بۆ " +"شایستەییەکانی%(entitlement)s" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_beneficiary +msgid "There are no Beneficiary Fund Journal Entries Entered!" +msgstr "هیچ زانیارییەک لە بەشی پارەی سودمەنداندا نییە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_prog_benf +msgid "There are no Program Beneficiary Fund Journal Entries Entered!" +msgstr "هیچ زانیارییەک لە بەشی پارەی سودمەندانی بەرنامەدا نییە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_fund_report +msgid "There are no Program Fund Entries based on the current filter!" +msgstr "بەو فلتەرانەی ئێستا، هیچ زانیارییەک لەسەر پارەی بەرنامە نییە!" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_fund +msgid "There are no Program Funds Entered!" +msgstr "هیچ پارەیەکی بەرنامە داخڵ نەکراوە!" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#, python-format +msgid "There are no new payments issued!" +msgstr "هیچ پارەدانێکی نوێ دەرنەچووە!" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/assign_payments_batch_wizard.py:0 +#, python-format +msgid "There are no selected payments!" +msgstr "هیچ پارەدانێکی دەستنیشانکراو نییە!" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/assign_to_program_wizard.py:0 +#, python-format +msgid "There are no selected registrants!" +msgstr "هیچ تۆمارکەرێکی دەستنیشانکراو نییە!" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__3 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__3 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__3 +msgid "Third" +msgstr "سێیەم" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "This fund is already posted and cannot be deleted." +msgstr "ئەم پارەیە پێشتر یەکلا بووەتەوە و ناتوانرێت بسڕدرێتەوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "This fund is now posted!" +msgstr "ئەم پارەیە ئێستا خراوەتەڕوو!" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "This fund was cancelled on" +msgstr "ئەم پارەیە هەڵوەشایەوە لە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__thu +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__thu +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__thu +msgid "Thu" +msgstr "پێنجشەممە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__event_tz +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__event_tz +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__event_tz +msgid "Timezone" +msgstr "ناوچەی جوگرافی" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__to_approve +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "To Approve" +msgstr "بۆ پەسەندکردن" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__transfer_fee +msgid "Transfer Fee" +msgstr "نرخی گواستنەوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__transfer_fee_amt +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_amt +msgid "Transfer Fee Amount" +msgstr "بڕی نرخی گواستنەوە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__transfer_fee_pct +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_pct +msgid "Transfer Fee(%)" +msgstr "نرخی گواستنەوە(%)" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__transfer_fee_pct +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_pct +msgid "Transfer fee will be a percentage of amount" +msgstr "نرخی گواستنەوە ڕێژەیەک دەبێت لە بڕە پارەکە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__trans2fsp +msgid "Transferred to FSP" +msgstr "گواستراوەتەوە بۆ لایەنی خزمەتگوزاری پارەدان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__tue +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__tue +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__tue +msgid "Tue" +msgstr "سێشەممە" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_exception_decoration +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_exception_decoration +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "جۆری چالاکیی تایبەتیی تۆمارکراو." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_unread +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_unread +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_unread +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_unread +msgid "Unread Messages" +msgstr "پەیامی نەخوێندراو" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_unread_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_unread_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_unread_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_unread_counter +msgid "Unread Messages Counter" +msgstr "ژمێرەری پەیامە نەخوێندراوەکان" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__valid_from +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Valid From" +msgstr "دروستە لە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Valid From:" +msgstr "دروستە لە:" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Valid To:" +msgstr "دروستە تا:" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__valid_until +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Valid Until" +msgstr "دروستە تا" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Validate %s entitlements started." +msgstr "پشتڕاستکردنەوەی شایستەییەکانی %s دەستی پێکرد." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Validate Entitlements" +msgstr "پشتڕاستکردنەوەی شایستەییەکان" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Validate and approve entitlements for cycle." +msgstr "پشتڕاستکردنەوە و پەسەندکردنی شایستەییەکان بۆ دابەشکردنی مانگانە." + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__verified +msgid "Verified" +msgstr "وردبینی بۆ کراوە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Verify Eligibility" +msgstr "وردبینی بۆ شایستەیی بکە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Verify eligibility" +msgstr "وردبینی بۆ شایستەیی بکە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__website_message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__website_message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__website_message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__website_message_ids +msgid "Website Messages" +msgstr "پەیامەکانی ماڵپەڕ" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__website_message_ids +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__website_message_ids +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__website_message_ids +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__website_message_ids +msgid "Website communication history" +msgstr "مێژووی پەیوەندی ماڵپەڕ" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__wed +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__wed +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__wed +msgid "Wed" +msgstr "چوارشەممە" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__weekday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__weekday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__weekday +msgid "Weekday" +msgstr "ڕۆژی هەفتە" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__weekly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__weekly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__weekly +msgid "Weeks" +msgstr "هەفتەکان" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Would you like to import the matching registrants to this program?" +msgstr "حەز دەکەیت تۆمارکەرانی گونجاو بهێنیتە ناو ئەم بەرنامەیە؟" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__yearly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__yearly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__yearly +msgid "Years" +msgstr "ساڵەکان" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__import_beneficiaries__yes +msgid "Yes" +msgstr "بەڵێ" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "You are not allowed to approve this cycle!" +msgstr "ڕێگەت پێنادرێت ئەم دابەشکردنە مانگانەیە پەسەند بکەیت!" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/multi_entitlement_approval_wizard.py:0 +#, python-format +msgid "You can approve only entitlements from approved cycles." +msgstr "تەنها دەتوانیت شایستەییەکانی دابەشکردنە پەسەندکراوەکان یەکلا بکەیتەوە." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/entitlement.py:0 +#, python-format +msgid "You have no access in the Entitlement List View" +msgstr "هیچ دەستڕاگەیشتنێکت بۆ شاشەی لیستی شایستەییەکاندا نییە" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/js/create_program.js:0 +#, python-format +msgid "action_invoices" +msgstr "کردەوە-پسوولەی پارە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "barcode" +msgstr "باڕکۆد" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "button." +msgstr "دوگمە." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "code..." +msgstr "کۆد..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +msgid "cycle..." +msgstr "دابەشکردنی مانگانە..." + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__duplicated +msgid "duplicated" +msgstr "دووبارەیە" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "program..." +msgstr "بەرنامە..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "section of the" +msgstr "بەشی" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "" +"tab.\n" +" You can also create a new journal by clicking this" +msgstr "" +"بڕگە.\n" +" هەروەها دەتوانیت بە کلیککردن لەسەر ئەمە بەشێکی نوێ " +"دروست بکەیت" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_report_tree +msgid "total_amount" +msgstr "بڕی-گشتی" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_tree +msgid "total_amount_per_cycle" +msgstr "بڕی_گشتی_هەر دابەشکردنێک" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_tree +msgid "total_amount_per_individual_in_group" +msgstr "بڕی_گشتی_بۆ هەر تاکێک لە گروپەکەدا" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "| Company:" +msgstr "| کۆمپانیا:" diff --git a/g2p_programs/i18n/fr.po b/g2p_programs/i18n/fr.po new file mode 100644 index 000000000..0bc6b7b14 --- /dev/null +++ b/g2p_programs/i18n/fr.po @@ -0,0 +1,3923 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * g2p_programs +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-10-06 09:22+0000\n" +"Last-Translator: Corentin Madec \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14\n" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__members_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__beneficiaries_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree +msgid "# Beneficiaries" +msgstr "# Bénéficiaires" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__entitlements_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__entitlements_count +msgid "# Cash Entitlements" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__cycles_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__cycles_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__cycles_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree +msgid "# Cycles" +msgstr "# Cycles" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__eligible_beneficiaries_count +msgid "# Eligible Beneficiaries" +msgstr "# Bénéficiaires éligibles" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__entitlements_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_tree +msgid "# Entitlements" +msgstr "# Prestations" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_tree +msgid "# IDs" +msgstr "# IDs" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__duplicate_membership_count +msgid "# Membership Duplicates" +msgstr "# Doublons d'appartenance" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__payments_count +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "# Payments" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__program_membership_count +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__program_membership_count +msgid "# Program Memberships" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "%s Beneficiaries duplicate." +msgstr "%s Bénéficiaires en double." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "%s Beneficiaries enrolled." +msgstr "%s Bénéficiaires inscrits." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "%s beneficiaries imported." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#, python-format +msgid "%s new payments was issued." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "'Accounting'" +msgstr "'Comptabilité'" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "'Configuration'" +msgstr "'Configuration'" + +#. module: g2p_programs +#: model:ir.actions.report,print_report_name:g2p_programs.action_print_entitlement +msgid "'Entitlement Card'" +msgstr "'Carte de droit'" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__max_individual_in_group +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__max_individual_in_group +msgid "0 means no limit" +msgstr "0 signifie pas de limite" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Beneficiaries" +msgstr "Bénéficiaires" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycles" +msgstr "Cycles" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "" +"Disbursement\n" +" Form" +msgstr "" +"Versement \n" +"Formulaire" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Duplicates" +msgstr "Doublons" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Entitlements" +msgstr "Prestations" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#, fuzzy +msgid "Payments" +msgstr "Cycles" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +#| msgid "Duplicates" +msgid "Related Job(s)" +msgstr "Doublons" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Warning: Operation in progress: " +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__cycle_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval_wizard__cycle_id +msgid "A Cycle" +msgstr "Un cycle" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__entitlement_id +msgid "A Entitlement" +msgstr "Une prestations" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__wizard_id +msgid "A Wizard" +msgstr "Un assistant" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_membership__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_entitlement__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_payment__partner_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__partner_id +msgid "A beneficiary" +msgstr "Un bénéficiaire" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_membership__cycle_id +msgid "A cycle" +msgstr "Un cycle" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "A journal must be defined for this program. Select a journal in the" +msgstr "" +"Un journal doit être défini pour ce programme. Sélectionnez un journal dans " +"le" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_assign_program_wizard__program_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__program_id +msgid "A program" +msgstr "Un programme" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_account_journal_conf +msgid "Account Journals" +msgstr "Journaux de compte" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__account_number +#, fuzzy +msgid "Account Number" +msgstr "Journaux de compte" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_accounting_config_menu_root +#: model:ir.ui.menu,name:g2p_programs.g2p_accounting_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Accounting" +msgstr "Comptabilité" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_account_journal_prog_benf +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__journal_id +#: model:ir.ui.menu,name:g2p_programs.menu_account_journal_prog_benf +msgid "Accounting Journal" +msgstr "Journal comptable" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Accounting Journal Entry" +msgstr "Écriture au journal comptable" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_needaction +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_needaction +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_needaction +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_needaction +msgid "Action Needed" +msgstr "Action nécessaire" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__active +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__state__active +msgid "Active" +msgstr "Actif" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_ids +msgid "Activities" +msgstr "Activités" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_exception_decoration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_exception_decoration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_state +msgid "Activity State" +msgstr "État d'activité" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_type_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_type_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icône du type d'activité" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_assign_payments_batch_wizard +#, fuzzy +msgid "Add Payments to Batch Wizard" +msgstr "Assistant d'ajout d'inscrits au programme" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_assign_program_wizard +msgid "Add Registrants to Program Wizard" +msgstr "Assistant d'ajout d'inscrits au programme" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_conf +msgid "Add a Beneficiary Disbursement Journal!" +msgstr "Ajoutez un journal des décaissements du bénéficiaire !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_manager_default +msgid "Add a Cycle Manager!" +msgstr "Ajoutez un gestionnaire de cycle !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_manager_default +#, fuzzy +msgid "Add a Payment Manager!" +msgstr "Ajoutez un gestionnaire de programme !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_phone_number +msgid "Add a Phone Number Deduplication Eligibility Manager!" +msgstr "" +"Ajoutez un gestionnaire d'éligibilité à la déduplication des numéros de " +"téléphone !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_phone_number +msgid "Add a Phone Number Deduplication Manager!" +msgstr "Ajoutez un gestionnaire de déduplication de numéros de téléphone !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_manager_default +msgid "Add a Program Manager!" +msgstr "Ajoutez un gestionnaire de programme !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_notification_manager_sms +msgid "Add a SMS Notification Manager!" +msgstr "Ajoutez un gestionnaire de notifications SMS !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_membership +msgid "Add a new cycle membership!" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle +msgid "Add a new cycle!" +msgstr "Ajoutez un nouveau cycle !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement +msgid "Add a new entitlement!" +msgstr "Ajoutez une nouvelle prestation !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership_duplicate +msgid "Add a new program membership duplicate!" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership +msgid "Add a new program membership!" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_list +msgid "Add a new program!" +msgstr "Ajoutez un nouveau programme !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_default +msgid "Add an Eligibility Manager!" +msgstr "Ajoutez un gestionnaire d'éligibilité !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement_manager_default +msgid "Add an Entitlement Manager!" +msgstr "Ajoutez un gestionnaire de prestation !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_id_dedup +msgid "Add an ID Deduplication Eligibility Manager!" +msgstr "Ajoutez un Gestionnaire d'Eligibilité de Déduplication d'ID !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_id_dedup +msgid "Add an ID Deduplication Manager!" +msgstr "Ajoutez un Gestionnaire de Déduplication d'ID !" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.assign_to_program +msgid "Add to Program" +msgstr "Ajouter au programme" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Address:" +msgstr "Adresse :" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#, python-format +msgid "All entitlements selected are not approved!" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/assign_payments_batch_wizard.py:0 +#, python-format +msgid "All selected payments are already assigned to another batch." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__amount +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__amount +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +msgid "Amount" +msgstr "Montant" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__amount_issued +#, fuzzy +msgid "Amount Issued" +msgstr "Montant" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__amount_paid +#, fuzzy +msgid "Amount Paid" +msgstr "Montant" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__amount_per_cycle +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__amount_per_cycle +msgid "Amount Per Cycle" +msgstr "Quantité par cycle" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__amount_per_individual_in_group +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__amount_per_individual_in_group +msgid "Amount Per Individual In Group" +msgstr "Montant par personne dans le groupe" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.multiple_entitlement_approval +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Approve" +msgstr "Approuver" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Approve Entitlement" +msgstr "Approuver la prestation" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__approved +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__approved +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__approved +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Approved" +msgstr "Approuvé" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__approver_group_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__approver_group_id +msgid "Approver Group" +msgstr "Groupe d'approbateurs" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +msgid "Archived" +msgstr "Archivé" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_to_program_wizard_form_view +msgid "Assign" +msgstr "Attribuer" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.assign_payment_batch +msgid "Assign Payments to Batch" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +msgid "Assign to Batch" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__assigned +msgid "Assigned" +msgstr "Attribué" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_attachment_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_attachment_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_attachment_count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_attachment_count +msgid "Attachment Count" +msgstr "Nombre de pièces jointes" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_cycle_manager__auto_approve_entitlements +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__auto_approve_entitlements +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__auto_approve_entitlements +msgid "Auto-approve Entitlements" +msgstr "Auto-approbation des prestations" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__auto_approve_entitlements +msgid "Auto-approve entitlements" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "" +"Auto-approve entitlements is set but there are no entitlements to process." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__create_batch +msgid "Automatically Create Batch" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Back" +msgstr "Retour" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__balance +msgid "Balance" +msgstr "Solde" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_cycle_manager +msgid "Base Cycle Manager" +msgstr "Gestionnaire du cycle de base" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_deduplication_manager +msgid "Base Deduplication Manager" +msgstr "Gestionnaire de déduplication de base" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager +msgid "Base Eligibility" +msgstr "Admissibilité de base" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_entitlement_manager +msgid "Base Entitlement Manager" +msgstr "Gestionnaire des prestations de base" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__base_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__base_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__base_event_id +msgid "Base Event" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_base_programs_manager +msgid "Base Manager" +msgstr "Gestionnaire de base" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_payment_manager +#, fuzzy +msgid "Base Payment Manager" +msgstr "Gestionnaire de programme de base" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_manager +msgid "Base Program Manager" +msgstr "Gestionnaire de programme de base" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_base_program_notification_manager +msgid "Base Program Notification Manager" +msgstr "Gestionnaire des notifications du programme de base" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__batch_has_completed +msgid "Batch Has Completed" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__beneficiary_ids +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +#, python-format +msgid "Beneficiaries" +msgstr "Les bénéficiaires" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Beneficiaries Duplicates" +msgstr "Bénéficiaires Duplicata" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__partner_id +msgid "Beneficiary" +msgstr "Bénéficiaire" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_account_journal_beneficiary +#: model:ir.model.fields,field_description:g2p_programs.field_account_journal__beneficiary_disb +#: model:ir.ui.menu,name:g2p_programs.menu_action_account_moves_journal_benf +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_account_move_line_beneficiary_filter +msgid "Beneficiary Funds" +msgstr "Fonds bénéficiaires" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Beneficiary import finished." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.constraint,message:g2p_programs.constraint_g2p_cycle_membership_cycle_membership_unique +msgid "Beneficiary must be unique per cycle." +msgstr "Le bénéficiaire doit être unique par cycle." + +#. module: g2p_programs +#: model:ir.model.constraint,message:g2p_programs.constraint_g2p_program_membership_program_membership_unique +msgid "Beneficiary must be unique per program." +msgstr "Le bénéficiaire doit être unique par cycle." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#, fuzzy +msgid "Beneficiary:" +msgstr "Bénéficiaire" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__byday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__byday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__byday +msgid "By day" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__calendar_event_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__calendar_event_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__calendar_event_ids +msgid "Calendar Event" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/duplicate.py:0 +#, python-format +msgid "Can't delete duplicated membership" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_to_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Cancel" +msgstr "Annuler" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Cancel %s entitlements started." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Cancel entitlements for cycle." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__cancelled +msgid "Canceled" +msgstr "Annulé" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__cancelled +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_fund__state__cancelled +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +msgid "Cancelled" +msgstr "Annulé" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__is_cash_entitlement +msgid "Cash Entitlement" +msgstr "Prestation comptant" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_group_ext_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_registrant_ext_form +msgid "Cash Entitlements" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_id_dedup +msgid "" +"Click the create button to enter a new ID deduplication eligibility manager." +msgstr "" +"Cliquez sur le bouton Créer pour entrer un nouveau gestionnaire " +"d'éligibilité de déduplication d'ID." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_id_dedup +msgid "Click the create button to enter a new ID deduplication manager." +msgstr "" +"Cliquez sur le bouton Créer pour saisir un nouveau gestionnaire de " +"déduplication d'ID." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_phone_number +msgid "" +"Click the create button to enter a new Phone Number deduplication " +"eligibility manager." +msgstr "" +"Cliquez sur le bouton Créer pour saisir un nouveau gestionnaire " +"d'éligibilité à la déduplication des numéros de téléphone." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_deduplication_manager_phone_number +msgid "" +"Click the create button to enter a new Phone Number deduplication manager." +msgstr "" +"Cliquez sur le bouton Créer pour entrer un nouveau gestionnaire de " +"déduplication de numéro de téléphone." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_notification_manager_sms +msgid "Click the create button to enter a new SMS notification manager." +msgstr "" +"Cliquez sur le bouton Créer pour entrer un nouveau gestionnaire de " +"notification SMS." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_conf +msgid "" +"Click the create button to enter a new beneficiary disbursement journal." +msgstr "" +"Cliquez sur le bouton Créer pour saisir un nouveau journal des décaissements " +"bénéficiaires." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_manager_default +msgid "Click the create button to enter a new cycle manager." +msgstr "" +"Cliquez sur le bouton Créer pour entrer un nouveau gestionnaire de cycle." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_eligibility_manager_default +msgid "Click the create button to enter a new eligibility manager." +msgstr "" +"Cliquez sur le bouton Créer pour saisir un nouveau gestionnaire " +"d'éligibilité." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement_manager_default +msgid "Click the create button to enter a new entitlement manager." +msgstr "" +"Cliquez sur le bouton Créer pour saisir un nouveau gestionnaire de " +"prestations." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_manager_default +#, fuzzy +msgid "Click the create button to enter a new payment manager." +msgstr "" +"Cliquez sur le bouton Créer pour entrer un nouveau gestionnaire de programme." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_fund +msgid "Click the create button to enter a new program fund information." +msgstr "" +"Cliquez sur le bouton Créer pour entrer une nouvelle information sur le " +"fonds du programme." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_manager_default +msgid "Click the create button to enter a new program manager." +msgstr "" +"Cliquez sur le bouton Créer pour entrer un nouveau gestionnaire de programme." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle +msgid "Click the create button to enter the new cycle information." +msgstr "" +"Cliquez sur le bouton Créer pour saisir les informations du nouveau cycle." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_cycle_membership +msgid "Click the create button to enter the new cycle membership information." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_entitlement +msgid "Click the create button to enter the new entitlement." +msgstr "Cliquez sur le bouton Créer pour entrer la nouvelle prestation." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_list +msgid "Click the create button to enter the new program information." +msgstr "" +"Cliquez sur le bouton Créer pour entrer les nouvelles informations du " +"programme." + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership +msgid "" +"Click the create button to enter the new program membership information." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_membership_duplicate +msgid "" +"Click the create button to enter the program membership duplicate " +"information." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__code +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__code +msgid "Code" +msgstr "Code" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Code:" +msgstr "Code :" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_tree +msgid "Comment" +msgstr "Commentaire" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Comment:" +msgstr "Commentaire :" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__company_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__company_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +msgid "Company" +msgstr "Compagnie" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Company:" +msgstr "Compagnie :" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_program_configuration_menu_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Configuration" +msgstr "Configuration" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Configure the Cycle Manager" +msgstr "Configurer le gestionnaire de cycles" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Configure the Default Eligibility Criteria" +msgstr "Configurer les critères d'éligibilité par défaut" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Configure the Entitlement Manager" +msgstr "Configurer le gestionnaire de prestations" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__conflict +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__conflict +msgid "Conflict" +msgstr "Conflit" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_res_partner +msgid "Contact" +msgstr "Contact" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Copy Beneficiaries from Program" +msgstr "Copier les bénéficiaires du programme" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__copy_last_cycle_on_new_cycle +msgid "Copy previous cycle" +msgstr "Copier le cycle précédent" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__count +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__count +msgid "Count" +msgstr "" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#, python-format +msgid "Create" +msgstr "Créer" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Create New Cycle" +msgstr "Créer un nouveau cycle" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Create New Journal" +msgstr "Créer un nouveau journal" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#, python-format +msgid "Create Program" +msgstr "Créer un programme" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#, python-format +msgid "Create a New Program" +msgstr "Créer un nouveau programme" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_create_wizard +msgid "Create a New Program Wizard" +msgstr "Créer un nouvel assistant de programme" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/xml/create_program_template.xml:0 +#, python-format +msgid "Create record" +msgstr "Créer un enregistrement" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__create_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__create_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__create_date +msgid "Created on" +msgstr "Créé sur" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__currency_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__currency_id +msgid "Currency" +msgstr "Devise" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_cycle +#: model:ir.model,name:g2p_programs.model_g2p_cycle +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__cycle_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__cycle_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.multi_entitlement_approval_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_batch_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Cycle" +msgstr "Cycle" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Cycle Entitlements" +msgstr "Cycle de Prestations" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_cycle_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycle Manager" +msgstr "Gestionnaire de cycles" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_cycle_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__cycle_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycle Managers" +msgstr "Gestionnaires de cycles" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#, python-format +msgid "Cycle Members" +msgstr "Membres du cycle" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_cycle_membership +#: model:ir.model,name:g2p_programs.model_g2p_cycle_membership +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +msgid "Cycle Membership" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__cycle_membership_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__cycle_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__cycle_ids +msgid "Cycle Memberships" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_cycle_recurrence_mixin +msgid "Cycle Recurrence Mixin" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "Cycle Settings" +msgstr "Paramètres de cycle" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Cycle:" +msgstr "Cycle :" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__cycle_ids +#: model:ir.ui.menu,name:g2p_programs.g2p_program_cycle_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Cycles" +msgstr "Cycles" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "Cycles Ended" +msgstr "Cycles terminés" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "Cycles Started" +msgstr "Cycles commencés" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "DRAFT" +msgstr "BROUILLON" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__date_posted +msgid "Date" +msgstr "Date" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__date_approved +msgid "Date Approved" +msgstr "Date d'approbation" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__date_ended +msgid "Date Ended" +msgstr "Date de fin" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Date Entered" +msgstr "Date entrée" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__date_posted +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +msgid "Date Posted" +msgstr "Date postée" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__day +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__day +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__day +msgid "Day" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "Day of Month" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__daily +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__daily +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__daily +msgid "Days" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Deduplicate" +msgstr "Dédupliquer" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Deduplication" +msgstr "Déduplication" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__comment +msgid "Deduplication Comment" +msgstr "Commentaire de déduplication" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__deduplication_manager_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Deduplication Manager" +msgstr "Gestionnaire de déduplication" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__deduplication_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Deduplication Managers" +msgstr "Gestionnaires de déduplication" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__reason +msgid "Deduplication Reason" +msgstr "Raison de la déduplication" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__deduplication_status +msgid "Deduplication Status" +msgstr "État de la déduplication" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__entitlement_kind__default +msgid "Default" +msgstr "Défaut" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_cycle_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "Default Cycle Manager" +msgstr "Gestionnaire de cycle par défaut" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_cycle_manager_default +msgid "Default Cycle Managers" +msgstr "Gestionnaires de cycle par défaut" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager_default +msgid "Default Deduplication Manager" +msgstr "Gestionnaire de déduplication par défaut" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +msgid "Default Eligibility Manager" +msgstr "Gestionnaire d'éligibilité par défaut" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_eligibility_manager_default +#: model:ir.ui.menu,name:g2p_programs.menu_eligibility_manager_default +msgid "Default Eligibility Managers" +msgstr "Gestionnaire d'éligibilité par défaut" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_entitlement_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +msgid "Default Entitlement Manager" +msgstr "Gestionnaire de prestation par défaut" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_entitlement_manager_default +msgid "Default Entitlement Managers" +msgstr "Gestionnaires de prestation par défaut" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_payment_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#, fuzzy +msgid "Default Payment Manager" +msgstr "Gestionnaire de programme par défaut" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_payment_manager_default +#, fuzzy +msgid "Default Payment Managers" +msgstr "Gestionnaires de programme par défaut" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_manager_default +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +msgid "Default Program Manager" +msgstr "Gestionnaire de programme par défaut" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_program_manager_default +msgid "Default Program Managers" +msgstr "Gestionnaires de programme par défaut" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__delivery_mechanism_value +msgid "Delivery Mechanism Value" +msgstr "Valeur du mécanisme de livraison" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Disbursement" +msgstr "Décaissement" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#, fuzzy +msgid "Disbursement Entry" +msgstr "Saisie du journal des décaissements" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__journal_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__journal_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__journal_id +msgid "Disbursement Journal" +msgstr "Journal des décaissements" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__disbursement_id +msgid "Disbursement Journal Entry" +msgstr "Saisie du journal des décaissements" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__display_name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__display_name +msgid "Display Name" +msgstr "Afficher un nom" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__distributed +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Distributed" +msgstr "Distribué" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__eligibility_domain +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__eligibility_domain +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__eligibility_domain +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__eligibility_domain +msgid "Domain" +msgstr "Domaine" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_fund__state__draft +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__draft +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Draft" +msgstr "Brouillon" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__dtstart +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__dtstart +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__dtstart +msgid "Dtstart" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership_duplicate__state__duplicate +msgid "Duplicate" +msgstr "Dupliquer" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__duplicated +msgid "Duplicated" +msgstr "Dupliqué" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_program_membership_duplicate +msgid "Duplicates" +msgstr "Doublons" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "ENROLLED" +msgstr "INSCRITS" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "EXITED" +msgstr "QUITTÉ" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_eligibility_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Eligibility Manager" +msgstr "Gestionnaire d'éligibilité" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__eligibility_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Eligibility Managers" +msgstr "Gestionnaires d'éligibilité" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "Eligibility check finished." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "Eligibility check of %s beneficiaries started." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__end_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "End Date" +msgstr "Date de fin" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.end_program +msgid "End Program" +msgstr "Fin du programme" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__end_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__end_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__end_type +msgid "End Type" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__ended +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__state__ended +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Ended" +msgstr "Terminé" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Enroll Eligible Registrants" +msgstr "Affilié les inscrits éligibles" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__enrolled +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__enrolled +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Enrolled" +msgstr "Inscrit" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "Enrolled Programs" +msgstr "Affilié les programmes" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#, python-format +msgid "Enrollment" +msgstr "Inscription" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__enrollment_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__enrollment_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Enrollment Date" +msgstr "Date de l'affiliation" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +msgid "Enter the Manager Name..." +msgstr "Entrez le nom du gestionnaire..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Enter the cycle name..." +msgstr "Entrez le nom du cycle..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Enter the program name..." +msgstr "Entrez le nom du programme..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Enter the reason..." +msgstr "Entrez la raison..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Enter the registrant name..." +msgstr "Entrez le nom de l'inscrit..." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/entitlement.py:0 +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#: model:ir.model,name:g2p_programs.model_g2p_entitlement +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__entitlement_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__entitlement_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Entitlement" +msgstr "Prestation" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Entitlement Cash" +msgstr "Paiement en espèces" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_entitlement_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Entitlement Manager" +msgstr "Gestionnaire de prestations" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_entitlement_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__entitlement_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Entitlement Managers" +msgstr "Gestionnaires de prestations" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Entitlement Ready." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, fuzzy, python-format +msgid "" +"Entitlement State Error! Entitlements not in 'pending validation' state:\n" +msgstr "" +"Erreur d'état d'autorisation ! Autorisations qui ne sont pas dans l'état " +"\"validation en attente\" :\n" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__entitlement_validation_group_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__entitlement_validation_group_id +msgid "Entitlement Validation Group" +msgstr "Groupe de validation des prestations" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Entitlement manager" +msgstr "Gestionnaire de prestations" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Entitlement:" +msgstr "Prestation :" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_entitlement +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__entitlement_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__entitlement_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__entitlement_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__entitlement_ids +#: model:ir.ui.menu,name:g2p_programs.g2p_program_entitlement_root +#: model:ir.ui.menu,name:g2p_programs.menu_entitlement +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Entitlements" +msgstr "Prestations" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements Cancelled." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements Set to Pending Validation." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements Validated and Approved." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Entitlements are validated and approved." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__exit_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Exit Date" +msgstr "Date de sortie" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__exited +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__exited +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Exited" +msgstr "Sorti" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__expired +msgid "Expired" +msgstr "Expiré" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__external_batch_ref +msgid "External Batch Reference #" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "FILTER:" +msgstr "FILTRE :" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__status__failed +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Failed" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Failed Amount" +msgstr "Montant initial" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_failed_amount +msgid "Failed Amount Statistics" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Failed Transactions" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_failed_transactions +msgid "Failed Transactions Statistics" +msgstr "" + +#. module: g2p_programs +#: model:res.groups,name:g2p_programs.g2p_finance_validator +msgid "Finance Validator" +msgstr "Validateur financier" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__1 +msgid "First" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_follower_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_follower_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_follower_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_follower_ids +msgid "Followers" +msgstr "Abonnés" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_partner_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_partner_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_partner_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_partner_ids +msgid "Followers (Partners)" +msgstr "Abonnés (Partenaires)" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_type_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_type_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__activity_type_icon +#, fuzzy +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icône géniale de police, par exemple fa-tâches" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__4 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__4 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__4 +msgid "Fourth" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__fri +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__fri +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__fri +msgid "Fri" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_wizard__target_type__group +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__target_type__group +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__target_type__group +msgid "Group" +msgstr "Groupe" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.notification_manager_sms_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_batch_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Group By" +msgstr "Groupé par" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__has_message +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__has_message +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__has_message +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__has_message +msgid "Has Message" +msgstr "A un message" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__have_members +msgid "Have Beneficiaries" +msgstr "Avoir des bénéficiaires" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__id +msgid "ID" +msgstr "ID" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +msgid "ID Deduplication Elibility Manager" +msgstr "Gestionnaire d'Eligibilité de Déduplication d'ID" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager_id_dedup +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +msgid "ID Deduplication Manager" +msgstr "Gestionnaire de Déduplication d'ID" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_deduplication_manager_id_dedup +#: model:ir.ui.menu,name:g2p_programs.menu_deduplication_manager_id_dedup +msgid "ID Deduplication Managers" +msgstr "Gestionnaires de Déduplication d'ID" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager_id_dedup +msgid "ID Document Deduplication Eligibility" +msgstr "Eligibilité à la déduplication des documents d'ID" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_eligibility_manager_id_dedup +#: model:ir.ui.menu,name:g2p_programs.menu_eligibility_manager_id_dedup +msgid "ID Document Eligibility Managers" +msgstr "Gestionnaires d'éligibilité des documents d'ID" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_exception_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_exception_icon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_icon +msgid "Icon" +msgstr "Icône" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_exception_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_exception_icon +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icône pour indiquer une activité d'exception." + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_unread +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_unread +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_unread +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_needaction +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_unread +msgid "If checked, new messages require your attention." +msgstr "" +"Si cette case est cochée, de nouveaux messages nécessitent votre attention." + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_has_sms_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_has_sms_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_has_sms_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_has_error +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" +"Si cette case est cochée, certains messages présentent une erreur de " +"livraison." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__import_beneficiaries +msgid "Import Beneficiaries" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__state__step2 +msgid "Import Registrants" +msgstr "Importer des inscrits" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/eligibility_manager.py:0 +#, python-format +msgid "Import finished." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Import of %s beneficiaries started." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Importing beneficiaries." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_wizard__target_type__individual +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program__target_type__individual +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__target_type__individual +msgid "Individual" +msgstr "Individu" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__initial_amount +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__initial_amount +msgid "Initial Amount" +msgstr "Montant initial" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__internal_batch_ref +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__name +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_payments_batch_wizard_form_view +msgid "Internal Batch Reference #" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__name +msgid "Internal Reference #" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__interval +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__interval +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__interval +msgid "Interval" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_is_follower +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_is_follower +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_is_follower +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_is_follower +msgid "Is Follower" +msgstr "Est Abonné" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status_is_final +msgid "Is final payment status" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__issuance_date +msgid "Issuance Date" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__state__issued +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +msgid "Issued" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Issued Amount" +msgstr "Montant" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_issued_amount +msgid "Issued Amount Statistics" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Issued Transaction" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_issued_transactions +msgid "Issued Transaction Statistics" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_queue_job_channel +msgid "Job Channels" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_job_relate_mixin +msgid "Job Relate Mixin" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_account_journal +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Journal" +msgstr "Journal" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__account_move_id +msgid "Journal Entry" +msgstr "Entrée de journal" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.menu_account_journal_conf +msgid "Journals" +msgstr "Journaux" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__-1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__-1 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__-1 +msgid "Last" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__last_deduplication +msgid "Last Deduplication Date" +msgstr "Date de la dernière déduplication" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager____last_update +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default____last_update +msgid "Last Modified on" +msgstr "Modification le" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__write_uid +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__write_uid +msgid "Last Updated by" +msgstr "Mise à jour par" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_payments_batch_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__write_date +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__write_date +msgid "Last Updated on" +msgstr "Mise à jour le" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_manager_default__rrule_type +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle_recurrence_mixin__rrule_type +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__rrule_type +msgid "Let the event automatically repeat at that interval" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_batch +msgid "List of payment transactions generated from entitlements." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__locked +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__locked +msgid "Locked" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__locked_reason +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__locked_reason +msgid "Locked Reason" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_main_attachment_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_main_attachment_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_main_attachment_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_main_attachment_id +msgid "Main Attachment" +msgstr "Pièce jointe principale" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_manager_mixin__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__entitlement_kind +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__manager_ref_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__manager_ref_id +msgid "Manager" +msgstr "Gestionnaire" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_manager_source_mixin +msgid "Manager Data Source Mixin" +msgstr "Mélange de sources de données du gestionnaire" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_manager_mixin__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__manager_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__manager_id +msgid "Manager ID" +msgstr "ID du gestionnaire" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_manager_mixin +msgid "Manager Mixin" +msgstr "Mélange de gestionnaire" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_cycle_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_deduplication_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_entitlement_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_notification_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_payment_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__name +msgid "Manager Name" +msgstr "Nom du gestionnaire" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_manager_menu_root +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Managers" +msgstr "Gestionnaires" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__max_individual_in_group +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__max_individual_in_group +msgid "Maximum number of individual in group" +msgstr "Nombre maximum d'individus dans le groupe" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_has_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_has_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_has_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_has_error +msgid "Message Delivery error" +msgstr "Erreur de livraison du message" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_ids +msgid "Messages" +msgstr "Messages" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__mon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__mon +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__mon +msgid "Mon" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__month_by +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__month_by +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__month_by +msgid "Month By" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__monthly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__monthly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__monthly +msgid "Months" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_multi_entitlement_approval +msgid "Multi Entitlement Approval" +msgstr "Approbation de plusieurs prestations" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_multi_entitlement_approval_wizard +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__wizard_id +msgid "Multi Entitlement Approval Wizard" +msgstr "Assistant d'approbation de plusieurs droits" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__my_activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__my_activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Date limite de mon activité" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__name +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__name +msgid "Name" +msgstr "Nom" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +msgid "Name:" +msgstr "Nom :" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__new +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__new +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__new +msgid "New" +msgstr "Nouveau" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "New cycle %s created." +msgstr "Nouveau cycle %s créé." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Next" +msgstr "Prochain" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_calendar_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_calendar_event_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_calendar_event_id +msgid "Next Activity Calendar Event" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_date_deadline +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Date limite de la prochaine activité" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_summary +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_summary +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_summary +msgid "Next Activity Summary" +msgstr "Résumé de l'activité suivante" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_type_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_type_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_type_id +msgid "Next Activity Type" +msgstr "Type d'activité suivant" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__import_beneficiaries__no +msgid "No" +msgstr "Non" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "No Approved Entitlements Selected" +msgstr "Aucune prestations approuvées sélectionnées" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "No Deduplication Manager defined." +msgstr "Aucun gestionnaire de déduplication défini." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/program_manager.py:0 +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "No Eligibility Manager defined." +msgstr "Aucun gestionnaire d'éligibilité défini." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "No Program Manager defined." +msgstr "Aucun gestionnaire de programme défini." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "No beneficiaries to import." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership_duplicate__state__not_duplicate +msgid "Not Duplicate" +msgstr "Non dupliqué" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__not_eligible +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__not_eligible +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Not Eligible" +msgstr "Non Eligible" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Notification Manager" +msgstr "Gestionnaire de notifications" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__notification_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Notification Managers" +msgstr "Gestionnaire de notifications" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Notify Registrants" +msgstr "Notifier les inscrits" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__number_of_cycles +msgid "Number Of Cycles" +msgstr "Nombre de cycles" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_needaction_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_needaction_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_needaction_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_needaction_counter +msgid "Number of Actions" +msgstr "Nombre d'actions" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_has_error_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_has_error_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_has_error_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_has_error_counter +msgid "Number of errors" +msgstr "Nombre d'erreurs" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_needaction_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_needaction_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_needaction_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "Nombre de messages nécessitant une action" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_has_error_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_has_error_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_has_error_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Nombre de messages avec erreur de livraison" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_unread_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_unread_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__message_unread_counter +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__message_unread_counter +msgid "Number of unread messages" +msgstr "Nombre de messages non lus" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_assign_program_registrants__state__okay +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_multi_entitlement_approval__state__okay +msgid "Okay" +msgstr "D'accord" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__on_cycle_ended_template +msgid "On Cycle Ended Template" +msgstr "Modèle à la fin du cycle" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__on_cycle_started_template +msgid "On Cycle Started Template" +msgstr "Modèle de démarrage du cycle" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__on_enrolled_in_program_template +msgid "On Enrolled In Program Template" +msgstr "Sur inscrit au modèle de programme" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, fuzzy, python-format +msgid "Only 'to approve' cycles can be approved." +msgstr "Seuls les cycles « à approuver » peuvent être approuvés." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "Only cancelled program funds can be reset to draft." +msgstr "" +"Seuls les fonds de programme annulés peuvent être réinitialisés en brouillon." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/entitlement.py:0 +#, python-format +msgid "Only draft entitlements are allowed to be deleted" +msgstr "Seuls les brouillons de droits peuvent être supprimés" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "Only draft program funds can be cancelled." +msgstr "Seuls les projets de fonds du programme peuvent être annulés." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "Only draft program funds can be posted." +msgstr "Seuls les brouillons de fonds du programme peuvent être posté." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Ony 'active' programs can be ended." +msgstr "Seuls les programmes \"actifs\" peuvent être arrêtés." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#, python-format +msgid "Ony 'draft' cycles can be set for approval." +msgstr "" +"Seuls les cycles de « brouillon » peuvent être définis pour approbation." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Ony 'ended' programs can be re-activated." +msgstr "Seuls les programmes « terminés » peuvent être réactivés." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#, python-format +msgid "Ony 'to approve' cycles can be reset to draft." +msgstr "" +"Seuls les cycles « à approuver » peuvent être réinitialisés en brouillon." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "PAUSED" +msgstr "EN PAUSE" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__status__paid +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Paid" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Paid Amount" +msgstr "Montant" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_paid_amount +msgid "Paid Amount Statistics" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Paid Transactions" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_paid_transactions +msgid "Paid Transactions Statistics" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/queue_job_channel.py:0 +#, python-format +msgid "Parent channel required." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_membership__state__paused +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__state__paused +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Paused" +msgstr "En pause" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#: model:ir.model,name:g2p_programs.model_g2p_payment +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#, python-format +msgid "Payment" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_payment_batch +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__batch_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +msgid "Payment Batch" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__payment_batch_ids +#: model:ir.ui.menu,name:g2p_programs.menu_payment_batch +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Payment Batches" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__payment_datetime +msgid "Payment Datetime" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__payment_fee +msgid "Payment Fee" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_payment_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Payment Manager" +msgstr "Gestionnaire de base" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_payment_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__payment_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Payment Managers" +msgstr "Gestionnaires de programme" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Payment Status" +msgstr "Statut" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment +#: model_terms:ir.actions.act_window,help:g2p_programs.action_payment_batch +msgid "Payment Transactions" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/cycle.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_payment +#: model:ir.actions.act_window,name:g2p_programs.action_payment_batch +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__payment_ids +#: model:ir.ui.menu,name:g2p_programs.menu_payment +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Payments" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__pending_validation +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Pending Validation" +msgstr "Validation en attente" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager_phone_number +msgid "Phone Number Deduplication Eligibility" +msgstr "Eligibilité à la déduplication des numéros de téléphone" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +msgid "Phone Number Deduplication Eligibility Manager" +msgstr "" +"Gestionnaire d'admissibilité à la déduplication des numéros de téléphone" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_deduplication_manager_phone_number +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +msgid "Phone Number Deduplication Manager" +msgstr "Gestionnaire de déduplication des numéros de téléphone" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_deduplication_manager_phone_number +#: model:ir.ui.menu,name:g2p_programs.menu_deduplication_manager_phone_number +msgid "Phone Number Deduplication Managers" +msgstr "Gestionnaires de déduplication des numéros de téléphone" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_eligibility_manager_phone_number +#: model:ir.ui.menu,name:g2p_programs.menu_eligibility_manager_phone_number +msgid "Phone Number Eligibility Managers" +msgstr "Gestionnaires d'éligibilité des numéros de téléphone" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Post" +msgstr "Poste" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_fund__state__posted +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +msgid "Posted" +msgstr "Posté" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Prepare Entitlement" +msgstr "Préparer les prestations" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#, fuzzy +msgid "Prepare Payments" +msgstr "Préparer les prestations" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Prepare entitlement for %s beneficiaries started." +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "Prepare entitlement for beneficiaries." +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.report,name:g2p_programs.action_print_entitlement +msgid "Print Vouchers" +msgstr "Imprimer des coupons" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_beneficiary +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_prog_benf +msgid "Process entitlements to automatically post the journal entries here." +msgstr "" +"Traitez les autorisations pour publier automatiquement les écritures de " +"journal ici." + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__processing +msgid "Processing" +msgstr "Traitement" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#: model:ir.model,name:g2p_programs.model_g2p_program +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_cycle_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_deduplication_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_entitlement_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_notification_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_base_program_payment_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_phone_number__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_eligibility_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_default__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_id_dedup__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_manager_phone_number__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_notification_manager_sms__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager__program_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_payment_manager_default__program_id +#: model_terms:ir.ui.view,arch_db:g2p_programs.assign_to_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_id_dedup_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_phone_number_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.notification_manager_sms_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_manager_default_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, python-format +msgid "Program" +msgstr "Programme" + +#. module: g2p_programs +#: model:res.groups,name:g2p_programs.g2p_program_cycle_approver +msgid "Program Cycle Approver" +msgstr "Approbateur du cycle de programme" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +#, python-format +msgid "Program Fund" +msgstr "Fond du programme" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_fund +msgid "Program Fund Entries" +msgstr "Entrées de fonds du programme" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_fund_report +#: model:ir.model,name:g2p_programs.model_g2p_program_fund_report_view +#: model:ir.ui.menu,name:g2p_programs.menu_program_fund_report +msgid "Program Fund Report" +msgstr "Rapport sur le fonds du programme" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_fund +#: model:ir.ui.menu,name:g2p_programs.menu_program_fund +msgid "Program Funds" +msgstr "Fonds du programme" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__journal_id +#, fuzzy +msgid "Program Journal" +msgstr "Fond du programme" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_manager +#: model:res.groups,name:g2p_programs.g2p_program_manager +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_form +msgid "Program Manager" +msgstr "Gestionnaire de programme" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_manager_default +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__program_managers +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Program Managers" +msgstr "Gestionnaires de programme" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Program Membership" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Program Membership Duplicate" +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_duplicate +msgid "Program Membership duplicate" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__program_membership_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_partner__program_membership_ids +#: model:ir.model.fields,field_description:g2p_programs.field_res_users__program_membership_ids +msgid "Program Memberships" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__name +msgid "Program Name" +msgstr "Nom du programme" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_notification_manager +msgid "Program Notification Manager" +msgstr "Gestionnaire de notification de programme" + +#. module: g2p_programs +#: model:res.groups,name:g2p_programs.g2p_program_validator +msgid "Program Validator" +msgstr "Validateur de programme" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Program:" +msgstr "Programme :" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Program: %(prg)s, Beneficiary: %(partner)s.\n" +msgstr "Programme : %(prg)s, Bénéficiaire : %(partner)s.\n" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/create_program_wizard.py:0 +#: model:ir.actions.act_window,name:g2p_programs.action_program_list +#: model:ir.ui.menu,name:g2p_programs.g2p_program_menu_root +#: model:ir.ui.menu,name:g2p_programs.menu_program_list +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_group_ext_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_registrant_ext_form +#, python-format +msgid "Programs" +msgstr "Programmes" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_membership +msgid "Programs Membership" +msgstr "" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_program_membership_duplicate +msgid "Programs Membership Duplicate" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/programs.py:0 +#, python-format +msgid "Project" +msgstr "Projet" + +#. module: g2p_programs +#: model:ir.actions.server,name:g2p_programs.reactivate_program +msgid "Re-activate Program" +msgstr "Réactiver le programme" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_tree +msgid "Reason" +msgstr "Raison" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Reason:" +msgstr "Raison :" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__state__reconciled +msgid "Reconciled" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__reconciliation_managers +msgid "Reconciliation Managers" +msgstr "Gestionnaires de réconciliation" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__cycle_duration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__rrule_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__rrule_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__cycle_duration +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__rrule_type +msgid "Recurrence" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rdpd2ben +msgid "Redeemed/Paid to Beneficiary" +msgstr "Remboursé/Versé au bénéficiaire" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__name +msgid "Reference Number" +msgstr "Numéro de réference" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Reference Number:" +msgstr "Numéro de référence :" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Refresh" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__partner_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__partner_id +msgid "Registrant" +msgstr "Inscrit" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_assign_program_registrants +msgid "Registrant Assign to Program" +msgstr "Inscrit assigné au programme" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "Registrant:" +msgstr "Inscrit :" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rejected2 +msgid "Rejected: Beneficiary account does not exist" +msgstr "Rejeté : le compte bénéficiaire n'existe pas" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rejected1 +msgid "Rejected: Beneficiary didn't want the entitlement" +msgstr "Rejeté : le bénéficiaire ne voulait pas la prestation" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__rejected3 +msgid "Rejected: Other reason" +msgstr "Rejeté : autre raison" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__remarks +msgid "Remarks" +msgstr "Remarques" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__until +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__until +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__until +msgid "Repeat Until" +msgstr "" + +#. module: g2p_programs +#: model:ir.ui.menu,name:g2p_programs.g2p_accounting_reports_menu_root +msgid "Reports" +msgstr "Rapports" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "Reset to Draft" +msgstr "Réinitialiser au brouillon" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__activity_user_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__activity_user_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__activity_user_id +msgid "Responsible User" +msgstr "Utilisateur responsable" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__rrule +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__rrule +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__rrule +msgid "Rrule" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_has_sms_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_has_sms_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_has_sms_error +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_has_sms_error +msgid "SMS Delivery error" +msgstr "Erreur de livraison SMS" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "SMS Notification Manager" +msgstr "Gestionnaire de notifications SMS" + +#. module: g2p_programs +#: model:ir.actions.act_window,name:g2p_programs.action_notification_manager_sms +#: model:ir.ui.menu,name:g2p_programs.menu_notification_manager_sms +msgid "SMS Notification Managers" +msgstr "Gestionnaires de notifications SMS" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_notification_manager_sms +#: model:ir.model.fields,field_description:g2p_programs.field_sms_template__g2p_sms_id +msgid "SMS Program Notification Manager" +msgstr "Gestionnaire de notification de programme SMS" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_sms_template +msgid "SMS Templates" +msgstr "Modèles de SMS" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__sat +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__sat +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__sat +msgid "Sat" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +msgid "Search Cycle Memberships" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Search Cycles" +msgstr "Cycles de recherche" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_manager_default_filter +msgid "Search Default Cycle Manager" +msgstr "Rechercher le gestionnaire de cycles par défaut" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_manager_default_filter +msgid "Search Default Entitlement Manager" +msgstr "Rechercher le gestionnaire de prestations par défaut" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_manager_default_filter +#, fuzzy +msgid "Search Default Payment Manager" +msgstr "Rechercher le gestionnaire de programme par défaut" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_manager_default_filter +msgid "Search Default Program Manager" +msgstr "Rechercher le gestionnaire de programme par défaut" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_default_filter +msgid "Search Eligibility Manager" +msgstr "Gestionnaire d'éligibilité à la recherche" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Search Entitlements" +msgstr "Prestations de recherche" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_id_dedup_filter +msgid "Search ID Deduplication Eligibility Managers" +msgstr "Gestionnaires d'éligibilité à la déduplication d'ID de recherche" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_id_dedup_filter +msgid "Search ID Deduplication Managers" +msgstr "Gestionnaires de déduplication d'ID de recherche" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_batch_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#, fuzzy +msgid "Search Payments" +msgstr "Rechercher des programmes" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.eligibility_manager_phone_number_filter +msgid "Search Phone Number Deduplication Eligibility Managers" +msgstr "" +"Rechercher des gestionnaires d'éligibilité à la déduplication des numéros de " +"téléphone" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.deduplication_manager_phone_number_filter +msgid "Search Phone Number Deduplication Managers" +msgstr "Rechercher des gestionnaires de déduplication de numéros de téléphone" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_report_filter +msgid "Search Program Fund Report" +msgstr "Rechercher un rapport sur les fonds du programme" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +msgid "Search Program Funds" +msgstr "Rechercher des fonds de programme" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +msgid "Search Program Memberships" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_list_filter +msgid "Search Programs" +msgstr "Rechercher des programmes" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.notification_manager_sms_filter +msgid "Search SMS Notification Manager" +msgstr "Rechercher le gestionnaire de notifications par SMS" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__2 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__2 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__2 +msgid "Second" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_deduplication_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_id_dedup_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_eligibility_manager_phone_number_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_manager_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_default_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_manager_form +msgid "Select a program..." +msgstr "Sélectionnez un programme..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_form +msgid "Send Payment" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +msgid "Send Payments" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_payment__state__sent +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +msgid "Sent" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Sent Amount" +msgstr "Montant initial" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_sent_amount +msgid "Sent Amount Statistics" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Sent Transactions" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_sent_transactions +msgid "Sent Transactions Statistics" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +msgid "Service Fee Entry" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__service_fee_disbursement_id +#, fuzzy +msgid "Service Fee Journal Entry" +msgstr "Entrée de journal" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__state__step1 +msgid "Set Defaults" +msgstr "Définir les valeurs par défaut" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Set as Ended" +msgstr "Définir comme terminé" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Set entitlements to pending validation for cycle." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__transfer_fee_amt +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_amt +msgid "Set fixed transfer fee amount" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Setting %s entitlements to pending validation has started." +msgstr "" + +#. module: g2p_programs +#: model:ir.model,name:g2p_programs.model_g2p_program_membership_manager_default +msgid "Simple Eligibility" +msgstr "Eligibilité simple" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund_report_view__name +msgid "Source Document" +msgstr "Documents sources" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__start_date +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +msgid "Start Date" +msgstr "Date de début" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_membership__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__state +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.payment_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_fund_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_tree +msgid "State" +msgstr "État" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_payment_batch_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +#, fuzzy +msgid "Statistics" +msgstr "Statut" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment_batch__stats_datetime +#, fuzzy +msgid "Statistics Date/Time" +msgstr "Date de début" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_registrants__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_multi_entitlement_approval__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__state +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__state +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_group_ext_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_tree +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_registrant_ext_form +msgid "Status" +msgstr "Statut" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status_datetime +#, fuzzy +msgid "Status Datetime" +msgstr "Date de début" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_state +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_state +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__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 "" +"Statut basé sur les activités \n" +"En retard : la date d'échéance est déjà dépassée \n" +"Aujourd'hui : la date de l'activité est aujourd'hui \n" +"Planifiée : activités futures." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_duplicate_form +msgid "Status:" +msgstr "Statut :" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__sun +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__sun +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__sun +msgid "Sun" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_deduplication_manager_id_dedup__supported_id_document_types +msgid "Supported ID Document Types" +msgstr "Types de documents d'identité supporté" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_notification_manager_sms_form +msgid "TEMPLATES" +msgstr "MODÈLES" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_assign_program_wizard__target_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__target_type +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__target_type +msgid "Target Type" +msgstr "Type de cible" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Target Type:" +msgstr "Type de cible :" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_manager_default_form +msgid "The" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/create_program_wizard.py:0 +#, python-format +msgid "" +"The 'Amount per cycle' or 'Amount per individual in group' must be filled-up " +"for the default entitlement manager." +msgstr "" +"Le \"Montant par cycle\" ou \"Montant par individu dans le groupe\" doit " +"être renseigné pour le gestionnaire de prestations par défaut." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "The Cycle is not in draft mode" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_entitlement__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_multi_entitlement_approval__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_payment__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__currency_id +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_payment_manager_default__currency_id +msgid "The currency used to enter statement" +msgstr "La devise utilisée pour saisir le relevé" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "The cycle approver group is not specified!" +msgstr "Le groupe d'approbateurs du cycle n'est pas spécifié !" + +#. module: g2p_programs +#: model:ir.model.constraint,message:g2p_programs.constraint_g2p_entitlement_unique_entitlement_code +msgid "The entitlement code must be unique." +msgstr "Le code d'attribution doit être unique." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "" +"The fund for the program: %(program)s [%(fund).2f] is insufficient for the " +"entitlement: %(entitlement)s" +msgstr "" +"Le fonds pour le programme : %(program)s [%(fund).2f] est insuffisant pour " +"la prestation : %(entitlement)s" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_beneficiary +msgid "There are no Beneficiary Fund Journal Entries Entered!" +msgstr "Il n'y a pas d'entrées de journal de fonds de bénéficiaire saisies !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_prog_benf +msgid "There are no Program Beneficiary Fund Journal Entries Entered!" +msgstr "" +"Il n'y a pas d'entrées de journal du fonds du bénéficiaire du programme " +"saisies !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_fund_report +msgid "There are no Program Fund Entries based on the current filter!" +msgstr "" +"Il n'y a pas d'entrées de fonds de programme basées sur le filtre actuel !" + +#. module: g2p_programs +#: model_terms:ir.actions.act_window,help:g2p_programs.action_program_fund +msgid "There are no Program Funds Entered!" +msgstr "Il n'y a pas de fonds de programme entrés !" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/payment_manager.py:0 +#, fuzzy, python-format +msgid "There are no new payments issued!" +msgstr "Il n'y a pas d'inscrits sélectionnés !" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/assign_payments_batch_wizard.py:0 +#, fuzzy, python-format +msgid "There are no selected payments!" +msgstr "Il n'y a pas d'inscrits sélectionnés !" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/assign_to_program_wizard.py:0 +#, python-format +msgid "There are no selected registrants!" +msgstr "Il n'y a pas d'inscrits sélectionnés !" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__byday__3 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__byday__3 +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__byday__3 +msgid "Third" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "This fund is already posted and cannot be deleted." +msgstr "Ce fonds est déjà affiché et ne peut pas être supprimé." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/accounting/fund_management.py:0 +#, python-format +msgid "This fund is now posted!" +msgstr "Ce fonds est maintenant posté !" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form +msgid "This fund was cancelled on" +msgstr "Ce fonds a été supprimé le" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__thu +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__thu +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__thu +msgid "Thu" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__event_tz +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__event_tz +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__event_tz +msgid "Timezone" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle__state__to_approve +#: model_terms:ir.ui.view,arch_db:g2p_programs.cycle_filter +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "To Approve" +msgstr "Approuver" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__transfer_fee +#, fuzzy +msgid "Transfer Fee" +msgstr "Transféré au FSP" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__transfer_fee_amt +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_amt +msgid "Transfer Fee Amount" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__transfer_fee_pct +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_pct +#, fuzzy +msgid "Transfer Fee(%)" +msgstr "Transféré au FSP" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_create_wizard__transfer_fee_pct +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_entitlement_manager_default__transfer_fee_pct +msgid "Transfer fee will be a percentage of amount" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_entitlement__state__trans2fsp +msgid "Transferred to FSP" +msgstr "Transféré au FSP" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__tue +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__tue +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__tue +msgid "Tue" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__activity_exception_decoration +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__activity_exception_decoration +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Type d'activité d'exception enregistrée." + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_unread +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_unread +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_unread +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_unread +msgid "Unread Messages" +msgstr "Messages non lus" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__message_unread_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__message_unread_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__message_unread_counter +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__message_unread_counter +msgid "Unread Messages Counter" +msgstr "Compteur de messages non lus" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__valid_from +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Valid From" +msgstr "Valide à partir de" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Valid From:" +msgstr "Valide à partir de :" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "Valid To:" +msgstr "Valable pour :" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__valid_until +#: model_terms:ir.ui.view,arch_db:g2p_programs.entitlement_filter +msgid "Valid Until" +msgstr "Valable jusque" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Validate %s entitlements started." +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Validate Entitlements" +msgstr "" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/entitlement_manager.py:0 +#, python-format +msgid "Validate and approve entitlements for cycle." +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__verified +msgid "Verified" +msgstr "Vérifié" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form +msgid "Verify Eligibility" +msgstr "Vérifier l'éligibilité" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "Verify eligibility" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle__website_message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program__website_message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_fund__website_message_ids +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership_duplicate__website_message_ids +msgid "Website Messages" +msgstr "Messagerie du site Web" + +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__website_message_ids +#: model:ir.model.fields,help:g2p_programs.field_g2p_program__website_message_ids +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_fund__website_message_ids +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership_duplicate__website_message_ids +msgid "Website communication history" +msgstr "Historique des communications du site Web" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__wed +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__wed +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__wed +msgid "Wed" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__weekday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__weekday +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_create_wizard__weekday +msgid "Weekday" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__weekly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__weekly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__weekly +msgid "Weeks" +msgstr "" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.create_program_wizard_form_view +msgid "Would you like to import the matching registrants to this program?" +msgstr "" +"Souhaitez-vous importer les inscrits correspondants dans ce programme ?" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_manager_default__rrule_type__yearly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_cycle_recurrence_mixin__rrule_type__yearly +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__rrule_type__yearly +msgid "Years" +msgstr "" + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_create_wizard__import_beneficiaries__yes +msgid "Yes" +msgstr "Oui" + +#. module: g2p_programs +#: code:addons/g2p_programs/models/managers/cycle_manager.py:0 +#, python-format +msgid "You are not allowed to approve this cycle!" +msgstr "Vous n'êtes pas autorisé à approuver ce cycle !" + +#. module: g2p_programs +#: code:addons/g2p_programs/wizard/multi_entitlement_approval_wizard.py:0 +#, python-format +msgid "You can approve only entitlements from approved cycles." +msgstr "Vous ne pouvez approuver que les droits des cycles approuvés." + +#. module: g2p_programs +#: code:addons/g2p_programs/models/entitlement.py:0 +#, python-format +msgid "You have no access in the Entitlement List View" +msgstr "Vous n'avez pas accès à la vue de la liste des prestations" + +#. module: g2p_programs +#. openerp-web +#: code:addons/g2p_programs/static/src/js/create_program.js:0 +#, python-format +msgid "action_invoices" +msgstr "action_invoices" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.print_entitlement_card +msgid "barcode" +msgstr "code à barre" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "button." +msgstr "bouton." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_form +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "code..." +msgstr "code..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_membership_form +msgid "cycle..." +msgstr "cycle..." + +#. module: g2p_programs +#: model:ir.model.fields.selection,name:g2p_programs.selection__g2p_program_membership__deduplication_status__duplicated +msgid "duplicated" +msgstr "dupliqué" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form +msgid "program..." +msgstr "programme..." + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "section of the" +msgstr "partie de la" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "" +"tab.\n" +" You can also create a new journal by clicking this" +msgstr "" +"tab. \n" +" Vous pouvez également créer un nouveau journal " +"en cliquant sur ce" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_report_tree +msgid "total_amount" +msgstr "montant_total" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_tree +msgid "total_amount_per_cycle" +msgstr "montant_total_par_cycle" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_entitlement_manager_default_tree +msgid "total_amount_per_individual_in_group" +msgstr "montant_total_par_individu_dans_le_groupe" + +#. module: g2p_programs +#: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form +msgid "| Company:" +msgstr "| Compagnie :" + +#~ msgid "Cycle Duration" +#~ msgstr "Durée du cycle" + +#~ msgid "Generate Beneficiaries" +#~ msgstr "Générer des bénéficiaires" + +#, python-format +#~ msgid "No Beneficiaries enrolled." +#~ msgstr "Aucun bénéficiaire affilié." + +#, python-format +#~ msgid "The Cycle is not in Draft Mode" +#~ msgstr "Le cycle n'est pas en mode brouillon" + +#~ msgid "Set as Distributed" +#~ msgstr "Définir comme distribué" diff --git a/g2p_programs/i18n/g2p_programs.pot b/g2p_programs/i18n/g2p_programs.pot index af6dec5ba..f0aaee3d8 100644 --- a/g2p_programs/i18n/g2p_programs.pot +++ b/g2p_programs/i18n/g2p_programs.pot @@ -24,7 +24,6 @@ msgstr "" #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__entitlements_count #: model:ir.model.fields,field_description:g2p_programs.field_res_partner__entitlements_count #: model:ir.model.fields,field_description:g2p_programs.field_res_users__entitlements_count -#: model:ir.model.fields,field_description:g2p_programs.field_spp_attendance_subscriber__entitlements_count msgid "# Cash Entitlements" msgstr "" @@ -33,7 +32,6 @@ msgstr "" #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__cycles_count #: model:ir.model.fields,field_description:g2p_programs.field_res_partner__cycles_count #: model:ir.model.fields,field_description:g2p_programs.field_res_users__cycles_count -#: model:ir.model.fields,field_description:g2p_programs.field_spp_attendance_subscriber__cycles_count #: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_tree msgid "# Cycles" msgstr "" @@ -86,7 +84,6 @@ msgstr "" #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__program_membership_count #: model:ir.model.fields,field_description:g2p_programs.field_res_partner__program_membership_count #: model:ir.model.fields,field_description:g2p_programs.field_res_users__program_membership_count -#: model:ir.model.fields,field_description:g2p_programs.field_spp_attendance_subscriber__program_membership_count msgid "# Program Memberships" msgstr "" @@ -150,11 +147,6 @@ msgstr "" msgid "'Configuration'" msgstr "" -#. module: g2p_programs -#: model:ir.actions.report,print_report_name:g2p_programs.action_print_entitlement -msgid "'Entitlement Card'" -msgstr "" - #. module: g2p_programs #: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__type msgid "" @@ -1287,11 +1279,6 @@ msgstr "" msgid "Conflict" msgstr "" -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__consent_ids -msgid "Consent IDS" -msgstr "" - #. module: g2p_programs #: model:ir.model,name:g2p_programs.model_res_partner #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__child_ids @@ -1584,7 +1571,6 @@ msgstr "" #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__cycle_ids #: model:ir.model.fields,field_description:g2p_programs.field_res_partner__cycle_ids #: model:ir.model.fields,field_description:g2p_programs.field_res_users__cycle_ids -#: model:ir.model.fields,field_description:g2p_programs.field_spp_attendance_subscriber__cycle_ids msgid "Cycle Memberships" msgstr "" @@ -2306,7 +2292,6 @@ msgstr "" #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__entitlement_ids #: model:ir.model.fields,field_description:g2p_programs.field_res_partner__entitlement_ids #: model:ir.model.fields,field_description:g2p_programs.field_res_users__entitlement_ids -#: model:ir.model.fields,field_description:g2p_programs.field_spp_attendance_subscriber__entitlement_ids #: model:ir.ui.menu,name:g2p_programs.g2p_program_entitlement_root #: model:ir.ui.menu,name:g2p_programs.menu_entitlement #: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_list_form @@ -2339,11 +2324,6 @@ msgstr "" msgid "Entitlements Validated and Approved." msgstr "" -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__event_data_ids -msgid "Event Data IDs" -msgstr "" - #. module: g2p_programs #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__exit_date #: model_terms:ir.ui.view,arch_db:g2p_programs.program_membership_filter @@ -2501,7 +2481,6 @@ msgstr "" #. module: g2p_programs #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__gender -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__gender_char #: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form msgid "Gender" msgstr "" @@ -2511,26 +2490,11 @@ msgstr "" msgid "Geo Latitude" msgstr "" -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__geo_line -msgid "Geo Line" -msgstr "" - #. module: g2p_programs #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__partner_longitude msgid "Geo Longitude" msgstr "" -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__geo_point -msgid "Geo Point" -msgstr "" - -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__geo_polygon_field -msgid "Geo Polygon Field" -msgstr "" - #. module: g2p_programs #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__given_name msgid "Given Name" @@ -2701,16 +2665,6 @@ msgstr "" msgid "Icon to indicate an exception activity." msgstr "" -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__id_document_details -msgid "Id Document Details" -msgstr "" - -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__identifier -msgid "Identifier" -msgstr "" - #. module: g2p_programs #: model:ir.model.fields,help:g2p_programs.field_g2p_cycle__message_needaction #: model:ir.model.fields,help:g2p_programs.field_g2p_program__message_needaction @@ -2993,6 +2947,7 @@ msgstr "" #. module: g2p_programs #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__kind +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__kind_as_str msgid "Kind" msgstr "" @@ -3986,6 +3941,11 @@ msgstr "" msgid "Payment Managers" msgstr "" +#. module: g2p_programs +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__property_payment_method_id +msgid "Payment Method" +msgstr "" + #. module: g2p_programs #: model:ir.model.fields,field_description:g2p_programs.field_g2p_entitlement__payment_status #: model:ir.model.fields,field_description:g2p_programs.field_g2p_payment__status @@ -4110,16 +4070,6 @@ msgstr "" msgid "Place:" msgstr "" -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__pos_order_ids -msgid "Pos Order" -msgstr "" - -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__pos_order_count -msgid "Pos Order Count" -msgstr "" - #. module: g2p_programs #: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_fund_form msgid "Post" @@ -4136,6 +4086,14 @@ msgstr "" msgid "Posted" msgstr "" +#. module: g2p_programs +#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__property_payment_method_id +msgid "" +"Preferred payment method when paying this vendor. This is used to filter " +"vendor bills by preferred payment method to register payments in mass. Use " +"cases: create bank files for batch wires, check runs." +msgstr "" + #. module: g2p_programs #: model_terms:ir.ui.view,arch_db:g2p_programs.view_cycle_form msgid "Prepare Entitlement" @@ -4219,11 +4177,6 @@ msgstr "" msgid "Print Summary" msgstr "" -#. module: g2p_programs -#: model:ir.actions.report,name:g2p_programs.action_print_entitlement -msgid "Print Vouchers" -msgstr "" - #. module: g2p_programs #: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_beneficiary #: model_terms:ir.actions.act_window,help:g2p_programs.action_account_journal_prog_benf @@ -4374,7 +4327,6 @@ msgstr "" #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__program_membership_ids #: model:ir.model.fields,field_description:g2p_programs.field_res_partner__program_membership_ids #: model:ir.model.fields,field_description:g2p_programs.field_res_users__program_membership_ids -#: model:ir.model.fields,field_description:g2p_programs.field_spp_attendance_subscriber__program_membership_ids msgid "Program Memberships" msgstr "" @@ -4538,11 +4490,6 @@ msgstr "" msgid "Registrant IDs" msgstr "" -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__tags_ids -msgid "Registrant Tags" -msgstr "" - #. module: g2p_programs #: model_terms:ir.ui.view,arch_db:g2p_programs.view_program_membership_form msgid "Registrant is related to:" @@ -5135,11 +5082,6 @@ msgstr "" msgid "Street2" msgstr "" -#. module: g2p_programs -#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__kind_as_str -msgid "String Kind" -msgstr "" - #. module: g2p_programs #: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_manager_default__sun #: model:ir.model.fields,field_description:g2p_programs.field_g2p_cycle_recurrence_mixin__sun @@ -5169,6 +5111,7 @@ msgstr "" #. module: g2p_programs #: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__category_id +#: model:ir.model.fields,field_description:g2p_programs.field_g2p_program_membership__tags_ids msgid "Tags" msgstr "" @@ -5280,11 +5223,6 @@ msgstr "" msgid "The internal user in charge of this contact." msgstr "" -#. module: g2p_programs -#: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__pos_order_count -msgid "The number of point of sales orders related to this customer" -msgstr "" - #. module: g2p_programs #: model:ir.model.fields,help:g2p_programs.field_g2p_program_membership__has_unreconciled_entries msgid "" diff --git a/g2p_programs/models/__init__.py b/g2p_programs/models/__init__.py new file mode 100644 index 000000000..a99cbb658 --- /dev/null +++ b/g2p_programs/models/__init__.py @@ -0,0 +1,17 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +# from . import disable_edit_mixin +from . import job_relate_mixin +from . import constants +from . import entitlement +from . import duplicate +from . import cycle +from . import programs +from . import accounting +from . import managers +from . import registrant +from . import program_membership +from . import cycle_membership +from . import payment +from . import queue_job_channel +from . import res_user diff --git a/g2p_programs/models/accounting/__init__.py b/g2p_programs/models/accounting/__init__.py new file mode 100644 index 000000000..479127641 --- /dev/null +++ b/g2p_programs/models/accounting/__init__.py @@ -0,0 +1,5 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +from . import account_journal +from . import fund_management +from . import fund_report diff --git a/g2p_programs/models/accounting/account_journal.py b/g2p_programs/models/accounting/account_journal.py new file mode 100644 index 000000000..a169a842d --- /dev/null +++ b/g2p_programs/models/accounting/account_journal.py @@ -0,0 +1,10 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class AccountJournal(models.Model): + _inherit = "account.journal" + + # Custom Fields + beneficiary_disb = fields.Boolean("Beneficiary Funds") diff --git a/g2p_programs/models/accounting/fund_management.py b/g2p_programs/models/accounting/fund_management.py new file mode 100644 index 000000000..b55c67f2c --- /dev/null +++ b/g2p_programs/models/accounting/fund_management.py @@ -0,0 +1,117 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + +# , RedirectWarning, ValidationError, AccessError + + +class ProgramFundManagement(models.Model): + _name = "g2p.program.fund" + _description = "Program Fund Entries" + _inherit = ["mail.thread"] + _order = "id desc" + + # DISABLE_EDIT_DOMAIN = [("state", "=", "posted")] + + name = fields.Char("Reference Number", required=True, default="Draft") + company_id = fields.Many2one("res.company", default=lambda self: self.env.company) + program_id = fields.Many2one("g2p.program", "Program", required=True) + journal_id = fields.Many2one( + "account.journal", + "Disbursement Journal", + related="program_id.journal_id", + store=True, + ) + account_move_id = fields.Many2one("account.move", "Journal Entry") + amount = fields.Monetary(required=True, currency_field="currency_id") + currency_id = fields.Many2one( + "res.currency", + readonly=True, + related="program_id.journal_id.currency_id", + store=True, + ) + remarks = fields.Text() + date_posted = fields.Date(required=True, default=fields.Date.today) + state = fields.Selection( + [("draft", "Draft"), ("posted", "Posted"), ("cancelled", "Cancelled")], + "Status", + readonly=True, + default="draft", + ) + + @api.ondelete(at_uninstall=False) + def _unlink_fund(self): + count_posted_fund = 0 + for record in self: + if record.state == "posted": + count_posted_fund += 1 + if count_posted_fund > 0: + raise UserError(_("This fund is already posted and cannot be deleted.")) + + def post_fund(self): + for rec in self: + if rec.state == "draft": + vals = {"state": "posted", "date_posted": fields.Date.today()} + if rec.name in ("Draft", None): + vals.update( + {"name": self.env["ir.sequence"].next_by_code("program.fund.ref.num") or "NONE"} + ) + # TODO: Generate journal entry + rec.update(vals) + return { + "effect": { + "fadeout": "fast", + "message": _("This fund is now posted!"), + "type": "rainbow_man", + } + } + else: + message = _("Only draft program funds can be posted.") + kind = "danger" + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Program Fund"), + "message": message, + "sticky": False, + "type": kind, + }, + } + + def cancel_fund(self): + for rec in self: + if rec.state == "draft": + rec.update({"state": "cancelled"}) + else: + message = _("Only draft program funds can be cancelled.") + kind = "danger" + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Program Fund"), + "message": message, + "sticky": False, + "type": kind, + }, + } + + def reset_draft(self): + for rec in self: + if rec.state == "cancelled": + rec.update({"state": "draft"}) + else: + message = _("Only cancelled program funds can be reset to draft.") + kind = "danger" + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Program Fund"), + "message": message, + "sticky": False, + "type": kind, # types: success,warning,danger,info + }, + } diff --git a/g2p_programs/models/accounting/fund_report.py b/g2p_programs/models/accounting/fund_report.py new file mode 100644 index 000000000..901dc6db0 --- /dev/null +++ b/g2p_programs/models/accounting/fund_report.py @@ -0,0 +1,79 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models, tools + + +class ProgramFundReport(models.Model): + _name = "g2p.program.fund.report.view" + _description = "Program Fund Report" + _auto = False + _table = "g2p_program_fund_report_view" + + name = fields.Char("Source Document", readonly=True) + partner_id = fields.Many2one("res.partner", "Beneficiary", readonly=True) + company_id = fields.Many2one("res.company", readonly=True) + program_id = fields.Many2one("g2p.program", "Program", readonly=True) + cycle_id = fields.Many2one("g2p.cycle", "Cycle", readonly=True) + journal_id = fields.Many2one("account.journal", "Accounting Journal", readonly=True) + date_posted = fields.Date("Date", readonly=True) + amount = fields.Monetary(required=True, currency_field="currency_id", readonly=True) + currency_id = fields.Many2one("res.currency", readonly=True) + + def _select(self): + select_str = """ + WITH trans AS ( + SELECT a1.name as name, + NULL as partner_id, + a1.company_id as company_id, + a1.program_id as program_id, + NULL as cycle_id, + a1.journal_id as journal_id, + a1.date_posted as date_posted, + a1.amount as amount, + a1.currency_id as currency_id + FROM g2p_program_fund a1 + WHERE a1.state = 'posted' + + UNION ALL + + SELECT b1.code as name, + b1.partner_id as partner_id, + b1.company_id as company_id, + b3.id as program_id, + b2.id as cycle_id, + b1.journal_id as journal_id, + b5.date as date_posted, + b4.amount * -1 as amount, + b4.currency_id as currency_id + FROM g2p_entitlement b1 + LEFT JOIN g2p_cycle b2 on b2.id = b1.cycle_id + LEFT JOIN g2p_program b3 on b3.id = b2.program_id + LEFT JOIN account_payment b4 on b4.id = b1.disbursement_id + LEFT JOIN account_move b5 on b5.id = b4.move_id + WHERE b1.disbursement_id IS NOT NULL and b4.payment_type = 'outbound' + ) + + SELECT + ROW_NUMBER () OVER ( + ORDER BY date_posted) as id, + name, + partner_id, + company_id, + program_id, + cycle_id, + journal_id, + date_posted, + amount, + currency_id + FROM trans + ORDER BY date_posted + """ + return select_str + + def init(self): + tools.drop_view_if_exists(self.env.cr, self._table) + self.env.cr.execute( + f"""CREATE or REPLACE VIEW {self._table} as ( + {self._select()} + )""" + ) diff --git a/g2p_programs/models/constants.py b/g2p_programs/models/constants.py new file mode 100644 index 000000000..f402aed7d --- /dev/null +++ b/g2p_programs/models/constants.py @@ -0,0 +1,30 @@ +STATE_DRAFT = "draft" +STATE_TO_APPROVE = "to_approve" +STATE_APPROVED = "approved" +STATE_DISTRIBUTED = "distributed" +# STATE_ACTIVE = "active" +STATE_ENDED = "ended" +STATE_CANCELLED = "cancelled" + +MANAGER_ELIGIBILITY = 1 +MANAGER_CYCLE = 2 +MANAGER_PROGRAM = 3 +MANAGER_ENTITLEMENT = 4 +MANAGER_DEDUPLICATION = 5 +MANAGER_NOTIFICATION = 6 +MANAGER_PAYMENT = 7 + +MANAGER_MODELS = { + "deduplication_managers": { + "g2p.deduplication.manager": "g2p.deduplication.manager.default", + }, + "notification_managers": { + "g2p.program.notification.manager": "g2p.program.notification.manager.sms", + }, + "program_managers": { + "g2p.program.manager": "g2p.program.manager.default", + }, + "payment_managers": { + "g2p.program.payment.manager": "g2p.program.payment.manager.default", + }, +} diff --git a/g2p_programs/models/cycle.py b/g2p_programs/models/cycle.py new file mode 100644 index 000000000..5e370e795 --- /dev/null +++ b/g2p_programs/models/cycle.py @@ -0,0 +1,459 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +import json +import logging + +from lxml import etree +from num2words import num2words + +from odoo import _, api, fields, models +from odoo.exceptions import UserError, ValidationError + +from . import constants + +_logger = logging.getLogger(__name__) + + +class G2PCycle(models.Model): + _inherit = [ + "mail.thread", + "mail.activity.mixin", + "job.relate.mixin", + # "disable.edit.mixin", + ] + _name = "g2p.cycle" + _description = "Cycle" + _order = "sequence asc" + _check_company_auto = True + + STATE_DRAFT = constants.STATE_DRAFT + STATE_TO_APPROVE = constants.STATE_TO_APPROVE + STATE_APPROVED = constants.STATE_APPROVED + STATE_CANCELED = constants.STATE_CANCELLED + STATE_DISTRIBUTED = constants.STATE_DISTRIBUTED + STATE_ENDED = constants.STATE_ENDED + # DISABLE_EDIT_DOMAIN = [("state", "!=", "draft")] + + def _get_view(self, view_id=None, view_type="form", **options): + arch, view = super()._get_view(view_id, view_type, **options) + + if view_type == "form": + # FIX: 'hide_cash' context is not set when form is loaded directly + # via copy+paste URL in browser. + # Set all payment management components to invisible + # if the form was loaded directly via URL. + if "hide_cash" not in self._context: + doc = arch + modifiers = json.dumps({"invisible": True}) + + prepare_payment_button = doc.xpath("//button[@name='prepare_payment']") + prepare_payment_button[0].set("modifiers", modifiers) + + send_payment_button = doc.xpath("//button[@name='send_payment']") + send_payment_button[0].set("modifiers", modifiers) + + open_payments_form_button = doc.xpath("//button[@name='open_payments_form']") + open_payments_form_button[0].set("modifiers", modifiers) + + payment_batches_page = doc.xpath("//page[@name='payment_batches']") + payment_batches_page[0].set("modifiers", modifiers) + + arch = etree.fromstring(etree.tostring(doc, encoding="unicode")) + + return arch, view + + name = fields.Char(required=True) + company_id = fields.Many2one("res.company", default=lambda self: self.env.company) + program_id = fields.Many2one("g2p.program", "Program", required=True) + sequence = fields.Integer(required=True, readonly=True, default=1) + start_date = fields.Date(required=True) + end_date = fields.Date(required=True) + state = fields.Selection( + [ + (STATE_DRAFT, "Draft"), + (STATE_TO_APPROVE, "To Approve"), + (STATE_APPROVED, "Approved"), + (STATE_DISTRIBUTED, "Distributed"), + (STATE_CANCELED, "Canceled"), + (STATE_ENDED, "Ended"), + ], + default="draft", + ) + + cycle_membership_ids = fields.One2many("g2p.cycle.membership", "cycle_id", "Cycle Memberships") + entitlement_ids = fields.One2many("g2p.entitlement", "cycle_id", "Entitlements") + payment_batch_ids = fields.One2many("g2p.payment.batch", "cycle_id", "Payment Batches") + + # Get the auto-approve entitlement setting from the cycle manager + auto_approve_entitlements = fields.Boolean("Auto-approve entitlements") + + # Statistics + members_count = fields.Integer(string="# Beneficiaries", readonly=True, compute="_compute_members_count") + entitlements_count = fields.Integer( + string="# Entitlements", readonly=True, compute="_compute_entitlements_count" + ) + payments_count = fields.Integer(string="# Payments", readonly=True, compute="_compute_payments_count") + + # This is used to prevent any issue while some background tasks are happening + # such as importing beneficiaries + locked = fields.Boolean(default=False) + locked_reason = fields.Char() + + total_amount = fields.Float(compute="_compute_total_amount") + total_amount_in_words = fields.Char(compute="_compute_total_amount_in_words") + currency_id = fields.Many2one("res.currency", default=lambda self: self.env.company.currency_id.id) + + show_approve_entitlements_button = fields.Boolean(compute="_compute_show_approve_entitlement") + approved_date = fields.Datetime(string="Cycle Approved Date", readonly=True) + approved_by = fields.Many2one("res.users", string="Cycle Approved By", readonly=True) + + _sql_constraints = [ + ( + "unique_cycle_name_program", + "UNIQUE(name, program_id)", + "Cycle with this name already exists." "Please choose a different name.", + ) + ] + + @api.depends("entitlement_ids") + def _compute_total_amount(self): + for rec in self: + rec.total_amount = sum(entitlement.initial_amount for entitlement in rec.entitlement_ids) + + @api.depends("total_amount", "currency_id") + def _compute_total_amount_in_words(self): + for record in self: + if record.total_amount and record.currency_id: + amount_in_words = num2words(record.total_amount, lang="en").title() + record.total_amount_in_words = f"{amount_in_words} {record.currency_id.name}" + else: + record.total_amount_in_words = "" + + def _compute_members_count(self): + for rec in self: + domain = rec._get_beneficiaries_domain(["enrolled"]) + members_count = self.env["g2p.cycle.membership"].search_count(domain) + rec.update({"members_count": members_count}) + + def _compute_entitlements_count(self): + for rec in self: + entitlements_count = self.env["g2p.entitlement"].search_count([("cycle_id", "=", rec.id)]) + rec.update({"entitlements_count": entitlements_count}) + + def _compute_payments_count(self): + for rec in self: + payments_count = self.env["g2p.payment"].search_count([("cycle_id", "=", rec.id)]) + rec.update({"payments_count": payments_count}) + + @api.onchange("entitlement_ids.state") + def _compute_show_approve_entitlement(self): + for rec in self: + show_button = True + for entitlement in rec.entitlement_ids: + if entitlement.state != "approved": + show_button = False + break + rec.show_approve_entitlements_button = show_button + + @api.onchange("start_date") + def on_start_date_change(self): + self.program_id.get_manager(constants.MANAGER_CYCLE).on_start_date_change(self) + + @api.onchange("state") + def on_state_change(self): + self.program_id.get_manager(constants.MANAGER_CYCLE).on_state_change(self) + + def _get_beneficiaries_domain(self, states=None): + domain = [("cycle_id", "=", self.id)] + if states: + domain.append(("state", "in", states)) + return domain + + @api.model + def get_beneficiaries(self, state, offset=0, limit=None, order=None, count=False): + if isinstance(state, str): + state = [state] + for rec in self: + domain = rec._get_beneficiaries_domain(state) + if count: + return self.env["g2p.cycle.membership"].search_count(domain, limit=limit) + return self.env["g2p.cycle.membership"].search(domain, offset=offset, limit=limit, order=order) + + def get_entitlements( + self, + state, + entitlement_model="g2p.entitlement", + offset=0, + limit=None, + order=None, + count=False, + ): + """ + Query entitlements based on state + :param state: List of states + :param entitlement_model: String value of entitlement model to search + :param offset: Optional integer value for the ORM search offset + :param limit: Optional integer value for the ORM search limit + :param order: Optional string value for the ORM search order fields + :param count: Optional boolean for executing a search-count (if true) or search (if false: default) + :return: + """ + domain = [("cycle_id", "=", self.id)] + if state: + if isinstance(state, str): + state = [state] + domain += [("state", "in", state)] + + if count: + return self.env["g2p.cycle.membership"].search_count(domain, limit=limit) + return self.env[entitlement_model].search(domain, offset=offset, limit=limit, order=order) + + # @api.model + def copy_beneficiaries_from_program(self): + # _logger.debug("Copying beneficiaries from program, cycles: %s", cycles) + self.ensure_one() + cycle_manager = self.program_id.get_manager(constants.MANAGER_CYCLE) + if cycle_manager: + return cycle_manager.copy_beneficiaries_from_program(self) + else: + raise UserError(_("No Cycle Manager defined.")) + + def check_eligibility(self, beneficiaries=None): + cycle_manager = self.program_id.get_manager(constants.MANAGER_CYCLE) + + if cycle_manager: + cycle_manager.check_eligibility(self, beneficiaries) + else: + raise UserError(_("No Cycle Manager defined.")) + + def to_approve(self): + for rec in self: + if rec.state == self.STATE_DRAFT: + entitlement_manager = self.program_id.get_manager(constants.MANAGER_ENTITLEMENT) + if entitlement_manager: + rec.update({"state": self.STATE_TO_APPROVE}) + entitlement_manager.set_pending_validation_entitlements(self) + else: + raise UserError(_("No Entitlement Manager defined.")) + else: + message = _("Ony 'draft' cycles can be set for approval.") + kind = "danger" + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Cycle"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def reset_draft(self): + for rec in self: + if rec.state == self.STATE_TO_APPROVE: + rec.update({"state": self.STATE_DRAFT}) + else: + message = _("Ony 'to approve' cycles can be reset to draft.") + kind = "danger" + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Cycle"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def approve(self): + # 1. Make sure the user has the right to do this + # 2. Approve the cycle using the cycle manager + for rec in self: + cycle_manager = rec.program_id.get_manager(constants.MANAGER_CYCLE) + if not cycle_manager: + raise UserError(_("No Cycle Manager defined.")) + entitlement_manager = rec.program_id.get_manager(constants.MANAGER_ENTITLEMENT) + if not entitlement_manager: + raise UserError(_("No Entitlement Manager defined.")) + return cycle_manager.approve_cycle( + rec, + auto_approve=cycle_manager.auto_approve_entitlements, + entitlement_manager=entitlement_manager, + ) + + def notify_cycle_started(self): + # 1. Notify the beneficiaries using notification_manager.cycle_started() + pass + + def prepare_entitlement(self): + # 1. Prepare the entitlement of the beneficiaries using entitlement_manager.prepare_entitlements() + cycle_manager = self.program_id.get_manager(constants.MANAGER_CYCLE) + if not cycle_manager: + raise UserError(_("No Cycle Manager defined.")) + + return cycle_manager.prepare_entitlements(self) + + def prepare_payment(self): + # 1. Issue the payment of the beneficiaries using payment_manager.prepare_payments() + payment_manager = self.program_id.get_manager(constants.MANAGER_PAYMENT) + if not payment_manager: + raise UserError(_("No Payment Manager defined.")) + + return payment_manager.prepare_payments(self) + + def send_payment(self): + # 1. Send the payments using payment_manager.send_payments() + payment_manager = self.program_id.get_manager(constants.MANAGER_PAYMENT) + if not payment_manager: + raise UserError(_("No Payment Manager defined.")) + + return payment_manager.send_payments(self.payment_batch_ids) + + def mark_distributed(self): + # 1. Mark the cycle as distributed using the cycle manager + self.program_id.get_manager(constants.MANAGER_CYCLE).mark_distributed(self) + + def mark_ended(self): + # 1. Mark the cycle as ended using the cycle manager + self.program_id.get_manager(constants.MANAGER_CYCLE).mark_ended(self) + + def mark_cancelled(self): + # 1. Mark the cycle as cancelled using the cycle manager + self.program_id.get_manager(constants.MANAGER_CYCLE).mark_cancelled(self) + + def validate_entitlement(self): + # 1. Make sure the user has the right to do this + # 2. Validate the entitlement of the beneficiaries using entitlement_manager.validate_entitlements() + entitlement_manager = self.program_id.get_manager(constants.MANAGER_ENTITLEMENT) + if not entitlement_manager: + raise UserError(_("No Entitlement Manager defined.")) + + return entitlement_manager.validate_entitlements(self) + + def export_distribution_list(self): + # Not sure if this should be here. + # It could be customizable reports based on https://github.com/OCA/reporting-engine + pass + + def duplicate(self, new_start_date): + # 1. Make sure the user has the right to do this + # 2. Copy the cycle using the cycle manager + pass + + def open_cycle_form(self): + entitlement_manager = self.program_id.get_manager(constants.MANAGER_ENTITLEMENT) + payment_manager = self.program_id.get_manager(constants.MANAGER_PAYMENT) + hide_cash = False if entitlement_manager and entitlement_manager.IS_CASH_ENTITLEMENT else True + if not payment_manager: + hide_cash = True + + return { + "name": "Cycle", + "view_mode": "form", + "res_model": "g2p.cycle", + "res_id": self.id, + "view_id": self.env.ref("g2p_programs.view_cycle_form").id, + "type": "ir.actions.act_window", + "context": {"hide_cash": hide_cash}, + "target": "current", + } + + def open_members_form(self): + self.ensure_one() + + action = { + "name": _("Cycle Members"), + "type": "ir.actions.act_window", + "res_model": "g2p.cycle.membership", + "context": { + "create": False, + "default_cycle_id": self.id, + "search_default_enrolled_state": 1, + }, + "view_mode": "list,form", + "domain": [("cycle_id", "=", self.id)], + } + return action + + def open_entitlements_form(self): + entitlement_manager = self.program_id.get_manager(constants.MANAGER_ENTITLEMENT) + if entitlement_manager: + return entitlement_manager.open_entitlements_form(self) + else: + raise UserError(_("No Entitlement Manager defined.")) + + def open_payments_form(self): + self.ensure_one() + + action = { + "name": _("Payments"), + "type": "ir.actions.act_window", + "res_model": "g2p.payment", + "context": { + "create": False, + }, + "view_mode": "list,form", + "domain": [("entitlement_id", "in", self.entitlement_ids.ids)], + } + return action + + def refresh_page(self): + return { + "type": "ir.actions.client", + "tag": "reload", + } + + def _get_related_job_domain(self): + jobs = self.env["queue.job"].search([("model_name", "like", self._name)]) + related_jobs = jobs.filtered(lambda r: self in r.args[0]) + return [("id", "in", related_jobs.ids)] + + def unlink(self): + # Admin also not able to delete the cycle bcz of beneficiaries mapped + # So this function common for who are all having delete access. + + # TODO: Need to add the below logic for group based unlink options if necessary + # user = self.env.user + # group_g2p_admin = user.has_group("g2p_registry_base.group_g2p_admin") + # g2p_program_manager = user.has_group("g2p_programs.g2p_program_manager") + # if group_g2p_admin: + # return super().unlink() + + if self: + draft_records = self.filtered(lambda x: x.state == "draft") + + if draft_records: + if any( + record.entitlement_ids.filtered(lambda e: e.state == "approved") + for record in draft_records + ): + raise ValidationError( + _("A cycle for which entitlements have been approved cannot be deleted.") + ) + elif all( + record.entitlement_ids.filtered(lambda e: e.state == "draft") for record in draft_records + ): + raise ValidationError( + _("Cycle cannot be deleted when Entitlements have been added to the cycle.") + ) + elif draft_records.mapped("cycle_membership_ids"): + raise ValidationError( + _("Cycle cannot be deleted when beneficiaries are present in the cycle.") + ) + + draft_records.mapped("cycle_membership_ids").unlink() + return super().unlink() + else: + raise ValidationError(_("Once a cycle has been approved, it cannot be deleted.")) + + raise ValidationError(_("Delete only draft cycles with no approved entitlements.")) diff --git a/g2p_programs/models/cycle_membership.py b/g2p_programs/models/cycle_membership.py new file mode 100644 index 000000000..0710ff32d --- /dev/null +++ b/g2p_programs/models/cycle_membership.py @@ -0,0 +1,106 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +from odoo import _, fields, models +from odoo.exceptions import ValidationError + + +class G2PCycleMembership(models.Model): + _name = "g2p.cycle.membership" + _description = "Cycle Membership" + _order = "partner_id asc,id desc" + + partner_id = fields.Many2one("res.partner", "Registrant", help="A beneficiary", required=True, index=True) + cycle_id = fields.Many2one("g2p.cycle", "Cycle", help="A cycle", required=True, index=True) + enrollment_date = fields.Date(default=lambda self: fields.Datetime.now()) + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("enrolled", "Enrolled"), + ("paused", "Paused"), + ("exited", "Exited"), + ("not_eligible", "Not Eligible"), + ], + default="draft", + copy=False, + ) + + _sql_constraints = [ + ( + "cycle_membership_unique", + "unique (partner_id, cycle_id)", + "Beneficiary must be unique per cycle.", + ), + ] + + def _compute_display_name(self): + res = super()._compute_display_name() + for rec in self: + name = "" + if rec.cycle_id: + name += "[" + rec.cycle_id.name + "] " + if rec.partner_id: + name += rec.partner_id.name + rec.display_name = name + return res + + def open_cycle_membership_form(self): + return { + "name": "Cycle Membership", + "view_mode": "form", + "res_model": "g2p.cycle.membership", + "res_id": self.id, + "view_id": self.env.ref("g2p_programs.view_cycle_membership_form").id, + "type": "ir.actions.act_window", + "target": "new", + } + + def open_registrant_form(self): + if self.partner_id.is_group: + return { + "name": "Group Member", + "view_mode": "form", + "res_model": "res.partner", + "res_id": self.partner_id.id, + "view_id": self.env.ref("g2p_registry_group.view_groups_form").id, + "type": "ir.actions.act_window", + "target": "new", + "context": {"default_is_group": True}, + "flags": {"mode": "readonly"}, + } + else: + return { + "name": "Individual Member", + "view_mode": "form", + "res_model": "res.partner", + "res_id": self.partner_id.id, + "view_id": self.env.ref("g2p_registry_individual.view_individuals_form").id, + "type": "ir.actions.act_window", + "target": "new", + "context": {"default_is_group": False}, + "flags": {"mode": "readonly"}, + } + + def unlink(self): + if not self: + return + draft_records = self.filtered(lambda x: x.cycle_id.state == "draft") + if not draft_records: + raise ValidationError( + _("Beneficiaries can only be deleted when both the cycle and entitlement are unapproved.") + ) + + for record in draft_records: + entitlement = record.cycle_id.entitlement_ids.filtered( + lambda x: x.partner_id.id == record.partner_id.id + ) + + if entitlement: + if entitlement.state == "approved": + raise ValidationError( + _( + "Beneficiaries can only be deleted when both the cycle and" + "entitlement are unapproved." + ) + ) + entitlement.unlink() + + return super().unlink() diff --git a/g2p_programs/models/disable_edit_mixin.py b/g2p_programs/models/disable_edit_mixin.py new file mode 100644 index 000000000..14627b7ae --- /dev/null +++ b/g2p_programs/models/disable_edit_mixin.py @@ -0,0 +1,24 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +from odoo import fields, models + + +class DisableEditMixin(models.AbstractModel): + """Disable Edit Mixin.""" + + _name = "disable.edit.mixin" + _description = "Disable Edit Option" + + DISABLE_EDIT_DOMAIN = [] + + edit_css = fields.Html( + sanitize=False, + compute="_compute_css", + ) + + def _compute_css(self): + # Add your dynamic computation logic here + for rec in self: + if rec.filtered_domain(self.DISABLE_EDIT_DOMAIN): + rec.edit_css = "" + else: + rec.edit_css = False diff --git a/g2p_programs/models/duplicate.py b/g2p_programs/models/duplicate.py new file mode 100644 index 000000000..4aca507ea --- /dev/null +++ b/g2p_programs/models/duplicate.py @@ -0,0 +1,22 @@ +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class G2PDuplicateProgramMembership(models.Model): + _inherit = ["mail.thread", "mail.activity.mixin"] + _name = "g2p.program.membership.duplicate" + _description = "Program Membership duplicate" + _order = "id desc" + + beneficiary_ids = fields.Many2many("g2p.program_membership", string="Beneficiaries") + state = fields.Selection(selection=[("duplicate", "Duplicate"), ("not_duplicate", "Not Duplicate")]) + deduplication_manager_id = fields.Integer("Deduplication Manager") + reason = fields.Char("Deduplication Reason") + comment = fields.Text("Deduplication Comment") + + @api.onchange("beneficiary_ids") + def on_beneficiaries_change(self): + origin_length = len(self._origin.beneficiary_ids.ids) + new_length = len(self.beneficiary_ids.ids) + if new_length < origin_length: + raise ValidationError(_("Can't delete duplicated membership")) diff --git a/g2p_programs/models/entitlement.py b/g2p_programs/models/entitlement.py new file mode 100644 index 000000000..757b88d76 --- /dev/null +++ b/g2p_programs/models/entitlement.py @@ -0,0 +1,250 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +import logging +import random +from uuid import uuid4 + +from odoo import _, api, fields, models +from odoo.exceptions import UserError, ValidationError + +from . import constants + +_logger = logging.getLogger(__name__) + + +class G2PEntitlement(models.Model): + _name = "g2p.entitlement" + _description = "Entitlement" + _order = "partner_id asc,id desc" + _check_company_auto = True + + @api.model + def _generate_code(self): + return str(uuid4())[4:-8][3:] + + name = fields.Char(compute="_compute_name") + code = fields.Char(default=lambda x: x._generate_code(), required=True, readonly=True, copy=False) + + ern = fields.Char( + compute="_compute_generate_ern", + string="ERN", + # required=True, + readonly=True, + copy=False, + store=True, + ) + + partner_id = fields.Many2one( + "res.partner", + "Registrant", + help="A beneficiary", + required=True, + domain=[("is_registrant", "=", True)], + ) + company_id = fields.Many2one("res.company", default=lambda self: self.env.company) + + cycle_id = fields.Many2one("g2p.cycle", required=True) + program_id = fields.Many2one("g2p.program", related="cycle_id.program_id") + + valid_from = fields.Date(required=False) + valid_until = fields.Date(default=lambda self: fields.Date.add(fields.Date.today(), years=1)) + + is_cash_entitlement = fields.Boolean("Cash Entitlement", default=False) + currency_id = fields.Many2one("res.currency", readonly=True, related="journal_id.currency_id") + initial_amount = fields.Monetary(required=True, currency_field="currency_id") + transfer_fee = fields.Monetary(currency_field="currency_id", default=0.0) + balance = fields.Monetary(compute="_compute_balance") # in company currency + # TODO: implement transactions against this entitlement + + journal_id = fields.Many2one( + "account.journal", + "Disbursement Journal", + store=True, + compute="_compute_journal_id", + ) + disbursement_id = fields.Many2one("account.payment", "Disbursement Journal Entry") + service_fee_disbursement_id = fields.Many2one("account.payment", "Service Fee Journal Entry") + + date_approved = fields.Date() + state = fields.Selection( + [ + ("draft", "Draft"), + ("pending_validation", "Pending Approval"), + ("approved", "Approved"), + ("trans2FSP", "Transferred to FSP"), + ("rdpd2ben", "Redeemed/Paid to Beneficiary"), + ("rejected1", "Rejected: Beneficiary didn't want the entitlement"), + ("rejected2", "Rejected: Beneficiary account does not exist"), + ("rejected3", "Rejected: Other reason"), + ("cancelled", "Cancelled"), + ("expired", "Expired"), + ], + "Status", + default="draft", + copy=False, + ) + + payment_ids = fields.One2many("g2p.payment", "entitlement_id", string="Payments") + payment_status = fields.Selection( + [("paid", "Paid"), ("notpaid", "Not Paid")], compute="_compute_payment_status" + ) + payment_date = fields.Date(compute="_compute_payment_status") + + _sql_constraints = [ + ( + "unique_entitlement_code", + "UNIQUE(code)", + "The entitlement code must be unique.", + ), + ] + + @api.constrains("valid_from", "valid_until") + def _check_valid_dates(self): + for record in self: + if record.valid_until and record.valid_from and record.valid_until < record.valid_from: + raise ValidationError( + _('The "Valid Until" date cannot be earlier than the "Valid From" date.') + ) + + @api.model + def _get_view(self, view_id=None, view_type="form", **options): + arch, view = super()._get_view(view_id, view_type, **options) + + group_g2p_admin = self.env.user.has_group("g2p_registry_base.group_g2p_admin") + if not group_g2p_admin: + if view_type != "search": + group_g2p_registrar = self.env.user.has_group("g2p_registry_base.group_g2p_registrar") + g2p_program_validator = self.env.user.has_group("g2p_programs.g2p_program_validator") + g2p_program_manager = self.env.user.has_group("g2p_programs.g2p_program_manager") + + if not (group_g2p_registrar or g2p_program_validator or g2p_program_manager): + raise ValidationError(_("You have no access in the Entitlement List View")) + + return arch, view + + def _compute_name(self): + for record in self: + name = _("Entitlement") + initial_amount = f"{record.initial_amount:,.2f}" + if record.is_cash_entitlement: + name += " Cash [" + str(record.currency_id.symbol) + " " + initial_amount + "]" + else: + name += " (" + str(record.code) + ")" + record.name = name + + @api.depends("initial_amount") + def _compute_balance(self): + for record in self: + record.balance = record.initial_amount + + @api.depends("cycle_id.program_id.journal_id") + def _compute_journal_id(self): + for record in self: + record.journal_id = ( + record.cycle_id + and record.cycle_id.program_id + and record.cycle_id.program_id.journal_id + and record.cycle_id.program_id.journal_id.id + or None + ) + + def _compute_payment_status(self): + for rec in self: + paid_payment = None + for payment in rec.payment_ids: + if payment.status == "paid": + rec.payment_status = "paid" + paid_payment = payment + break + if not paid_payment: + rec.payment_status = "notpaid" + rec.payment_date = None + if paid_payment: + rec.payment_date = paid_payment.payment_datetime + + @api.depends("state") + def _compute_generate_ern(self): + for rec in self: + if rec.state == "approved": + random_number = str(random.randint(1, 10**10 - 1)).zfill(10) + rec.ern = random_number + else: + rec.ern = False + + @api.autovacuum + def _gc_mark_expired_entitlement(self): + self.env["g2p.entitlement"].search( + ["&", ("state", "=", "approved"), ("valid_until", "<", fields.Date.today())] + ).write({"state": "expired"}) + + def can_be_used(self): + # expired state are computed once a day, so can be not synchro + return self.state == "approved" and self.valid_until >= fields.Date.today() + + def unlink(self): + if self: + to_delete = self.filtered(lambda x: x.state == "draft") + if to_delete: + # TODO: Need to add the logic if any one entitlements within the cycle have been approved + # to restrict the delete records even in the draft state. + return super(G2PEntitlement, to_delete).unlink() + else: + raise ValidationError(_("Only draft entitlements are allowed to be deleted")) + + def approve_entitlement(self): + ent_program_list = [] + for rec in self: + if rec.program_id not in ent_program_list: + ent_program_list.append(rec.program_id) + # TODO: To be remove in case of multiple managers are enabled. + if len(ent_program_list) > 1: + raise ValidationError( + _("You can approve any number of entitlement cycles only from a specific program at a time") + ) + ent_manager = self.program_id.get_manager(constants.MANAGER_ENTITLEMENT) + + if ent_manager: + state_err, message = ent_manager.approve_entitlements(self) + + if state_err > 0: + kind = "danger" + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Entitlement"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + else: + raise UserError(_("No Entitlement Manager defined.")) + + def open_entitlement_form(self): + return self.program_id.get_manager(constants.MANAGER_ENTITLEMENT).open_entitlement_form(self) + + def open_disb_form(self): + for rec in self: + if rec.disbursement_id: + res_ids = [rec.disbursement_id.id] + view_mode = "form" + view_id = self.env.ref("account.view_account_payment_form").id + if rec.service_fee_disbursement_id: + res_ids.append(rec.service_fee_disbursement_id.id) + view_mode = "tree" + view_id = self.env.ref("account.view_account_payment_tree").id + domain = [("id", "in", res_ids)] + return { + "name": "Disbursement", + "view_mode": view_mode, + "res_model": "account.payment", + # "res_id": res_id, + "view_id": view_id, + "type": "ir.actions.act_window", + "domain": domain, + "target": "current", + } diff --git a/g2p_programs/models/job_relate_mixin.py b/g2p_programs/models/job_relate_mixin.py new file mode 100644 index 000000000..e80c542dd --- /dev/null +++ b/g2p_programs/models/job_relate_mixin.py @@ -0,0 +1,39 @@ +from odoo import models + + +class JobRelateMixin(models.AbstractModel): + _name = "job.relate.mixin" + _description = "Job Relate Mixin" + + def action_view_related_queue_jobs(self): + """ + Create an action for opening a related queue jobs in form view + - Create/ Inherit a model which can be delay when a function is + called. + - Set inherit to this model + - Create a button to call this method + - Override function `_get_related_job_domain` to create job domain + :return: odoo UI action + :rtype: dict + :example: + class Program(models.Model): + _name = "g2p.program" + _inherit = ["job.relate.mixin", ...] + + def _get_related_job_domain(self): + return [("id", "in", [1, 2, 3])] + """ + self.ensure_one() + action = self.env.ref("queue_job.action_queue_job").read()[0] + action["domain"] = self._get_related_job_domain() + + return action + + def _get_related_job_domain(self): + """ + Override this function for creating related job queue domain for + filtering to action. + :return: odoo domain + :rtype: list + """ + raise NotImplementedError() diff --git a/g2p_programs/models/managers/__init__.py b/g2p_programs/models/managers/__init__.py new file mode 100644 index 000000000..a5287cea0 --- /dev/null +++ b/g2p_programs/models/managers/__init__.py @@ -0,0 +1,13 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +from . import manager_mixin +from . import source_mixin +from . import recurrence_mixin +from . import base_manager +from . import eligibility_manager +from . import deduplication_manager +from . import notification_manager +from . import program_manager +from . import cycle_manager +from . import entitlement_manager +from . import payment_manager diff --git a/g2p_programs/models/managers/base_manager.py b/g2p_programs/models/managers/base_manager.py new file mode 100644 index 000000000..c2472d778 --- /dev/null +++ b/g2p_programs/models/managers/base_manager.py @@ -0,0 +1,28 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +from odoo import models +from odoo.tools import safe_eval + + +class BaseManager(models.AbstractModel): + _name = "base.programs.manager" + _description = "Base Manager" + + def _get_eval_context(self): + """Prepare the context used when evaluating python code + :returns: dict -- evaluation context given to safe_eval + """ + return { + "datetime": safe_eval.datetime, + "dateutil": safe_eval.dateutil, + "time": safe_eval.time, + "uid": self.env.uid, + "user": self.env.user, + } + + def _safe_eval(self, string, locals_dict=None): + """Evaluates a string containing a Python expression. + :param string: string expression to be evaluated + :param locals_dict: local variables for evaluation + :returns: the result of the evaluation + """ + return safe_eval.safe_eval(string, self._get_eval_context(), locals_dict) diff --git a/g2p_programs/models/managers/cycle_manager.py b/g2p_programs/models/managers/cycle_manager.py new file mode 100644 index 000000000..0626bbc29 --- /dev/null +++ b/g2p_programs/models/managers/cycle_manager.py @@ -0,0 +1,597 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +import logging +from datetime import datetime, timedelta + +from odoo import _, api, fields, models +from odoo.exceptions import UserError, ValidationError + +from odoo.addons.queue_job.delay import group + +from .. import constants + +_logger = logging.getLogger(__name__) + + +class CycleManager(models.Model): + _name = "g2p.cycle.manager" + _description = "Cycle Manager" + _inherit = "g2p.manager.mixin" + + program_id = fields.Many2one("g2p.program", "Program", ondelete="cascade") + + @api.model + def _selection_manager_ref_id(self): + selection = super()._selection_manager_ref_id() + new_manager = ("g2p.cycle.manager.default", "Default") + if new_manager not in selection: + selection.append(new_manager) + return selection + + +class BaseCycleManager(models.AbstractModel): + _name = "g2p.base.cycle.manager" + _description = "Base Cycle Manager" + + MIN_ROW_JOB_QUEUE = 200 + MAX_ROW_JOB_QUEUE = 2000 + + name = fields.Char("Manager Name", required=True) + program_id = fields.Many2one("g2p.program", string="Program", required=True) + + auto_approve_entitlements = fields.Boolean(string="Auto-approve Entitlements", default=False) + + def check_eligibility(self, cycle, beneficiaries=None): + """ + Validate the eligibility of each beneficiary for the cycle + """ + raise NotImplementedError() + + def prepare_entitlements(self, cycle): + """ + Prepare the entitlements for the cycle + """ + raise NotImplementedError() + + def issue_payments(self, cycle): + """ + Issue the payments based on entitlements for the cycle + """ + raise NotImplementedError() + + def validate_entitlements(self, cycle, cycle_memberships): + """ + Validate the entitlements for the cycle + """ + raise NotImplementedError() + + def new_cycle(self, name, new_start_date, sequence): + """ + Create a new cycle for the program + """ + raise NotImplementedError() + + def mark_distributed(self, cycle): + """ + Mark the cycle as distributed + """ + raise NotImplementedError() + + def mark_ended(self, cycle): + """ + Mark the cycle as ended + """ + raise NotImplementedError() + + def mark_cancelled(self, cycle): + """ + Mark the cycle as cancelled + """ + raise NotImplementedError() + + def add_beneficiaries(self, cycle, beneficiaries, state="draft"): + """ + Add beneficiaries to the cycle + """ + raise NotImplementedError() + + def on_start_date_change(self, cycle): + """ + Hook for when the start date change + """ + raise NotImplementedError() + + def approve_cycle(self, cycle, auto_approve=False, entitlement_manager=None): + """ + + :param cycle: + :param auto_approve: + :param entitlement_manager: + :return: + """ + # Check if user is allowed to approve the cycle + if cycle.state == "to_approve": + cycle.update( + { + "approved_date": fields.Datetime.now(), + "approved_by": self.env.user.id, + "state": cycle.STATE_APPROVED, + } + ) + # Running on_state_change because it is not triggered automatically with rec.update above + self.on_state_change(cycle) + else: + message = _("Only 'to approve' cycles can be approved.") + kind = "danger" + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Cycle"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + # Approve entitlements + if auto_approve: + if entitlement_manager.IS_CASH_ENTITLEMENT: + entitlement_mdl = "g2p.entitlement" + else: + entitlement_mdl = "g2p.entitlement.inkind" + entitlements = cycle.get_entitlements( + ["draft", "pending_validation"], entitlement_model=entitlement_mdl + ) + if entitlements: + return entitlement_manager.validate_entitlements(cycle) + else: + message = _("Auto-approve entitlements is set but there are no entitlements to process.") + kind = "warning" + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Entitlements"), + "message": message, + "sticky": True, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def on_state_change(self, cycle): + """ + + :param cycle: + :return: + """ + if cycle.state == cycle.STATE_APPROVED: + if not self.approver_group_id: + raise ValidationError(_("The cycle approver group is not specified!")) + else: + if self.env.user.id != 1 and self.env.user.id not in self.approver_group_id.users.ids: + raise ValidationError(_("You are not allowed to approve this cycle!")) + + def _ensure_can_edit_cycle(self, cycle): + """Base :meth:'_ensure_can_edit_cycle` + Check if the cycle can be editted + + :param cycle: A recordset of cycle + :return: + """ + if cycle.state not in [cycle.STATE_DRAFT]: + raise ValidationError(_("The Cycle is not in draft mode")) + + def mark_import_as_done(self, cycle, msg): + """Complete the import of beneficiaries. + Base :meth:`mark_import_as_done`. + This is executed when all the jobs are completed. + Post a message in the chatter. + + :param cycle: A recordset of cycle + :param msg: A string to be posted in the chatter + :return: + """ + self.ensure_one() + cycle.locked = False + cycle.locked_reason = None + cycle.message_post(body=msg) + + # Update Statistics + cycle._compute_members_count() + + def mark_prepare_entitlement_as_done(self, cycle, msg): + """Complete the preparation of entitlements. + Base :meth:`mark_prepare_entitlement_as_done`. + This is executed when all the jobs are completed. + Post a message in the chatter. + + :param cycle: A recordset of cycle + :param msg: A string to be posted in the chatter + :return: + """ + self.ensure_one() + cycle.locked = False + cycle.locked_reason = None + cycle.message_post(body=msg) + + # Update Statistics + cycle._compute_entitlements_count() + + def mark_check_eligibility_as_done(self, cycle): + """Complete the enrollment of eligible beneficiaries. + Base :meth:`mark_check_eligibility_as_done`. + This is executed when all the jobs are completed. + Post a message in the chatter. + + :param cycle: A recordset of cycle + :return: + """ + cycle.locked = False + cycle.locked_reason = None + cycle.message_post(body=_("Eligibility check finished.")) + + # Compute Statistics + cycle._compute_members_count() + + +class DefaultCycleManager(models.Model): + _name = "g2p.cycle.manager.default" + _inherit = [ + "g2p.base.cycle.manager", + "g2p.cycle.recurrence.mixin", + "g2p.manager.source.mixin", + ] + _description = "Default Cycle Manager" + + cycle_duration = fields.Integer(default=1, required=True, string="Recurrence") + approver_group_id = fields.Many2one( + comodel_name="res.groups", + string="Approver Group", + copy=True, + ) + + def check_eligibility(self, cycle, beneficiaries=None): + """ + Default Cycle Manager eligibility checker + + :param cycle: The cycle that is being verified + :type cycle: :class:`g2p_programs.models.cycle.G2PCycle` + :param beneficiaries: the beneficiaries that need to be verified. + By Default the one with the state ``draft`` + or ``enrolled`` are verified. + :type beneficiaries: list or None + + :return: The list of eligible beneficiaries + :rtype: list + Validate the eligibility of each beneficiary for the + cycle using the configured manager(s) + :class:`g2p_programs.models.managers.eligibility_manager.BaseEligibilityManager`. + If there is multiple managers + for eligibility, each of them are run using the filtered list of eligible + beneficiaries from the previous one. + + The ``state`` of beneficiaries is updated to either ``enrolled`` if they match the enrollment criteria + or ``not_eligible`` in case they do not match them. + + + """ + for rec in self: + rec._ensure_can_edit_cycle(cycle) + + # Get all the draft, enrolled, and not eligible beneficiaries + if beneficiaries is None: + beneficiaries_count = cycle.get_beneficiaries( + ["draft", "enrolled", "not_eligible"], count=True + ) + else: + beneficiaries_count = len(beneficiaries) + if beneficiaries_count < self.MIN_ROW_JOB_QUEUE: + count = self._check_eligibility(cycle, beneficiaries=beneficiaries, do_count=True) + message = _("%s Beneficiaries enrolled.", count) + kind = "success" + else: + self._check_eligibility_async(cycle, beneficiaries_count) + message = _( + "Eligibility check of %s beneficiaries started.", + beneficiaries_count, + ) + kind = "warning" + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Enrollment"), + "message": message, + "sticky": True, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def _check_eligibility_async(self, cycle, beneficiaries_count): + self.ensure_one() + _logger.debug("Beneficiaries: %s", beneficiaries_count) + cycle.message_post(body=_("Eligibility check of %s beneficiaries started.", beneficiaries_count)) + cycle.write({"locked": True, "locked_reason": "Eligibility check of beneficiaries"}) + + jobs = [] + for i in range(0, beneficiaries_count, self.MAX_ROW_JOB_QUEUE): + jobs.append( + self.delayable(channel="root_program.cycle")._check_eligibility( + cycle, offset=i, limit=self.MAX_ROW_JOB_QUEUE + ) + ) + main_job = group(*jobs) + main_job.on_done(self.delayable(channel="root_program.cycle").mark_check_eligibility_as_done(cycle)) + main_job.delay() + + def _check_eligibility(self, cycle, beneficiaries=None, offset=0, limit=None, do_count=False): + if beneficiaries is None: + beneficiaries = cycle.get_beneficiaries( + ["draft", "enrolled", "not_eligible"], + offset=offset, + limit=limit, + order="id", + ) + + eligibility_managers = cycle.program_id.get_managers(constants.MANAGER_ELIGIBILITY) + filtered_beneficiaries = beneficiaries + for manager in eligibility_managers: + filtered_beneficiaries = manager.verify_cycle_eligibility(cycle, filtered_beneficiaries) + + filtered_beneficiaries.write({"state": "enrolled"}) + + beneficiaries_ids = beneficiaries.ids + filtered_beneficiaries_ids = filtered_beneficiaries.ids + ids_to_remove = list(set(beneficiaries_ids) - set(filtered_beneficiaries_ids)) + + # Mark the beneficiaries as not eligible + memberships_to_remove = self.env["g2p.cycle.membership"].browse(ids_to_remove) + memberships_to_remove.write({"state": "not_eligible"}) + + # Disable the entitlements of the beneficiaries + entitlements = self.env["g2p.entitlement"].search( + [ + ("cycle_id", "=", cycle.id), + ("partner_id", "in", memberships_to_remove.mapped("partner_id.id")), + ] + ) + entitlements.write({"state": "cancelled"}) + + if do_count: + # Compute Statistics + cycle._compute_members_count() + + return len(filtered_beneficiaries) + + def prepare_entitlements(self, cycle): + for rec in self: + rec._ensure_can_edit_cycle(cycle) + # Get all the enrolled beneficiaries + beneficiaries_count = cycle.get_beneficiaries(["enrolled"], count=True) + rec.program_id.get_manager(constants.MANAGER_ENTITLEMENT) + if beneficiaries_count < self.MIN_ROW_JOB_QUEUE: + self._prepare_entitlements(cycle, do_count=True) + else: + self._prepare_entitlements_async(cycle, beneficiaries_count) + + def _prepare_entitlements_async(self, cycle, beneficiaries_count): + _logger.debug("Prepare entitlement asynchronously") + cycle.message_post(body=_("Prepare entitlement for %s beneficiaries started.", beneficiaries_count)) + cycle.write( + { + "locked": True, + "locked_reason": _("Prepare entitlement for beneficiaries."), + } + ) + + jobs = [] + for i in range(0, beneficiaries_count, self.MAX_ROW_JOB_QUEUE): + jobs.append( + self.delayable(channel="root_program.cycle")._prepare_entitlements( + cycle, i, self.MAX_ROW_JOB_QUEUE + ) + ) + main_job = group(*jobs) + main_job.on_done( + self.delayable(channel="root_program.cycle").mark_prepare_entitlement_as_done( + cycle, _("Entitlement Ready.") + ) + ) + main_job.delay() + + def _prepare_entitlements(self, cycle, offset=0, limit=None, do_count=False): + """Prepare Entitlements + Get the beneficiaries and generate their entitlements. + + :param cycle: The cycle + :param offset: Optional integer value for the ORM search offset + :param limit: Optional integer value for the ORM search limit + :param do_count: Boolean - set to False to not run compute function + :return: + """ + beneficiaries = cycle.get_beneficiaries(["enrolled"], offset=offset, limit=limit, order="id") + ent_manager = self.program_id.get_manager(constants.MANAGER_ENTITLEMENT) + if not ent_manager: + raise UserError(_("No Entitlement Manager defined.")) + ent_manager.prepare_entitlements(cycle, beneficiaries) + + if do_count: + # Update Statistics + cycle._compute_entitlements_count() + + def mark_distributed(self, cycle): + cycle.update({"state": constants.STATE_DISTRIBUTED}) + + def mark_ended(self, cycle): + cycle.update({"state": constants.STATE_ENDED}) + + def mark_cancelled(self, cycle): + cycle.update({"state": constants.STATE_CANCELLED}) + + def new_cycle(self, name, new_start_date, sequence): + _logger.debug("Creating new cycle for program %s", self.program_id.name) + _logger.debug("New start date: %s", new_start_date) + + # convert date to datetime + new_start_date = datetime.combine(new_start_date, datetime.min.time()) + + # get start date and end date + # Note: + # second argument is irrelevant but make sure it is in timedelta class + # and do not exceed to 24 hours + occurences = self._get_ranges(new_start_date, timedelta(seconds=1)) + + prev_occurence = next(occurences) + current_occurence = next(occurences) + + start_date = None + end_date = None + + # This prevents getting an end date that is less than the start date + while True: + # get the date of occurences + start_date = prev_occurence[0] + end_date = current_occurence[0] - timedelta(days=1) + + # To handle DST (Daylight Saving Time) changes + start_date = start_date + timedelta(hours=11) + end_date = end_date + timedelta(hours=11) + + if start_date >= new_start_date: + break + + # move current occurence to previous then get a new current occurence + prev_occurence = current_occurence + current_occurence = next(occurences) + + for rec in self: + cycle = self.env["g2p.cycle"].create( + { + "program_id": rec.program_id.id, + "name": name, + "state": "draft", + "sequence": sequence, + "start_date": start_date, + "end_date": end_date, + "auto_approve_entitlements": rec.auto_approve_entitlements, + } + ) + _logger.debug("New cycle created: %s", cycle.name) + return cycle + + def copy_beneficiaries_from_program(self, cycle, state="enrolled"): + self._ensure_can_edit_cycle(cycle) + self.ensure_one() + + for rec in self: + beneficiary_ids = rec.program_id.get_beneficiaries(["enrolled"]).mapped("partner_id.id") + return rec.add_beneficiaries(cycle, beneficiary_ids, state) + + def add_beneficiaries(self, cycle, beneficiaries, state="draft"): + """ + Add beneficiaries to the cycle + """ + self.ensure_one() + self._ensure_can_edit_cycle(cycle) + _logger.debug("Adding beneficiaries to the cycle %s", cycle.name) + _logger.debug("Beneficiaries: %s", len(beneficiaries)) + + # Only add beneficiaries not added yet + existing_ids = cycle.cycle_membership_ids.mapped("partner_id.id") + _logger.debug("Existing IDs: %s", len(existing_ids)) + beneficiaries = list(set(beneficiaries) - set(existing_ids)) + if len(beneficiaries) == 0: + message = _("No beneficiaries to import.") + kind = "warning" + sticky = False + elif len(beneficiaries) < self.MIN_ROW_JOB_QUEUE: + self._add_beneficiaries(cycle, beneficiaries, state, do_count=True) + message = _("%s beneficiaries imported.", len(beneficiaries)) + kind = "success" + sticky = False + else: + self._add_beneficiaries_async(cycle, beneficiaries, state) + message = _("Import of %s beneficiaries started.", len(beneficiaries)) + kind = "warning" + sticky = True + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Enrollment"), + "message": message, + "sticky": sticky, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def _add_beneficiaries_async(self, cycle, beneficiaries, state): + _logger.debug("Adding beneficiaries asynchronously") + cycle.message_post(body="Import of %s beneficiaries started." % len(beneficiaries)) + cycle.write({"locked": True, "locked_reason": _("Importing beneficiaries.")}) + + beneficiaries_count = len(beneficiaries) + jobs = [] + for i in range(0, beneficiaries_count, self.MAX_ROW_JOB_QUEUE): + jobs.append( + self.delayable(channel="root_program.cycle")._add_beneficiaries( + cycle, + beneficiaries[i : i + self.MAX_ROW_JOB_QUEUE], + state, + ) + ) + + main_job = group(*jobs) + main_job.on_done( + self.delayable(channel="root_program.cycle").mark_import_as_done( + cycle, _("Beneficiary import finished.") + ) + ) + main_job.delay() + + def _add_beneficiaries(self, cycle, beneficiaries, state="draft", do_count=False): + """Add Beneficiaries + + :param cycle: Recordset of cycle + :param beneficiaries: Recordset of beneficiaries + :param state: String state to be set to beneficiary + :param do_count: Boolean - set to False to not run compute functions + :return: Integer - count of not enrolled members + """ + new_beneficiaries = [] + for r in beneficiaries: + new_beneficiaries.append( + [ + 0, + 0, + { + "partner_id": r, + "enrollment_date": fields.Date.today(), + "state": state, + }, + ] + ) + cycle.update({"cycle_membership_ids": new_beneficiaries}) + + if do_count: + # Update Statistics + cycle._compute_members_count() + + @api.depends("cycle_duration") + def _compute_interval(self): + for rec in self: + rec.interval = rec.cycle_duration diff --git a/g2p_programs/models/managers/deduplication_manager.py b/g2p_programs/models/managers/deduplication_manager.py new file mode 100644 index 000000000..98b39a1fc --- /dev/null +++ b/g2p_programs/models/managers/deduplication_manager.py @@ -0,0 +1,679 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +import collections +import itertools +import logging +from datetime import date + +from odoo import api, fields, models + +_logger = logging.getLogger(__name__) + + +class DeduplicationManager(models.Model): + _name = "g2p.deduplication.manager" + _description = "Deduplication Manager" + _inherit = "g2p.manager.mixin" + + program_id = fields.Many2one("g2p.program", "Program", ondelete="cascade") + + @api.model + def _selection_manager_ref_id(self): + selection = super()._selection_manager_ref_id() + new_managers = [ + ("g2p.deduplication.manager.default", "Default Deduplication"), + ("g2p.deduplication.manager.phone_number", "Phone Number Deduplication"), + ("g2p.deduplication.manager.id_dedup", "ID Deduplication"), + ] + for new_manager in new_managers: + if new_manager not in selection: + selection.append(new_manager) + return selection + + +class BaseDeduplication(models.AbstractModel): + _name = "g2p.base.deduplication.manager" + _description = "Base Deduplication Manager" + + # Kind of deduplication possible + _capability_individual = False + _capability_group = False + + name = fields.Char("Manager Name", required=True) + program_id = fields.Many2one("g2p.program", string="Program", required=True) + + def deduplicate_beneficiaries(self, states): + raise NotImplementedError() + + +class DefaultDeduplication(models.Model): + _name = "g2p.deduplication.manager.default" + _inherit = ["g2p.base.deduplication.manager", "g2p.manager.source.mixin"] + _description = "Default Deduplication Manager" + + _capability_individual = True + _capability_group = True + + def deduplicate_beneficiaries(self, states): + for rec in self: + duplicate_beneficiaries = [] + program = rec.program_id + beneficiaries = program.get_beneficiaries(states) + # duplicates + _logger.debug("Deduplicate beneficiaries: %s", beneficiaries) + if program.target_type == "group": + duplicate_beneficiaries = self._check_duplicate_by_individual_ids(beneficiaries) + return len(duplicate_beneficiaries) + + def _record_duplicate(self, manager, beneficiary_ids, reason): + """ + This method is used to record a duplicate beneficiary. + :param beneficiary: The beneficiary. + :param reason: The reason. + :param comment: The comment. + :return: + """ + + # TODO: check this group does not exist already with the same manager and the same beneficiaries or + # a subset of them. + # 1. If the state has been changed to no_duplicate, + # then we should not record it as duplicate unless there are + # additional beneficiaries in the group. + # 2. Otherwise we update the record. + + _logger.debug("Record duplicate: %s", beneficiary_ids) + + existing_record = self.env["g2p.program.membership.duplicate"].search( + [ + ("beneficiary_ids", "in", beneficiary_ids), + ("state", "=", "duplicate"), + ("deduplication_manager_id", "=", manager.id), + ("reason", "=", reason), + ] + ) + if not existing_record: + data = { + "beneficiary_ids": [(6, 0, beneficiary_ids)], + "state": "duplicate", + "reason": reason, + "deduplication_manager_id": manager, + } + _logger.debug("Record duplicate: %s", data) + + self.env["g2p.program.membership.duplicate"].create(data) + + def _check_duplicate_by_individual_ids(self, beneficiaries): + """ + This method is used to check if there are any duplicates among the individuals. + :param beneficiary_ids: The beneficiaries. + :return: + """ + _logger.debug("-" * 100) + group_ids = beneficiaries.mapped("partner_id.id") + group_memberships = self.env["g2p.group.membership"].search([("group", "in", group_ids)]) + _logger.debug("group_memberships: %s", group_memberships) + + individuals_ids = [rec.individual.id for rec in group_memberships] + _logger.debug("individuals_ids: %s", individuals_ids) + + duplicate_individuals = [ + item for item, count in collections.Counter(individuals_ids).items() if count > 1 + ] + _logger.debug("Duplicate individuals: %s", duplicate_individuals) + + group_with_duplicates = self.env["g2p.group.membership"].search( + [("group", "in", group_ids), ("individual", "in", duplicate_individuals)] + ) + + _logger.debug("group_with_duplicates: %s", group_with_duplicates) + group_of_duplicates = {} + for group_membership in group_with_duplicates: + _logger.debug( + f"group_membership.individual.id: {group_membership.individual.id} -> " + f"{group_membership.group.id}" + ) + if group_membership.individual.id not in group_of_duplicates: + group_of_duplicates[group_membership.individual.id] = [] + group_of_duplicates[group_membership.individual.id].append(group_membership.group.id) + + _logger.debug("group_of_duplicates: %s", group_of_duplicates) + for _individual, group_ids in group_of_duplicates.items(): + duplicate_beneficiaries = beneficiaries.filtered(lambda rec: rec.partner_id.id in group_ids) + duplicate_beneficiariy_ids = duplicate_beneficiaries.mapped("id") + + self._record_duplicate(self, duplicate_beneficiariy_ids, "Duplicate individuals") + + duplicated_enrolled = duplicate_beneficiaries.filtered(lambda rec: rec.state == "enrolled") + if len(duplicated_enrolled) == 1: + # If there is only 1 enrolled that is duplicated, + # the enrolled one should not be marked as duplicate. + # otherwise if there is more than 1, then there is a problem! + # TODO: check how to handle this + duplicated_enrolled.write({"state": "enrolled"}) + duplicate_beneficiaries = duplicate_beneficiaries.filtered( + lambda rec: rec.state != "enrolled" + ) + duplicate_beneficiaries.filtered( + lambda rec: rec.state not in ["exited", "not_eligible", "duplicated"] + ).write({"state": "duplicated"}) + + return group_with_duplicates + + +class IDDocumentDeduplication(models.Model): + _name = "g2p.deduplication.manager.id_dedup" + _inherit = ["g2p.base.deduplication.manager", "g2p.manager.source.mixin"] + _description = "ID Deduplication Manager" + + supported_id_document_types = fields.Many2many("g2p.id.type", string="Supported ID Document Types") + + def deduplicate_beneficiaries(self, states): + for rec in self: + duplicate_beneficiaries = [] + program = rec.program_id + beneficiaries = program.get_beneficiaries(states) + # duplicates + _logger.debug("Deduplicate beneficiaries: %s", beneficiaries) + if program.target_type == "group": + duplicate_beneficiaries = self._check_duplicate_by_group_with_individual(beneficiaries) + else: + duplicate_beneficiaries = self._check_duplicate_by_individual(beneficiaries) + return len(duplicate_beneficiaries) + + def _record_duplicate(self, manager, beneficiary_ids, reason): + """ + This method is used to record a duplicate beneficiary. + :param beneficiary: The beneficiary. + :param reason: The reason. + :param comment: The comment. + :return: + """ + + # TODO: check this group does not exist already with the same manager + # and the same beneficiaries or + # a subset of them. + # 1. If the state has been changed to no_duplicate, then + # we should not record it as duplicate unless there are + # additional beneficiaries in the group. + # 2. Otherwise we update the record. + + _logger.debug("Record duplicate: %s", beneficiary_ids) + + existing_record = self.env["g2p.program.membership.duplicate"].search( + [ + ("beneficiary_ids", "in", beneficiary_ids), + ("state", "=", "duplicate"), + ("deduplication_manager_id", "=", manager.id), + ("reason", "=", reason), + ] + ) + if not existing_record: + data = { + "beneficiary_ids": [(6, 0, beneficiary_ids)], + "state": "duplicate", + "reason": reason, + "deduplication_manager_id": manager, + } + _logger.debug("Record duplicate: %s", data) + + self.env["g2p.program.membership.duplicate"].create(data) + + def _check_duplicate_by_group_with_individual(self, beneficiaries): + """ + This method is used to check if there are any duplicates among the individuals docs. + :param beneficiary_ids: The beneficiaries. + :return: + """ + _logger.debug("-" * 100) + group_ids = beneficiaries.mapped("partner_id.id") + group_memberships = self.env["g2p.group.membership"].search([("group", "in", group_ids)]) + group = self.env["res.partner"].search([("id", "in", group_ids)]) + _logger.debug("group_memberships: %s", group_memberships) + + individuals_ids = [rec.individual.id for rec in group_memberships] + _logger.debug("Checking ID Document Duplicates for: %s", individuals_ids) + + individual_id_docs = {} + # Check ID Documents of each individual + for i in group_memberships: + for x in i.individual.reg_ids: + if x.id_type in self.supported_id_document_types and ( + (not x.expiry_date) or x.expiry_date > date.today() + ): + id_doc_id_with_id_type_and_value = {x.id: x.id_type.name + "-" + x.value} + individual_id_docs.update(id_doc_id_with_id_type_and_value) + + # Check ID Docs of each group + for ix in group: + for x in ix.reg_ids: + if x.id_type in self.supported_id_document_types and ( + (not x.expiry_date) or x.expiry_date > date.today() + ): + id_doc_id_with_id_type_and_value = {x.id: x.id_type.name + "-" + x.value} + individual_id_docs.update(id_doc_id_with_id_type_and_value) + + _logger.debug("Individual ID Documents: %s", individual_id_docs) + rev_dict = {} + for key, value in individual_id_docs.items(): + rev_dict.setdefault(value, set()).add(key) + + duplicate_ids = filter(lambda x: len(x) > 1, rev_dict.values()) + duplicate_ids = list(duplicate_ids) + duplicate_ids = list(itertools.chain.from_iterable(duplicate_ids)) + _logger.debug("Reg_id IDS with Duplicated ID Documents: %s", duplicate_ids) + + duplicated_doc_ids = self.env["g2p.reg.id"].search([("id", "in", duplicate_ids)]) + individual_ids = [x.partner_id.id for x in duplicated_doc_ids] + individual_ids = list(dict.fromkeys(individual_ids)) + + group_with_duplicates = self.env["g2p.group.membership"].search( + [("group", "in", group_ids), ("individual", "in", individual_ids)] + ) + + _logger.debug("group_with_duplicates: %s", group_with_duplicates) + group_of_duplicates = {} + for group_membership in group_with_duplicates: + _logger.debug( + f"group_membership.individual.id: {group_membership.individual.id} ->" + f"{group_membership.group.id}" + ) + if group_membership.individual.id not in group_of_duplicates: + group_of_duplicates[group_membership.individual.id] = [] + group_of_duplicates[group_membership.individual.id].append(group_membership.group.id) + + _logger.debug("group_of_duplicates: %s", group_of_duplicates) + for _individual, group_ids in group_of_duplicates.items(): + duplicate_beneficiaries = beneficiaries.filtered(lambda rec: rec.partner_id.id in group_ids) + duplicate_beneficiariy_ids = duplicate_beneficiaries.mapped("id") + + self._record_duplicate(self, duplicate_beneficiariy_ids, "Duplicate ID Documents") + + duplicated_enrolled = duplicate_beneficiaries.filtered(lambda rec: rec.state == "enrolled") + if len(duplicated_enrolled) == 1: + # If there is only 1 enrolled that is duplicated, + # the enrolled one should not be marked as duplicate. + # otherwise if there is more than 1, then there is a problem! + # TODO: check how to handle this + duplicated_enrolled.write({"state": "enrolled"}) + duplicate_beneficiaries = duplicate_beneficiaries.filtered( + lambda rec: rec.state != "enrolled" + ) + duplicate_beneficiaries.filtered( + lambda rec: rec.state not in ["exited", "not_eligible", "duplicated"] + ).write({"state": "duplicated"}) + + return group_with_duplicates + + def _check_duplicate_by_individual(self, beneficiaries): + """ + This method is used to check if there are any duplicates + among the individuals id docs. + :param beneficiary_ids: The beneficiaries. + :return: + """ + _logger.debug("-" * 100) + individual_ids = beneficiaries.mapped("partner_id.id") + individuals = self.env["res.partner"].search([("id", "in", individual_ids)]) + _logger.debug("Checking ID Document Duplicates for: %s", individuals) + + individual_id_docs = {} + # Check ID Documents of each individual + for i in individuals: + for x in i.reg_ids: + if x.id_type in self.supported_id_document_types and ( + (not x.expiry_date) or x.expiry_date > date.today() + ): + id_doc_id_with_id_type_and_value = {x.id: x.id_type.name + "-" + x.value} + individual_id_docs.update(id_doc_id_with_id_type_and_value) + + _logger.debug("Individual ID Documents: %s", individual_id_docs) + rev_dict = {} + for key, value in individual_id_docs.items(): + rev_dict.setdefault(value, set()).add(key) + + duplicate_ids = filter(lambda x: len(x) > 1, rev_dict.values()) + duplicate_ids = list(duplicate_ids) + duplicate_ids = list(itertools.chain.from_iterable(duplicate_ids)) + _logger.debug("Reg_id IDS with Duplicated ID Documents: %s", duplicate_ids) + + duplicated_doc_ids = self.env["g2p.reg.id"].search([("id", "in", duplicate_ids)]) + individual_ids = [x.partner_id.id for x in duplicated_doc_ids] + individual_ids = list(dict.fromkeys(individual_ids)) + _logger.debug("Individual IDS with Duplicated ID Documents: %s", individual_ids) + individual_program_membership = self.env["g2p.program_membership"].search( + [ + ("partner_id", "in", individual_ids), + ("program_id", "=", self.program_id.id), + ] + ) + + for duplicates in individual_program_membership: + duplicate_individuals = [duplicates.id] + self._record_duplicate(self, duplicate_individuals, "Duplicate ID Documents") + + if duplicates.state == "enrolled": + duplicates.write({"state": "duplicated"}) + + return individual_program_membership + + +class PhoneNumberDeduplication(models.Model): + """ + When this model is added, it should add also the + PhoneNumberDeduplicationEligibilityManager to the eligibility + criteria. + """ + + _name = "g2p.deduplication.manager.phone_number" + _inherit = ["g2p.base.deduplication.manager", "g2p.manager.source.mixin"] + _description = "Phone Number Deduplication Manager" + + # # if set, we verify that the phone number match a given regex + # phone_regex = fields.Char(string="Phone Regex") + + def deduplicate_beneficiaries(self, states): + for rec in self: + duplicate_beneficiaries = [] + program = rec.program_id + beneficiaries = program.get_beneficiaries(states) + # duplicates + _logger.debug("Deduplicate beneficiaries: %s", beneficiaries) + if program.target_type == "group": + duplicate_beneficiaries = self._check_duplicate_by_group_with_individual(beneficiaries) + else: + duplicate_beneficiaries = self._check_duplicate_by_individual(beneficiaries) + return len(duplicate_beneficiaries) + + def _record_duplicate(self, manager, beneficiary_ids, reason): + """ + This method is used to record a duplicate beneficiary. + :param beneficiary: The beneficiary. + :param reason: The reason. + :param comment: The comment. + :return: + """ + + # TODO: check this group does not exist already with the same manager and the same beneficiaries or + # a subset of them. + # 1. If the state has been changed to no_duplicate, + # then we should not record it as duplicate unless there are + # additional beneficiaries in the group. + # 2. Otherwise we update the record. + + _logger.debug("Record duplicate: %s", beneficiary_ids) + + existing_record = self.env["g2p.program.membership.duplicate"].search( + [ + ("beneficiary_ids", "in", beneficiary_ids), + ("state", "=", "duplicate"), + ("deduplication_manager_id", "=", manager.id), + ("reason", "=", reason), + ] + ) + if not existing_record: + data = { + "beneficiary_ids": [(6, 0, beneficiary_ids)], + "state": "duplicate", + "reason": reason, + "deduplication_manager_id": manager, + } + _logger.debug("Record duplicate: %s", data) + + self.env["g2p.program.membership.duplicate"].create(data) + + def _check_duplicate_by_group_with_individual(self, beneficiaries): + """ + This method is used to check if there are any duplicates among the individuals docs. + :param beneficiary_ids: The beneficiaries. + :return: + """ + _logger.debug("-" * 100) + group_ids = beneficiaries.mapped("partner_id.id") + group_memberships = self.env["g2p.group.membership"].search([("group", "in", group_ids)]) + group = self.env["res.partner"].search([("id", "in", group_ids)]) + _logger.debug("group_memberships: %s", group_memberships) + + individuals_ids = [rec.individual.id for rec in group_memberships] + _logger.debug("individuals_ids: %s", individuals_ids) + individual_phone_numbers = {} + # Check Phone Numbers of each individual + for i in group_memberships: + for x in i.individual.phone_number_ids: + phone_id_with_sanitized = {x.id: x.phone_sanitized} + individual_phone_numbers.update(phone_id_with_sanitized) + + # Check Phone Numbers of each group + for ix in group: + for x in ix.phone_number_ids: + phone_id_with_sanitized = {x.id: x.phone_sanitized} + individual_phone_numbers.update(phone_id_with_sanitized) + + _logger.debug("Individual Phone Numbers: %s", individual_phone_numbers) + + rev_dict = {} + for key, value in individual_phone_numbers.items(): + rev_dict.setdefault(value, set()).add(key) + + duplicate_ids = filter(lambda x: len(x) > 1, rev_dict.values()) + duplicate_ids = list(duplicate_ids) + duplicate_ids = list(itertools.chain.from_iterable(duplicate_ids)) + _logger.debug("PhoneNumber IDS with Duplicated Phone Numbers: %s", duplicate_ids) + + duplicate_individuals_ids = self.env["g2p.phone.number"].search([("id", "in", duplicate_ids)]) + + duplicate_individuals = [x.partner_id.id for x in duplicate_individuals_ids] + duplicate_individuals = list(dict.fromkeys(duplicate_individuals)) + _logger.debug("Individual IDS with Duplicated Phone Numbers: %s", duplicate_individuals) + + group_with_duplicates = self.env["g2p.group.membership"].search( + [("group", "in", group_ids), ("individual", "in", duplicate_individuals)] + ) + + _logger.debug("Group With Duplicates: %s", group_with_duplicates) + + group_of_duplicates = {} + for group_membership in group_with_duplicates: + _logger.debug( + f"group_membership.individual.id: {group_membership.individual.id} ->" + f"{group_membership.group.id}" + ) + if group_membership.individual.id not in group_of_duplicates: + group_of_duplicates[group_membership.individual.id] = [] + group_of_duplicates[group_membership.individual.id].append(group_membership.group.id) + + _logger.debug("group_of_duplicates: %s", group_of_duplicates) + for _individual, group_ids in group_of_duplicates.items(): + duplicate_beneficiaries = beneficiaries.filtered(lambda rec: rec.partner_id.id in group_ids) + duplicate_beneficiariy_ids = duplicate_beneficiaries.mapped("id") + + self._record_duplicate(self, duplicate_beneficiariy_ids, "Duplicate Phone Numbers") + + duplicated_enrolled = duplicate_beneficiaries.filtered(lambda rec: rec.state == "enrolled") + if len(duplicated_enrolled) == 1: + # If there is only 1 enrolled that is duplicated, + # the enrolled one should not be marked as duplicate. + # otherwise if there is more than 1, then there is a problem! + # TODO: check how to handle this + duplicated_enrolled.write({"state": "enrolled"}) + duplicate_beneficiaries = duplicate_beneficiaries.filtered( + lambda rec: rec.state != "enrolled" + ) + duplicate_beneficiaries.filtered( + lambda rec: rec.state not in ["exited", "not_eligible", "duplicated"] + ).write({"state": "duplicated"}) + + return group_with_duplicates + + def _check_duplicate_by_individual(self, beneficiaries): + """ + This method is used to check if there are any duplicates among the individuals docs. + :param beneficiary_ids: The beneficiaries. + :return: + """ + _logger.debug("-" * 100) + individual_ids = beneficiaries.mapped("partner_id.id") + individuals = self.env["res.partner"].search([("id", "in", individual_ids)]) + _logger.debug("Checking Phone Duplicates for: %s", individuals) + + individual_phone_numbers = {} + # Check Phone Numbers of each individual + for i in individuals: + for x in i.phone_number_ids: + phone_id_with_sanitized = {x.id: x.phone_sanitized} + individual_phone_numbers.update(phone_id_with_sanitized) + + _logger.debug("Individual Phone Numbers: %s", individual_phone_numbers) + rev_dict = {} + for key, value in individual_phone_numbers.items(): + rev_dict.setdefault(value, set()).add(key) + + duplicate_ids = filter(lambda x: len(x) > 1, rev_dict.values()) + duplicate_ids = list(duplicate_ids) + duplicate_ids = list(itertools.chain.from_iterable(duplicate_ids)) + _logger.debug("PhoneNumber IDS with Duplicated Phone Numbers: %s", duplicate_ids) + + duplicated_phone_ids = self.env["g2p.phone.number"].search([("id", "in", duplicate_ids)]) + individual_ids = [x.partner_id.id for x in duplicated_phone_ids] + individual_ids = list(dict.fromkeys(individual_ids)) + _logger.debug("Individual IDS with Duplicated Phone Numbers: %s", individual_ids) + individual_program_membership = self.env["g2p.program_membership"].search( + [ + ("partner_id", "in", individual_ids), + ("program_id", "=", self.program_id.id), + ] + ) + + for duplicates in individual_program_membership: + duplicate_individuals = [duplicates.id] + self._record_duplicate(self, duplicate_individuals, "Duplicate Phone Numbers") + + if duplicates.state == "enrolled": + duplicates.write({"state": "duplicated"}) + + return individual_program_membership + + +class IDPhoneEligibilityManager(models.Model): + """ + Add the ID Document and Phone Number Deduplication in the Eligibility Manager + """ + + _inherit = "g2p.eligibility.manager" + + @api.model + def _selection_manager_ref_id(self): + selection = super()._selection_manager_ref_id() + new_managers = [ + ("g2p.program_membership.manager.id_dedup", "ID Document Eligibility"), + ("g2p.program_membership.manager.phone_number", "Phone Number Eligibility"), + ] + for new_manager in new_managers: + if new_manager not in selection: + selection.append(new_manager) + return selection + + +class IDDocumentDeduplicationEligibilityManager(models.Model): + """ + This model is used to check if a beneficiary has the required documents to be deduplicated. + It uses the IDDocumentDeduplication configuration to perform the check + """ + + _name = "g2p.program_membership.manager.id_dedup" + _inherit = ["g2p.program_membership.manager", "g2p.manager.source.mixin"] + _description = "ID Document Deduplication Eligibility" + + eligibility_domain = fields.Text(string="Domain", default="[]") + + def _prepare_eligible_domain(self, membership): + ids = membership.mapped("partner_id.id") + registrant_ids = self.env["res.partner"].search([("id", "in", ids)]) + _logger.debug("Checking Registrants: %s", registrant_ids) + registrant_ids_with_id = [] + for i in registrant_ids: + if i.reg_ids: + registrant_ids_with_id += [ + i.id for x in i.reg_ids if (not x.expiry_date) or x.expiry_date > date.today() + ] + registrant_ids_with_id = list(dict.fromkeys(registrant_ids_with_id)) + _logger.debug("Eligible registrants with ID: %s", registrant_ids_with_id) + domain = [("id", "in", registrant_ids_with_id)] + domain += self._safe_eval(self.eligibility_domain) + return domain + + def enroll_eligible_registrants(self, program_memberships): + # TODO: check if the beneficiary still match the criterias + _logger.debug("-" * 100) + _logger.debug("Checking eligibility for %s", program_memberships) + for rec in self: + beneficiaries = rec._verify_eligibility(program_memberships) + return self.env["g2p.program_membership"].search( + [ + ("partner_id", "in", beneficiaries), + ("program_id", "=", self.program_id.id), + ] + ) + + def verify_cycle_eligibility(self, cycle, membership): + for rec in self: + beneficiaries = rec._verify_eligibility(membership) + return self.env["g2p.cycle.membership"].search([("partner_id", "in", beneficiaries)]) + + def _verify_eligibility(self, membership): + domain = self._prepare_eligible_domain(membership) + _logger.debug("Eligibility domain: %s", domain) + beneficiaries = self.env["res.partner"].search(domain).ids + _logger.debug("Beneficiaries: %s", beneficiaries) + return beneficiaries + + +class PhoneNumberDeduplicationEligibilityManager(models.Model): + """ + This model is used to check if a beneficiary has a phone number to be deduplicated + It uses the PhoneNumberDeduplication configuration to perform the check + """ + + _name = "g2p.program_membership.manager.phone_number" + _inherit = ["g2p.program_membership.manager", "g2p.manager.source.mixin"] + _description = "Phone Number Deduplication Eligibility" + + eligibility_domain = fields.Text(string="Domain", default="[]") + + def _prepare_eligible_domain(self, membership): + ids = membership.mapped("partner_id.id") + registrant_ids = self.env["res.partner"].search([("id", "in", ids)]) + _logger.debug("Checking Registrants: %s", registrant_ids) + registrant_ids_with_phone = [] + for i in registrant_ids: + if i.phone_number_ids: + registrant_ids_with_phone += [i.id for x in i.phone_number_ids if not x.disabled] + registrant_ids_with_phone = list(dict.fromkeys(registrant_ids_with_phone)) + _logger.debug("Eligible registrants with Phone: %s", registrant_ids_with_phone) + + domain = [("id", "in", registrant_ids_with_phone)] + domain += self._safe_eval(self.eligibility_domain) + return domain + + def enroll_eligible_registrants(self, program_memberships): + # TODO: check if the beneficiary still match the criterias + _logger.debug("-" * 100) + _logger.debug("Checking eligibility for %s", program_memberships) + for rec in self: + beneficiaries = rec._verify_eligibility(program_memberships) + return self.env["g2p.program_membership"].search( + [ + ("partner_id", "in", beneficiaries), + ("program_id", "=", self.program_id.id), + ] + ) + + def verify_cycle_eligibility(self, cycle, membership): + for rec in self: + beneficiaries = rec._verify_eligibility(membership) + return self.env["g2p.cycle.membership"].search([("partner_id", "in", beneficiaries)]) + + def _verify_eligibility(self, membership): + domain = self._prepare_eligible_domain(membership) + _logger.debug("Eligibility domain: %s", domain) + beneficiaries = self.env["res.partner"].search(domain).ids + _logger.debug("Beneficiaries: %s", beneficiaries) + return beneficiaries diff --git a/g2p_programs/models/managers/eligibility_manager.py b/g2p_programs/models/managers/eligibility_manager.py new file mode 100644 index 000000000..b4aa23bf8 --- /dev/null +++ b/g2p_programs/models/managers/eligibility_manager.py @@ -0,0 +1,179 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +import logging + +from odoo import _, api, fields, models + +from odoo.addons.queue_job.delay import group + +_logger = logging.getLogger(__name__) + + +class EligibilityManager(models.Model): + _name = "g2p.eligibility.manager" + _description = "Eligibility Manager" + _inherit = "g2p.manager.mixin" + + program_id = fields.Many2one("g2p.program", "Program", ondelete="cascade") + + @api.model + def _selection_manager_ref_id(self): + selection = super()._selection_manager_ref_id() + new_manager = ("g2p.program_membership.manager.default", "Default Eligibility") + if new_manager not in selection: + selection.append(new_manager) + return selection + + +class BaseEligibilityManager(models.AbstractModel): + _name = "g2p.program_membership.manager" + _inherit = "base.programs.manager" + _description = "Base Eligibility" + + name = fields.Char("Manager Name", required=True) + program_id = fields.Many2one("g2p.program", string="Program", required=True) + + def enroll_eligible_registrants(self, program_memberships): + """ + This method is used to validate if a user match the criteria needed to be enrolled in a program. + Args: + program_membership: + + Returns: + bool: True if the user match the criterias, False otherwise. + """ + raise NotImplementedError() + + def verify_cycle_eligibility(self, cycle, membership): + """ + This method is used to validate if a beneficiary match the criteria needed to be enrolled in a cycle. + Args: + cycle: + membership: + + Returns: + bool: True if the cycle match the criterias, False otherwise. + """ + raise NotImplementedError() + + def import_eligible_registrants(self, state=None): + """ + This method is used to import the beneficiaries in a program. + Returns: + """ + raise NotImplementedError() + + +class DefaultEligibilityManager(models.Model): + _name = "g2p.program_membership.manager.default" + _inherit = ["g2p.program_membership.manager", "g2p.manager.source.mixin"] + _description = "Simple Eligibility" + + # TODO: rename to allow_ + # support_individual = fields.Boolean(string="Support Individual", default=False) + # support_group = fields.Boolean(string="Support Group", default=False) + + # TODO: cache the parsed domain + eligibility_domain = fields.Text(string="Domain", default="[]") + + def _prepare_eligible_domain(self, membership=None): + domain = [] + if membership is not None: + ids = membership.mapped("partner_id.id") + domain += [("id", "in", ids)] + + # Do not include disabled registrants + domain += [("disabled", "=", False)] + # TODO: use the config of the program + if self.program_id.target_type == "group": + domain += [("is_group", "=", True), ("is_registrant", "=", True)] + if self.program_id.target_type == "individual": + domain += [("is_group", "=", False), ("is_registrant", "=", True)] + domain += self._safe_eval(self.eligibility_domain) + # _logger.debug("DOMAIN: %s" % domain) + return domain + + def enroll_eligible_registrants(self, program_memberships): + # TODO: check if the beneficiary still match the criterias + _logger.debug("-" * 100) + _logger.debug("Checking eligibility for %s", program_memberships) + for rec in self: + beneficiaries = rec._verify_eligibility(program_memberships) + return self.env["g2p.program_membership"].search( + [ + ("partner_id", "in", beneficiaries), + ("program_id", "=", self.program_id.id), + ] + ) + + def verify_cycle_eligibility(self, cycle, membership): + for rec in self: + beneficiaries = rec._verify_eligibility(membership) + return self.env["g2p.cycle.membership"].search([("partner_id", "in", beneficiaries)]) + + def _verify_eligibility(self, membership): + domain = self._prepare_eligible_domain(membership) + _logger.debug("Eligibility domain: %s", domain) + beneficiaries = self.env["res.partner"].search(domain).ids + _logger.debug("Beneficiaries: %s", beneficiaries) + return beneficiaries + + def import_eligible_registrants(self, state="draft"): + # TODO: this only take the first eligibility manager, no the others + # TODO: move this code to the program manager and use the eligibility manager + # like done for enroll_eligible_registrants + + for rec in self: + domain = rec._prepare_eligible_domain() + new_beneficiaries = self.env["res.partner"].search(domain) + # logging.debug("Found %s beneficiaries", len(new_beneficiaries)) + + # Exclude already added beneficiaries + beneficiary_ids = rec.program_id.get_beneficiaries().mapped("partner_id") + + # logging.debug("Excluding %s beneficiaries", len(beneficiary_ids)) + new_beneficiaries = new_beneficiaries - beneficiary_ids + # logging.debug("Finally %s beneficiaries", len(new_beneficiaries)) + + if len(new_beneficiaries) < 1000: + rec._import_registrants(new_beneficiaries, state=state, do_count=True) + else: + rec._import_registrants_async(new_beneficiaries, state=state) + + def _import_registrants_async(self, new_beneficiaries, state="draft"): + self.ensure_one() + program = self.program_id + program.message_post(body="Import of %s beneficiaries started." % len(new_beneficiaries)) + program.write({"locked": True, "locked_reason": "Importing beneficiaries"}) + + jobs = [] + for i in range(0, len(new_beneficiaries), 10000): + jobs.append( + self.delayable(channel="root_program.eligibility_manager")._import_registrants( + new_beneficiaries[i : i + 10000], state + ) + ) + main_job = group(*jobs) + main_job.on_done(self.delayable(channel="root_program.eligibility_manager").mark_import_as_done()) + main_job.delay() + + def mark_import_as_done(self): + self.ensure_one() + self.program_id._compute_eligible_beneficiary_count() + self.program_id._compute_beneficiary_count() + + self.program_id.locked = False + self.program_id.locked_reason = None + self.program_id.message_post(body=_("Import finished.")) + + def _import_registrants(self, new_beneficiaries, state="draft", do_count=False): + logging.info("Importing %s beneficiaries", len(new_beneficiaries)) + logging.info("updated") + beneficiaries_val = [] + for beneficiary in new_beneficiaries: + beneficiaries_val.append((0, 0, {"partner_id": beneficiary.id, "state": state})) + self.program_id.update({"program_membership_ids": beneficiaries_val}) + + if do_count: + # Compute Statistics + self.program_id._compute_eligible_beneficiary_count() + self.program_id._compute_beneficiary_count() diff --git a/g2p_programs/models/managers/entitlement_manager.py b/g2p_programs/models/managers/entitlement_manager.py new file mode 100644 index 000000000..b86ecb1cb --- /dev/null +++ b/g2p_programs/models/managers/entitlement_manager.py @@ -0,0 +1,643 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +import logging + +from odoo import _, api, fields, models + +from odoo.addons.queue_job.delay import group + +_logger = logging.getLogger(__name__) + + +class EntitlementManager(models.Model): + _name = "g2p.program.entitlement.manager" + _description = "Entitlement Manager" + _inherit = "g2p.manager.mixin" + + program_id = fields.Many2one("g2p.program", "Program", ondelete="cascade") + + @api.model + def _selection_manager_ref_id(self): + selection = super()._selection_manager_ref_id() + new_manager = ("g2p.program.entitlement.manager.default", "Default") + if new_manager not in selection: + selection.append(new_manager) + return selection + + +class BaseEntitlementManager(models.AbstractModel): + _name = "g2p.base.program.entitlement.manager" + _inherit = "base.programs.manager" + _description = "Base Entitlement Manager" + + IS_CASH_ENTITLEMENT = True + MIN_ROW_JOB_QUEUE = 200 + MAX_ROW_JOB_QUEUE = 2000 + + name = fields.Char("Manager Name", required=True) + program_id = fields.Many2one("g2p.program", string="Program", required=True) + + def prepare_entitlements(self, cycle, beneficiaries): + """ + This method is used to prepare the entitlement list of the beneficiaries. + :param cycle: The cycle. + :param beneficiaries: The beneficiaries. + :return entitlements: + """ + raise NotImplementedError() + + def set_pending_validation_entitlements(self, cycle): + """Base Entitlement Manager :meth:`set_pending_validate_entitlements` + Set entitlements to pending_validation in a cycle + Override in entitlement manager + + :param cycle: A recordset of cycle + :return: + """ + raise NotImplementedError() + + def _set_pending_validation_entitlements_async(self, cycle, entitlements): + """Set Entitlements to Pending Validation + Base Entitlement Manager :meth:`_set_pending_validation_entitlements_async` + Asynchronous setting of entitlements to pending_validation in a cycle using `job_queue` + + :param cycle: A recordset of cycle + :param entitlements: A recordset of entitlements to process + :return: + """ + entitlements_count = len(entitlements) + _logger.debug("Set entitlements to pending validation asynchronously") + cycle.message_post( + body=_( + "Setting %s entitlements to pending validation has started.", + entitlements_count, + ) + ) + cycle.write( + { + "locked": True, + "locked_reason": _("Set entitlements to pending validation for cycle."), + } + ) + + jobs = [] + for i in range(0, entitlements_count, self.MAX_ROW_JOB_QUEUE): + jobs.append( + self.delayable()._set_pending_validation_entitlements( + entitlements[i : i + self.MAX_ROW_JOB_QUEUE] + ) + ) + main_job = group(*jobs) + main_job.on_done( + self.delayable().mark_job_as_done(cycle, _("Entitlements Set to Pending Validation.")) + ) + main_job.delay() + + def _set_pending_validation_entitlements(self, entitlements): + """ + Base Entitlement Manager :meth:`_set_pending_validation_entitlements` + Synchronous setting of entitlements to pending_validation in a cycle + Override in entitlement manager + + :param entitlements: A recordset of entitlements + :return: + """ + raise NotImplementedError() + + def validate_entitlements(self, cycle): + """Base Entitlement Manager :meth:`validate_entitlements` + Validate entitlements for a cycle + Override in entitlement manager + + :param cycle: A recordset of cycle + :return: + """ + raise NotImplementedError() + + def _validate_entitlements_async(self, cycle, entitlements, entitlements_count): + """Validate Entitlements + Base Entitlement Manager :meth:`_validate_entitlements_async` + Asynchronous validation of entitlements in a cycle using `job_queue` + + :param cycle: A recordset of cycle + :param entitlements: A recordset of entitlements to validate + :param entitlements_count: Integer count of entitlements to validate + :return: + """ + _logger.debug("Validate entitlements asynchronously") + cycle.message_post(body=_("Validate %s entitlements started.", entitlements_count)) + cycle.write( + { + "locked": True, + "locked_reason": _("Validate and approve entitlements for cycle."), + } + ) + + jobs = [] + for i in range(0, entitlements_count, self.MAX_ROW_JOB_QUEUE): + jobs.append(self.delayable()._validate_entitlements(entitlements[i : i + self.MAX_ROW_JOB_QUEUE])) + main_job = group(*jobs) + main_job.on_done(self.delayable().mark_job_as_done(cycle, _("Entitlements Validated and Approved."))) + main_job.delay() + + def _validate_entitlements(self, entitlements): + """ + Base Entitlement Manager :meth:`_validate_entitlements` + Synchronous validation of entitlements in a cycle + Override in entitlement manager + + :param entitlements: A recordset of entitlements to validate + :return: + """ + # Call the program's entitlement manager and validate the entitlements + # TODO: Use a Job attached to the cycle + # TODO: Implement validation workflow + raise NotImplementedError() + + def approve_entitlements(self, entitlements): + """Base Entitlement Manager :meth:`_approve_entitlements` + Approve selected entitlements + Override in entitlement manager + + :param entitlements: Selected entitlements to approve. + :return: + """ + raise NotImplementedError() + + def cancel_entitlements(self, cycle): + """Base Entitlement Manager :meth:`cancel_entitlements` + Cancel entitlements in a cycle + Override in entitlement manager + + :param cycle: A recordset of cycle + :return: + """ + raise NotImplementedError() + + def _cancel_entitlements_async(self, cycle, entitlements, entitlements_count): + """Cancel Entitlements + Base Entitlement Manager :meth:`_cancel_entitlements_async` + Asynchronous cancellation of entitlements in a cycle using `job_queue` + + :param cycle: A recordset of cycle + :param entitlements: A recordset of entitlements to cancel + :param entitlements_count: Integer value of total entitlements to process + :return: + """ + _logger.debug("Cancel entitlements asynchronously") + cycle.message_post(body=_("Cancel %s entitlements started.", entitlements_count)) + cycle.write( + { + "locked": True, + "locked_reason": _("Cancel entitlements for cycle."), + } + ) + + jobs = [] + for i in range(0, entitlements_count, self.MAX_ROW_JOB_QUEUE): + jobs.append(self.delayable()._cancel_entitlements(entitlements[i : i + self.MAX_ROW_JOB_QUEUE])) + main_job = group(*jobs) + main_job.on_done(self.delayable().mark_job_as_done(cycle, _("Entitlements Cancelled."))) + main_job.delay() + + def _cancel_entitlements(self, entitlements): + """ + Base Entitlement Manager :meth:`_cancel_entitlements` + Synchronous cancellation of entitlements in a cycle + Override in entitlement manager + + :param entitlements: A recordset of entitlements to cancel + :return: + """ + raise NotImplementedError() + + def mark_job_as_done(self, cycle, msg): + """ + Base :meth:`mark_job_as_done` + Post a message in the chatter + + :param cycle: A recordset of cycle + :param msg: A string to be posted in the chatter + :return: + """ + self.ensure_one() + cycle.locked = False + cycle.locked_reason = None + cycle.message_post(body=msg) + + def open_entitlements_form(self, cycle): + """ + This method is used to open the list view of entitlements in a cycle. + :param cycle: The cycle. + :return: + """ + raise NotImplementedError() + + def open_entitlement_form(self, rec): + """ + This method is used to open the form view of a selected entitlement. + :param rec: The entitlement. + :return: + """ + raise NotImplementedError() + + def check_fund_balance(self, program_id): + company_id = self.env.user.company_id and self.env.user.company_id.id or None + retval = 0.0 + if company_id: + params = ( + company_id, + program_id, + ) + + # Get the current fund balance + fund_bal = 0.0 + sql = """ + select sum(amount) as total_fund + from g2p_program_fund + where company_id = %s + AND program_id = %s + AND state = 'posted' + """ + self._cr.execute(sql, params) + program_funds = self._cr.dictfetchall() + fund_bal = program_funds[0]["total_fund"] or 0.0 + + # Get the current entitlement totals + total_entitlements = 0.0 + sql = """ + select sum(a.initial_amount) as total_entitlement + from g2p_entitlement a + left join g2p_cycle b on b.id = a.cycle_id + where a.company_id = %s + AND b.program_id = %s + AND a.state = 'approved' + """ + self._cr.execute(sql, params) + entitlements = self._cr.dictfetchall() + total_entitlements = entitlements[0]["total_entitlement"] or 0.0 + + retval = fund_bal - total_entitlements + return retval + + +class DefaultCashEntitlementManager(models.Model): + _name = "g2p.program.entitlement.manager.default" + _inherit = ["g2p.base.program.entitlement.manager", "g2p.manager.source.mixin"] + _description = "Default Entitlement Manager" + + # Set to True so that the UI will display the payment management components + IS_CASH_ENTITLEMENT = True + + amount_per_cycle = fields.Monetary( + currency_field="currency_id", + group_operator="sum", + default=0.0, + ) + amount_per_individual_in_group = fields.Monetary( + currency_field="currency_id", + group_operator="sum", + default=0.0, + ) + max_individual_in_group = fields.Integer( + default=0, + string="Maximum number of individual in group", + help="0 means no limit", + ) + + currency_id = fields.Many2one("res.currency", related="program_id.journal_id.currency_id", readonly=True) + + # Transfer Fees + transfer_fee_pct = fields.Float( + "Transfer Fee(%)", + digits=(5, 2), + default=0.0, + help="Transfer fee will be a percentage of amount", + ) + transfer_fee_amt = fields.Monetary( + "Transfer Fee Amount", + default=0.0, + currency_field="currency_id", + help="Set fixed transfer fee amount", + ) + + # Group able to validate the payment + # Todo: Create a record rule for payment_validation_group + entitlement_validation_group_id = fields.Many2one("res.groups", string="Entitlement Validation Group") + + @api.onchange("transfer_fee_pct") + def on_transfer_fee_pct_change(self): + if self.transfer_fee_pct > 0.0: + self.transfer_fee_amt = 0.0 + + @api.onchange("transfer_fee_amt") + def on_transfer_fee_amt_change(self): + if self.transfer_fee_amt > 0.0: + self.transfer_fee_pct = 0.0 + + def prepare_entitlements(self, cycle, beneficiaries): + """Prepare entitlements. + This method is used to prepare the entitlement list of the beneficiaries. + :param cycle: The cycle. + :param beneficiaries: The beneficiaries. + :return entitlements: + """ + benecifiaries_ids = beneficiaries.mapped("partner_id.id") + + benecifiaries_with_entitlements = ( + self.env["g2p.entitlement"] + .search([("cycle_id", "=", cycle.id), ("partner_id", "in", benecifiaries_ids)]) + .mapped("partner_id.id") + ) + entitlements_to_create = [ + benecifiaries_id + for benecifiaries_id in benecifiaries_ids + if benecifiaries_id not in benecifiaries_with_entitlements + ] + + entitlement_start_validity = cycle.start_date + entitlement_end_validity = cycle.end_date + entitlement_currency = self.currency_id.id + + beneficiaries_with_entitlements_to_create = self.env["res.partner"].browse(entitlements_to_create) + + individual_count = beneficiaries_with_entitlements_to_create.count_individuals() + individual_count_map = dict(individual_count) + + entitlements = [] + for beneficiary_id in beneficiaries_with_entitlements_to_create: + amount = self._calculate_amount(beneficiary_id, individual_count_map.get(beneficiary_id.id, 0)) + transfer_fee = 0.0 + if self.transfer_fee_pct > 0.0: + transfer_fee = amount * (self.transfer_fee_pct / 100.0) + elif self.transfer_fee_amt > 0.0: + transfer_fee = self.transfer_fee_amt + entitlements.append( + { + "cycle_id": cycle.id, + "partner_id": beneficiary_id.id, + "initial_amount": amount, + "transfer_fee": transfer_fee, + "currency_id": entitlement_currency, + "state": "draft", + "is_cash_entitlement": True, + "valid_from": entitlement_start_validity, + "valid_until": entitlement_end_validity, + } + ) + if entitlements: + return self.env["g2p.entitlement"].create(entitlements) + return None + + def set_pending_validation_entitlements(self, cycle): + """Set entitlements to pending validation. + Default Entitlement Manager :meth:`set_pending_validation_entitlements` + Set entitlements to pending_validation in a cycle + + :param cycle: A recordset of cycle + :return: + """ + # Get the number of entitlements in cycle + entitlements = cycle.get_entitlements( + ["draft"], + entitlement_model="g2p.entitlement", + ) + entitlements_count = len(entitlements) + if entitlements_count < self.MIN_ROW_JOB_QUEUE: + self._set_pending_validation_entitlements(entitlements) + + else: + self._set_pending_validation_entitlements_async(cycle, entitlements) + + def _set_pending_validation_entitlements(self, entitlements): + """Set entitlements to pending validation. + Default Entitlement Manager :meth:`_set_pending_validation_entitlements` + Synchronous setting of entitlements to pending_validation in a cycle + + :param entitlements: A recordset of entitlements + :return: + """ + entitlements.update({"state": "pending_validation"}) + + def validate_entitlements(self, cycle): + """Validate entitlements. + Default Entitlement Manager :meth:`validate_entitlements` + Validate entitlements in a cycle + + :param cycle: A recordset of cycle + :return: + """ + # Get the number of entitlements in cycle + entitlements = cycle.get_entitlements( + ["draft", "pending_validation"], + entitlement_model="g2p.entitlement", + ) + entitlements_count = len(entitlements) + if entitlements_count < self.MIN_ROW_JOB_QUEUE: + err, message = self._validate_entitlements(entitlements) + if err > 0: + kind = "danger" + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Entitlement"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + else: + kind = "success" + approved_entitlements_count = len(entitlements) - err # Calculate the approved count + if err != 0: + message = _( + f"{approved_entitlements_count} Entitlements are successfully approved and" + f"{err} are not approved." + ) + else: + message = _(f"{approved_entitlements_count} Entitlements are successfully approved.") + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Entitlement"), + "message": message, + "sticky": True, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + else: + self._validate_entitlements_async(cycle, entitlements, entitlements_count) + + def _validate_entitlements(self, entitlements): + """Validate entitlements. + Default Entitlement Manager :meth:`_validate_entitlements` + Synchronous validation of entitlements in a cycle + + :param entitlements: A recordset of entitlements to validate + :return err: Integer number of errors + :return message: String description of the error + """ + err, message = self.approve_entitlements(entitlements) + return err, message + + def cancel_entitlements(self, cycle): + """ + Default Entitlement Manager :meth:`cancel_entitlements` + Cancel entitlements in a cycle + + :param cycle: A recordset of cycle + :return: + """ + # Get the number of entitlements in cycle + entitlements = cycle.get_entitlements( + ["draft", "pending_validation", "approved"], + entitlement_model="g2p.entitlement", + ) + entitlements_count = len(entitlements) + if entitlements_count < self.MIN_ROW_JOB_QUEUE: + self._cancel_entitlements(entitlements) + else: + self._cancel_entitlements_async(cycle, entitlements, entitlements_count) + + def _cancel_entitlements(self, entitlements): + """ + Default Entitlement Manager :meth:`_cancel_entitlements` + Synchronous cancellation of entitlements in a cycle + + :param entitlements: A recordset of entitlements to cancel + :return: + """ + entitlements.update({"state": "cancelled"}) + + def _calculate_amount(self, beneficiary, num_individuals): + total = self.amount_per_cycle + if beneficiary.is_group: + if num_individuals: + if self.max_individual_in_group: + num_individuals = min(num_individuals, self.max_individual_in_group) + + total += self.amount_per_individual_in_group * float(num_individuals) + return total + + def approve_entitlements(self, entitlements): + """Approve entitlements. + Default Entitlement Manager :meth:`approve_entitlements` + Approve selected entitlements + + :param entitlements: Selected entitlements to approve + :return state_err: Integer number of errors + :return message: String description of the errors + """ + amt = 0.0 + state_err = 0 + message = "" + sw = 0 + for rec in entitlements: + if rec.state in ("draft", "pending_validation"): + fund_balance = self.check_fund_balance(rec.cycle_id.program_id.id) - amt + if fund_balance >= rec.initial_amount: + amt += rec.initial_amount + # Prepare journal entry (account.move) via account.payment + amount = rec.initial_amount + new_service_fee = None + if rec.transfer_fee > 0.0: + amount -= rec.transfer_fee + # Incurred Fees (transfer fees) + payment = { + "partner_id": rec.partner_id.id, + "payment_type": "outbound", + "amount": rec.transfer_fee, + "currency_id": rec.journal_id.currency_id.id, + "journal_id": rec.journal_id.id, + "partner_type": "supplier", + "ref": "Service Fee: Code: %s" % rec.code, + } + new_service_fee = self.env["account.payment"].create(payment) + + # Fund Disbursed (amount - transfer fees) + payment = { + "partner_id": rec.partner_id.id, + "payment_type": "outbound", + "amount": amount, + "currency_id": rec.journal_id.currency_id.id, + "journal_id": rec.journal_id.id, + "partner_type": "supplier", + "ref": "Fund disbursed to beneficiary: Code: %s" % rec.code, + } + new_payment = self.env["account.payment"].create(payment) + + rec.update( + { + "disbursement_id": new_payment.id, + "service_fee_disbursement_id": new_service_fee and new_service_fee.id or None, + "state": "approved", + "date_approved": fields.Date.today(), + } + ) + else: + message = _( + "The fund for the program: %(program)s [%(fund).2f] " + + "is insufficient for the entitlement: %(entitlement)s" + ) % { + "program": rec.cycle_id.program_id.name, + "fund": fund_balance, + "entitlement": rec.code, + } + # Stop the process and return an error + return (1, message) + else: + state_err += 1 + if sw == 0: + sw = 1 + message = _("Entitlement State Error! Entitlements not in 'pending validation' state:\n") + message += _("Program: %(prg)s, Beneficiary: %(partner)s.\n") % { + "prg": rec.cycle_id.program_id.name, + "partner": rec.partner_id.name, + } + + return (state_err, message) + + def open_entitlements_form(self, cycle): + # self.ensure_one() + action = { + "name": _("Cycle Entitlements"), + "type": "ir.actions.act_window", + "res_model": "g2p.entitlement", + "context": { + "create": False, + "default_cycle_id": cycle.id, + # "search_default_approved_state": 1, + }, + "view_mode": "list,form", + "views": [ + [self.env.ref("g2p_programs.view_entitlement_tree").id, "tree"], + [self.env.ref("g2p_programs.view_entitlement_form").id, "form"], + ], + "domain": [("cycle_id", "=", cycle.id)], + } + return action + + def open_entitlement_form(self, rec): + return { + "name": "Entitlement", + "view_mode": "form", + "res_model": "g2p.entitlement", + "res_id": rec.id, + "view_id": self.env.ref("g2p_programs.view_entitlement_form").id, + "type": "ir.actions.act_window", + "target": "new", + } + + @api.model + def _group_entitlements_by_cycle(self, entitlements): + cycles = set(map(lambda x: x.cycle_id, entitlements)) + cycle_entitlements = [entitlements.filtered_domain([("cycle_id", "=", cycle.id)]) for cycle in cycles] + return cycles, cycle_entitlements diff --git a/g2p_programs/models/managers/manager_mixin.py b/g2p_programs/models/managers/manager_mixin.py new file mode 100644 index 000000000..51bfb5abe --- /dev/null +++ b/g2p_programs/models/managers/manager_mixin.py @@ -0,0 +1,48 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +from odoo import api, fields, models + + +class ManagerMixin(models.AbstractModel): + """Manager mixin.""" + + _name = "g2p.manager.mixin" + _description = "Manager Mixin" + + manager_id = fields.Integer("Manager ID") + manager_ref_id = fields.Reference(string="Manager", selection="_selection_manager_ref_id", required=True) + + @api.model + def _selection_manager_ref_id(self): + return [] + + def open_manager_form(self): + self.ensure_one() + if self.manager_ref_id: + # Get the res_model and res_id from the manager_ref_id (reference field) + manager_ref_id = str(self.manager_ref_id) + s = manager_ref_id.find("(") + res_model = manager_ref_id[:s] + res_id = self.manager_ref_id.id + if res_id: + action = self.env[res_model].get_formview_action() + action.update( + { + "views": [(self.env[res_model].get_manager_view_id(), "form")], + "res_id": res_id, + "target": "new", + "context": self.env.context, + "flags": {"mode": "edit"}, + } + ) + return action + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": "ERROR!", + "message": "The Manager field must be filled-up.", + "sticky": False, + "type": "danger", + }, + } diff --git a/g2p_programs/models/managers/notification_manager.py b/g2p_programs/models/managers/notification_manager.py new file mode 100644 index 000000000..a20cac79e --- /dev/null +++ b/g2p_programs/models/managers/notification_manager.py @@ -0,0 +1,68 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +from odoo import api, fields, models + + +class Notification(models.Model): + _name = "g2p.program.notification.manager" + _description = "Program Notification Manager" + _inherit = "g2p.manager.mixin" + + program_id = fields.Many2one("g2p.program", "Program", ondelete="cascade") + + @api.model + def _selection_manager_ref_id(self): + selection = super()._selection_manager_ref_id() + new_manager = ("g2p.program.notification.manager.sms", "SMS Notification") + if new_manager not in selection: + selection.append(new_manager) + return selection + + +class BaseNotificationManager(models.AbstractModel): + """ + This component is used to notify beneficiaries of their enrollment and other events related to the program + """ + + _name = "g2p.base.program.notification.manager" + _description = "Base Program Notification Manager" + + name = fields.Char("Manager Name", required=True) + program_id = fields.Many2one("g2p.program", string="Program", required=True) + on_enrolled_in_program = fields.Boolean(default=True) + on_cycle_started = fields.Boolean(default=True) + on_cycle_ended = fields.Boolean(default=True) + + def on_enrolled_in_program(self, program_memberships): + return + + def on_cycle_started(self, program_memberships, cycle): + return + + def on_cycle_ended(self, program_memberships, cycle): + return + + +class SMSNotificationManager(models.Model): + _name = "g2p.program.notification.manager.sms" + _inherit = ["g2p.base.program.notification.manager", "g2p.manager.source.mixin"] + _description = "SMS Program Notification Manager" + + on_enrolled_in_program_template = fields.One2many("sms.template", "g2p_sms_id") + on_cycle_started_template = fields.One2many("sms.template", "g2p_sms_id") + on_cycle_ended_template = fields.One2many("sms.template", "g2p_sms_id") + + # TODO: render the templates and send the sms using a job + def on_enrolled_in_program(self, program_memberships): + return + + def on_cycle_started(self, program_memberships, cycle): + return + + def on_cycle_ended(self, program_memberships, cycle): + return + + +class SMSTemplate(models.Model): + _inherit = "sms.template" + + g2p_sms_id = fields.Many2one("g2p.program.notification.manager.sms", "SMS Program Notification Manager") diff --git a/g2p_programs/models/managers/payment_manager.py b/g2p_programs/models/managers/payment_manager.py new file mode 100644 index 000000000..fc17aa6f7 --- /dev/null +++ b/g2p_programs/models/managers/payment_manager.py @@ -0,0 +1,391 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +# import base64 +# import csv +# from io import StringIO +import logging +from uuid import uuid4 + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + +from odoo.addons.queue_job.delay import group + +_logger = logging.getLogger(__name__) + + +class PaymentManager(models.Model): + _name = "g2p.program.payment.manager" + _description = "Payment Manager" + _inherit = "g2p.manager.mixin" + + program_id = fields.Many2one("g2p.program", "Program", ondelete="cascade") + + @api.model + def _selection_manager_ref_id(self): + selection = super()._selection_manager_ref_id() + new_manager = ("g2p.program.payment.manager.default", "Default") + if new_manager not in selection: + selection.append(new_manager) + return selection + + +class BasePaymentManager(models.AbstractModel): + _name = "g2p.base.program.payment.manager" + _inherit = "base.programs.manager" + _description = "Base Payment Manager" + + name = fields.Char("Manager Name", required=True) + program_id = fields.Many2one("g2p.program", string="Program", required=True) + + def prepare_payments(self, entitlements): + """ + This method is used to prepare the payment list of the entitlements. + :param entitlements: The entitlements. + :return: + """ + raise NotImplementedError() + + def send_payments(self, batches): + """ + This method is used to send the payment list by batch. + :param batches: The payment batches. + :return: + """ + raise NotImplementedError() + + def validate_accounts(self, entitlements): + """ + This method is used to that accounts exist to pay the entitlements + :param entitlements: The list of entitlements + :return: + """ + raise NotImplementedError() + + def mark_job_as_done(self, cycle, msg): + """ + Base :meth:`mark_job_as_done` + Post a message in the chatter + + :param cycle: A recordset of cycle + :param msg: A string to be posted in the chatter + :return: + """ + self.ensure_one() + cycle.locked = False + cycle.locked_reason = None + cycle.message_post(body=msg) + + +class DefaultFilePaymentManager(models.Model): + _name = "g2p.program.payment.manager.default" + _inherit = ["g2p.base.program.payment.manager", "g2p.manager.source.mixin"] + _description = "Default Payment Manager" + + MAX_PAYMENTS_FOR_SYNC_PREPARE = 200 + MAX_BATCHES_FOR_SYNC_SEND = 50 + + currency_id = fields.Many2one("res.currency", related="program_id.journal_id.currency_id", readonly=True) + + create_batch = fields.Boolean("Automatically Create Batch") + + batch_tag_ids = fields.Many2many( + "g2p.payment.batch.tag", + "g2p_pay_batch_tag_pay_manager_def", + string="Batch Tags", + ondelete="cascade", + ) + # batch_tag_ids = fields.One2many("g2p.payment.batch.tag", + # "default_payment_manager_id", string="Batch Tags") + + @api.onchange("create_batch") + def on_change_create_batch(self): + if self.create_batch: + existing_batch = ( + self.env["g2p.payment.batch.tag"] + .sudo() + .search( + [ + ("name", "=", f"Default {self.program_id.name}"), + ("order", "=", 1), + ("max_batch_size", "=", 500), + ], + limit=1, + ) + ) + + if existing_batch: + batch_id = existing_batch + else: + batch_id = ( + self.env["g2p.payment.batch.tag"] + .sudo() + .create( + { + "name": f"Default {self.program_id.name}", + "order": 1, + "domain": [], + "max_batch_size": 500, + } + ) + ) + + self.batch_tag_ids = [(4, batch_id.id)] + else: + self.batch_tag_ids = [(5,)] + + @api.constrains("batch_tag_ids") + def constrains_batch_tag_ids(self): + for rec in self: + if rec.create_batch: + if not len(rec.batch_tag_ids): + raise ValidationError(_("Batch Tags list cannot be empty.")) + if rec.batch_tag_ids.sorted("order")[-1].domain != "[]": + raise ValidationError(_("Last tag in the Batch Tags list must contain empty domain.")) + + def prepare_payments(self, cycle, entitlements=None): + if not entitlements: + entitlements = cycle.entitlement_ids.filtered(lambda a: a.state == "approved") + else: + entitlements = entitlements.filtered(lambda a: a.state == "approved") + entitlements_count = len(entitlements) + if entitlements_count: + if entitlements_count < self.MAX_PAYMENTS_FOR_SYNC_PREPARE: + payments, batches = self._prepare_payments(cycle, entitlements) + if payments: + kind = "success" + message = _( + "Payment batch successfully created for %s beneficiaries.", + len(payments), + ) + sticky = False + else: + kind = "danger" + message = _("There are no new payments issued!") + sticky = False + else: + self._prepare_payments_async(cycle, entitlements, entitlements_count) + kind = "success" + message = _("Preparing Payments Asynchronously.") + sticky = True + else: + kind = "danger" + message = _("All entitlements selected are not approved!") + sticky = False + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Payment"), + "message": message, + "sticky": sticky, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def _prepare_payments(self, cycle, entitlements): + if not entitlements: + return None, None + # Filter out entitlements without payments + entitlements = entitlements.filtered( + lambda x: x.state == "approved" and all(payment.status == "failed" for payment in x.payment_ids) + ) + + is_create_batch = self.create_batch + + # payments is a recordset of g2p.payment + # batches is a recordset of g2p.payment.batch + # curr_batch is loop variable. + payments = None + batches = None + curr_batch = None + for batch_tag in self.batch_tag_ids: + domain = self._safe_eval(batch_tag.domain) + # The following filtered_domain line is causing a problem in a particular use case + # hence using another way for now + # tag_entitlements = entitlements.filtered_domain(domain) + tag_entitlements = entitlements & entitlements.search(domain) + entitlements -= tag_entitlements + max_batch_size = batch_tag.max_batch_size + + for i, entitlement_id in enumerate(tag_entitlements): + payment = self.env["g2p.payment"].create( + { + "name": str(uuid4()), + "entitlement_id": entitlement_id.id, + "cycle_id": entitlement_id.cycle_id.id, + "amount_issued": entitlement_id.initial_amount, + "payment_fee": entitlement_id.transfer_fee, + "state": "issued", + } + ) + if payment.partner_id.bank_ids: + payment.account_number = payment.partner_id.bank_ids[0].acc_number + else: + payment.account_number = None + + if not payments: + payments = payment + else: + payments += payment + if is_create_batch: + if i % max_batch_size == 0: + curr_batch = self.env["g2p.payment.batch"].create( + { + "name": str(uuid4()), + "cycle_id": cycle.id, + "stats_datetime": fields.Datetime.now(), + "tag_id": batch_tag.id, + } + ) + if not batches: + batches = curr_batch + else: + batches += curr_batch + curr_batch.payment_ids = [(4, payment.id)] + payment.batch_id = curr_batch + return payments, batches + + def _prepare_payments_async(self, cycle, entitlements, entitlements_count): + _logger.debug("Prepare Payments asynchronously") + cycle.message_post(body=_("Prepare payments started for %s entitlements.", entitlements_count)) + cycle.write( + { + "locked": True, + "locked_reason": _("Prepare payments for entitlements in cycle."), + } + ) + + # Right now this is not divided into subjobs + jobs = [ + self.delayable()._prepare_payments(cycle, entitlements), + ] + main_job = group(*jobs) + main_job.on_done(self.delayable().mark_job_as_done(cycle, _("Prepared payments."))) + main_job.delay() + + def send_payments(self, batches): + # TODO: Return client action with proper message. + batches_count = len(batches) + if batches_count < self.MAX_BATCHES_FOR_SYNC_SEND: + return self._send_payments(batches) + else: + cycles, cycle_batches = self._group_batches_by_cycle(batches) + for batches in cycle_batches: + cycle = batches[0].cycle_id + self._send_payments_async(cycle, batches) + message = _("Sending Payments Asynchronously") + kind = "success" + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Payment"), + "message": message, + "sticky": True, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def _send_payments(self, batches): + # Create a payment list (CSV) + # _logger.debug("DEBUG! send_payments Manager: DEFAULT") + if not batches: + message = _("No payment batches to process.") + kind = "warning" + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Payment"), + "message": message, + "sticky": True, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + # TODO: Removed CSV Creation part after confirmation with team for timebeing. + # else: + # for rec in batches: + # filename = f"{rec.name}.csv" + # data = StringIO() + # csv_writer = csv.writer(data, quoting=csv.QUOTE_MINIMAL) + # header = [ + # "row_number", + # "internal_payment_reference", + # "account_number", + # "beneficiary_name", + # "amount", + # "currency", + # "details_of_payment", + # ] + # csv_writer.writerow(header) + # for row, payment_id in enumerate(rec.payment_ids): + # account_number = "" + # if payment_id.partner_id.bank_ids: + # account_number = payment_id.partner_id.bank_ids[0].iban + # details_of_payment = ( + # f"{payment_id.program_id.name} - {payment_id.cycle_id.name}" + # ) + # row = [ + # row, + # payment_id.name, + # account_number, + # payment_id.partner_id.name, + # payment_id.amount_issued, + # payment_id.currency_id.name, + # details_of_payment, + # ] + # csv_writer.writerow(row) + # csv_data = base64.encodebytes(bytearray(data.getvalue(), "utf-8")) + # # Attach the generated CSV to payment batch + # self.env["ir.attachment"].create( + # { + # "name": filename, + # "res_model": "g2p.payment.batch", + # "res_id": rec.id, + # "type": "binary", + # "store_fname": filename, + # "mimetype": "text/csv", + # "datas": csv_data, + # } + # ) + # # _logger.debug("DEFAULT Payment Manager: data: %s" % csv_data) + # message = _("Payment CSV created successfully") + # kind = "success" + + def _send_payments_async(self, cycle, batches): + _logger.debug("Send Payments asynchronously") + cycle.message_post(body=_("Send payments started for %s batches.", len(batches))) + cycle.write( + { + "locked": True, + "locked_reason": _("Send payments for batches in cycle."), + } + ) + + # Right now this is not divided into subjobs + jobs = [ + self.delayable()._send_payments(batches), + ] + main_job = group(*jobs) + main_job.on_done(self.delayable().mark_job_as_done(cycle, _("Send payments completed."))) + main_job.delay() + + @api.model + def _group_batches_by_cycle(self, batches): + cycles = set(map(lambda x: x.cycle_id, batches)) + cycle_batches = [batches.filtered_domain([("cycle_id", "=", cycle.id)]) for cycle in cycles] + return cycles, cycle_batches + + def _get_account_number(self, entitlement): + return entitlement.partner_id.get_payment_token(entitlement.program_id) diff --git a/g2p_programs/models/managers/program_manager.py b/g2p_programs/models/managers/program_manager.py new file mode 100644 index 000000000..189d568e9 --- /dev/null +++ b/g2p_programs/models/managers/program_manager.py @@ -0,0 +1,249 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +import logging +from datetime import datetime, timedelta + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + +from odoo.addons.queue_job.delay import group + +from ..programs import G2PProgram + +_logger = logging.getLogger(__name__) + + +class ProgramManager(models.Model): + _name = "g2p.program.manager" + _description = "Program Manager" + _inherit = "g2p.manager.mixin" + + program_id = fields.Many2one("g2p.program", "Program", ondelete="cascade") + + @api.model + def _selection_manager_ref_id(self): + selection = super()._selection_manager_ref_id() + new_manager = ("g2p.program.manager.default", "Default") + if new_manager not in selection: + selection.append(new_manager) + return selection + + +class BaseProgramManager(models.AbstractModel): + _name = "g2p.base.program.manager" + _description = "Base Program Manager" + + MIN_ROW_JOB_QUEUE = 200 + MAX_ROW_JOB_QUEUE = 10000 + + name = fields.Char("Manager Name", required=True) + program_id = fields.Many2one("g2p.program", string="Program", required=True) + + def last_cycle(self): + """ + Returns the last cycle of the program + Returns: + cycle: the last cycle of the program + """ + # TODO: implement this + # sort the program's cycle by sequence and return the last one + raise NotImplementedError() + + def new_cycle(self): + """ + Create the next cycle of the program + Returns: + cycle: the newly created cycle + """ + raise NotImplementedError() + + def enroll_eligible_registrants(self, state=None): + """ + This method is used to enroll the beneficiaries in a program. + Returns: + bool: True if the beneficiaries were enrolled, False otherwise. + """ + raise NotImplementedError() + + def mark_enroll_eligible_as_done(self): + """Complete the enrollment of eligible beneficiaries. + Base :meth:`mark_enroll_eligible_as_done`. + This is executed when all the jobs are completed. + Post a message in the chatter. + :return: + """ + self.ensure_one() + self.program_id.locked = False + self.program_id.locked_reason = None + self.program_id.message_post(body=_("Eligibility check finished.")) + + # Compute Statistics + self.program_id._compute_eligible_beneficiary_count() + self.program_id._compute_beneficiary_count() + + +class DefaultProgramManager(models.Model): + _name = "g2p.program.manager.default" + _inherit = ["g2p.base.program.manager", "g2p.manager.source.mixin"] + _description = "Default Program Manager" + + number_of_cycles = fields.Integer(default=1) + copy_last_cycle_on_new_cycle = fields.Boolean(string="Copy previous cycle", default=True) + + # TODO: review 'calendar.recurrence' module, it seem the way to go for managing the recurrence + # recurrence_id = fields.Many2one('calendar.recurrence', related='event_id.recurrence_id') + + def last_cycle(self): + """ + Returns the last cycle of the program + Returns: + cycle: the last cycle of the program + """ + cycles = self.env["g2p.cycle"].search( + [("program_id", "=", self.program_id.id)], order="sequence desc", limit=1 + ) + return cycles and cycles[0] or None + + def new_cycle(self): + """ + Create the next cycle of the program + Returns: + cycle: the newly created cycle + """ + self.ensure_one() + + for rec in self: + cycles = self.env["g2p.cycle"].search([("program_id", "=", rec.program_id.id)]) + _logger.debug("cycles: %s", cycles) + cm = rec.program_id.get_manager(G2PProgram.MANAGER_CYCLE) + if len(cycles) == 0: + _logger.debug("cycle manager: %s", cm) + new_cycle = cm.new_cycle("Cycle 1", datetime.now(), 1) + else: + last_cycle = rec.last_cycle() + new_sequence = last_cycle.sequence + 1 + start_date = last_cycle.end_date + timedelta(days=1) + new_cycle = cm.new_cycle( + f"Cycle {new_sequence}", + start_date, + new_sequence, + ) + + # Copy the enrolled beneficiaries + if new_cycle is not None: + program_beneficiaries = rec.program_id.get_beneficiaries("enrolled").mapped("partner_id.id") + cm.add_beneficiaries(new_cycle, program_beneficiaries, "enrolled") + return new_cycle + + def enroll_eligible_registrants(self, state=None): + self.ensure_one() + # if state is None: + # states = ["draft"] + if isinstance(state, str): + states = [state] + else: + states = state + + program = self.program_id + members_count = program.get_beneficiaries(state=states, count=True) + _logger.debug("members: %s", members_count) + + eligibility_managers = program.get_managers(program.MANAGER_ELIGIBILITY) + if len(eligibility_managers) == 0: + raise UserError(_("No Eligibility Manager defined.")) + elif members_count < self.MIN_ROW_JOB_QUEUE: + count = self._enroll_eligible_registrants(state, do_count=True) + un_enrolled_count = program.get_beneficiaries(state="not_eligible", count=True) + enrolled_count = program.get_beneficiaries(state="enrolled", count=True) + if (program.beneficiaries_count == enrolled_count) and not count: + message = _("No new beneficiaries enrolled.") + else: + message = _( + f"Enrolled Beneficiaries: {count} successfully and {un_enrolled_count} unsuccessfully." + ) + kind = "success" + sticky = False + else: + self._enroll_eligible_registrants_async(state, members_count) + message = _("Eligibility check of %s beneficiaries started.", members_count) + kind = "warning" + sticky = True + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Enrollment"), + "message": message, + "sticky": sticky, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def _enroll_eligible_registrants_async(self, states, members_count): + self.ensure_one() + _logger.debug("members: %s", members_count) + program = self.program_id + program.message_post(body=_("Eligibility check of %s beneficiaries started.", members_count)) + program.write({"locked": True, "locked_reason": "Eligibility check of beneficiaries"}) + + jobs = [] + for i in range(0, members_count, self.MAX_ROW_JOB_QUEUE): + jobs.append( + self.delayable(channel="root_program.program_manager")._enroll_eligible_registrants( + states, i, self.MAX_ROW_JOB_QUEUE + ) + ) + main_job = group(*jobs) + main_job.on_done( + self.delayable(channel="root_program.program_manager").mark_enroll_eligible_as_done() + ) + main_job.delay() + + def _enroll_eligible_registrants(self, states, offset=0, limit=None, do_count=False): + """Enroll Eligible Registrants + + :param states: List of states to be used in domain filter + :param offset: Optional integer value for the ORM search offset + :param limit: Optional integer value for the ORM search limit + :param do_count: Boolean - set to False to not run compute functions + :return: Integer - count of not enrolled members + """ + program = self.program_id + members = program.get_beneficiaries(state=states, offset=offset, limit=limit, order="id") + + member_before = members + + eligibility_managers = program.get_managers(program.MANAGER_ELIGIBILITY) + # TODO: Handle multiple eligibility managers properly + for el in eligibility_managers: + members = el.enroll_eligible_registrants(members) + # enroll the one not already enrolled: + _logger.debug("members filtered: %s", members) + not_enrolled = members.filtered(lambda m: m.state != "enrolled") + _logger.debug("not_enrolled: %s", not_enrolled) + not_enrolled.write( + { + "state": "enrolled", + "enrollment_date": fields.Datetime.now(), + } + ) + # dis-enroll the one not eligible anymore: + enrolled_members_ids = members.ids + members_to_remove = member_before.filtered( + lambda m: m.state != "not_eligible" and m.id not in enrolled_members_ids + ) + # _logger.debug("members_to_remove: %s", members_to_remove) + members_to_remove.write( + { + "state": "not_eligible", + } + ) + + if do_count: + # Compute Statistics + program._compute_eligible_beneficiary_count() + program._compute_beneficiary_count() + + return len(not_enrolled) diff --git a/g2p_programs/models/managers/recurrence_mixin.py b/g2p_programs/models/managers/recurrence_mixin.py new file mode 100644 index 000000000..4d5b7bcd8 --- /dev/null +++ b/g2p_programs/models/managers/recurrence_mixin.py @@ -0,0 +1,76 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +from odoo import fields, models + +from odoo.addons.calendar.models import calendar_recurrence + + +class RecurrenceMixin(models.Model): + """Cycle Recurrence mixin.""" + + _name = "g2p.cycle.recurrence.mixin" + _description = "Cycle Recurrence Mixin" + _inherit = "calendar.recurrence" + + # Overwrite field to add readonly to False + name = fields.Char(required=True, readonly=False) + + # Overwrite field from calendar.recurrence to define string and re-define default value + rrule_type = fields.Selection( + calendar_recurrence.RRULE_TYPE_SELECTION, + string="Recurrence", + default="monthly", + help="Let the event automatically repeat at that interval", + readonly=False, + required=True, + ) + + # Overwrite field from calendar.recurrence to define default value + byday = fields.Selection(calendar_recurrence.BYDAY_SELECTION, string="By day", default="1") + + # Overwrite field from calendar.recurrence to define default value + count = fields.Integer(default=10) + + # Overwrite field from calendar.recurrence to add compute argument, + # store = True, and re-define default value + interval = fields.Integer(default=1, compute="_compute_interval", store=True) + + # Overwrite to always return False + def _is_allday(self): + return False + + def _get_recurrent_field_values(self): + for rec in self: + return { + "byday": rec.byday, + "until": rec.until, + "rrule_type": rec.rrule_type, + "month_by": rec.month_by, + "event_tz": rec.event_tz, + "rrule": rec.rrule, + "interval": rec.interval, + "count": rec.count, + "end_type": rec.end_type, + "mon": rec.mon, + "tue": rec.tue, + "wed": rec.wed, + "thu": rec.thu, + "fri": rec.fri, + "sat": rec.sat, + "sun": rec.sun, + "day": rec.day, + "weekday": rec.weekday, + } + + def _compute_interval(self): + """ + Copy value of a field to interval + """ + raise NotImplementedError() + + def _compute_name(self): + # Overwrite this function of calendar.recurrence to do nothing + pass + + def _inverse_rrule(self): + # Overwrite this function of calendar.recurrence to do nothing + pass diff --git a/g2p_programs/models/managers/source_mixin.py b/g2p_programs/models/managers/source_mixin.py new file mode 100644 index 000000000..afe916f75 --- /dev/null +++ b/g2p_programs/models/managers/source_mixin.py @@ -0,0 +1,57 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +from odoo import api, models + + +class ManagerSourceMixin(models.AbstractModel): + """Manager Data Source mixin.""" + + _name = "g2p.manager.source.mixin" + _description = "Manager Data Source Mixin" + + @api.model + def create(self, vals): + """Override to update reference to source on the manager.""" + res = super().create(vals) + # TODO: Seems not required but this causes error when called from the create program wizard. + # Disable for now + # if self.env.context.get("active_model"): + # # update reference on manager + # self.env[self.env.context["active_model"]].browse( + # self.env.context["active_id"] + # ).manager_id = res.id + return res + + def unlink(self): + for rec in self: + managers = self.get_managers_for_unlink(f"{rec._name},{rec.id}") + if managers: + managers.unlink() + return super().unlink() + + @api.model + def get_managers_for_unlink(self, manager_ref): + managers = self.env["g2p.eligibility.manager"].search([("manager_ref_id", "=", manager_ref)]) + if managers: + return managers + managers = self.env["g2p.deduplication.manager"].search([("manager_ref_id", "=", manager_ref)]) + if managers: + return managers + managers = self.env["g2p.program.notification.manager"].search([("manager_ref_id", "=", manager_ref)]) + if managers: + return managers + managers = self.env["g2p.program.manager"].search([("manager_ref_id", "=", manager_ref)]) + if managers: + return managers + managers = self.env["g2p.cycle.manager"].search([("manager_ref_id", "=", manager_ref)]) + if managers: + return managers + managers = self.env["g2p.program.entitlement.manager"].search([("manager_ref_id", "=", manager_ref)]) + if managers: + return managers + managers = self.env["g2p.program.payment.manager"].search([("manager_ref_id", "=", manager_ref)]) + if managers: + return managers + + def get_manager_view_id(self): + """Retrieve form view.""" + return self.env["ir.ui.view"].search([("model", "=", self._name), ("type", "=", "form")], limit=1).id diff --git a/g2p_programs/models/payment.py b/g2p_programs/models/payment.py new file mode 100644 index 000000000..7f0de3f69 --- /dev/null +++ b/g2p_programs/models/payment.py @@ -0,0 +1,157 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +import logging +from uuid import uuid4 + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + +_logger = logging.getLogger(__name__) + + +class G2PPayment(models.Model): + _name = "g2p.payment" + _description = "Payment" + # _inherit = ["disable.edit.mixin"] + _order = "id desc" + + # DISABLE_EDIT_DOMAIN = [("status", "=", "paid")] + + name = fields.Char("Internal Reference #", default=str(uuid4()), readonly=True, copy=False) + entitlement_id = fields.Many2one("g2p.entitlement", "Entitlement", required=True) + cycle_id = fields.Many2one("g2p.cycle", "Cycle", readonly=True) + program_id = fields.Many2one("g2p.program", related="cycle_id.program_id", readonly=True) + partner_id = fields.Many2one( + "res.partner", + related="entitlement_id.partner_id", + string="Beneficiary", + readonly=True, + ) + + batch_id = fields.Many2one("g2p.payment.batch", "Payment Batch") + + state = fields.Selection( + selection=[ + ("issued", "Issued"), + ("sent", "Sent"), + ("reconciled", "Reconciled"), + ], + string="Status", + required=True, + default="issued", + ) + status = fields.Selection( + selection=[ + ("paid", "Paid"), + ("failed", "Failed"), + ], + string="Payment Status", + ) + status_is_final = fields.Boolean("Is final payment status", default=False) + status_datetime = fields.Datetime() + + # We should have a snapshot of the account number from the beneficiary + # at the point of creating the payment + account_number = fields.Char() + + amount_issued = fields.Monetary(required=True, currency_field="currency_id") + amount_paid = fields.Monetary(currency_field="currency_id") + issuance_date = fields.Datetime(default=fields.Datetime.now) # Should default to Datetime.Now() + payment_datetime = fields.Datetime() + + payment_fee = fields.Monetary(currency_field="currency_id") + + currency_id = fields.Many2one("res.currency", readonly=True, related="journal_id.currency_id") + + journal_id = fields.Many2one( + "account.journal", + "Program Journal", + store=True, + compute="_compute_journal_id", + ) + company_id = fields.Many2one("res.company", default=lambda self: self.env.company) + + @api.depends("entitlement_id.cycle_id.program_id.journal_id") + def _compute_journal_id(self): + for record in self: + record.journal_id = ( + record.entitlement_id + and record.entitlement_id.cycle_id + and record.entitlement_id.cycle_id.program_id + and record.entitlement_id.cycle_id.program_id.journal_id + and record.entitlement_id.cycle_id.program_id.journal_id.id + or None + ) + + def check_account_status(self): + # Checks if the account is available for payment + # Simple implementation will check if a account number has been set + pass + + def send_payment(self): + pass + + def unlink(self): + for record in self: + if record.state != "issued": + raise ValidationError(_(f"You cannot delete records in {record.status} state.")) + return super().unlink() + + +class G2PPaymentBatch(models.Model): + _name = "g2p.payment.batch" + _description = "Payment Batch" + _order = "id desc" + + name = fields.Char("Internal Batch Reference #", default=str(uuid4()), readonly=True, copy=False) + cycle_id = fields.Many2one("g2p.cycle", "Cycle", readonly=True) + program_id = fields.Many2one( + "g2p.program", related="cycle_id.program_id", string="Program", readonly=True + ) + external_batch_ref = fields.Char("External Batch Reference #") + + batch_has_started = fields.Boolean() + batch_has_completed = fields.Boolean() + + payment_ids = fields.Many2many("g2p.payment", string="Payments") + + # This set of fields hold the current statistics of the payment batch + # We store this so that we can display this information without calling the payment system + stats_issued_transactions = fields.Integer("Issued Transaction Statistics", readonly=True) + stats_issued_amount = fields.Float("Issued Amount Statistics", readonly=True) + stats_sent_transactions = fields.Integer("Sent Transactions Statistics", readonly=True) + stats_sent_amount = fields.Float("Sent Amount Statistics", readonly=True) + stats_paid_transactions = fields.Integer("Paid Transactions Statistics", readonly=True) + stats_paid_amount = fields.Float("Paid Amount Statistics", readonly=True) + stats_failed_transactions = fields.Integer("Failed Transactions Statistics", readonly=True) + stats_failed_amount = fields.Float("Failed Amount Statistics", readonly=True) + + stats_datetime = fields.Datetime("Statistics Date/Time") + + tag_id = fields.Many2one("g2p.payment.batch.tag", string="Tag") + + def send_payment(self): + # 1. Issue the payment of the beneficiaries using payment_manager.send_payments() + return self.program_id.get_manager(self.program_id.MANAGER_PAYMENT).send_payments(self) + + def unlink(self): + for record in self: + if record.batch_has_started: + raise ValidationError(_("Deletion is not allowed once the batch has started.")) + else: + record.payment_ids.unlink() + return super().unlink() + + +class G2PPaymentBatchTag(models.Model): + _name = "g2p.payment.batch.tag" + _description = "Payment Batch Tag" + _order = "order asc" + + name = fields.Char() + + order = fields.Integer() + + domain = fields.Text(default="[]") + + max_batch_size = fields.Integer(default=500) diff --git a/g2p_programs/models/program_config.py b/g2p_programs/models/program_config.py new file mode 100644 index 000000000..38357e6ef --- /dev/null +++ b/g2p_programs/models/program_config.py @@ -0,0 +1,30 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class ProgramConfig(models.TransientModel): + _name = "g2p.program.settings" + _inherit = "res.config.settings" + _description = "Program Settings" + + # Field Definitions + default_eligibility_managers = fields.Many2many( + "g2p.eligibility.manager", + string="Eligibility Managers", + default_model="g2p.program", + ) + deduplication_managers = fields.Many2many( + "g2p.deduplication.manager", + default_model="g2p.program", + ) + notification_managers = fields.Many2many( + "g2p.program.notification.manager", + default_model="g2p.program", + ) + program_managers = fields.Many2many("g2p.program.manager", default_model="g2p.program") + cycle_managers = fields.Many2many("g2p.cycle.manager", default_model="g2p.program") + entitlement_managers = fields.Many2many( + "g2p.program.entitlement.manager", + default_model="g2p.program", + ) diff --git a/g2p_programs/models/program_membership.py b/g2p_programs/models/program_membership.py new file mode 100644 index 000000000..f369043fd --- /dev/null +++ b/g2p_programs/models/program_membership.py @@ -0,0 +1,272 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +from lxml import etree + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + +from . import constants + + +class G2PProgramMembership(models.Model): + _inherit = [ + "mail.thread", + "mail.activity.mixin", + ] + + _name = "g2p.program_membership" + _description = "Program Membership" + _inherits = {"res.partner": "partner_id"} + _order = "id desc" + + partner_id = fields.Many2one( + "res.partner", + "Registrant", + help="A beneficiary", + required=True, + auto_join=True, + domain=[("is_registrant", "=", True)], + ) + program_id = fields.Many2one("g2p.program", "", help="A program", required=True, auto_join=True) + + # TODO: When the state is changed from "exited", "not_eligible" or "duplicate" to something else + # then reset the deduplication date. + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("enrolled", "Enrolled"), + ("paused", "Paused"), + ("exited", "Exited"), + ("not_eligible", "Not Eligible"), + ("duplicated", "Duplicated"), + ], + default="draft", + copy=False, + ) + + enrollment_date = fields.Datetime(compute="_compute_enrolled_date", store=True) + + last_deduplication = fields.Date("Last Deduplication Date") + exit_date = fields.Date() + + registrant_id = fields.Integer(string="Registrant ID", related="partner_id.id") + + _sql_constraints = [ + ( + "program_membership_unique", + "unique (partner_id, program_id)", + "Beneficiary must be unique per program.", + ), + ] + + # TODO: Implement exit reasons + # exit_reason_id = fields.Many2one("Exit Reason") Default: Completed, Opt-Out, Other + + # TODO: Implement not eligible reasons + # Default: "Missing data", "Does not match the criterias", "Duplicate", "Other" + # not_eligible_reason_id = fields.Many2one("Not Eligible Reason") + + # TODO: Add a field delivery_mechanism_id + # delivery_mechanism_id = fields.Many2one("Delivery mechanism type", help="Delivery mechanism") + # the phone number, bank account, etc. + delivery_mechanism_value = fields.Char() + + # TODO: JJ - Add a field for the preferred notification method + + deduplication_status = fields.Selection( + selection=[ + ("new", "New"), + ("processing", "Processing"), + ("verified", "Verified"), + ("duplicated", "duplicated"), + ], + default="new", + copy=False, + ) + + @api.depends("state") + def _compute_enrolled_date(self): + for rec in self: + if rec.state == "enrolled": + rec.enrollment_date = fields.Datetime.now() + + @api.model + def _get_view(self, view_id=None, view_type="form", **options): + context = self.env.context + arch, view = super()._get_view(view_id, view_type, **options) + + if view_type == "form": + update_arch = False + doc = arch + # Check if we need to change the partner_id domain filter + target_type = context.get("target_type", False) + if target_type: + domain = None + if context.get("target_type", False) == "group": + domain = "[('is_registrant', '=', True), ('is_group','=',True)]" + elif context.get("target_type", False) == "individual": + domain = "[('is_registrant', '=', True), ('is_group','=',False)]" + if domain: + update_arch = True + nodes = doc.xpath("//field[@name='partner_id']") + for node in nodes: + node.set("domain", domain) + + if update_arch: + arch = etree.tostring(doc, encoding="unicode") + return arch, view + + def name_get(self): + res = super().name_get() + for rec in self: + name = "" + if rec.program_id: + name += "[" + rec.program_id.name + "] " + if rec.partner_id: + name += rec.partner_id.name + rec.display_name = name + return res + + def open_beneficiaries_form(self): + for rec in self: + return { + "name": "Program Beneficiaries", + "view_mode": "form", + "res_model": "g2p.program_membership", + "res_id": rec.id, + "view_id": self.env.ref("g2p_programs.view_program_membership_form").id, + "type": "ir.actions.act_window", + "target": "new", + "context": { + "target_type": rec.program_id.target_type, + "default_program_id": rec.program_id.id, + }, + } + + def open_registrant_form(self): + if self.partner_id.is_group: + return { + "name": "Group Member", + "view_mode": "form", + "res_model": "res.partner", + "res_id": self.partner_id.id, + "view_id": self.env.ref("g2p_registry_group.view_groups_form").id, + "type": "ir.actions.act_window", + "target": "new", + "context": {"default_is_group": True}, + "flags": {"mode": "readonly"}, + } + else: + return { + "name": "Individual Member", + "view_mode": "form", + "res_model": "res.partner", + "res_id": self.partner_id.id, + "view_id": self.env.ref("g2p_registry_individual.view_individuals_form").id, + "type": "ir.actions.act_window", + "target": "new", + "context": {"default_is_group": False}, + "flags": {"mode": "readonly"}, + } + + def verify_eligibility(self): + eligibility_managers = self.program_id.get_managers(constants.MANAGER_ELIGIBILITY) + member = self + for em in eligibility_managers: + member = em.enroll_eligible_registrants(member) + if len(member) == 0: + self.state = "not_eligible" + return + + def enroll_eligible_registrants(self): + eligibility_managers = self.program_id.get_managers(constants.MANAGER_ELIGIBILITY) + message = None + kind = "success" + member = self + for em in eligibility_managers: + member = em.enroll_eligible_registrants(member) + + if len(member) > 0: + if self.state != "enrolled": + self.write( + { + "state": "enrolled", + "enrollment_date": fields.Datetime.now(), + } + ) + message = _("%s Beneficiaries enrolled.", len(member)) + kind = "success" + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Enrollment"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + else: + self.state = "not_eligible" + message = "beneficiary is not eligible" + kind = "warning" + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Enrollment"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def deduplicate_beneficiaries(self): + deduplication_managers = self.program_id.get_managers(constants.MANAGER_DEDUPLICATION) + + message = None + kind = "success" + if len(deduplication_managers): + states = ["draft", "enrolled", "eligible", "paused", "duplicated"] + duplicates = 0 + for el in deduplication_managers: + duplicates += el.deduplicate_beneficiaries(states) + + if duplicates > 0: + message = _("%s Beneficiaries duplicate.", duplicates) + kind = "warning" + else: + message = _("No duplicates found.") + kind = "success" + else: + raise UserError(_("No Deduplication Manager defined.")) + + if message: + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Deduplication"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def Back_to_draft(self): + self.write( + { + "state": "draft", + } + ) + return diff --git a/g2p_programs/models/programs.py b/g2p_programs/models/programs.py new file mode 100644 index 000000000..cea9927c5 --- /dev/null +++ b/g2p_programs/models/programs.py @@ -0,0 +1,556 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +import logging + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + +from . import constants + +_logger = logging.getLogger(__name__) + + +class G2PProgram(models.Model): + _inherit = [ + "mail.thread", + "mail.activity.mixin", + "job.relate.mixin", + # "disable.edit.mixin", + ] + _name = "g2p.program" + _description = "Program" + _order = "id desc" + _check_company_auto = True + + MANAGER_ELIGIBILITY = constants.MANAGER_ELIGIBILITY + MANAGER_CYCLE = constants.MANAGER_CYCLE + MANAGER_PROGRAM = constants.MANAGER_PROGRAM + MANAGER_ENTITLEMENT = constants.MANAGER_ENTITLEMENT + MANAGER_DEDUPLICATION = constants.MANAGER_DEDUPLICATION + MANAGER_NOTIFICATION = constants.MANAGER_NOTIFICATION + MANAGER_PAYMENT = constants.MANAGER_PAYMENT + + MANAGER_MODELS = constants.MANAGER_MODELS + # DISABLE_EDIT_DOMAIN = [("state", "=", "ended")] + + # TODO: Associate a Wallet to each program using the accounting module + # TODO: (For later) Associate a Warehouse to each program using the stock module for in-kind programs + + @api.model + def _default_journal_id(self): + journals = self.env["account.journal"].search( + [("beneficiary_disb", "=", True), ("type", "in", ("bank", "cash"))] + ) + if journals: + return journals[0].id + else: + return None + + name = fields.Char(required=True) + description = fields.Text(string="description") + company_id = fields.Many2one("res.company", default=lambda self: self.env.company) + target_type = fields.Selection( + selection=[("group", "Group"), ("individual", "Individual")], default="group" + ) + + # delivery_mechanism = fields.Selection([("mobile", "Mobile"), ("bank_account", "Bank Account"), + # ("id", "ID Document"), ("biometric", "Biometrics")], default='id') + + # Pre-cycle steps + # TODO: for those, we should allow to have multiple managers and + # the order of the steps should be defined by the user + eligibility_managers = fields.Many2many("g2p.eligibility.manager") # All will be run + deduplication_managers = fields.Many2many("g2p.deduplication.manager") # All will be run + # for each beneficiary, their preferred will be used or the first one that works. + notification_managers = fields.Many2many("g2p.program.notification.manager") + program_managers = fields.Many2many("g2p.program.manager") + # Cycle steps + cycle_managers = fields.Many2many("g2p.cycle.manager") + entitlement_managers = fields.Many2many("g2p.program.entitlement.manager") + # Payment management + payment_managers = fields.Many2many("g2p.program.payment.manager") + + reconciliation_managers = fields.Selection([]) + + program_membership_ids = fields.One2many("g2p.program_membership", "program_id", "Program Memberships") + have_members = fields.Boolean( + string="Have Beneficiaries", + compute="_compute_have_members", + default=False, + store=True, + ) + cycle_ids = fields.One2many("g2p.cycle", "program_id", "Cycles") + + date_ended = fields.Date() + state = fields.Selection( + [("active", "Active"), ("ended", "Ended")], + "Status", + default="active", + readonly=True, + ) + + # Accounting config + journal_id = fields.Many2one( + "account.journal", + "Disbursement Journal", + domain=[("beneficiary_disb", "=", True), ("type", "in", ("bank", "cash"))], + default=_default_journal_id, + ) + + # Statistics + eligible_beneficiaries_count = fields.Integer( + string="# Eligible Beneficiaries", + readonly=True, + compute="_compute_eligible_beneficiary_count", + ) + beneficiaries_count = fields.Integer( + string="# Beneficiaries", readonly=True, compute="_compute_beneficiary_count" + ) + + cycles_count = fields.Integer(string="# Cycles", compute="_compute_cycle_count", store=True) + duplicate_membership_count = fields.Integer( + string="# Membership Duplicates", compute="_compute_duplicate_membership_count" + ) + active = fields.Boolean(default=True) + + # This is used to prevent any issue while some background tasks are happening + # such as importing beneficiaries + locked = fields.Boolean(default=False) + locked_reason = fields.Char() + + def toggle_active(self): + """ + Overrides the default :meth:`toggle_active` to cancel + all `draft`, `to_approve`, and `approved` associated cycles and + 'draft' and 'pending_validation' entitlements. + + :return: toggle_active function of parent class + """ + for rec in self: + # Cancel cycles and entitlements only if the program is active (for archiving) + if rec.active: + _logger.debug("Archive Program: cancel cycles and entitlements.") + if rec.cycle_ids: + entitlement_manager = rec.get_manager(self.MANAGER_ENTITLEMENT) + # Get only `draft`, `to_approve`, and `approved` cycles + cycles = rec.cycle_ids.filtered(lambda a: a.state in ("draft", "to_approve", "approved")) + if cycles: + for cycle in cycles: + entitlement_manager.cancel_entitlements(cycle) + # Set the cycle_ids state to 'cancelled' + cycles.update({"state": "cancelled"}) + return super().toggle_active() + + @api.depends("program_membership_ids") + def _compute_have_members(self): + if len(self.program_membership_ids) > 0: + self.have_members = True + + @api.model + def create(self, vals): + res = super().create(vals) + program_id = res.id + man_ids = self.create_default_managers(program_id) + for man in man_ids: + res.update({man: [(4, man_ids[man])]}) + return res + + @api.model + def create_default_managers(self, program_id): + ret_vals = {} + for mgr_fld in self.MANAGER_MODELS: + for mgr_obj in self.MANAGER_MODELS[mgr_fld]: + # Add a new record to default manager models + def_mgr_obj = self.MANAGER_MODELS[mgr_fld][mgr_obj] + _logger.debug("DEBUG: %s" % def_mgr_obj) + def_mgr = self.env[def_mgr_obj].create( + { + "name": "Default", + "program_id": program_id, + } + ) + # Add a new record to manager parent models + man_obj = self.env[mgr_obj] + mgr = man_obj.create( + { + "program_id": program_id, + "manager_ref_id": f"{def_mgr_obj},{str(def_mgr.id)}", + } + ) + ret_vals.update({mgr_fld: mgr.id}) + return ret_vals + + def _compute_duplicate_membership_count(self): + for rec in self: + count = rec.count_beneficiaries(["duplicated"])["value"] + rec.update({"duplicate_membership_count": count}) + + def _compute_eligible_beneficiary_count(self): + for rec in self: + count = rec.count_beneficiaries(["enrolled"])["value"] + rec.update({"eligible_beneficiaries_count": count}) + + def _compute_beneficiary_count(self): + for rec in self: + count = rec.count_beneficiaries(None)["value"] + rec.update({"beneficiaries_count": count}) + + @api.depends("cycle_ids") + def _compute_cycle_count(self): + for rec in self: + domain = [("program_id", "=", rec.id)] + count = self.env["g2p.cycle"].search_count(domain) + rec.update({"cycles_count": count}) + + @api.model + def get_manager(self, kind): + self.ensure_one() + for rec in self: + if kind == self.MANAGER_CYCLE: + managers = rec.cycle_managers + elif kind == self.MANAGER_PROGRAM: + managers = rec.program_managers + elif kind == self.MANAGER_ENTITLEMENT: + managers = rec.entitlement_managers + elif kind == self.MANAGER_PAYMENT: + managers = rec.payment_managers + else: + raise NotImplementedError("Manager not supported") + if managers: + managers.ensure_one() + for el in managers: + return el.manager_ref_id + + @api.model + def get_managers(self, kind): + self.ensure_one() + for rec in self: + if kind == self.MANAGER_ELIGIBILITY: + managers = rec.eligibility_managers + elif kind == self.MANAGER_DEDUPLICATION: + managers = rec.deduplication_managers + elif kind == self.MANAGER_NOTIFICATION: + managers = rec.notification_managers + else: + raise NotImplementedError("Manager not supported") + return [el.manager_ref_id for el in managers] + + @api.model + def get_beneficiaries(self, state=None, offset=0, limit=None, order=None, count=False): + self.ensure_one() + if isinstance(state, str): + state = [state] + domain = [("program_id", "=", self.id)] + if state is not None: + domain.append(("state", "in", state)) + if count: + return self.env["g2p.program_membership"].search_count(domain, limit=limit) + + return self.env["g2p.program_membership"].search(domain, offset=offset, limit=limit, order=order) + + # TODO: JJ - Review + def count_beneficiaries(self, state=None): + domain = [("program_id", "=", self.id)] + if state is not None: + domain += [("state", "in", state)] + + return {"value": self.env["g2p.program_membership"].search_count(domain)} + + # TODO: JJ - Add a way to link reports/Dashboard about this program. + + def enroll_eligible_registrants(self): + if self.beneficiaries_count <= 0: + raise UserError(_("No Registrants Added to Program")) + for rec in self: + program_manager = rec.get_manager(self.MANAGER_PROGRAM) + if program_manager: + return program_manager.enroll_eligible_registrants() + else: + raise UserError(_("No Program Manager defined.")) + + def verify_eligibility(self): + for rec in self: + program_manager = rec.get_manager(self.MANAGER_PROGRAM) + if program_manager: + return program_manager.enroll_eligible_registrants(["enrolled", "not_eligible"]) + + else: + raise UserError(_("No Program Manager defined.")) + + def deduplicate_beneficiaries(self): + for rec in self: + deduplication_managers = rec.get_managers(self.MANAGER_DEDUPLICATION) + message = None + kind = "success" + if len(deduplication_managers): + states = ["draft", "enrolled", "eligible", "paused", "duplicated"] + duplicates = 0 + for el in deduplication_managers: + duplicates += el.deduplicate_beneficiaries(states) + + if duplicates > 0: + message = _("%s Instances of Beneficiaries duplicate.", duplicates) + kind = "warning" + else: + message = _("No duplicates found.") + kind = "success" + else: + raise UserError(_("No Deduplication Manager defined.")) + + if message: + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Deduplication"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def notify_eligible_beneficiaries(self): + # 1. Notify the beneficiaries using notification_manager.enrolled_in_program() + pass + + def create_new_cycle(self): + # 1. Create the next cycle using cycles_manager.new_cycle() + # 2. Import the beneficiaries from the previous cycle to this one. + # If it is the first one, import from the + # program memberships. + if self.beneficiaries_count <= 0: + raise UserError(_("No enrolled registrants. Enroll registrants to program to create new cycle.")) + for rec in self: + message = None + kind = "success" + cycle_manager = rec.get_manager(self.MANAGER_CYCLE) + program_manager = rec.get_manager(self.MANAGER_PROGRAM) + if cycle_manager is None: + raise UserError(_("No Cycle Manager defined.")) + elif program_manager is None: + raise UserError(_("No Program Manager defined.")) + if message is not None: + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Cycle"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + _logger.debug("-" * 80) + _logger.debug("pm: %s", program_manager) + new_cycle = program_manager.new_cycle() + message = _("New cycle %s created.", new_cycle.name) + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Cycle"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def create_journal(self): + for rec in self: + program_name = rec.name.split(" ") + code = "" + for pn in program_name: + if pn: + code += pn[0].upper() + if len(code) == 0: + code = program_name[3].strip().upper() + account_chart = self.env["account.account"].search( + [ + ("company_id", "=", self.env.company.id), + ("account_type", "=", "asset_cash"), + ] + ) + default_account_id = None + if account_chart: + default_account_id = account_chart[0].id + new_journal = self.env["account.journal"].create( + { + "name": rec.name, + "beneficiary_disb": True, + "type": "bank", + "default_account_id": default_account_id, + "code": code, + "currency_id": rec.company_id.currency_id and rec.company_id.currency_id.id or None, + } + ) + rec.update({"journal_id": new_journal.id}) + + def end_program(self): + for rec in self.env.context.get("active_ids"): + program = self.env["g2p.program"].search( + [ + ("id", "=", rec), + ] + ) + if program.state == "active": + program.update({"state": "ended", "date_ended": fields.Date.today()}) + else: + message = _("Ony 'active' programs can be ended.") + kind = "danger" + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Program"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def reactivate_program(self): + for rec in self.env.context.get("active_ids"): + program = self.env["g2p.program"].search( + [ + ("id", "=", rec), + ] + ) + if program.state == "ended": + program.update({"state": "active", "date_ended": None}) + else: + message = _("Ony 'ended' programs can be re-activated.") + kind = "danger" + + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Project"), + "message": message, + "sticky": False, + "type": kind, + "next": { + "type": "ir.actions.act_window_close", + }, + }, + } + + def open_eligible_beneficiaries_form(self): + self.ensure_one() + + action = { + "name": _("Beneficiaries"), + "type": "ir.actions.act_window", + "res_model": "g2p.program_membership", + "context": { + "create": False, + "default_program_id": self.id, + # "search_default_enrolled_state": 1, + }, + "view_mode": "list,form", + "domain": [("program_id", "=", self.id)], + } + return action + + def open_duplicate_membership_form(self): + self.ensure_one() + + action = { + "name": _("Beneficiaries Duplicates"), + "type": "ir.actions.act_window", + "res_model": "g2p.program_membership", + "context": { + "create": False, + "default_program_id": self.id, + # "search_default_enrolled_state": 1, + }, + "view_mode": "list,form", + "domain": [("program_id", "=", self.id), ("state", "=", "duplicated")], + } + return action + + def open_cycles_form(self): + self.ensure_one() + + action = { + "name": _("Cycles"), + "type": "ir.actions.act_window", + "res_model": "g2p.cycle", + "context": { + "create": False, + "default_program_id": self.id, + # "search_default_approved_state": 1, + # "search_default_to_approve_state": 1, + }, + "view_mode": "list,form", + "domain": [("program_id", "=", self.id)], + } + return action + + def refresh_page(self): + return { + "type": "ir.actions.client", + "tag": "reload", + } + + def _get_related_job_domain(self): + jobs = self.env["queue.job"].search([("model_name", "like", self._name)]) + related_jobs = jobs.filtered(lambda r: self in r.records.program_id) + return [("id", "in", related_jobs.ids)] + + @api.constrains("entitlement_managers", "program_managers", "cycle_managers", "payment_managers") + def check_managers_limit(self): + for record in self: + error_messages = [] + + if len(record.entitlement_managers) > 1: + error_messages.append("Entitlement Managers") + + if len(record.program_managers) > 1: + error_messages.append("Program Managers") + + if len(record.cycle_managers) > 1: + error_messages.append("Cycle Managers") + + if len(record.payment_managers) > 1: + error_messages.append("Payment Managers") + + if error_messages: + combined_message = ", ".join(error_messages) + raise UserError( + f"Only one manager can be configured under {combined_message}." + f"Please delete any new manager(s) before saving your changes." # noqa: B950 + ) + + def unlink(self): + managers_to_delete = [ + self.eligibility_managers, + self.deduplication_managers, + self.notification_managers, + self.program_managers, + self.cycle_managers, + self.entitlement_managers, + self.payment_managers, + self.reconciliation_managers, + ] + + for managers in managers_to_delete: + if managers: + for manager in managers: + manager.manager_ref_id.unlink() + managers.unlink() + else: + return super().unlink() diff --git a/g2p_programs/models/queue_job_channel.py b/g2p_programs/models/queue_job_channel.py new file mode 100644 index 000000000..9852d074d --- /dev/null +++ b/g2p_programs/models/queue_job_channel.py @@ -0,0 +1,12 @@ +from odoo import _, api, exceptions, models + + +class CustomQueueJobChannel(models.Model): + _inherit = "queue.job.channel" + + @api.constrains("parent_id", "name") + def parent_required(self): + for record in self: + if record.name and not record.name.startswith("root") and not record.parent_id: + raise exceptions.ValidationError(_("Parent channel required.")) + return diff --git a/g2p_programs/models/registrant.py b/g2p_programs/models/registrant.py new file mode 100644 index 000000000..831336339 --- /dev/null +++ b/g2p_programs/models/registrant.py @@ -0,0 +1,49 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. +from odoo import _, api, fields, models, tools +from odoo.exceptions import ValidationError + + +class G2PRegistrant(models.Model): + _inherit = "res.partner" + + # Custom Fields + program_membership_ids = fields.One2many("g2p.program_membership", "partner_id", "Program Memberships") + cycle_ids = fields.One2many("g2p.cycle.membership", "partner_id", "Cycle Memberships") + entitlement_ids = fields.One2many("g2p.entitlement", "partner_id", "Entitlements") + + # Statistics + program_membership_count = fields.Integer( + string="# Program Memberships", + compute="_compute_program_membership_count", + store=True, + ) + entitlements_count = fields.Integer( + string="# Cash Entitlements", compute="_compute_entitlements_count", store=True + ) + cycles_count = fields.Integer(string="# Cycles", compute="_compute_cycle_count", store=True) + + @api.depends("program_membership_ids") + def _compute_program_membership_count(self): + for rec in self: + program_membership_count = self.env["g2p.program_membership"].search_count( + [("partner_id", "=", rec.id)] + ) + rec.update({"program_membership_count": program_membership_count}) + + @api.depends("entitlement_ids") + def _compute_entitlements_count(self): + for rec in self: + entitlements_count = self.env["g2p.entitlement"].search_count([("partner_id", "=", rec.id)]) + rec.update({"entitlements_count": entitlements_count}) + + @api.depends("cycle_ids") + def _compute_cycle_count(self): + for rec in self: + cycles_count = self.env["g2p.cycle.membership"].search_count([("partner_id", "=", rec.id)]) + rec.update({"cycles_count": cycles_count}) + + @api.constrains("email") + def _check_valid_email(self): + for record in self: + if record.email and not tools.single_email_re.match(record.email): + raise ValidationError(_("Invalid Email! Please enter a valid email address.")) diff --git a/g2p_programs/models/res_user.py b/g2p_programs/models/res_user.py new file mode 100644 index 000000000..90651b000 --- /dev/null +++ b/g2p_programs/models/res_user.py @@ -0,0 +1,23 @@ +from odoo import models + + +class ResUsers(models.Model): + _inherit = "res.users" + + def write(self, vals): + res = super().write(vals) + + pm_group = self.env.ref("g2p_programs.g2p_program_manager") + admin_group = self.env.ref("g2p_registry_base.group_g2p_admin") + contact_creation_group = self.env.ref("base.group_partner_manager") + + for user in self: + if pm_group in user.groups_id and not (user._is_admin() or admin_group in user.groups_id): + # getting recursion using orm + # avoid recursion so directly sql injected + self._cr.execute( + "DELETE FROM res_groups_users_rel WHERE uid = %s AND gid = %s", + (user.id, contact_creation_group.id), + ) + user._invalidate_cache(["groups_id"]) + return res diff --git a/g2p_programs/pyproject.toml b/g2p_programs/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/g2p_programs/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/g2p_programs/report/report_format.xml b/g2p_programs/report/report_format.xml new file mode 100644 index 000000000..0d90f3ab8 --- /dev/null +++ b/g2p_programs/report/report_format.xml @@ -0,0 +1,26 @@ + + + Entitlement Card + + A4 + Portrait + 4.5 + 4.5 + 5 + 5 + + 90 + + + + Print Vouchers + g2p.entitlement + qweb-pdf + g2p_programs.print_entitlement_card + g2p_programs.print_entitlement_card + 'Entitlement Card' + + + report + + diff --git a/g2p_programs/report/summary_report.xml b/g2p_programs/report/summary_report.xml new file mode 100644 index 000000000..823d37f14 --- /dev/null +++ b/g2p_programs/report/summary_report.xml @@ -0,0 +1,110 @@ + + + Disbursement summary + g2p.cycle + qweb-pdf + g2p_programs.print_summary + g2p_programs.print_summary + + report + + + + diff --git a/g2p_programs/report/voucher_card.xml b/g2p_programs/report/voucher_card.xml new file mode 100644 index 000000000..f356d7bb8 --- /dev/null +++ b/g2p_programs/report/voucher_card.xml @@ -0,0 +1,76 @@ + + + + diff --git a/g2p_programs/security/ir.model.access.csv b/g2p_programs/security/ir.model.access.csv new file mode 100644 index 000000000..b88bac674 --- /dev/null +++ b/g2p_programs/security/ir.model.access.csv @@ -0,0 +1,149 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +g2p_ui_view_admin,UI View Admin Access,base.model_ir_ui_view,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_actions_client_admin,Actions Client Admin Access,base.model_ir_actions_client,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_admin,Program Admin Access,g2p_programs.model_g2p_program,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_membership_admin,Program Membership Admin Access,g2p_programs.model_g2p_program_membership,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_cycle_admin,Cycle Admin Access,g2p_programs.model_g2p_cycle,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_cycle_membership_admin,Cycle Membership Admin Access,g2p_programs.model_g2p_cycle_membership,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_entitlement_admin,Entitlement Admin Access,g2p_programs.model_g2p_entitlement,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_payment_admin,Payment Admin Access,g2p_programs.model_g2p_payment,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_payment_batch_admin,Payment Batch Admin Access,g2p_programs.model_g2p_payment_batch,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_program_membership_duplicate_admin,Program Membership Duplicate Admin Access,g2p_programs.model_g2p_program_membership_duplicate,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_eligibility_manager_admin,Eligibility Manager Admin Access,g2p_programs.model_g2p_eligibility_manager,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_membership_manager_admin,Program Membership Manager Admin Access,g2p_programs.model_g2p_program_membership_manager,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_membership_manager_default_admin,Default Program Membership Manager Admin Access,g2p_programs.model_g2p_program_membership_manager_default,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_membership_manager_id_dedup_admin,ID Document Program Membership Manager Admin Access,g2p_programs.model_g2p_program_membership_manager_id_dedup,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_membership_manager_phone_number_admin,Phone Number Program Membership Manager Admin Access,g2p_programs.model_g2p_program_membership_manager_phone_number,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_deduplication_manager_admin,Deduplication Manager Admin Access,g2p_programs.model_g2p_deduplication_manager,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_deduplication_manager_id_dedup_admin,Deduplication Manager ID Admin Access,g2p_programs.model_g2p_deduplication_manager_id_dedup,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_deduplication_manager_phone_number_admin,Deduplication Manager Phone Number Admin Access,g2p_programs.model_g2p_deduplication_manager_phone_number,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_deduplication_manager_default_admin,Deduplication Manager Default Admin Access,g2p_programs.model_g2p_deduplication_manager_default,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_program_notification_manager_admin,Program Notification Manager Admin Access,g2p_programs.model_g2p_program_notification_manager,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_notification_manager_sms_admin,Program Notification Manager SMS Admin Access,g2p_programs.model_g2p_program_notification_manager_sms,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_program_manager_admin,Program Manager Admin Access,g2p_programs.model_g2p_program_manager,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_manager_default_admin,Program Manager Default Admin Access,g2p_programs.model_g2p_program_manager_default,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_cycle_manager_admin,Cycle Manager Admin Access,g2p_programs.model_g2p_cycle_manager,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_cycle_manager_default_admin,Cycle Manager Default Admin Access,g2p_programs.model_g2p_cycle_manager_default,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_program_entitlement_manager_admin,Program Entitlement Manager Admin Access,g2p_programs.model_g2p_program_entitlement_manager,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_entitlement_manager_default_admin,Program Entitlement Manager Default Admin Access,g2p_programs.model_g2p_program_entitlement_manager_default,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_program_payment_manager_admin,Program Payment Manager Admin Access,g2p_programs.model_g2p_program_payment_manager,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_program_payment_manager_default_admin,Program Payment Manager Default Admin Access,g2p_programs.model_g2p_program_payment_manager_default,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_assign_registrant_program_wizard_admin,Assign Registrant to Program Wizard Admin Access,g2p_programs.model_g2p_assign_program_wizard,,1,1,1,1 +g2p_program_create_wizard_admin,Create Program Wizard Admin Access,g2p_programs.model_g2p_program_create_wizard,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_multi_entitlement_approval_wizard_admin,Multi Entitlement Approval Wizard Admin Access,g2p_programs.model_g2p_multi_entitlement_approval_wizard,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_multi_entitlement_approval_admin,Multi Entitlement Approval Admin Access,g2p_programs.model_g2p_multi_entitlement_approval,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_assign_payments_batch_wizard_admin,Assign Payments to Batch Wizard Admin Access,g2p_programs.model_g2p_assign_payments_batch_wizard,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_program_fund_admin,Program Fund Admin Access,g2p_programs.model_g2p_program_fund,g2p_registry_base.group_g2p_admin,1,1,1,1 + +g2p_program_fund_report_view_admin,Program Fund Report View Admin Access,g2p_programs.model_g2p_program_fund_report_view,g2p_registry_base.group_g2p_admin,1,0,0,0 +g2p_account_journal_admin,Account Journal Admin Access,account.model_account_journal,g2p_registry_base.group_g2p_admin,1,1,1,0 + + +g2p_program_membership_registrar,Program Membership Registrar Access,g2p_programs.model_g2p_program_membership,g2p_registry_base.group_g2p_registrar,1,1,1,0 +g2p_cycle_membership_registrar,Cycle Membership Registrar Access,g2p_programs.model_g2p_cycle_membership,g2p_registry_base.group_g2p_registrar,1,1,1,0 +g2p_entitlement_registrar,Entitlement Registrar Access,g2p_programs.model_g2p_entitlement,g2p_registry_base.group_g2p_registrar,1,0,0,0 +g2p_payment_registrar,Payment Registrar Access,g2p_programs.model_g2p_payment,g2p_registry_base.group_g2p_registrar,1,0,0,0 +g2p_payment_batch_registrar,Payment Batch Registrar Access,g2p_programs.model_g2p_payment_batch,g2p_registry_base.group_g2p_registrar,1,0,0,0 +g2p_account_move_line_registrar,Account Move Line Registrar Access,account.model_account_move_line,g2p_registry_base.group_g2p_registrar,1,1,1,0 + +g2p_ui_view_program_manager,UI View Program Manager Access,base.model_ir_ui_view,g2p_programs.g2p_program_manager,1,1,0,0 +g2p_actions_client_program_manager,Actions Client Program Manager Access,base.model_ir_actions_client,g2p_programs.g2p_program_manager,1,1,0,0 +g2p_program_manager_access,Program Manager Access,g2p_programs.model_g2p_program,,1,1,1,0 +g2p_account_journal_program_manager,Account Journal Program Manager Access,account.model_account_journal,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_account_move_program_manager,Account Move Program Manager Access,account.model_account_move,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_account_move_line_program_manager,Account Move Line Program Manager Access,account.model_account_move_line,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_membership_program_manager,Program Membership Program Manager Access,g2p_programs.model_g2p_program_membership,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_cycle_program_manager,Cycle Program Manager Access,g2p_programs.model_g2p_cycle,g2p_programs.g2p_program_manager,1,1,1,1 +g2p_eligibility_manager_program_manager,Eligibility Manager Program Manager Access,g2p_programs.model_g2p_eligibility_manager,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_simple_eligibility_program_manager,Simple Eligibility Program Manager Access,g2p_programs.model_g2p_program_membership_manager_default,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_id_doc_dedup_eligibility_program_manager,ID Document Deduplication Eligibility Program Manager Access,g2p_programs.model_g2p_program_membership_manager_id_dedup,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_phone_num_eligibility_program_manager,Phone Number Deduplication Eligibility Program Manager Access,g2p_programs.model_g2p_program_membership_manager_phone_number,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_dedup_manager_program_manager,Deduplication Manager Program Manager Access,g2p_programs.model_g2p_deduplication_manager,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_id_dedup_manager_program_manager,ID Deduplication Manager Program Manager Access,g2p_programs.model_g2p_deduplication_manager_id_dedup,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_dedup_manager_default_program_manager,Deduplication Manager Default Program Manager Access,g2p_programs.model_g2p_deduplication_manager_default,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_phone_num_dedup_manager_program_manager,Phone Number Deduplication Manager Program Manager Access,g2p_programs.model_g2p_deduplication_manager_phone_number,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_notification_manager_program_manager,Program Notification Manager Program Manager Access,g2p_programs.model_g2p_program_notification_manager,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_sms_program_notification_manager_program_manager,SMS Program Notification Manager Program Manager Access,g2p_programs.model_g2p_program_notification_manager_sms,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_manager_program_manager,Program Manager Program Manager Access,g2p_programs.model_g2p_program_manager,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_manager_default_program_manager,Program Manager Default Program Manager Access,g2p_programs.model_g2p_program_manager_default,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_cycle_manager_program_manager,Cycle Manager Program Manager Access,g2p_programs.model_g2p_cycle_manager,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_default_cycle_manager_program_manager,Default Cycle Manager Program Manager Access,g2p_programs.model_g2p_cycle_manager_default,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_entitlement_manager_program_manager,Program Entitlement Manager Program Manager Access,g2p_programs.model_g2p_program_entitlement_manager,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_entitlement_manager_default_program_manager,Program Entitlement Manager Default Program Manager Access,g2p_programs.model_g2p_program_entitlement_manager_default,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_payment_manager_program_manager,Program Payment Manager Program Manager Access,g2p_programs.model_g2p_program_payment_manager,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_payment_manager_default_program_manager,Program Payment Manager Default Program Manager Access,g2p_programs.model_g2p_program_payment_manager_default,g2p_programs.g2p_program_manager,1,1,1,0 + +g2p_cycle_membership_program_manager,Cycle Membership Program Manager Access,g2p_programs.model_g2p_cycle_membership,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_group_membership_program_manager,Group Membership Program Manager Access,g2p_registry_membership.model_g2p_group_membership,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_entitlement_program_manager,Entitlement Program Manager Access,g2p_programs.model_g2p_entitlement,g2p_programs.g2p_program_manager,1,1,1,1 +g2p_payment_program_manager,Payment Program Manager Access,g2p_programs.model_g2p_payment,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_payment_batch_program_manager,Payment Batch Program Manager Access,g2p_programs.model_g2p_payment_batch,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_fund_program_manager,Program Fund Program Manager Access,g2p_programs.model_g2p_program_fund,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_fund_report_view_program_manager,Program Fund Report View Program Manager Access,g2p_programs.model_g2p_program_fund_report_view,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_membership_duplicate_pm,Program Membership Duplicate PM Access,g2p_programs.model_g2p_program_membership_duplicate,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_membership_ir_fields,Program Membership IR Field PM Access,base.model_ir_model_fields,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_membership_multi_entitlement_approval_wizard,Program Membership Multi Entitlement Approval Wizard Access,g2p_programs.model_g2p_multi_entitlement_approval_wizard,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_program_membership_multi_entitlement_approval,Program Membership Multi Entitlement Approval Access,g2p_programs.model_g2p_multi_entitlement_approval,g2p_programs.g2p_program_manager,1,1,1,0 + + +g2p_program_create_wizard_program_manager,Create Program Wizard Program Manager Access,g2p_programs.model_g2p_program_create_wizard,g2p_programs.g2p_program_manager,1,1,1,1 +g2p_assign_program_wiz_program_manager,Assign Program Wiz Program Manager Access,g2p_programs.model_g2p_assign_program_wizard,g2p_programs.g2p_program_manager,1,1,1,1 +g2p_assign_payments_batch_wizard_program_manager,Assign Payments to Batch Wizard Program Manager Access,g2p_programs.model_g2p_assign_payments_batch_wizard,g2p_programs.g2p_program_manager,1,1,1,1 + +g2p_assign_reg_id_program_manager,Reg ID Program Manager Access,g2p_registry_base.model_g2p_reg_id,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_phone_number_program_manager,Phone Number Program Manager Access,g2p_registry_base.model_g2p_phone_number,g2p_programs.g2p_program_manager,1,1,1,0 +g2p_reg_rel_program_manager,Registrant Relation Program Manager Access,g2p_registry_base.model_g2p_reg_rel,g2p_programs.g2p_program_manager,1,1,1,0 + +g2p_actions_client_validator,Actions Client Validator Access,base.model_ir_actions_client,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_program_validator_access,Program Validator Access,g2p_programs.model_g2p_program,g2p_programs.g2p_program_validator,1,1,1,0 +g2p_program_membership_program_validator,Program Membership Program Validator Access,g2p_programs.model_g2p_program_membership,g2p_programs.g2p_program_validator,1,1,1,0 +g2p_cycle_program_validator,Cycle Program Validator Access,g2p_programs.model_g2p_cycle,g2p_programs.g2p_program_validator,1,1,1,0 +g2p_program_entitlement_manager_program_validator,Program Entitlement Manager Program Validator Access,g2p_programs.model_g2p_program_entitlement_manager,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_program_payment_manager_program_validator,Program Payment Manager Program Validator Access,g2p_programs.model_g2p_program_payment_manager,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_cycle_manager_program_validator,Cycle Manager Program Validator Access,g2p_programs.model_g2p_cycle_manager,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_cycle_membership_program_validator,Cycle Membership Program Validator Access,g2p_programs.model_g2p_cycle_membership,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_eligibility_manager_program_validator,Eligibility Manager Program Validator Access,g2p_programs.model_g2p_eligibility_manager,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_prog_notif_manager_program_validator,Program Notification Manager Program Validator Access,g2p_programs.model_g2p_program_notification_manager,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_deduplication_manager_program_validator,Deduplication Manager Program Validator Access,g2p_programs.model_g2p_deduplication_manager,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_deduplication_manager_default_program_validator,Deduplication Manager Default Program Validator Access,g2p_programs.model_g2p_deduplication_manager_default,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_program_manager_program_validator,Program Manager Program Validator Access,g2p_programs.model_g2p_program_manager,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_program_manager_default_program_validator,Program Manager Default Program Validator Access,g2p_programs.model_g2p_program_manager_default,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_cycle_manager_default_program_validator,Cycle Manager Default Program Validator Access,g2p_programs.model_g2p_cycle_manager_default,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_prog_mem_manager_default_program_validator,Program Membership Manager Default Program Validator Access,g2p_programs.model_g2p_program_membership_manager_default,g2p_programs.g2p_program_validator,1,1,1,0 +g2p_prog_entitle_manager_default_program_validator,Program Entitlement Manager Default Program Validator Access,g2p_programs.model_g2p_program_entitlement_manager_default,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_prog_payment_manager_default_program_validator,Program Payment Manager Default Program Validator Access,g2p_programs.model_g2p_program_payment_manager_default,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_prog_noti_manager_sms_program_validator,Program Notification Manager SMS Program Validator Access,g2p_programs.model_g2p_program_notification_manager_sms,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_entitlement_program_validator,Entitlement Program Validator Access,g2p_programs.model_g2p_entitlement,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_payment_program_validator,Payment Program Validator Access,g2p_programs.model_g2p_payment,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_payment_batch_program_validator,Payment Batch Program Validator Access,g2p_programs.model_g2p_payment_batch,g2p_programs.g2p_program_validator,1,0,0,0 +g2p_account_journal_program_validator,Account Journal Program Validator Access,g2p_programs.model_account_journal,g2p_programs.g2p_program_validator,1,0,0,0 + +g2p_entitlement_finance_validator,Entitlement Finance Validator Access,g2p_programs.model_g2p_entitlement,g2p_programs.g2p_finance_validator,1,1,1,0 +g2p_payment_financ_validator,Payment Finance Validator Access,g2p_programs.model_g2p_payment,g2p_programs.g2p_finance_validator,1,1,1,0 +g2p_payment_batch_financ_validator,Payment Batch Finance Validator Access,g2p_programs.model_g2p_payment_batch,g2p_programs.g2p_finance_validator,1,1,1,0 +g2p_program_fund_finance_validator,Program Fund Finance Validator Access,g2p_programs.model_g2p_program_fund,g2p_programs.g2p_finance_validator,1,1,1,0 +g2p_program_fund_report_view_finance_validator,Program Fund Report View Finance Validator Access,g2p_programs.model_g2p_program_fund_report_view,g2p_programs.g2p_finance_validator,1,1,1,0 +g2p_account_journal_finance_validator,Account Journal Finance Validator Access,account.model_account_journal,g2p_programs.g2p_finance_validator,1,1,1,0 +g2p_account_move_line_finance_validator,Account Move Line Finance Validator Access,account.model_account_move_line,g2p_programs.g2p_finance_validator,1,1,1,0 + +g2p_payment_batch_tag_admin,Payment Batch Tag Admin,g2p_programs.model_g2p_payment_batch_tag,g2p_registry_base.group_g2p_admin,1,1,1,1 +g2p_payment_batch_tag_manager,Payment Batch Tag Manager,g2p_programs.model_g2p_payment_batch_tag,g2p_programs.g2p_program_manager,1,1,1,1 +g2p_payment_batch_tag_base_user,Payment Batch Base User,g2p_programs.model_g2p_payment_batch_tag,base.group_user,1,0,0,0 + +g2p_programs.access_g2p_cycle_recurrence_mixin,access_g2p_cycle_recurrence_mixin,g2p_programs.model_g2p_cycle_recurrence_mixin,base.group_user,1,1,1,1 +g2p_programs.access_g2p_assign_program_registrants,access_g2p_assign_program_registrants,g2p_programs.model_g2p_assign_program_registrants,base.group_user,1,1,1,1 + +Access Control for g2p.group.membership.kind, Memberhsip kind access,g2p_registry_membership.model_g2p_group_membership_kind,,1,1,1,0 +Access Control for g2p.registrant.tags,Registrant tag access,g2p_registry_base.model_g2p_registrant_tags,g2p_programs.g2p_program_manager,1,1,1,0 +Access Control for g2p.id.type,ID type access ,g2p_registry_base.model_g2p_id_type,g2p_programs.g2p_program_manager,1,1,1,0 +Access Control for g2p.group.kind,Group Kind Access,g2p_registry_group.model_g2p_group_kind,g2p_programs.g2p_program_manager,1,1,1,0 diff --git a/g2p_programs/security/program_security.xml b/g2p_programs/security/program_security.xml new file mode 100644 index 000000000..2dee62666 --- /dev/null +++ b/g2p_programs/security/program_security.xml @@ -0,0 +1,22 @@ + + + Program Validator + + + + + Program Cycle Approver + + + + + + Program Manager + + + + + Finance Validator + + + diff --git a/g2p_programs/security/registrant_rule.xml b/g2p_programs/security/registrant_rule.xml new file mode 100644 index 000000000..cbe1a8461 --- /dev/null +++ b/g2p_programs/security/registrant_rule.xml @@ -0,0 +1,27 @@ + + + + Beneficiaries Membership Rule + + [("partner_id.disabled", "=", False)] + + + + + + + + Cycle Membership Rule + + [("partner_id.disabled", "=", False)] + + + + + + + Prodgrams multi-company + + [('company_id', 'in', company_ids)] + + diff --git a/g2p_programs/static/description/icon.png b/g2p_programs/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5ecb429ea9ceb3863d46ea852dc9c9f78d4e901b GIT binary patch literal 3985 zcmZ{n`9BkmAIC8pv!Q92t8$HU&3*S_?hrzbeAwnL%6)_wHrJX+S}0c-Wzr~eMDCAc z3e6Qh%8{GMmHPTVzCV9|c)eeb_v7^sJfCT{SIxM>=H)Shy|Bjjx?H>A&FwonBg- z;pNj}4ZUWDW}WDhk3W6DLFO)@EG&?-{|zfkUIBuIg;&GE*w7)WVErlh0sk03aU#cr z9mpQ+1?EO`UJ_2TBS{!@!w8&ZuzKTvq!sP5i}*;?G6Ozf31_umSm!HX_UqwnT(H@F z!;4+U(}n_e!#;GwpT87{g+-6+*1w#%zH;3OnWfOilJi--y~$P9xDhgz4Ss2SZy>& zeDnlOJI>wC&e{J?`*!KF3>sZC5(&vKSp&S)Nexs^!d`0pD&bEb&``VbyL3ffQ28~a zPqZo{@J3Fr+GEx3>w?XUGfX&*5<-x$@j_YB{I5p9Wb*aKjwXh@a#PQUcED$`n6pM! zU$y4@_|tV0KFY)749csA9d;b#Qb*)rN~&GVL3+Fc-}|qrGJGx6L~9!$lLB1#VZ1zEe5&g^$1THq`Vs5Lbc1CjIy~SZv z=lz0hR|xp!(sr{5TyjhPE+L%M{{*+)5R!t62oDgzu{t%&quHjkH7q;R1eCAI%nJ|^ ztw4^@1)i>ESwKg?T>4`ZbIc|Q>N(xnUF(bL+EN;tE~ZGTq6Y2_C#&9;6Hi<6@}j^5 zl*yjySU%qk^w^8lNt7|rcltV-FFr2|OVcFPzzz~F60rr1M&frEy(qJw?m%g&?FJGw zl!lF!iHdDu^n@((5Sozy`Wm#~{}Ow46zBNYae0TJ(m&E#x8?1j*A?o~XmQ3s8)`GC zdq6^J$GV5;f<-WkF=F=6M+5$n9cq9kQISRQjfQH1m;35CY9G<9o}f(ZPybuap>(iv zGf`{NCB>&$;FCYHG4zs+bzIn3v{`1N07zM#rADR8AhYvL7cJ#O9WefihzwcVLhv&I z>ux1t!+kFtusq)w?@$gEqj*O;57~?Askg^~=`QZ< z975e6wC`Tl+sKn0l7A(*dqqTv><|8|DzeD%|Jv(j9&l^xe7Qt5yP0rz@Vg#nNNJP9 zDvmh<{NpNErK0B7Jx_Ut5qapcOb(}7Y^Vrk$H1NaT%HRW2zIR6s}_1*^669!W*P^B z7T~uymT&Xvl6CoGaaj1f4r|syYnq3Oc%OAULg^%7_Bv{Y?tGl&S+jGXvyytbizZn0 z+3q*=kBp)I!-HTqv$)vFw7Fe#5guV-X_{!VSK)GH8S<8A`VKG(QNT{(tFB@4$9DS( z2w$UmtmVnt>b}yii5h*2n=a_8s-UxSjO&MZ)qFr)^bPkNqhC& zy+AU@E@KJL#RzdptH}HL12Ks1BtIy%b-Hdh;QeM3HmUWroq&Nxoza6L6JT@DpoT&9 zo7J|{QV~H~u4_L==Oz(utH-j8o z*#O=xe!9y{MvU>w<1ZJ%?xs$xxn(L6mc`VkPdq}vt|wa$8*X*5KmG8n-)M%#H13K7 zvY7fsf9&178e}_Dipe`-bMLMge4PcZ&6j>;#E7kpS8n}@yBlud5OqSen5s36%=2;i zX8xRz=)O1y)WkVwBW!m?paXohe4^`G))F>*bgM`&I4&Yvi#lr*nL9z+8*XBJr-fd> zMZocZUWnx_1gdytJKHYj%MWHxeJd9eA;r8giAKX>qMHF}gmLptV~csPBV)C~ikKF4 zb~o&4zp$JQxAd@UMTP!b$S?4u=N-(aarBrN!#|fZZ%xh7J=MO~Uf1Ch^bfBpiffy@ zVcJre$X}K9?LOJcD1dW}V#o2gkp|ltO^m*&I9qbwNHK2^R%ZvZcC$J8T{MeL=jI3! zO6e}Xn^5xAr9@{|KbPux8}7Vv@+YENV>t21;|Yb3%yy3LSx5kdGY@ZeJoC}7eits2 zRk67A41~lx=4QSKe3pmt9#b*gewUD`qGH{dXKNkUVE&h|JtLeJjxN5D@S@$){b;CZ zZ%&WqZ2PJZuOO6M*j18>6wzF|Ki8 z04-~EVjJh^6)8k{ejR~)+%ormPQW%W_gZq*p0PsCpf@JR)tlm`kyu%Dt1^D}IoFtG zru!uTee_C)aV!vtzp3o0;PBLcpK!CK9zo2h#Y#{oe%~6Vj=qmCK<~MaoNtyUR@$p{ z7%TNMlFmQU;jn;L@y3vO#yBK9QPRmeP&22LCT?)ou^|-%qsLmMVYyy$=GfqH@T$Mh z_i7a*%EMlQ7T(_Sf)Q@+Us~C^Ax*rZO+87&UZX7fFtrm5 zdDu$Z6@yrkC$+8;)zIoXSLtg*ypHxK;H_9{tCVFS`>#t5Q&c-k(jxF}C@dxGpJ`O* zxid`+S|ujEw0(6__AnN(vDp08A*L9?-S%t9WqFQbzkcbW`taAkGvo zr*J=;arqUT6t%k5Ae-Z8mh7?Ac7XSACXil3x$p8jeBe_|9KH%N1z` zGM!*QHykP8((We#uUABH&UkA;)sN3sTbpi!67|WOviA6o%p1l)IMwk{Ci_jCR*$Y# zNmEA6yCZ;^Y4P>XatST*<_=3uO@j;gIN!OylGyvB?0S)yvW_OMy|2AIP#OWZ&sHds zM<9av;&2S75Nz()9Gn@=x4>z#$^IFEARfiwBE!&z#|KsM$y4%o*d`EEIQrjA@aPKu zxleJ{>b>A46GM?C8!^fPP}wrA%=%&7`^EJO?VoO(+-?ud^)+0%b0SCA%z+! z3trk8b0Dk__(b#9^+^bpBqs{dc+)dY0@)P44kdl~O_-1u!N`Q<*n@bjsKgMqBGNs$JxFytI$)E$+%TA0GNs!$(99>Tl&T%(pMMubbHA7A+K zWkF*$WC$Y0`z}eYy`@$7R{^jbKh@4+tFS+EQ5L@9u$8=_S-FyB82<-Isr=Kjt;I!d zDQ`QR1>=aU4|XFk9HlN)4rbKMeT{#V+Spz-_J;eRKg(cBJf5Zq*cSO<&_!=#EJtk6 zx6+Xu7frJvZjt^o+IKQ_hn50`vbOo+)=JWy-z8MEZR9Xd*rqwFm?=YcMLcs0Ii`I} zj$3gZtGs=U`Glfnl7`1%=%HpQ7I{D{9c;~$Y@VE-R5QPFwz;auSpI~zQ(NXDv8=}r zQdVQFSq^O$*iRkVWcB}}=>)X4L%E92z3}ID%j~K!jE)xq5-Mvpp`t$85A3%_Z`3U| z_mfD+Z_U>vNs*6hk&PX})%6n%^A|QW)1+04wKP%r((^n?&XXKB8FM9azaNY)UY@_0x7Uvrd2Yker2@P*8^o9r@)VN14D=0#ZmhP{I^=G6Ud6%;*k02fl8|u`G0`mg0 zbwwjz1L(%`>S=wAwiFn7fKPeoLixCF1B1DbhK!MpvV*2^DMaxjO6P)u>=4%}!nKRh zYXnML1|4z;L}fM4<_^a$$>~NqUwX9P+&$}$zw0u~w8XRY+cnBdpcg42D>W1T6{%Y*U|J?nqQC@Ju$M4~q)PoHwr*NY|Oo!U_cUq)QE9WxIt7 zu`}SIkE2V`tV*2-a;&yp(HjW}We~mOIq_K0sdcih=M5qN5ToT3Ul^Z?dE&8g>n%Y2 zV~pS_U+TRNgH>ED4>T-S?NK8i+J*7?#ty-$eU@+X#XfCoHm1Y+Vl#_n_fb8@XWyUS zTi3ktJP>mn(!J;=`?C>$=pMcbP*-C19i-H_BF`%$h%I}?)<0rAtRJJ&(gcprGsK*b z==K|lG3~j@rp0j{8-T#SyUQ|mP8ABIO{$fntjf%CP(TL$T?u2kuce)eboTsk2mEtF zar;GOQo6f^yFbuD{C(#o z_`)S=%=3|fEAXaiyhxzL5#8eAyg}kr0vCkL_9QO(@B9?xjruX>Umt32uV(&VG5w#k cQjyE?yb-=lO40g}r&`ToVRF@&hQ=iR2lB5=%K!iX literal 0 HcmV?d00001 diff --git a/g2p_programs/static/src/css/style.css b/g2p_programs/static/src/css/style.css new file mode 100644 index 000000000..40b0901d3 --- /dev/null +++ b/g2p_programs/static/src/css/style.css @@ -0,0 +1,3 @@ +.o_form_view .o_horizontal_separator:has(+ .info-message) { + display: inline-block !important; +} diff --git a/g2p_programs/static/src/img/logo.png b/g2p_programs/static/src/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d673bcbce1964c7623e71ee41c089fe35639f88f GIT binary patch literal 28451 zcmeFYhdb48_&EMLj!nm2IaVbzGdV}bK}D*QWbY9g#<8+Fh@*s~D0Hk!${uBtnUQfy zviBa5mCf(*{(L@v#P7PkT~}OQ&$#dBe(rtW&r@Bj)+zea^biD{x~_di4}vJ&!G9Dj zHTYs5xjzej@pxV}_Pp!r;OTASZV##7bG5Y>yzXq{Xs>5)bI;eU&0ZOTT$-<6QP=kw zTpm$-#df_?ah$9&6+F!G+*qAU;{L>hLM~+Ug)XsJR5FR|VDixj`tyb0K=msZ>ZFgT zq6p+^XBU39_f9QI?^@Fa>19@> zAl*yqi1)$~ifg>PW65b1JP`t6DYr8aUX$Plg!BBqu>EII=s@}Q-@Xe+R!x7VkIUA! zH)iL`>ZkXgtK;(qOsNiE`}>q!$Ur>#n_p=u20%}C{}!Kbb>FLLL|cB1_^XNU$?Sxm zIqEscm!@Vj>k4^8=brv`vaxAHm!QZLKSdyXa8p|2&0~eHt}12= zgt6)03%_7Ya10?r9pCfCgn6Dgar!Eqa+Mg&+~1CrpPFN9a{}B-8Rr!d-@b>p4=n3TDGG{#-Lqrb%1DvA z$N6S4rjEqpSrvw|Cb?{dyJ{bp1t9z+$RVDGv8))!NzH4FxJku%&6)Xdn+?B!zs%Zi zSH+;KPhnWE=I%cQ8L1cMYyRTi?I`Q_Dp;PK!Ef#u(p0YL8nhYKf+&1jiBFSh+&S3#if97nYP;#x(Zlvegw;9&ww^6eriE8(_ndj z99^Zy{K9E1y1&cUUb(t#2~O?U_iHQoomFM1;lF7pVgV>2DB;){){>-mZ%Xdh2>P{- z`q*zJ9o=eQFBL=TVn4e#5gWR}Lf3-Fyq(HIQ{5hNEK8Rjf6GH?kg7=v1vzM~%{Fa1 zJV`QZBDb=ZQV2_*re>Ahr!$A%j1;8#=V56f5ax@j@FQ2(&gsCQKMyN$wvkic3q4b# zMip8Tm=fUF+eCO(FtIsLzg9)O@r^ZJ;n2DWeoi_9l4bmhOvt_SvC6~qLgQ09cWZw) zSpfmnZ#sA4-8L#2JWyNvOqk;2=Hu7aIrkB1S^_zJ8=4;a$~cNpWPg_lnPPcsd(T7Z zt0;_^{jgpjmc2|^MS5znxR)M#g$N(IFlnb1!IWKmDs196DW;i;Na`>8;gl&SsyOC2 zUEcffJv+`k6j^=@Z!bN4iL0jpiQTfKBtG{MHz-WVPINq*Wm@k>=RUp?{*sx%D_|^{ zi>?o(VGtIixU!UByh%(kRvJX3Iq z5#1itY@tN|l@~$`G0);U{7M3_TRtl7 zt-ee5yBpv$A0tSUA2?4bgs5VfC4V{2qQs;r2z40?m;WM+3AxzK!%Cg^nhvyi>xCW4dBU38#l(eE9j=lCs;;Q9>Zzr}6Ok=T6G$XFG%A`u(J=PN|bHi2^j@gayn z+S278UH%-oNpX$W4H*7rrKa7V@aVkci6ROTSXJ)xYXtD(_n+79XR$(oWRmi^ri@cl zi$ScjbudbFyl5$W|J55i6vJRQx*o11c%*Qq9BC1(-j#C@lQxg?fR6khA`V z7HRPzfxmC-VC?Q#FeQY%tY*2@_xu?!n^hxp>LS8f zarB*>+(HNo*#qu>g01zorz=IS+!N3ghOnOo_SSWT=XZFnmnko66E($Bsaw>i_|ILa zg*m=_*MiP=C@%{6jBNZ^Io6c`D-~(YpsW;{XRxqYZg^_ov{%MDE+6&0#su4_&0~Ez z6shyKD~wiUO>pP&%RdXPFznlfn7{l@MS(KXG^J--g}mP_o|b^C$hoZC=$}1g`0bQ8 zDVm%gsVH7g#~3DEZ7mUsba%YLv2sH%FfsgA%v`3&EyX9@qSy!KBLoNf1{F&5^m0No zvx?>W%T!PHS6J|N{!@npejmpuj^SHG&3t}J=lacKn*mMwGQg*OlJR&cg)IHu7a^+L zeldh9I``IIiKu&iDHWy7s#SC$m)e-2^)MBa+$PHZbwKSdpMn&dn;#4DTx$E@-UAl6I3`)-oQ^A&P-i^U|d3mY{ zYH)C~gXak$l+j_XniaNW*}g+9y7@?HR_*%l=RGM;pNunVW(N#4CGVmzbIEKW%9rCP zJV@ioA*{q7ya#>hIU%0SJlsrSCfxc<62jxjExigx)TV*&k|Mh6Z%X}K$H^4+vY+8Y zPftEzo+OsibOzoW@SK8D9#y(s6IZwOoWW=k!xSIm1bPHQkuGvZ6sG^o>9ooHxyX-z zZuO$5nQ&#sFjwsxj$~Q#CkG*ALps)((Qv_5A*Nb`hQpgup3}IIOjfeoNZNbJRBL+@ zMKjwpQOV+^wI(O|6R~`I*^3CV*c;16FR%;le8uulU0`($F^!uB06cs-o7=l}lU8%JI9daO;z#PokTo~5MZ{VPfTvm-idJBJkqA3-5=2MmGqnOBsFy$~emN5@0kXv;@(+pfZO z8eA*){5h_&P7~kS-~!ICc&*#0BFaoeVHe0F*MFyFlp5VRqmB>*T(ja`{f*r^gA&?EE{D9W|uP(*O$Ib3C>wa0z^1@SmXm+5@9@<9z z)#VXwEv#5w+tcG5K^c!Xyn1!l>X|O5I^vToJNvc@dTqSTnNz1Ogki|$?+lmfZJ`^X z$m;81`>8!ee?o>1wCGSoY1m(1`XqpFvK2Un3J;K{vP20OXX*F`yUUqYAq7q0y1?7l z3Uc~h4FNfWFSKTee*fg3>i$27`D5+gQx4l?Q2NBex^Ljvz}a}jVJpFMwnOl;BncP+ z7s?b~%#mVC>t0Bt+E&Y&Ft&Cn(WMA*sO$2a)@4*jjFRdPyB}C~)3n!JAQ?AjMCf2b zuIXUJ!1Xu1rP)^Fza&;~4iL?I!~OuxVXH?CKEOE=pp`SNF#MEMp(mI7>u^?b!#-pAv5;LT z5<;cMvEpJYSfOR-kCgEkA{=V5Q$={o3J@+OvQQAw>IewgtxZ=RCP*`m`Ti*%xh`_D z6E~ISP{kYd7Kp$r4y$0BhU(n<4Vwc!ry*#Y_2e&Q1Bw+{Ael1y6!>a7Z~_#AM3ltJ zTVBGYF;}QHQIH0z%;F{NgTvwTz>jqQ?gYI5!3{bH?|ky7+1mSTdHZpGrT-f@D>W!O z1+XdPIHBGLN_M9V$~O09)Hb*xsPF>#xaKS@Y$mGyVzN}64?WxxfK---6)J!wo?4M% z;fgIE!gvHd0E-suQVbuT`&KGm3J`>>&A_L10pYsC+Zs+ew!Bg4VHD}NDv@oef`oV< za`WMB9blpD@+o(!@&6dl2hp^qfdTD4x8s+rL)rb`z9vB1>`)a@nlHk^m5Q(cJo5lO zeJn#Qz#X34=%7fG4R6t*RT-bEbloA-WtM5;X{PG()$1Y71}8fkw`$~cv}DkRB9%$_ z{nW<;hRvl%nUp&nc*7)?t1LitJ*c-;{;*CKUKn}&*+qtBTKD3%+EoBDxq@}PHfzpO z92QiDmK74pG!=yjGf$7#Qx0!`b~LtdYzMB44u;S{S1-?Y?gJtcJq3O0 zQs%F+sSJvUhQnYQ*pLk;#gF}AVP zbI^^^L%2?b$(MC{Jo@zT9MZ+yf+-&Mb!aoPj`*TUy#*k~4i;^_W*t|}(n^(p4M|-J zMI(@e{pT+_67VkoH62c^cp&6+^W)?SGj9XNX1 z-!ynoXRPSQlj!8moh&kn+kiiHHh4geZj_qUsgpf*KF7anj;^A_K4Fs9T|31!8E54o z-l*$6jc=w7oV_7EJVoRImbuz(|HD(#{KXqB#&m`Kf-s6J#X(li)c%@xDAC578poV| z{MtXQ%{Z!#T*CaB1~a3Q&Yak-G+;!M&hpY|#tcN~(*lRYka?CUv3==86^Hra=xKe8 zDI0a~X7JKPozk1UK~WrF^(F6_9$4CJ1~gnp9AnO-_l(PRMN=gGFa2MfUn2($uL2u1 z-2kWm)U%fwqo`9C1GwRKYC@d{+dT|X6YDw~EDERFKTCV|?q5NaJ86WYCeI$-TmSoA zH&1K0v%!gp!j4M7R;-l%iT|=eI7vudlwv5T-7U9sgA3u~7Cd~cNUrLLqpqC!@ZbNhk?4~iTO868h|MhJL8Jq?qISE^4{y6I)` z5(49E^B!^sF=Dh_p7uP#?j?Pqq;p@@&;;JtD2;#J!f|7y>(w4+u6L#3g|R;`yI<=& zI#MjV;=0oi#eO)^>UQE>_{J>@h1aTG@#ntY$SZ8kly(qv%s%}5RZs7@9X8jLQ987X z`lo;CHWl|pKzPa80qOV)&L4Wf|1xAL)hiULNo)+agF;Yd>{C_5(HUEe*_; zFpUhru=B>zYb&hlDJQ3b#it)6T3*w?$0#Dq&$ebfp;<_hBcCn#$>l@$)C}{jy^dch zEQUNp@g{EQosrXqFjaxqR9!43ntg3{RVX}l=l5{z`w0WuS>M9fY6;`NV@NdKo=doU zos<1;U7G`MD{nitLux>P+b0JMIrqk|GK+sWLyZE;tKjYJ98;{3R?HYj=%8iq+1@j| z%JYKn#=5a}3czjl`*`%8v7Bb$g$weZy_o@R_v-Gd*R-)@qhU8T?CGER69by5@_s&I zoZT}#^Qt0(P6&xe zP%Xmj;9aTFR%}w}W}84~+rzq3AmZ4;|Jl)qSqS`l!BNL^3ODa~bAe&Px$KsT1(xbV z;7`fqv202e+(3s5g^N&Y#+5ap89g4`NJZSq-3 zi3q=P0tj~U%8VZfd<*;rygFoiX?CGf(L=ND5xE+REBnin`lE>RwYYF#qeOe{iT`>I z!wPBQ{zFziYD{KuElurFjChuoQ_*C6_gtxd{bPXZ@=F>HrS(gRQ7=#b&z6VO+)M2X z84ghi-Lf%a)DzwDFc4p4c+O=UadHgGJzA0Y35=p9mmna(v#)Bmw|CU|ssjBa9>0=` z4>{}mCtkciRgh+J>XLIv#;MnxhgVD^)B#a{R1{i8vZ)wj!_k5I7qY#yagrsAL2tz1 zP9VbHQv4Jf=9+@)cv}(67Q&t~rDE{Ow{D_}EnE?hn}sA(pj>a5dK1LIxr1 z;I#`EFk)|ZQ3QYruVRYIrq2&PC(SGsY0ruJqm$6w288C5?^mN)ap|`+rJa~id5h-@ zhV>4=$R6}>un_znmCGWp5#fq#vp6mx?B2JGmDUi=gG|c2$6t8-hCOc4G}|SNLu*g6 zJ?!y~wC>}N8;~w%n%cr#kb^$biDH@(L)pJ0V$Q67J>TKh&b*(9&Y&L@Y7MEP^C+*y zu>r`+CxWWZ@Zu)}dA&4SK{J+(>=acb=-B7@P-{T*1|_<1geDdiEE&oyLc=7<{-7;Q zhul{9w`As5X$w28NB@>dWl{;{XW&W=1w$&uk=uI`SJx-qrm){KqPHnmY5uqX`YhR< zd4hJ@4H9b#d3BO&S#nm8&lGK!?6-U!Rl?jcmd+6zZ;6j7HOPzhoO!RA*vR(;MP^Y) zEYF&46s{YJJ^NegTcd)Xo=9OO|D3B6v7eW0GVusC(0GC#7OcHZ@0NZRq-DB6Ua6$6 z+b`o^u5U_PBMRk0`o}3Ux?eS9xOM3L7_AVmEPN|*Y9LZH6}xpa5P}tk>U*tAK$E{|%mm+%*60!1*lIm4ValPJY`BoPtio1SO8;wvL$k^;NNb|pa~iYH zwAUTFf-K+&WadI>AP3h8thuDgD0&Mt-J{aMo!rhI$zLfbhD`j~uVvyePX`riuUz(; zfWL*&;;z8HPbEfcn(-SNtwklwY~HhQaVtW3^PUe}ZQ7sJWG+r%m$H~W)7n*UtM#Qde4{}VJ9btNsE5$Nanc8-h;D32+}J- zno32cEyW5Y4AxPFxMw5dQ$%??3~liFJ8^38JKK?K?5iG`b=LO<0}p2+*Dp4|YZg#w z%ne~1e>IkIK!M}xSU!No~tt^LIDcxbNhdQiWex>?9&TGarZttFNWIL9%HR|fm zi6hjX3&_bwQ4Vl!21Qv#s>r>g_xs16O^MTMbeLGE|Ey9no6)Fg<9n@l%Y^5C+}Rf1 z?+e*Ic}!^rQ4iI3$r3L{4msdEM(TYAX&ss>j4UZ38SU30?2-uS}j8W4D?21~=3` z)VHks@R^+JpR3QaB}}CCuC|I~;sa>i1y{pe4miE^ExtZc>POF%WxK`HzpXqPk&Fj6 zf%o4wdguHr7v)Ess+?^-_po76S~yY+i_@R%I9aC zQM3cb`zhf{({_Q^cC^s=f8nawQ`j_@efrt8k5ebKZ2Z)jUYW~T5L@kTUKOjTnR2Jq zb>D!|$&jEy>zXbJLSQ`>fx4+z+47m`@ThcNM-Lcj@+oeOd&Z-H-+Q?4-QOwYdiJrb z*$gy$gOjM}Ye5>kegN$j=Ei)e3n{1Bh4I$$n{fdZsfPkdbPb5@J<(rQh=ZR8%1Z-> z$SS9!-UIewXzWmv4$`he(YnoJ&3C%vCkSI@?9GrkbuE_9PNLI1b9XlQ_mj&@@UuY! zJ4^Yc_IbzKcGe{bSE=wzbt$V>IuNG2nP$Gb{ztK=NUG1KB~PvNy{}I`m&w%TbJknl zuG|^%!Ts^JdyRM8_}t~{FbENtry;WA>?HY1d7)oXKC=N&n!?H z$jT4Ab6RWVYb1v|C)rf;cY2HqB^o57&9#H{sg*e4$dS`(eyJ1wPchv1Wf05Hzu}%_ zObCgo0e*PxBPFA2JV!av*}-KV1u_tt1)wRiDra%?r!*k`T;*$?X`97*5RG~*CkAyGLDco@Q3iKGQ){>Ci;ChdGaN*a+pQ7iDzqDs@EREiEt3{ zXK`{7(?AOPNAyO?T=;>1EpTW>JYblg)H+ZdU7jX#Ljo0X)k{S`LZXv6RX}wp(E{s> zrGD9413}k+#=+~vnkT+#AY*32Sr4Y|ZH{YYm5=7_X$0*7yI_SQPq*tcpV^g_55Hr{`&p3VT-mjw=ZUYg-}J67w( z&>$Vgo$)gDc;e(+F@$1JIy>?X5?8GoA#n@8c2&5+-b)44j5LWbK{{|Js8?Hb1^}Oh zK<3He=}gw#Cd~Jf&EJAsvBPzsvY4wR`7fzG0HhdeDNz4dxv*tjOn(TaZ-a~sSwRSq zwXOwL-a|e?_0<4`H>&=3=u2$xj3;-DGs~h2GT#JiG=kDh*tyPl$bag5=_HKodcqHS z$|*XLjbhb?p=k;hBAN;1cb4_``khqZ_)(DRAt!K8f^0BbB4Mx9Ey$sDZKNxCTMC-L zV3q^ThcXlH`mrzCWeyaQ@|E0bvzrV@na)>MLh~YgXy~&uz=zZ&N$ckFj@Qw@;MHA_ z%HDhlD#L^9T&ktQIPn{K(n#|} z3y5VfY4feH^ixxUO%tCdA7^W|^|m5C zjx8_XWG-;02wC72U|l&w(dWHorgv~|{=JU&P&$)S9)-2l$(EapsM@fzEoO?mHyar2 zq49V?*TPsg=1DRWHFE5hBKG@g;P+44su1>u76PhLD#%xC$1ru|EEUNOcf?Jl_+3uS z9c6%x&!4P|+PU?anNTY;zT*P+UTA+a<7r?8p_Bjz4egO788ethPl)N_XlBr|`m_PC zoH`L+XUOnMuqi{0Gb1&+@j^1*<|FIKS4Dac2n9;ykoVIeIZzNp9J1a%B?tEHP8h%c z1e`blh{{kC^PGoQiWrs3y4Wwxn2Kii)7N@q<8+V-GBo&iKmc(sxkrI!dea}ip~16~ z$vb!PWNG+R3#{CQZxZzUM9QC?3@~{5(oZ(=Ns=5y<^V)>I!yz>US!fB zIal8aec6))$7G!x@?Uo4s2E&@y-Z()e(Qn3ur1nxs<4Pxi+PAi$pe~y0&e-OPjxw< z!!xaD>G%mt+2}z>@I`4?Yr3GbM!b`|~+{8hj&_8@&FflDin!d zZ)(0WjGYkoGVtSqt4ZdBIZK%Uk)xM){3aHjNa#`=Blm_5auG!?OzwgZ+sD)i~0(#*3o zg0~$zDO_{e&z*Dm#5(D;n#p?3m3y%Z$@da+x7OKRxUR`ctnOt_srJSk#2RzBkEyG9% zT=zL^ZqErKlZV?svgEj(VoZ3zKu0GG1JLYFp|LS1TARU`6s9$51kCH?bT{TBk>SB^zNUz1~FGSQEO5i~n5W-3az1c(m zGW!&;gmtmSd*n0v_e3{d8oiJ;@$POO)NXwZQMZs=b|*R^^d_(>v6?cCb^^U`1GpER zUvbVkNgU;?0HtCs2CajuAHUe8Srh#*m;GLKdH~B46v2lL6oAi`!w+##r-v&OzsHf#J)OlaEG1 z26XGF(z*@WUP5H;NJfpIK{o>t0T8S5HMNiqgMDM}44wFvM~>EH%8f{1I-ipU zZGwuzco35Y-*}VjcS1XCj4RMhs!K5wHSAuwxUzAiAzW#Y0AWF;Ng!K4mQX}JBE9D%wfZQVNdTaLRcWy@uCrzmi~UDpf6>+omGr~^uxU} zIZ7UsF6EiFWTq?hAX0=NjcBt;d9uH}KBB*ENY_>6y)ftw3Y^c;Ar_i^gr|h-K}g`A zwwf?H2c2r*MR^we)8H8_BjraR(>_r?jZ$CrZ%Ke7W5JZ`!{@*7jP_rmA|z1>VI5!f z7({Md6>h~ay4iYn`Da4&z{%1!VSIQk1K~1xd(27Ge^PhKv7MYZbFrFXtIdEIb`=0j z(gVd6BK-Ygb)_Y>g(5lJr`ku^Vc76#jDmj9(^I71qSIf? zib39Ygq?3fzn$^?!m;^IhnV4uYv8~vQKB)}h=~>+be+o+lt?itKNPuYHvN#FQVGff zf>>eN-MxE(JAe@+h)B96&5JqP;&O^i6nywFI(NKYle1BG*t^z=^Rm^x++h6|QiR*q zRG5w~-j{hET0WuheeOk!2=(RJMcqp7(IzbEMkcCe=3)TCOHnA^`UK2nP|3>VrS|X= zea)N&h|=q?r`+7mDWM~G0wxdCvGSY3?=pJ)_V5yP)F7prVjFW7TP`Q0W7ZDmW9!d# z#8Zqv2Kx66omXoTbJm9qMw;X8Z}!<6_gLQAHMxj6Z-^3SJ+Hn`_=03j>RgK z5@ZA%=qi>);@(^B$d|Ncx#Kh?x~^60M^x+}n^&lofe>SvJa->`N}%Rz9TN!nJXOW0 zbj8(ys6A0SN#>@4J9Ixm_j{i;XfW8UerC>*STgXzAOuv z2|yird%4SZRPvkC%W-ao(?Zzu$rlXQ*mE)-*40ezTaq%~-JofG0mSg)?+wpyI_fk} zP&|M@ANSTwgstbc8`Z*0lrY!8NwdE2zc`Rf%+kCJ%#9MQTk&U7#KvL^Zvwt%OyJmk zl7k3bAxto%Cf~gBsnXkp$7g23<))p{7S2Vi2MtG@8KZt%S$Rg7XJD_xdrKTu$>8`b zfQ8AtjmVPHaokd#ksD@R1C3_~`gyPOw?rumoRlON-xxPde(GCJ@8xux%I^lSq=+m_ zH#Q+`2J$*0<(XN*5xoXqIsxqZ;8|1|_u}*Tx5jQZYm&dl1n;KLYOnh|OK?${f2B(^ z4{DH@!H5a*Up(SkvXdHT_@!O69VbqNh^-N6;fF&4Jv0sW*^QK!PgPWFGh%eL73tCt ziv&{=_tk~R&#ksl3&XWQEw!~95MMOT{dK4R=d+z5U4Y%zIk_G? zEKJ*QBBi@7bbJr7d}`xA9J*Ct&A>^90VH@LGE^G^kR3m@e=IHf6)+ArS0m^1PLAlg z1kr#yi+2Q<+M>99$n~{3TBz%$Sbu~sn%K0zS83+xQi>>K0-IFW5=&NoW~4FgV?WqB zet+O&bm)`GN_=v4N4CG{6hrw*$V=1twi`En6ghE=(M_3L@*0S4^TYS7#OeKGW!lI1 z%Ye}R7ZDL>(*{9yTWqzDV@@cesD|vU?)lkW5_un z-d}N1nWz06h>)a~oQn+Ef3*qxtxVE<#Hbc=Mpex=aid^Xep;^&F%2Z4u5>b# z{J`i>6w|nDlZhym1yIQ9pam=aV|Rkj;pJcTUFO#XrGY>HSOFw@HuS|1ml$RzaFh`O znrlxk6G8qI+COdB_h$UfQD73G@yEr+*sqi#JuoBN!V+4qa{1U`mBe{O_zBmb;?YV~ zvP^`R_ag*?|M}AoZ}5Cs8QtyPE9e{v2|9^dKe&PR#t0p^cfKDrkxWgbCilug*4;b8 zc)k(#zw_fEY$ub#-Mmzo9Ne9N3YcrJ`*a~I2T|z_(wX=87t=*tewbc-EyX_%x~`5? z@2l?CGCz;V7;)X{8xtQscQkkG-AMDRSGsGg^h({UYZ)tK9uD)couG}km8und^PP^l zFLUuz#%l7%kEV9_hpgR~JWz#H>WIU@)_~%@*}Yp7!N0DSD_!zAbZ*)@K5+kA<|-^| zO6puIt_!ydzz4D*FJJ}K98>O5k$%r||}?9=@AoKxTn14fT7eYp1g06JMwjY^gMI#DxNKxTu{{qb&{srPp7 zu_aj(8-~E~(gB(XBK+F#Jez zTF9V+&w_t$yqXr9c_y>l41{OCzRHO^a^awbV16|$Q_xW$M_1%mit-Y^MUnNr;1*El zif$6U{?fwNgJ!WteC`7J6s>qc!t%*{%}l|pTYd1<8+^)}`p-hJ2Pu9mq2%}`HScgV zhMy9B@Ae7OqEzS>8CTA++$Db3hgZDI0LK2$-C`Mr&S%coY8$5in8pz;UW0ghB} z(z|14iYp99E;sODa|=Sc&Hx89NUe2s!@F{^ohOHqD5{Pa*e9?;eWdW{clTf4HdMRR zm{L)38F`1K;=#Yz^}3c)sYKU%g8Tl>SJ_nLsM-7LS=lh?5Gd+Wx4Y%?OkU+|x4Y#$ z2>Dw=J>QCEfbMKiZ zyEbqz9jClA{-MadeMqeJx`p}QZ%jYDT4I>=E6HBz?-&ThYEfX4A2|JLa6B}R3*noS zXkybwN@70_(*Q=n%Z(2O+z9sXkvz3FTiColy=#mAb6`7HqTCx^xgq70j!&`RKS5P+dy36!H@n)qhpy zE;Xvdy7)A`6aaP>07DN9hYJ6K&G&;0%++u-gu4=o1kM56b#P^_q z~BjyE!{E(D1bx{JE2fnQ6i1@Du)WVk!>Bpg%^ECJsU<@9*z3D~$ z%Cc%c+c{>?msAWbUjsB70q*R9ld(lX_R{zDwnabtR7BmsCuoSwr;ex_0ZIHSW~Um8 z{%{%4aRZ#N{!x^p% zJxl8WrBea_pz(P_?5Psl|kF}KtRoaMjIkDF{-m!wi+9TuR2`)50nK2bx}WgPQ}J-^f<8Vu-M0>F(`a`Ih)&u zOcC|VzaYaw1Vlekgmn*`Qy<&MAavi?-}92(eK+po4xQMtbhU32i#zLa?vOCg&4x3- zQqUf~5Pk>{cuxeOc{I#;jbDsL_t~t^I`?dcJ{)p6-wFdBeL217w{}?kTXgEd7m!5+ zO_b1~Vs<{$(#!mKxM;mK>*z^%Tz4CMU*M(=LFf{r+430Gsqw&V7gT8!B*W-`knY>l z%0Zwt07TFyQ}EG3t*Zv`lO{swry`?KNS8JmZw>-tSgRXzaRnM;Kk-sxZE#L#Vg)$G zMc?HvlaJJpFu3z+NA`S*6!{s*y{DtommNgI=@@WN0nz{Q!NZ|mT{NDQ_y&&o1i@AqI&7^!{C0)UAPzj7z#L-QMi*y z54Q>{XR~3LMS%A3?1RD)`qn0E)>?zUsYPk49BN1m$QX`mC=Z{@cs?fyO)Uf`g3c0X zh&v+Zk0Db$Tzdcr9*AOM)LWr*AULU$ntYrCf;t^Be7u5L-sGhm?s-XlO1%Dw%VMzH z>RT32yhujhMF`r5wLOH~haYZTSAeubfYTEg9ct5xp-x^Q`CO^6YlqFN06>Iijl{3> zT`;{ex0@9!Na)0o#PHez&yVCCAp{reNr7X=0GaOJMTQ+>; zgK*+thnV^{LkuVNOPq;?Y=>2BX`gVUCdw?7fSOiP!0Gm=>9PP>c>Z zye!C$y3wvXh7m)4ojPw*kvSc>VU68l)aZXFG)wf3(XQ0m@tilN7(g?*SP_zOW znC<1L@*ufTVR8Ukn^%V|w`_LrftZ)-o{e2q?@a~hK4>Jw*YePq<>8-S-0-k`;wQLn z4iI_*KC6Pq0M<)~?{hd+ml2f;ZO6*ByeomaKyi&}G0?WbY|m?>R;Q zvJHqG!CFubL{HNYF|@pQ@%#F9pKNvvHhC94mywz#f0qSX0mfC31LSmDW?uG&(g;d~ zT{pf6k4wQ()ujM5-_Lfgw~3Qw6=_<#uBA^sk$_x)ODcHPEh^z`dx(=W3CB?Y2v7*r zfS|$B+4jy(Sg}IllL`zC{uaPcuQc_|33HL?JRxJio5V10K-4ffsDf=C0`^RhYYKp6 znE?r~0q`aMgk7+p1}qIeWcJf~PKp`HbHG4XAq{?*F-)ixW0QP0f3j$XDGWm+_y_=S z|I8n%Y)GGe4xsHsspOio^d=jcz6!SKQsoY1jQ>dI+0|%}UZTr^R|Y)YY61AJp7~z- zm9XnOobVK&(6P(ED)c$OS*1@#`XV zVDY)=g+-H(WfnC|v-8lo6Ij=gw-My~v-8!6iT%=?@N8)F1mmAge+<%qzWw45)0La_ zjtzvJ`c&y(0aZad18oJ?{C(#z)H}O2!(afL=K?Gwyf4@R+Zou~S^scDq^n03$&)T} zG98-;$DP!g2f1T%Z_tc4fp4I~FAxtKf2`=a(4kK?zH{=4m%#%n?eSb_GEq7bQd3*HwfLqT`V8&> zQe&Hikk)of28`e}88CRCrv<=+GsR~%*iAp+E62nBv6NYcSIRqvm=l1@dl(~U#dO`0pyZJND+h#v zRzx~r^R3rDZlHd(B)$0rKk>35C#^&{x#-bQ!S9SNNfa>kmm6bX*8V`W`y?fydGc)f z^iFLRDWCe>@##hNHcbu+9gri09#7qO$Ftp!xfpC=;r0Pb%CpNy=$_P{mH`pB%gf8T z4f`Y#(iy_8msejh5^-rxHt5sv!Y_}(6Y#a!oY&`iV->|=oBd9I%bX2yBhAgtvyMLI z#$OK)x5pgC8}FnFW#u>*zQcVv6;-Uvf7A0}9I)Jnhs>PQ&;#aK%+%!M8L3pevcbO* z$4XMUw&`{u&2DL8Svk6MWx9mRj^ZzXnjB!8CXX>$0EY=-gSc8%UhYE5M-2Qw#HZgTJnf?HaA}#u4Jvk z@h|TLD=~Nxx->Y@0~;T#MYKYZ#o&?0SAksMU#Un_2N!T=5ouwvNxCIjftAGCx~n6 zf!RxD9~(hpNsx;VY-`VgG{Ne0=WWH!t?dcZdV@UQ|7;Au1E$_e)Z~mIhkLxf3LfVz zmMnKqV5|8*-kkg2$VBY`_=-RN_Vr`pO-HKcDP7<*~ZC&phKr147qd#4Xp%t+uqCU0Y$8dH7#bB7 z1>Sw(B2J~)Seae(*!N?ud~E0G?5@23!|23&wR8yk+Q?v^-Yq31rMJIq zK^cO`RFxP*t}D|j`TozuuWIS32Y+oo@Ae%t8jW3fu1~Ms6jeV~ANq2%qP#pZ?UMkT zB?Lgx$?5lq^Nn%LSMHH5$6R|A!fJnR0Uq9Rm+H2FKu@oki1|8nHB|%eMUg zX?fKEP8d6NnxL7Mk)`H5aN1&DE2!q*c2+&ohr9H#j-0%@MNwkQY zo7qi!l6i1@ytts2ELKYnCWv8 zNqo}elU1|{6x>*eBJP~)W+RUmB4>1>)mRzz6b4r zS86I>epHkoyh$XgUFkCdJV7^k!7(E;Ms;RN?7V?H>i~2<8Hks5)3=Tk;P-kvwS`u9 z&;%1&+UtZ)C?Ye(q#oGcIK8TWjVr#Gta(lrqDT?O;{+Ur!oysjJpSN*qM z8;g5WK;nA`)@dL$o&1<3IX(LN4(6!fr! zaFIKx<9G7AX1ho`{w}v*Eys+NpC+O-Pz&f72{j*jHe+TsU&cMDeCZ&u%G}(%X?qj( z%UCy92|NI0Jb8CoCrj&|Zv9mI z9rwf+H^>2909Jo{FfngKxj&RDtB}?!(XQ%RJ);8l$a|-IF?r!9Y+N@KX)V&pncL~Y zH;(G~E@sR&8GtCQnYA{w2tFOdSXT>z>d{xX4H=$+$HtsblyHo*GwiLpQ%)DMmtu9j z7v@Xh*1#7?=g{Coo!)S#2ePo1y|;!HE>>g!F%xfcfRSVW;E4U?uAe=1+*!{u(rF?`^qUr59=%^OQXu0+Z&|VxVX3)7h6E-W8(3~ zarfwmd70b2V7Syl_p(+@oi638Gcup2Tykk6%(s5pQgWVU{<55qPJ8oDAsc(h0`2ps z;|A0LRrt45KMv{?vnx~QkVrpetKatTerz@7nc2wRaLi?gwtxxO`f~C1oKX~)@z9nv ztEIT+F35%^+Y))p%xheezy0;Vw}WJWlOzahza)kvSTLTS$dik|5!v|4!A4eaxBa&S zUI|Q)93gcyBC{;(A6lL|zj1+!{e$yRe;hXrFN0fucz@K+pX_t9 z_i9JPU8*M>QB0_faYTQ3GM zcn!-#^e3B_eg3mpwxXcVBJK^m%)WMFTB-Axm)ht@O7y5=WnY%yFPJEJ<1^2ZWl>MM zV3_n^=+ff}QZ^+OH=()BXhjGDPobci_}Td;L`vL4T_Lkvxid`}f`HD<3C12rLH}JlslG;ULQu5?0PQtwZjVeK-A6}f>3!3 z8Vt(X3k95qzWINnNx+MAY9!~_8Ozl<03UF>98D)(DX?1Er>!s_*Pk#o^p}rqvd++D zZtJC_%6&ifjmqJf459AI4wKf3x9+eLo*)ME=LmQR}sIGXXvx1VUwwVNyq# zX*0(0<7xJl02#X1?S-IhzYHA0QN>&GhV=MV;4uHjdB~;7u0PuL`*50lamkuBNH^lo zXJ_6rtD_9o!Yco}#!e-BtWG5qK0sAi-vV%%MY_7t2B+vf(TPt$@!g!>O_e4@%4z9e zRN#jTVhRa9Vmr2UIh#ruF(2FX<-Nz^Gj?^2MoJsP(G56Cz&>PpM@bXVoS7O zOjX3J$c_sjT7F65;m|*e?Wt%T-6Rv{aR@wMgcDi7Fx)NmDk<77zxf$b9-F!S)B`L| zI=W2?JI?1uZ~TRGV}H+l{X6Zd0AV#a4?wJJ27Rl^x_5&0fRrQ7d~0skoa=Z&@qP|bn- ziVbza3%g9a_FyJzp$*gs>V%+OO=tr;Kc~~2ur7U2%LehAZsePnR}(lY+9i31M&? z&g2!Z--k0v5B0mR8%O~3sMF3Sq-)vY_w^#-x)Y`tI;j1zhuoMg$K_KI*?0I#+ziR3 zf20>wC<1YOoI@Y;6DZPw4a4)7qmx{@c99*OpP~m)x9<-<=H_gScK-C1YjyX-gX%e$ zxZ@*0wfA|3(p6uPIoA|AzL`WAoaa3ExtHs@9=I@)Ja#GS_b=OsMv6tQW7UYEsB4KUzX`OSk5&*0hfhnX z5xy`tKEs1FEw&z)beear^1niYjFEIFW0FZ`vXIzmKm)47=wI{w`Z(+{oG^e;pwa0n z1G(b3zHwgB3oR7Z_VIi)`R&%MZD51kLuVqsG9<1C8AZ^vItS)6u+5e`z4Eq4SpRkm z6h!3fUHyV~Q#~>F!tQEHXN-xr<`^*#XeB=gIJ&Un;oHabvvW=sf5cytNH_9*<}|8|X%Oq#e|hc&v;wFGJC>9bqv04o zJBi98hHkybK5(s`VRfjaiALISnx(}y>zj=Gr+k)J+z#|natbN^KvkaZf;VDt>7zviMP!Z=v?w!41jt?c| zAs#}%uoZ^$0vD9p(1}r7YUwLE;sBoX@*{W80*kR9c}eK>ORZIAqETYushW>&uiExF z!s_7I^tfo#{Uy$KCg`GTfn-7&s;kL1e+_4VAZ*S12qGpW9Oh6u>2Xqq(Z}+P63b*e zWus*yOb|?fi9tN;OZ8?mQA-ace1o%2Yz#0EVixF7}R$n7;q@bJC#)!?6FVO4W0xcAirZCW=bBy2E=a#bE(pN?d zG~Bvh|EvTzp4j{(A^Oe|I<+jUt}5usDKV4~h(>94a43 zl`@RW*vqFTpCb*u$!IT$`W2)nqMe-LtjxJI?|XZkAP?(NRh{z-;=%AS7DqfAVivra zhHJ-@c8bzXR8uNMXV?-jrLJSQwq`hS{8Uu}@gvrVyXw%U%^+oFHhH32Kcb$?L!0T5 zEaL7B_}LiDHv1#Fu~&Y+=_1V^PS3k;+2ykWxPT_i1@qMpiG9rA}+G7xonIcqe2V z!|cj0DaVyMy#hE&f)wOIYB}`ES?7uXMCN@Q<*i*cR^XsTp|VWwXLMC(! z$W3n_hiQa98+4I>87~-G%&LbEF~?Dm{xeE4xN8{Ocuu>PZyvq&+KKMN{VnrLlPNPS z(1)CEc_@|g=(F|lPIaXr%dpFn+XFcbCultp!a(Qwd@b>}`ftqXXznatLLM+geJ7ab}q>t8mMmKuS zpo|q#wP2Y`VfwPw;J{YnJuSQKf7I{#mxM40N4J%}%JsD6Mbv@EI4O)ye<`IqaUFAi z%x~aeyA{_HP96{x)DR@2{txNTa7QIPSGrYK#C7`bh{9mV#r}H+F+n=xgMD{q8{(eTZ4!D%lfOaBc#ds zQYbU8Y=!{3r0Bi{3tv3?8w?Y)~3rVcO$}Ih_U5tlW9YiueMaPTI!Q z$)mDTr+DNNKwt+gl8$~JdKs>!h1If)HCl8;yeCB zk%PtUz_P}pZ{=oz8dh$crK*$7ZZMT5d-^h0C{; zuivU(c3pX>=wYkMe9s>#KjDB?hm6Htovj&*@S_EZ&i(AR?`FT+b|!z>KfCZ>V=@3m zf*%(=Vr))~?!O56C_Kv-%)wzHUly4+S}auLTYPk@_iwQCxW$;G^x?-*;(;j8{15L) z>ulVH`KK0R^oJtg!B=OTUjMgO`P!Yyj9im_sjj9o!#iv~OCI%O;>LmxtY$8DxS%$d zoNM?HDuY1Bn)|PR`>iFb2fcmPDoP{YTX4Vz2%a)8r2OrNENXk4_Z4A^J(kisQkdh2 z`#>~P;4FT#ObS(3oa$1a%hs(D=B-8JL-ks=8u_9gQO~ap6pw~zI?ND&^MFt}(;gng zf%gpO=2Sak{P^XgsNdYv+OH3#eDNXATC6v=C=YLi=9i_xS|W6dcGPq&N`UH3DB{G!TfB-nys9{{3e zO;J=VICKBQA9wd%F7J$zuM3|u>is7ynu%B{`LpfeGve3vn$I+>F>X3cs|TZm z;kUZLx!@B+@awkEfaom zWK1-Pbc>fuzpzM)YE4FOdGppDG4vnI&+|^i*yc+q*BO$SR#||K82W{aPwd+PE_q63;6bS&4a;o9GUrRrG0kzczt^P8FEL_O9CO*~9+t+bDOH%+at@Dm za2T&yZXMluvSf-v>=|%f-%2?(E_-S^Yg$TYTsP#$KUebm!BbuGv3bDFF~;yncIPqn zpuR8cPT)CT^B;Zpl}c7kCY4A^r`+zm9}Z5cIhfus+81fr$+I!_2|i+XuJlR2s{h%W zz}m3cm)Oo1;cE0ATiotg*(FghS?9mRCH{3n8e>7DTIKP0Lbm5l)KafT|7CYvwywz2 z?XHRe;~rVhu|ZRj*GIrDJy2WM30x(-7P(iZKPHosSx@s!G4IC*;?(Fwgy_&-WZ^T5 z3u>+f_#}kmyo1e&*mxY}E>ttpF7jsOL_M|hr?=2}>Ve+6Vufx6M)Ku_B4U3=IYWmr?a9Y4Xw>(vpe_fdyFLcR7^N!C~P z3m=tgf026)`ZJ%HM0JZPEy{jG?Y0u^hFuy@aZ0GAuXokrr-#x922~sB8(HG}*f$EA zZXf;fvLj(T>FpQla|GJfxbD9_LnF0hS?^zYail ziYO{{T(ie{)R>*qc51sh=O?E*{#Uhs%bqtwc(9XK&t*At>Au3gMo$=y^2T$I zoc1kMuK7N4Iw!0=C6S7Gfn$B8hEHkumkbluuvko{BXH#-<6ag{YPkf9uR+$(98}l+ zi4uLvlOm(Dp~V&G|12PRxh^w8S^%1H};Fsdp> zpYrNlz9XYE5ui5-5 zC1j;ufSYNJ32tI;{$gFp>T#V|7_6Jhn9mJS-U_H!%k-ITsEW#Bi6Jd?id?4~-yD?Q z_*m}Mw)gL1riE;k@KOxhbkOGbz}|c&C^pFPL)w^D4K);)4>8D$E%Q-YMdP^vqIe4t z?I*w_%PXqB)7NxZYAuRkoC~)YRie2I@@0P?$rjy6F?C{fE9={#qU!Ja6lQ}&{AH?UiFYod z-7R0@3=a?ZnWQ&UNd=c^*7@7BwM1IhR9l9aFHcm?KJMQCjmPE^&ywsO&!qVi|9%9w zRPu$W`1tpH>Z%^43F$RWy1nqTpy86?HpNrbY8q4_>TYo9dMFE|?=UfXT{Lb+Alj1mo`BDu0|SgcFWke~gHpkabxc^_=+u8Zu{~$rJvV`)|$8f3$J1npS_B zR3s^#(n(X|R*}DNWcGp$;oPx*ymbtH;E3E2BDAuVm zX?4ZGQSO7S4yZ@f+!<~f@SJJ=c%&D}62q7on(lBcMzB45s|N7>3ELi1`mn(76D4OI zFQxLSD~(Oo-yS34kE(AEKX*%~%wZvIu%>xkmO}v$lDmbO{h`0y+wWbUKMn0M9?B28 z6l!@h=~|q3u^GSIRVm4~^^NZs==aI%g!2;|BT#|juHIY))HIu&RG!44-z5e2%`qUQ z@!LXJ)vP9}ic4szFXo*F=kQroraD}F`;Vkm&2K}kkxS>yxQ3LuAKGYE2fFV z_DZ)lS4U#as?UWAXFdZJ+9g;f%h1Qd6r_*GUCTQ9@)QpoZ(8*-MlxL^zB!%O=_p9= z=I6@Gay1#X3B}8c5N7gfw@<5H<64(Y>3k+|R5KkqPDGo=xurMxV3(@CZ7qGF?@=Kr z!>ENa4E_Ra|MT=PN1<3TYcGI)L}`?QK@}z~b_HlL$8JDoL)meqM`faN^BR}+78Dp0 z>%Ps-Wr!P(nAv|Gcp1y#+x!}v*j4v6&TwE)F@%@Pt+O#R96-VoPj>uZ!vKgGxuv_vm99f|*KO%WpXM0aOHIzk3z7L!eI4_?iv%j@VBs`q@ z_KD-0sH((@FV-pkr;a}(-3c2_xU$+SWm{*&d->lbgYf*Pp8UqZC?sc7bmR)~Vnid) zKhC`zqQfBU6uj2fjEq`!y=S>h@8STZ>yrHA9|i0Ub@AwbMnTmK8L#axx%8MnX8LDa z_NB8Ha%S({=?CBa+nNC)N?KQRG1_Jbj%yZP3>&}iRnv1xwf)PtdC*ivdO)_ggj%CG@0;uy)W7VjnDWR>5c^?!aw#ov zNV-4HkiooXO@UeQe0%nFC;cUT!G&-`!S<$?`X*Q6r}A9XuIK{wBEEQ@Z38tc>tzc1 zRR#}K8Y??5w8GQqBJDi0l5^f2C5JSzz-{SU=m?jF(dmxHPLJK)wOtTip8<&XEb zD{|czExd~s>sZ+~4mXccuV5ua7v?%Sbbwr-CV%=Pa+9c5@e&~fRV@%jP z`#u@A-8nOV*DN%Z0tj-61SLIn=8>^liZcqAZV@1vbm&u4hzHxhrBqOZ|B9)36i3q7 zG66+UF5Ote>frhD2UJ_2{8e|EPjl>&w8h3*j5XH@J!Y*miUqd)W(rs`GfVi zFrHPN^M!qJGdr~9;B{SRpM%YooZGhq*Vz>3RU8b!$Cfw&N!h?)v zI*>G=%;awo>DNcD?i>fmF=F8f(bcukmYs;9P-!Gz1H>|+3p;`h>b-~q5Ovf`MXQ#9 zj;snKWx@`76PpcP3MsXIe5SkpzndqNUes#9j}mzbDD}u5DuxU3+65pNA(J5QhXYon z2>C9|kTH7A7Xkx;V+`>p3~;YjL=^%M_Y@q4AX0`-LGXC}im3yb8#<`v6s}!iLi~Be zALGJ!9#-7grdLAr5+4mB5O)6ZBe?->O(xhI&2O@D{*xd>?5e`ziQUyQ;dZ{XkV4YN zAr`_fY9Z*!TSnk!v4d6vx6kbAsWJSn4Pc644ZODUSoI51S;=;Y5`oAEkRjHrJ;^ny z=&h@{0MoOO_^W;ZG1LIm3G-_$m7K#o>Z0oj&2}jH`QFM z!{$57K=T`!fkBLeS)ydVV5Ir@6E~!#c&98WO;4)y!0R5~O|6jM&nZ}qsd-5ghK=|R{Thvsgzbn>$fLcb+ukpVy;zk$ zsEs6d8j%vE#$F8Q)kg+g@4vh($WhVDS%b5I8PEHBJ?~Rf4v+Aawu38FHC|z8%8$&HS0V~6n;rzx_$ZgS| zg{2eHZhQQT+c%Je-qPfGf${#=wlM0ATgU|w;P94L#_pM}ZYxGQ^91T9M7Ca-Z6uStZq0R+TjzfLKVmFjnAbRL>To1#2`2Rx~dE#%(pDt6R zX_6{Q;Vzz-Jd=$%L=ktJ(#h(yTh+;T3L*s>6lN>PEH+*pAQ~I(=KwODg1r0 znFZ*9s$mReUIKUNm&NVqns3B-n1WAN|vSYd9Qa zNg-3cwQhzj0qn{$yiNpd6Q-yq6`r{r2=WDPPBiV{_dIi0Q6pm8 z$xkL=tJYGtj%%7Q<*cStpJtiub#&ylmEDxS*C0XA`}k=teDO@k=J3$X<#eNCr@?zR zCz^WR^}LBY#!9_ELh@Ixt7@?8EHHo;~KqhL`1o1RIiNjx+t{Cn7qz>qVHa5B)+w z7pMf9PA8)ytH`l}k!DJBduk3f(MAscb6daO7|Ap{ZtXV= z2tUlt3AQHGkhGr~yT@$nwh{aA`fk}^RB)}<*iIM^ys>p`a{(zfP%4}pcDZHkJVCkV zdg)@!fkYc(^Lhf64ewk_Olq0dD#&b*{=k!arxIZy>#bNuBjMsVAiI>vPxJhp3SS{L zGt0Dxi@G2`nB&?6j?rko3TH@4H-vzty>UC=yvX|{3r+i{qZeToH|Up5(2emeETm+` zVJKXU+aM(UX+6Wnw{z1nv~1#gt`b8WewE~uNj4lp`ii#+^_*USDM4V&diec2#8xUP z7v%kS!>K^FjmjWpqmRnFvb&GPrM(q|@x`n2@C}(I#oJ53As@QTKHXpgmpCz@cIfxL zT4pn_WpWuqx6Uur^CE2W^RZ1a@%G^3<@oKV`?t9!36Sl2lyk`u&y7)lS|VwMyM0IL z*h9fin~eGMq^HeOFqLByO^41~u{PaN_x~6x*i2#QmJwdkhLlXIDb1i+KxRFes=rEQ z9n%cH_xJOIt=eE7D)}6Q20wAbxEu^1PN(kKd5FdlEBS)jLKNr+>c zORsd@%h}s0d8lZJ`&O+@RT8fKvprn#iFrVc$v(@|-y}PBxfG{uV%+^)l*%(Wh-Mv} z+~T|A*1MP=u}rIgs3O7fXa0KiV8?#?L2P9lMYrf!ei-k?a(;QIJsk$`3z#$QoVBfnBZ%*aS2DQfk2epozBIgWTcBd^$)FQV8u=W%^i zz`JS|COS|dViG&fRG>~uF8tl%{?um@p>oYYGsZDpvSmK+r5Z}uL#Ke+;|>{@P&BPF zJDekBl&Bf3!yLWRRiAy{bqq=_S(twVmEV@o2><-{w{b%!xyNumo;?PVw)|(W2u-~t z(E5bjid)gH{YqN)WskWoN`t!)O)ZC8zFRMqTbM`mw-g?kZPhGT_VjNSl(Ep{?`P6#Kn2v*6t#QFIPOiVU#ZE&$~0is zen>5yl6*mlt+v`(pS$}l9wqN{*k5-|@#qa{@|U5h&$m;*kgHwVNMW=7%WK?9&Hzgq zJ~VEW($U?D_s+YeS`W%--cB5yuK6d;pWEeccn2c5ISxtK@WIPsO=$)1uONEeb^2R+ z4xC0M(Y+&C+uFW1OiX{0_-W{#U-fPK$!<`k8-zd$4nKh}y!4;v)ww$8OGPNZsHKuc z>$ACAB-jw1d2&{z(SYW&Y!JPlEvXy(=h7cL+E5xrl1B#b`9lV5Nt&~i8zRi!pE5(1 zWh9(AP1(PWb5ex|@WE$Agi~|Beov;%9LxHmH#PS2L^C1qN{?8Oa^VzIt&}S?=&a|* zO@3D9s0b-N0|=p2gkg!X1i<(V55lwnP)m7}LhtS{kIDlFEfvP(=rg2#dApR8wLX^l zoyyBJE45#Tkw*GLP)J22;Mnw^&WQT{9CxebHopDb^x3xkopB}mHhv>=1d^ake+7@L z@v)8RelSKXlb^58j@O@;`LF}}OV%TR3F3EmqFr#rzbuxW)Wo`9wLF$zTG{iCq%HKP7 z52*C26?cAZTIIQ#u1PasJseNPSMe-52VNw7%>q%1)7FNgJ`}GJ6A`o5*zxT3IiWcW zgo?eN!UsQo_hh|1{QV{Rs6yh!``@`cUh^v!i|^ph|Nr;@EAW4_0{O#7oYshhfVg8m SD5GxjJ#J{|{!^l69q~UmYE0Vz literal 0 HcmV?d00001 diff --git a/g2p_programs/static/src/js/create_program.js b/g2p_programs/static/src/js/create_program.js new file mode 100644 index 000000000..5b6d44a0e --- /dev/null +++ b/g2p_programs/static/src/js/create_program.js @@ -0,0 +1,39 @@ +/** @odoo-module **/ + +import {ListController} from "@web/views/list/list_controller"; +import {patch} from "@web/core/utils/patch"; +import {useService} from "@web/core/utils/hooks"; + +patch(ListController.prototype, { + setup() { + super.setup(); + this.action = useService("action"); + }, + + load_wizard() { + var self = this; + self.action.doAction({ + name: "Set Program Settings", + type: "ir.actions.act_window", + res_model: "g2p.program.create.wizard", + views: [[false, "form"]], + view_mode: "form", + target: "new", + }); + return window.location; + }, + + get actionMenuItems() { + // Hide archive and unarchive option in action button + + const actionItem = super.actionMenuItems; + if (this.props.resModel === "g2p.program_membership") { + const {action} = actionItem; + const filteredAction = action.filter( + (item) => item.key !== "archive" && item.key !== "unarchive" + ); + actionItem.action = filteredAction; + } + return actionItem; + }, +}); diff --git a/g2p_programs/static/src/xml/create_program_template.xml b/g2p_programs/static/src/xml/create_program_template.xml new file mode 100644 index 000000000..32066321e --- /dev/null +++ b/g2p_programs/static/src/xml/create_program_template.xml @@ -0,0 +1,36 @@ + + diff --git a/g2p_programs/tests/__init__.py b/g2p_programs/tests/__init__.py new file mode 100644 index 000000000..c1b0e7dc8 --- /dev/null +++ b/g2p_programs/tests/__init__.py @@ -0,0 +1,6 @@ +# Part of OpenG2P. See LICENSE file for full copyright and licensing details. + +from . import test_programs_id_eligibility_dedup +from . import test_programs_phone_eligibility_deduplicate +from . import test_programs +from . import test_cycle_manager_new_cycle diff --git a/g2p_programs/tests/test_cycle_manager_new_cycle.py b/g2p_programs/tests/test_cycle_manager_new_cycle.py new file mode 100644 index 000000000..3b29956e9 --- /dev/null +++ b/g2p_programs/tests/test_cycle_manager_new_cycle.py @@ -0,0 +1,145 @@ +from datetime import datetime + +from freezegun import freeze_time + +from odoo.tests.common import TransactionCase + +from odoo.addons.g2p_programs.models.constants import MANAGER_PROGRAM + + +@freeze_time("2022-12-15") +class DefaultCycleManagerTest(TransactionCase): + DATE_TODAY = datetime(2022, 12, 15).date() + + def create_program_manager(self, **kwargs): + data = kwargs + data.update( + { + "amount_per_cycle": 1.0, + "amount_per_individual_in_group": 1.0, + } + ) + program_wizard = self.env["g2p.program.create.wizard"].create(data) + result = program_wizard.create_program() + + program = self.env[result["res_model"]].browse(result["res_id"]) + return program.get_manager(MANAGER_PROGRAM) + + def test_new_cycle_daily(self): + # create and test a 20 day cycle + program_manager_data = { + "name": "Daily", + "rrule_type": "daily", + "cycle_duration": 20, + } + + program_manager = self.create_program_manager(**program_manager_data) + first_cycle = program_manager.new_cycle() + + self.assertEqual(first_cycle.start_date, self.DATE_TODAY) + self.assertEqual(first_cycle.end_date, datetime(2023, 1, 3).date()) + self.assertEqual(first_cycle.sequence, 1) + + second_cycle = program_manager.new_cycle() + + self.assertEqual(second_cycle.start_date, datetime(2023, 1, 4).date()) + self.assertEqual(second_cycle.end_date, datetime(2023, 1, 23).date()) + self.assertEqual(second_cycle.sequence, 2) + + def test_new_cycle_yearly(self): + # create and test a yearly cycle with 1 cycle duration + + program_manager_data = { + "name": "Yearly", + "rrule_type": "yearly", + "cycle_duration": 1, + } + + program_manager = self.create_program_manager(**program_manager_data) + + first_cycle = program_manager.new_cycle() + + self.assertEqual(first_cycle.start_date, self.DATE_TODAY) + self.assertEqual(first_cycle.end_date, datetime(2023, 12, 14).date()) + self.assertEqual(first_cycle.sequence, 1) + + second_cycle = program_manager.new_cycle() + + self.assertEqual(second_cycle.start_date, datetime(2023, 12, 15).date()) + self.assertEqual(second_cycle.end_date, datetime(2024, 12, 14).date()) + self.assertEqual(second_cycle.sequence, 2) + + def test_new_cycle_monthly_month_by_date(self): + # create and test a monthly cycle with 1 cycle duration every 10th day of the month + + program_manager_data = { + "name": "Monthly every 10th", + "rrule_type": "monthly", + "cycle_duration": 1, + "month_by": "date", + "day": 10, + } + + program_manager = self.create_program_manager(**program_manager_data) + + first_cycle = program_manager.new_cycle() + + self.assertEqual(first_cycle.start_date, datetime(2023, 1, 10).date()) + self.assertEqual(first_cycle.end_date, datetime(2023, 2, 9).date()) + self.assertEqual(first_cycle.sequence, 1) + + second_cycle = program_manager.new_cycle() + + self.assertEqual(second_cycle.start_date, datetime(2023, 2, 10).date()) + self.assertEqual(second_cycle.end_date, datetime(2023, 3, 9).date()) + self.assertEqual(second_cycle.sequence, 2) + + def test_new_cycle_monthly_month_by_day(self): + # create and test a monthly cycle with 1 cycle duration every first monday of the month + + program_manager_data = { + "name": "Monthly every first monday of the month", + "rrule_type": "monthly", + "cycle_duration": 1, + "month_by": "day", + "byday": "1", + "weekday": "MON", + } + + program_manager = self.create_program_manager(**program_manager_data) + + first_cycle = program_manager.new_cycle() + + self.assertEqual(first_cycle.start_date, datetime(2023, 1, 2).date()) + self.assertEqual(first_cycle.end_date, datetime(2023, 2, 5).date()) + self.assertEqual(first_cycle.sequence, 1) + + second_cycle = program_manager.new_cycle() + + self.assertEqual(second_cycle.start_date, datetime(2023, 2, 6).date()) + self.assertEqual(second_cycle.end_date, datetime(2023, 3, 5).date()) + self.assertEqual(second_cycle.sequence, 2) + + def test_new_cycle_weekly(self): + # create and test a weekly cycle with 1 cycle duration every monday + + program_manager_data = { + "name": "Weekly every monday", + "rrule_type": "weekly", + "cycle_duration": 1, + "mon": True, + } + + program_manager = self.create_program_manager(**program_manager_data) + + first_cycle = program_manager.new_cycle() + + self.assertEqual(first_cycle.start_date, datetime(2022, 12, 19).date()) + self.assertEqual(first_cycle.end_date, datetime(2022, 12, 25).date()) + self.assertEqual(first_cycle.sequence, 1) + + second_cycle = program_manager.new_cycle() + + self.assertEqual(second_cycle.start_date, datetime(2022, 12, 26).date()) + self.assertEqual(second_cycle.end_date, datetime(2023, 1, 1).date()) + self.assertEqual(second_cycle.sequence, 2) diff --git a/g2p_programs/tests/test_programs.py b/g2p_programs/tests/test_programs.py new file mode 100644 index 000000000..d3c0c27b8 --- /dev/null +++ b/g2p_programs/tests/test_programs.py @@ -0,0 +1,192 @@ +import logging + +from odoo.tests.common import TransactionCase + +_logger = logging.getLogger(__name__) + + +# @tagged("post_install", "-at_install") +class ProgramTest(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + # Initial Setup of Variables + cls.registrant_1 = cls.env["res.partner"].create( + { + "family_name": "Doe", + "given_name": "John", + "name": "John Doe", + "is_group": False, + } + ) + cls.group_1 = cls.env["res.partner"].create( + { + "name": "Group 1", + "is_group": True, + } + ) + currency_id = cls.env.user.company_id.currency_id and cls.env.user.company_id.currency_id.id or None + + cls.program_1_id = cls.env["g2p.program.create.wizard"].create( + { + "name": "Test Program 1", + "currency_id": currency_id, + "amount_per_cycle": 20, + "amount_per_individual_in_group": 10, + } + ) + + # Add Program + program_1_form = cls.program_1_id.create_program() + program_1_id = program_1_form["res_id"] + cls.program_1 = cls.env["g2p.program"].search([("id", "=", program_1_id)]) + cls.program_2_id = cls.env["g2p.program.create.wizard"].create( + { + "name": "Test Program 2", + "currency_id": currency_id, + "amount_per_cycle": 100, + "amount_per_individual_in_group": 10, + } + ) + program_2_form = cls.program_2_id.create_program() + program_2_id = program_2_form["res_id"] + cls.program_2 = cls.env["g2p.program"].search([("id", "=", program_2_id)]) + cls.program_1.write({"target_type": "individual"}) + cls.program_2.write({"target_type": "group"}) + + # Add Beneficiaries + cls.program_1.write({"program_membership_ids": [(0, 0, {"partner_id": cls.registrant_1.id})]}) + _logger.info(f"Program 1: {cls.program_1.name} Members: {len(cls.program_1.program_membership_ids)}") + + cls.program_2.write({"program_membership_ids": [(0, 0, {"partner_id": cls.group_1.id})]}) + _logger.info(f"Program 2: {cls.program_2.name} Members: {len(cls.program_2.program_membership_ids)}") + + # Enroll Beneficiaries + cls.program_1.enroll_eligible_registrants() + cls.program_2.enroll_eligible_registrants() + cls.program_1.create_new_cycle() + cls.program_2.create_new_cycle() + cls.cycle1 = cls.env["g2p.cycle"].search([("id", "=", cls.program_1.cycle_ids[0].id)]) + cls.cycle1.copy_beneficiaries_from_program() + _logger.info( + "{} Cycle: {} Beneficiaries: {}".format( + cls.cycle1.program_id.name, + cls.cycle1.name, + len(cls.cycle1.cycle_membership_ids), + ) + ) + + cls.cycle2 = cls.env["g2p.cycle"].search([("id", "=", cls.program_2.cycle_ids[0].id)]) + cls.cycle2.copy_beneficiaries_from_program() + _logger.info( + "{} Cycle: {} Beneficiaries: {}".format( + cls.cycle2.program_id.name, + cls.cycle2.name, + len(cls.cycle2.cycle_membership_ids), + ) + ) + + # TODO: Fix error in def test_01_cycle_prepare_entitlement(self): + def cycle_prepare_entitlement(self): + self.cycle1.prepare_entitlement() + message1 = ( + "Program Testing: Program: {},Cycle: {}, Preparing Entitlements FAILED " + "(EXPECTED {} but RESULT is {})".format( + self.program_1.name, + self.cycle1.name, + 1, + len(self.cycle1.entitlement_ids), + ) + ) + self.assertEqual(len(self.cycle1.entitlement_ids), 1, message1) + self.cycle2.prepare_entitlement() + message2 = ( + "Program Testing: Program: {}, Cycle: {}, Preparing Entitlements FAILED" + "(EXPECTED {} but RESULT is {})".format( + self.program_2.name, + self.cycle2.name, + 1, + len(self.cycle2.entitlement_ids), + ) + ) + self.assertEqual(len(self.cycle2.entitlement_ids), 1, message2) + # Check if entitlements_count compute is computing as expected + self.assertEqual(self.cycle1.entitlements_count, 1) + self.assertEqual(self.cycle2.entitlements_count, 1) + + # TODO: Fix error in def test_02_cycle_approve(self): + def cycle_approve(self): + # To Approve + user = self.env.user + + # Add Super User to Cycle Approver Group + approver_group = self.env["res.groups"].search( + [("id", "=", self.env.ref("g2p_programs.g2p_program_cycle_approver").id)] + ) + + approver_group.write({"users": [(4, user.id)]}) + + manager_ref_id = str(self.program_1.cycle_managers[0].manager_ref_id) + s = manager_ref_id.find("(") + res_model = manager_ref_id[:s] + res_id = self.program_1.cycle_managers[0].manager_ref_id.id + approver = self.env[res_model].search([("id", "=", res_id)]) + group = self.env.ref("g2p_programs.g2p_program_cycle_approver").id + approver.approver_group_id = group + + manager_ref_id = str(self.program_2.cycle_managers[0].manager_ref_id) + s = manager_ref_id.find("(") + res_model = manager_ref_id[:s] + res_id = self.program_2.cycle_managers[0].manager_ref_id.id + approver = self.env[res_model].search([("id", "=", res_id)]) + group = self.env.ref("g2p_programs.g2p_program_cycle_approver").id + approver.approver_group_id = group + + self.cycle1.to_approve() + message1 = ( + "Program Testing: Program: {}, Cycle: {}, Setting State 'to_approve' FAILED" + "(EXPECTED {} but RESULT is {})".format( + self.program_1.name, self.cycle1.name, "to_approve", self.cycle1.state + ) + ) + self.assertEqual(self.cycle1.state, "to_approve", message1) + self.cycle2.to_approve() + message2 = ( + "Program Testing: Program: {}, Cycle: {}, Setting State 'to_approve' FAILED" + "(EXPECTED {} but RESULT is {})".format( + self.program_2.name, self.cycle2.name, "to_approve", self.cycle2.state + ) + ) + self.assertEqual(self.cycle2.state, "to_approve", message2) + # Approve + self.cycle1.approve() + message1 = ( + "Program Testing: Program: {}, Cycle: {}, Setting State 'approved' FAILED" + "(EXPECTED {} but RESULT is {})".format( + self.program_1.name, self.cycle1.name, "approved", self.cycle1.state + ) + ) + self.assertEqual(self.cycle1.state, "approved") + self.cycle2.approve() + message2 = ( + "Program Testing: Program: {}, Cycle: {}, Setting State 'approved' FAILED" + "(EXPECTED {} but RESULT is {})".format( + self.program_2.name, self.cycle2.name, "approved", self.cycle2.state + ) + ) + self.assertEqual(self.cycle2.state, "approved") + + def test_03_deduplication(self): + self.program_1.deduplicate_beneficiaries() + self.assertEqual( + self.program_1.duplicate_membership_count, + 0, + "Program Testing: Expected Duplicate count exceeded", + ) + self.program_2.deduplicate_beneficiaries() + self.assertEqual( + self.program_2.duplicate_membership_count, + 0, + "Program Testing: Expected Duplicate count exceeded", + ) diff --git a/g2p_programs/tests/test_programs_id_eligibility_dedup.py b/g2p_programs/tests/test_programs_id_eligibility_dedup.py new file mode 100644 index 000000000..7a949080a --- /dev/null +++ b/g2p_programs/tests/test_programs_id_eligibility_dedup.py @@ -0,0 +1,271 @@ +import datetime +import logging + +from odoo.tests import tagged +from odoo.tests.common import TransactionCase + +_logger = logging.getLogger(__name__) + + +@tagged("post_install", "-at_install") +class ProgramTestIDEligibilityDeduplicate(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + # Initial Setup of Variables + cls.registrant_1 = cls.env["res.partner"].create( + { + "family_name": "Doe", + "given_name": "John", + "name": "John Doe", + "is_group": False, + } + ) + cls.registrant_2 = cls.env["res.partner"].create( + { + "family_name": "Doe", + "given_name": "Jane", + "name": "Jane Doe", + "is_group": False, + } + ) + cls.group_1 = cls.env["res.partner"].create( + { + "name": "Group 1", + "is_group": True, + } + ) + cls.group_2 = cls.env["res.partner"].create( + { + "name": "Group 2", + "is_group": True, + } + ) + + currency_id = cls.env.user.company_id.currency_id and cls.env.user.company_id.currency_id.id or None + + cls.program_1_id = cls.env["g2p.program.create.wizard"].create( + { + "name": "Test Program 1", + "currency_id": currency_id, + "amount_per_cycle": 20, + "amount_per_individual_in_group": 10, + } + ) + + # Add Program + program_1_form = cls.program_1_id.create_program() + program_1_id = program_1_form["res_id"] + cls.program_1 = cls.env["g2p.program"].search([("id", "=", program_1_id)]) + cls.program_2_id = cls.env["g2p.program.create.wizard"].create( + { + "name": "Test Program 2", + "currency_id": currency_id, + "amount_per_cycle": 100, + "amount_per_individual_in_group": 10, + } + ) + program_2_form = cls.program_2_id.create_program() + program_2_id = program_2_form["res_id"] + cls.program_2 = cls.env["g2p.program"].search([("id", "=", program_2_id)]) + cls.program_1.write({"target_type": "individual"}) + cls.program_2.write({"target_type": "group"}) + + # Add Beneficiaries + cls.program_1.write({"program_membership_ids": [(0, 0, {"partner_id": cls.registrant_1.id})]}) + cls.program_1.write({"program_membership_ids": [(0, 0, {"partner_id": cls.registrant_2.id})]}) + cls.program_2.write({"program_membership_ids": [(0, 0, {"partner_id": cls.group_1.id})]}) + cls.program_2.write({"program_membership_ids": [(0, 0, {"partner_id": cls.group_2.id})]}) + # Add ID Eligibility Manager + cls.manager_1 = cls.env["g2p.program_membership.manager.id_dedup"].create( + { + "name": "ID Manager 1", + "program_id": cls.program_1.id, + } + ) + cls.program_1.write( + { + "eligibility_managers": [ + ( + 0, + 0, + { + "manager_ref_id": "g2p.program_membership.manager.id_dedup, %s" + % cls.manager_1.id, + "manager_id": cls.manager_1.id, + }, + ) + ] + } + ) + + cls.manager_2 = cls.env["g2p.program_membership.manager.id_dedup"].create( + { + "name": "ID Manager 2", + "program_id": cls.program_2.id, + } + ) + cls.program_2.write( + { + "eligibility_managers": [ + ( + 0, + 0, + { + "manager_ref_id": "g2p.program_membership.manager.id_dedup, %s" + % cls.manager_2.id, + "manager_id": cls.manager_2.id, + }, + ) + ] + } + ) + # Enroll Beneficiaries without ID expecting NONE will be enrolled + cls.program_1.enroll_eligible_registrants() + cls.program_2.enroll_eligible_registrants() + # Beneficiaries Add IDS + current_date = datetime.datetime.now().date() + expiry_date = current_date + datetime.timedelta(days=7) + + cls.idtype = cls.env["g2p.id.type"].create( + { + "name": "Testing ID Type", + } + ) + if len(cls.idtype) > 0: + cls.registrant_1.write( + { + "reg_ids": [ + ( + 0, + 0, + { + "id_type": cls.idtype.id, + "value": "123456789", + "expiry_date": expiry_date, + }, + ) + ] + } + ) + cls.registrant_2.write( + { + "reg_ids": [ + ( + 0, + 0, + { + "id_type": cls.idtype.id, + "value": "123456789", + "expiry_date": expiry_date, + }, + ) + ] + } + ) + cls.group_1.write( + { + "reg_ids": [ + ( + 0, + 0, + { + "id_type": cls.idtype.id, + "value": "123456789", + "expiry_date": expiry_date, + }, + ) + ] + } + ) + cls.group_2.write( + { + "reg_ids": [ + ( + 0, + 0, + { + "id_type": cls.idtype.id, + "value": "123456789", + "expiry_date": expiry_date, + }, + ) + ] + } + ) + + # Try Enrolling now when IDs has been ADDED + cls.program_1.enroll_eligible_registrants() + cls.program_2.enroll_eligible_registrants() + + def test_01_deduplication(self): + # Test the Deduplication on the Programs now with ID Deduplication Managers + + # Add first the ID Deduplication Manager + + self.manager_1 = self.env["g2p.deduplication.manager.id_dedup"].create( + { + "name": "ID Manager 1", + "program_id": self.program_1.id, + "supported_id_document_types": [(4, self.idtype.id)], + } + ) + if self.manager_1: + self.program_1.write( + { + "deduplication_managers": [ + ( + 0, + 0, + { + "manager_ref_id": "g2p.deduplication.manager.id_dedup, %s" + % self.manager_1.id, + "manager_id": self.manager_1.id, + }, + ) + ] + } + ) + if len(self.program_1.deduplication_managers) > 0: + self.program_1.deduplicate_beneficiaries() + # TODO: check this assert line + # self.assertEqual( + # self.program_1.duplicate_membership_count, + # 2, + # "Program Testing: Expected Duplicate count exceeded", + # ) + # Add first the ID Deduplication Manager + self.manager_2 = self.env["g2p.deduplication.manager.id_dedup"].create( + { + "name": "ID Manager 2", + "program_id": self.program_2.id, + "supported_id_document_types": [(4, self.idtype.id)], + } + ) + if self.manager_2: + self.program_2.write( + { + "deduplication_managers": [ + ( + 0, + 0, + { + "manager_ref_id": "g2p.deduplication.manager.id_dedup, %s" + % self.manager_2.id, + "manager_id": self.manager_2.id, + }, + ) + ] + } + ) + # Add Members to the Group with Duplicate IDs + self.group_1.write({"group_membership_ids": [(0, 0, {"individual": self.registrant_1.id})]}) + self.group_2.write({"group_membership_ids": [(0, 0, {"individual": self.registrant_2.id})]}) + if len(self.program_2.deduplication_managers) > 0: + self.program_2.deduplicate_beneficiaries() + self.assertEqual( + self.program_2.duplicate_membership_count, + 0, + "Program Testing: Expected Duplicate count exceeded", + ) diff --git a/g2p_programs/tests/test_programs_phone_eligibility_deduplicate.py b/g2p_programs/tests/test_programs_phone_eligibility_deduplicate.py new file mode 100644 index 000000000..40b8b904f --- /dev/null +++ b/g2p_programs/tests/test_programs_phone_eligibility_deduplicate.py @@ -0,0 +1,252 @@ +import logging + +from odoo.tests import tagged +from odoo.tests.common import TransactionCase + +_logger = logging.getLogger(__name__) + + +@tagged("post_install", "-at_install") +class ProgramTestPhoneEligibilityDeduplicate(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + # Initial Setup of Variables + cls.registrant_1 = cls.env["res.partner"].create( + { + "family_name": "Doe", + "given_name": "John", + "name": "John Doe", + "is_group": False, + } + ) + cls.registrant_2 = cls.env["res.partner"].create( + { + "family_name": "Doe", + "given_name": "Jane", + "name": "Jane Doe", + "is_group": False, + } + ) + cls.group_1 = cls.env["res.partner"].create( + { + "name": "Group 1", + "is_group": True, + } + ) + cls.group_2 = cls.env["res.partner"].create( + { + "name": "Group 2", + "is_group": True, + } + ) + + currency_id = cls.env.user.company_id.currency_id and cls.env.user.company_id.currency_id.id or None + + cls.program_1_id = cls.env["g2p.program.create.wizard"].create( + { + "name": "Test Program 1", + "currency_id": currency_id, + "amount_per_cycle": 20, + "amount_per_individual_in_group": 10, + } + ) + + # Add Program + program_1_form = cls.program_1_id.create_program() + program_1_id = program_1_form["res_id"] + cls.program_1 = cls.env["g2p.program"].search([("id", "=", program_1_id)]) + cls.program_2_id = cls.env["g2p.program.create.wizard"].create( + { + "name": "Test Program 2", + "currency_id": currency_id, + "amount_per_cycle": 100, + "amount_per_individual_in_group": 10, + } + ) + program_2_form = cls.program_2_id.create_program() + program_2_id = program_2_form["res_id"] + cls.program_2 = cls.env["g2p.program"].search([("id", "=", program_2_id)]) + cls.program_1.write({"target_type": "individual"}) + cls.program_2.write({"target_type": "group"}) + + # Add Beneficiaries + cls.program_1.write({"program_membership_ids": [(0, 0, {"partner_id": cls.registrant_1.id})]}) + cls.program_1.write({"program_membership_ids": [(0, 0, {"partner_id": cls.registrant_2.id})]}) + cls.program_2.write({"program_membership_ids": [(0, 0, {"partner_id": cls.group_1.id})]}) + cls.program_2.write({"program_membership_ids": [(0, 0, {"partner_id": cls.group_2.id})]}) + # Add Phone Eligibility Manager + cls.manager_1 = cls.env["g2p.program_membership.manager.phone_number"].create( + { + "name": "Phone Manager 1", + "program_id": cls.program_1.id, + } + ) + cls.program_1.write( + { + "eligibility_managers": [ + ( + 0, + 0, + { + "manager_ref_id": "g2p.program_membership.manager.phone_number, %s" + % cls.manager_1.id, + "manager_id": cls.manager_1.id, + }, + ) + ] + } + ) + cls.manager_2 = cls.env["g2p.program_membership.manager.phone_number"].create( + { + "name": "Phone Manager 2", + "program_id": cls.program_2.id, + } + ) + cls.program_2.write( + { + "eligibility_managers": [ + ( + 0, + 0, + { + "manager_ref_id": "g2p.program_membership.manager.phone_number, %s" + % cls.manager_2.id, + "manager_id": cls.manager_2.id, + }, + ) + ] + } + ) + # Enroll Beneficiaries without Phones expecting NONE will be enrolled + cls.program_1.enroll_eligible_registrants() + cls.program_2.enroll_eligible_registrants() + # Beneficiaries Add IDS + + cls.registrant_1.write( + { + "phone_number_ids": [ + ( + 0, + 0, + { + "phone_no": "9123456789", + }, + ) + ] + } + ) + cls.registrant_2.write( + { + "phone_number_ids": [ + ( + 0, + 0, + { + "phone_no": "9123456789", + }, + ) + ] + } + ) + cls.group_1.write( + { + "phone_number_ids": [ + ( + 0, + 0, + { + "phone_no": "9123456789", + }, + ) + ] + } + ) + cls.group_2.write( + { + "phone_number_ids": [ + ( + 0, + 0, + { + "phone_no": "9123456789", + }, + ) + ] + } + ) + + # Try Enrolling now when Phones has been ADDED + cls.program_1.enroll_eligible_registrants() + cls.program_2.enroll_eligible_registrants() + + def test_01_deduplication(self): + # Test the Deduplication on the Programs now with ID Deduplication Managers + + # Add first the Phone Deduplication + self.manager_1 = self.env["g2p.deduplication.manager.phone_number"].create( + { + "name": "Phone Manager 1", + "program_id": self.program_1.id, + } + ) + if self.manager_1: + self.program_1.write( + { + "deduplication_managers": [ + ( + 0, + 0, + { + "manager_ref_id": "g2p.deduplication.manager.phone_number, %s" + % self.manager_1.id, + "manager_id": self.manager_1.id, + }, + ) + ] + } + ) + if len(self.program_1.deduplication_managers) > 0: + self.program_1.deduplicate_beneficiaries() + # TODO: check this assert line + # self.assertEqual( + # self.program_1.duplicate_membership_count, + # 2, + # "Program Testing: Expected Duplicate count exceeded", + # ) + # Add first the Phone Deduplication Manager + + self.manager_2 = self.env["g2p.deduplication.manager.phone_number"].create( + { + "name": "Phone Manager 2", + "program_id": self.program_2.id, + } + ) + if self.manager_2: + self.program_2.write( + { + "deduplication_managers": [ + ( + 0, + 0, + { + "program_id": self.program_2.id, + "manager_ref_id": "g2p.deduplication.manager.phone_number, %s" + % self.manager_2.id, + "manager_id": self.manager_2.id, + }, + ) + ] + } + ) + # Add Members to the Group with Duplicate IDs + self.group_1.write({"group_membership_ids": [(0, 0, {"individual": self.registrant_1.id})]}) + self.group_2.write({"group_membership_ids": [(0, 0, {"individual": self.registrant_2.id})]}) + if len(self.program_2.deduplication_managers) > 0: + self.program_2.deduplicate_beneficiaries() + self.assertEqual( + self.program_2.duplicate_membership_count, + 0, + "Program Testing: Expected Duplicate count exceeded", + ) diff --git a/g2p_programs/views/accounting/account_journal_config_view.xml b/g2p_programs/views/accounting/account_journal_config_view.xml new file mode 100644 index 000000000..ec0df43a5 --- /dev/null +++ b/g2p_programs/views/accounting/account_journal_config_view.xml @@ -0,0 +1,68 @@ + + + + + view_account_journal_conf_tree + account.journal + + + + + + + + + + view_account_journal_conf_form + account.journal + + + + + + + + + + Account Journals + ir.actions.act_window + account.journal + tree,form + + {'default_type':'bank','default_beneficiary_disb':True} + [('beneficiary_disb','=',True),('type','in',('cash','bank'))] + +

+ Add a Beneficiary Disbursement Journal! +

+ Click the create button to enter a new beneficiary disbursement journal. +

+
+
+ + + + tree + + + + + + + form + + + + + + +
diff --git a/g2p_programs/views/accounting/account_journal_view.xml b/g2p_programs/views/accounting/account_journal_view.xml new file mode 100644 index 000000000..9a92b4606 --- /dev/null +++ b/g2p_programs/views/accounting/account_journal_view.xml @@ -0,0 +1,77 @@ + + + + + view_account_move_line_beneficiary_filter + account.move.line + + + + + + + + + + Beneficiary Funds + ir.actions.act_window + account.move.line + tree,pivot,graph,kanban + {'journal_type':'bank', 'search_default_group_by_move': 1, 'search_default_posted':1, 'search_default_benf_filter':1, 'name_groupby':1, 'expand': 1} + [('display_type', 'not in', ('line_section', 'line_note'))] + +

+ There are no Beneficiary Fund Journal Entries Entered! +

+ Process entitlements to automatically post the journal entries here. +

+
+
+ + + + + + Accounting Journal + ir.actions.act_window + account.move.line + tree,pivot,graph + {'journal_type':'bank', 'search_default_group_by_move': 1, 'search_default_posted':1, 'name_groupby':1, 'expand': 1} + [('display_type', 'not in', ('line_section', 'line_note')), + ('journal_id.type', 'in', ('bank','cash')),('journal_id.beneficiary_disb','=',True)] + + +

+ There are no Program Beneficiary Fund Journal Entries Entered! +

+ Process entitlements to automatically post the journal entries here. +

+
+
+ + + +
diff --git a/g2p_programs/views/accounting/fund_management_view.xml b/g2p_programs/views/accounting/fund_management_view.xml new file mode 100644 index 000000000..781f86ed0 --- /dev/null +++ b/g2p_programs/views/accounting/fund_management_view.xml @@ -0,0 +1,200 @@ + + + + + view_program_fund_tree + g2p.program.fund + 1 + + + + + + + + + + + + + + + + view_program_fund_form + g2p.program.fund + 1 + +
+
+
+ + +
+
+
+
+ + + + + + + + + + + + +
+ +
+ + +
+
+
+
+ + + program_fund_filter + g2p.program.fund + + + + + + + + + + + + + + + + + + + + + + + + + + Program Funds + ir.actions.act_window + g2p.program.fund + tree,form + + {} + [] + +

+ There are no Program Funds Entered! +

+

+ Click the create button to enter a new program fund information. +

+
+
+ + + + tree + + + + + + + form + + + + + + +
diff --git a/g2p_programs/views/accounting/fund_report_view.xml b/g2p_programs/views/accounting/fund_report_view.xml new file mode 100644 index 000000000..ebf973dba --- /dev/null +++ b/g2p_programs/views/accounting/fund_report_view.xml @@ -0,0 +1,90 @@ + + + + + view_program_fund_report_tree + g2p.program.fund.report.view + 1 + + + + + + + + + + + + + + + + + program_fund_report_filter + g2p.program.fund.report.view + + + + + + + + + + + + + + + + + + + + + + + + + + + Program Fund Report + ir.actions.act_window + g2p.program.fund.report.view + tree + + {} + [] + +

+ There are no Program Fund Entries based on the current filter! +

+
+
+ + + + tree + + + + + + +
diff --git a/g2p_programs/views/cycle_membership_view.xml b/g2p_programs/views/cycle_membership_view.xml new file mode 100644 index 000000000..6d7f4bc76 --- /dev/null +++ b/g2p_programs/views/cycle_membership_view.xml @@ -0,0 +1,160 @@ + + + + + view_cycle_membership_tree + g2p.cycle.membership + 1 + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + +
+ + +
+
+ + + cycle_filter + g2p.cycle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cycle + ir.actions.act_window + g2p.cycle + tree,form + + {} + [] + +

+ Add a new cycle! +

+ Click the create button to enter the new cycle information. +

+
+
+ + + + tree + + + + + + + form + + + + + + +
diff --git a/g2p_programs/views/duplicate_view.xml b/g2p_programs/views/duplicate_view.xml new file mode 100644 index 000000000..1a894e70b --- /dev/null +++ b/g2p_programs/views/duplicate_view.xml @@ -0,0 +1,118 @@ + + + + + view_program_membership_duplicate_tree + g2p.program.membership.duplicate + 1 + + + + + + + + + + + + + view_program_membership_duplicate_form + g2p.program.membership.duplicate + 1 + +
+ +
+
+ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + entitlement_filter + g2p.entitlement + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Entitlements + ir.actions.act_window + g2p.entitlement + tree,form + + {'default_is_cash_entitlement':True} + [('is_cash_entitlement','=',True)] + +

+ Add a new entitlement! +

+ Click the create button to enter the new entitlement. +

+
+
+ + + + tree + + + + + + + form + + + + + + Approve + + + list,form + code + action = model.open_wizard() + + + + +
diff --git a/g2p_programs/views/main_view.xml b/g2p_programs/views/main_view.xml new file mode 100644 index 000000000..4e7b2a052 --- /dev/null +++ b/g2p_programs/views/main_view.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + diff --git a/g2p_programs/views/managers/cycle_manager_view.xml b/g2p_programs/views/managers/cycle_manager_view.xml new file mode 100644 index 000000000..fbd1654e4 --- /dev/null +++ b/g2p_programs/views/managers/cycle_manager_view.xml @@ -0,0 +1,200 @@ + + + + + + view_cycle_manager_tree + g2p.cycle.manager + 1 + + + + + + + + + + + view_cycle_manager_form + g2p.cycle.manager + 1 + +
+ + + + + + +
+
+
+ + + + view_cycle_manager_default_tree + g2p.cycle.manager.default + 1 + + + + + + + + + + + + view_cycle_manager_default_form + g2p.cycle.manager.default + 1 + +
+ +
+
+
+ + + + + +
+ + + + +
+
+ + + + + + + cycle_manager_default_filter + g2p.cycle.manager.default + + + + + + + + + + + + + + + Cycle Managers + ir.actions.act_window + g2p.cycle.manager.default + tree,form + + {} + [] + +

+ Add a Cycle Manager! +

+ Click the create button to enter a new cycle manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + diff --git a/g2p_programs/views/managers/deduplication_manager_view.xml b/g2p_programs/views/managers/deduplication_manager_view.xml new file mode 100644 index 000000000..a9be4575c --- /dev/null +++ b/g2p_programs/views/managers/deduplication_manager_view.xml @@ -0,0 +1,594 @@ + + + + + + view_deduplication_manager_tree + g2p.deduplication.manager + 1 + + + + + + + + + + + view_deduplication_manager_form + g2p.deduplication.manager + 1 + +
+ + + + + + +
+
+
+ + + + view_deduplication_manager_default_tree + g2p.deduplication.manager.default + 1 + + + + + + + + + + view_deduplication_manager_default_form + g2p.deduplication.manager.default + 1 + +
+ +
+
+
+ + + + + + + deduplication_manager_default_filter + g2p.deduplication.manager.default + + + + + + + + + + + + + + + Default Deduplication Managers + ir.actions.act_window + g2p.deduplication.manager.default + tree,form + + {} + [] + +

+ Add a Default Deduplication Manager! +

+ Click the create button to enter a new Default deduplication manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + + + view_deduplication_manager_id_dedup_tree + g2p.deduplication.manager.id_dedup + 1 + + + + + + + + + + + view_deduplication_manager_id_dedup_form + g2p.deduplication.manager.id_dedup + 1 + +
+ +
+
+
+ + + + + + + + + + deduplication_manager_id_dedup_filter + g2p.deduplication.manager.id_dedup + + + + + + + + + + + + + + + ID Deduplication Managers + ir.actions.act_window + g2p.deduplication.manager.id_dedup + tree,form + + {} + [] + +

+ Add an ID Deduplication Manager! +

+ Click the create button to enter a new ID deduplication manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + + + view_deduplication_manager_phone_number_tree + g2p.deduplication.manager.phone_number + 1 + + + + + + + + + + view_deduplication_manager_phone_number_form + g2p.deduplication.manager.phone_number + 1 + +
+ +
+
+
+ + + + + + + + + deduplication_manager_phone_number_filter + g2p.deduplication.manager.phone_number + + + + + + + + + + + + + + + Phone Number Deduplication Managers + ir.actions.act_window + g2p.deduplication.manager.phone_number + tree,form + + {} + [] + +

+ Add a Phone Number Deduplication Manager! +

+ Click the create button to enter a new Phone Number deduplication manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + + + view_eligibility_manager_id_dedup_tree + g2p.program_membership.manager.id_dedup + 1 + + + + + + + + + view_eligibility_manager_id_dedup_form + g2p.program_membership.manager.id_dedup + 1 + +
+ +
+
+
+ + + + + + + + + eligibility_manager_id_dedup_filter + g2p.program_membership.manager.id_dedup + + + + + + + + + + + + + + + ID Document Eligibility Managers + ir.actions.act_window + g2p.program_membership.manager.id_dedup + tree,form + + {} + [] + +

+ Add an ID Deduplication Eligibility Manager! +

+ Click the create button to enter a new ID deduplication eligibility manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + + + view_eligibility_manager_phone_number_tree + g2p.program_membership.manager.phone_number + 1 + + + + + + + + + view_eligibility_manager_phone_number_form + g2p.program_membership.manager.phone_number + 1 + +
+ +
+
+
+ + + + + + + + + eligibility_manager_phone_number_filter + g2p.program_membership.manager.phone_number + + + + + + + + + + + + + + + Phone Number Eligibility Managers + ir.actions.act_window + g2p.program_membership.manager.phone_number + tree,form + + {} + [] + +

+ Add a Phone Number Deduplication Eligibility Manager! +

+ Click the create button to enter a new Phone Number deduplication eligibility manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + diff --git a/g2p_programs/views/managers/eligibility_manager_view.xml b/g2p_programs/views/managers/eligibility_manager_view.xml new file mode 100644 index 000000000..f533011f7 --- /dev/null +++ b/g2p_programs/views/managers/eligibility_manager_view.xml @@ -0,0 +1,156 @@ + + + + + + view_eligibility_manager_tree + g2p.eligibility.manager + 1 + + + + + + + + + + + view_eligibility_manager_form + g2p.eligibility.manager + 1 + +
+ + + + + + +
+
+
+ + + + view_eligibility_manager_default_tree + g2p.program_membership.manager.default + 1 + + + + + + + + + + view_eligibility_manager_default_form + g2p.program_membership.manager.default + 1 + +
+ +
+
+
+ + + + + + + + + + eligibility_manager_default_filter + g2p.program_membership.manager.default + + + + + + + + + + + + + + + Default Eligibility Managers + ir.actions.act_window + g2p.program_membership.manager.default + tree,form + + {} + [] + +

+ Add an Eligibility Manager! +

+ Click the create button to enter a new eligibility manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + diff --git a/g2p_programs/views/managers/entitlement_manager_view.xml b/g2p_programs/views/managers/entitlement_manager_view.xml new file mode 100644 index 000000000..d17dcd4cf --- /dev/null +++ b/g2p_programs/views/managers/entitlement_manager_view.xml @@ -0,0 +1,179 @@ + + + + + + view_entitlement_manager_tree + g2p.program.entitlement.manager + 1 + + + + + + + + + + + view_entitlement_manager_form + g2p.program.entitlement.manager + 1 + +
+ + + + + + +
+
+
+ + + + view_entitlement_manager_default_tree + g2p.program.entitlement.manager.default + 1 + + + + + + + + + + + + + + + view_entitlement_manager_default_form + g2p.program.entitlement.manager.default + 1 + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + entitlement_manager_default_filter + g2p.program.entitlement.manager.default + + + + + + + + + + + + + + + Entitlement Managers + ir.actions.act_window + g2p.program.entitlement.manager.default + tree,form + + {} + [] + +

+ Add an Entitlement Manager! +

+ Click the create button to enter a new entitlement manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + diff --git a/g2p_programs/views/managers/notification_manager_view.xml b/g2p_programs/views/managers/notification_manager_view.xml new file mode 100644 index 000000000..34a8bc3ef --- /dev/null +++ b/g2p_programs/views/managers/notification_manager_view.xml @@ -0,0 +1,182 @@ + + + + + + view_notification_manager_tree + g2p.program.notification.manager + 1 + + + + + + + + + + + view_notification_manager_form + g2p.program.notification.manager + 1 + +
+ + + + + + +
+
+
+ + + + view_notification_manager_sms_tree + g2p.program.notification.manager.sms + 1 + + + + + + + + + + view_notification_manager_sms_form + g2p.program.notification.manager.sms + 1 + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + notification_manager_sms_filter + g2p.program.notification.manager.sms + + + + + + + + + + + + + + + SMS Notification Managers + ir.actions.act_window + g2p.program.notification.manager.sms + tree,form + + {} + [] + +

+ Add a SMS Notification Manager! +

+ Click the create button to enter a new SMS notification manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + diff --git a/g2p_programs/views/managers/payment_manager_view.xml b/g2p_programs/views/managers/payment_manager_view.xml new file mode 100644 index 000000000..27e6e91f3 --- /dev/null +++ b/g2p_programs/views/managers/payment_manager_view.xml @@ -0,0 +1,184 @@ + + + + + + view_payment_manager_tree + g2p.program.payment.manager + 1 + + + + + + + + + + + view_payment_manager_form + g2p.program.payment.manager + 1 + +
+ + + + + + +
+
+
+ + + + view_payment_manager_default_tree + g2p.program.payment.manager.default + 1 + + + + + + + + + + + + view_payment_manager_default_form + g2p.program.payment.manager.default + 1 + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + payment_manager_default_filter + g2p.program.payment.manager.default + + + + + + + + + + + + + + + Payment Managers + ir.actions.act_window + g2p.program.payment.manager.default + tree,form + + {} + [] + +

+ Add a Payment Manager! +

+ Click the create button to enter a new payment manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + diff --git a/g2p_programs/views/managers/program_manager_view.xml b/g2p_programs/views/managers/program_manager_view.xml new file mode 100644 index 000000000..d86863cac --- /dev/null +++ b/g2p_programs/views/managers/program_manager_view.xml @@ -0,0 +1,157 @@ + + + + + + view_program_manager_tree + g2p.program.manager + 1 + + + + + + + + + + + view_program_manager_form + g2p.program.manager + 1 + +
+ + + + + + +
+
+
+ + + + view_program_manager_default_tree + g2p.program.manager.default + 1 + + + + + + + + + + view_program_manager_default_form + g2p.program.manager.default + 1 + +
+ +
+
+
+ + + + + + + + + + + program_manager_default_filter + g2p.program.manager.default + + + + + + + + + + + + + + + Program Managers + ir.actions.act_window + g2p.program.manager.default + tree,form + + {} + [] + +

+ Add a Program Manager! +

+ Click the create button to enter a new program manager. +

+
+
+ + + + tree + + + + + + + form + + + + + + + diff --git a/g2p_programs/views/payment_batch_tag_view.xml b/g2p_programs/views/payment_batch_tag_view.xml new file mode 100644 index 000000000..e0d6bd064 --- /dev/null +++ b/g2p_programs/views/payment_batch_tag_view.xml @@ -0,0 +1,54 @@ + + + + + view_payment_batch_tag_tree + g2p.payment.batch.tag + 1 + + + + + + + + + + + + view_payment_batch_tag_form + g2p.payment.batch.tag + 1 + +
+ + + + + + +
+
+
+ + + Payments Batch Tags + ir.actions.act_window + g2p.payment.batch.tag + tree,form + {} + [] + + + + +
diff --git a/g2p_programs/views/payment_batch_view.xml b/g2p_programs/views/payment_batch_view.xml new file mode 100644 index 000000000..31b3bb28d --- /dev/null +++ b/g2p_programs/views/payment_batch_view.xml @@ -0,0 +1,185 @@ + + + + + view_payment_batch_tree + g2p.payment.batch + 1 + + + + + + + + + + + + + + + + + view_payment_batch_form + g2p.payment.batch + 1 + +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + payment_batch_filter + g2p.payment.batch + + + + + + + + + + + + + + + + + Payment Batches + ir.actions.act_window + g2p.payment.batch + tree,form + + {} + [] + +

+ Payment Transactions +

+ List of payment transactions generated from entitlements. +

+
+
+ + + + tree + + + + + + + form + + + + + + + + +
diff --git a/g2p_programs/views/payment_view.xml b/g2p_programs/views/payment_view.xml new file mode 100644 index 000000000..6bf13880d --- /dev/null +++ b/g2p_programs/views/payment_view.xml @@ -0,0 +1,228 @@ + + + + + view_payment_tree + g2p.payment + 1 + + + + + + + + + + + + + + + + + + + + + + view_payment_form + g2p.payment + 1 + +
+
+
+ +
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + payment_filter + g2p.payment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Payments + ir.actions.act_window + g2p.payment + tree,form + + {} + [] + +

+ Payment Transactions +

+ List of payment transactions generated from entitlements. +

+
+
+ + + + tree + + + + + + + form + + + + + + Assign Payments to Batch + + + list,form + code + action = model.open_wizard() + + + + +
diff --git a/g2p_programs/views/program_membership_view.xml b/g2p_programs/views/program_membership_view.xml new file mode 100644 index 000000000..a3bd25a9a --- /dev/null +++ b/g2p_programs/views/program_membership_view.xml @@ -0,0 +1,393 @@ + + + + + + view_program_membership_tree + g2p.program_membership + 1 + + +
+
+ Warning: Operation in progress: + +
+ +
+ + + + + +
+ +
+ + + +
+ + + + +
- -
- - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
- - -
- - -
-
- - - cycle_filter - g2p.cycle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cycle - ir.actions.act_window - g2p.cycle - tree,form - - {} - [] - -

- Add a new cycle! -

- Click the create button to enter the new cycle information. -

-
-
- - - - tree - - - - - - - form - - - - - - -
diff --git a/g2p_programs/views/duplicate_view.xml b/g2p_programs/views/duplicate_view.xml deleted file mode 100644 index 1a894e70b..000000000 --- a/g2p_programs/views/duplicate_view.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - - - view_program_membership_duplicate_tree - g2p.program.membership.duplicate - 1 - - - - - - - - - - - - - view_program_membership_duplicate_form - g2p.program.membership.duplicate - 1 - -
- -
-
- - - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- - - entitlement_filter - g2p.entitlement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Entitlements - ir.actions.act_window - g2p.entitlement - tree,form - - {'default_is_cash_entitlement':True} - [('is_cash_entitlement','=',True)] - -

- Add a new entitlement! -

- Click the create button to enter the new entitlement. -

-
-
- - - - tree - - - - - - - form - - - - - - Approve - - - list,form - code - action = model.open_wizard() - - - - -
diff --git a/g2p_programs/views/main_view.xml b/g2p_programs/views/main_view.xml deleted file mode 100644 index 4e7b2a052..000000000 --- a/g2p_programs/views/main_view.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/g2p_programs/views/managers/cycle_manager_view.xml b/g2p_programs/views/managers/cycle_manager_view.xml deleted file mode 100644 index fbd1654e4..000000000 --- a/g2p_programs/views/managers/cycle_manager_view.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - view_cycle_manager_tree - g2p.cycle.manager - 1 - - - - - - - - - - - view_cycle_manager_form - g2p.cycle.manager - 1 - -
- - - - - - -
-
-
- - - - view_cycle_manager_default_tree - g2p.cycle.manager.default - 1 - - - - - - - - - - - - view_cycle_manager_default_form - g2p.cycle.manager.default - 1 - -
- -
-
-
- - - - - -
- - - - -
-
- - - - - - - cycle_manager_default_filter - g2p.cycle.manager.default - - - - - - - - - - - - - - - Cycle Managers - ir.actions.act_window - g2p.cycle.manager.default - tree,form - - {} - [] - -

- Add a Cycle Manager! -

- Click the create button to enter a new cycle manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - diff --git a/g2p_programs/views/managers/deduplication_manager_view.xml b/g2p_programs/views/managers/deduplication_manager_view.xml deleted file mode 100644 index a9be4575c..000000000 --- a/g2p_programs/views/managers/deduplication_manager_view.xml +++ /dev/null @@ -1,594 +0,0 @@ - - - - - - view_deduplication_manager_tree - g2p.deduplication.manager - 1 - - - - - - - - - - - view_deduplication_manager_form - g2p.deduplication.manager - 1 - -
- - - - - - -
-
-
- - - - view_deduplication_manager_default_tree - g2p.deduplication.manager.default - 1 - - - - - - - - - - view_deduplication_manager_default_form - g2p.deduplication.manager.default - 1 - -
- -
-
-
- - - - - - - deduplication_manager_default_filter - g2p.deduplication.manager.default - - - - - - - - - - - - - - - Default Deduplication Managers - ir.actions.act_window - g2p.deduplication.manager.default - tree,form - - {} - [] - -

- Add a Default Deduplication Manager! -

- Click the create button to enter a new Default deduplication manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - - - view_deduplication_manager_id_dedup_tree - g2p.deduplication.manager.id_dedup - 1 - - - - - - - - - - - view_deduplication_manager_id_dedup_form - g2p.deduplication.manager.id_dedup - 1 - -
- -
-
-
- - - - - - - - - - deduplication_manager_id_dedup_filter - g2p.deduplication.manager.id_dedup - - - - - - - - - - - - - - - ID Deduplication Managers - ir.actions.act_window - g2p.deduplication.manager.id_dedup - tree,form - - {} - [] - -

- Add an ID Deduplication Manager! -

- Click the create button to enter a new ID deduplication manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - - - view_deduplication_manager_phone_number_tree - g2p.deduplication.manager.phone_number - 1 - - - - - - - - - - view_deduplication_manager_phone_number_form - g2p.deduplication.manager.phone_number - 1 - -
- -
-
-
- - - - - - - - - deduplication_manager_phone_number_filter - g2p.deduplication.manager.phone_number - - - - - - - - - - - - - - - Phone Number Deduplication Managers - ir.actions.act_window - g2p.deduplication.manager.phone_number - tree,form - - {} - [] - -

- Add a Phone Number Deduplication Manager! -

- Click the create button to enter a new Phone Number deduplication manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - - - view_eligibility_manager_id_dedup_tree - g2p.program_membership.manager.id_dedup - 1 - - - - - - - - - view_eligibility_manager_id_dedup_form - g2p.program_membership.manager.id_dedup - 1 - -
- -
-
-
- - - - - - - - - eligibility_manager_id_dedup_filter - g2p.program_membership.manager.id_dedup - - - - - - - - - - - - - - - ID Document Eligibility Managers - ir.actions.act_window - g2p.program_membership.manager.id_dedup - tree,form - - {} - [] - -

- Add an ID Deduplication Eligibility Manager! -

- Click the create button to enter a new ID deduplication eligibility manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - - - view_eligibility_manager_phone_number_tree - g2p.program_membership.manager.phone_number - 1 - - - - - - - - - view_eligibility_manager_phone_number_form - g2p.program_membership.manager.phone_number - 1 - -
- -
-
-
- - - - - - - - - eligibility_manager_phone_number_filter - g2p.program_membership.manager.phone_number - - - - - - - - - - - - - - - Phone Number Eligibility Managers - ir.actions.act_window - g2p.program_membership.manager.phone_number - tree,form - - {} - [] - -

- Add a Phone Number Deduplication Eligibility Manager! -

- Click the create button to enter a new Phone Number deduplication eligibility manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - diff --git a/g2p_programs/views/managers/eligibility_manager_view.xml b/g2p_programs/views/managers/eligibility_manager_view.xml deleted file mode 100644 index f533011f7..000000000 --- a/g2p_programs/views/managers/eligibility_manager_view.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - view_eligibility_manager_tree - g2p.eligibility.manager - 1 - - - - - - - - - - - view_eligibility_manager_form - g2p.eligibility.manager - 1 - -
- - - - - - -
-
-
- - - - view_eligibility_manager_default_tree - g2p.program_membership.manager.default - 1 - - - - - - - - - - view_eligibility_manager_default_form - g2p.program_membership.manager.default - 1 - -
- -
-
-
- - - - - - - - - - eligibility_manager_default_filter - g2p.program_membership.manager.default - - - - - - - - - - - - - - - Default Eligibility Managers - ir.actions.act_window - g2p.program_membership.manager.default - tree,form - - {} - [] - -

- Add an Eligibility Manager! -

- Click the create button to enter a new eligibility manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - diff --git a/g2p_programs/views/managers/entitlement_manager_view.xml b/g2p_programs/views/managers/entitlement_manager_view.xml deleted file mode 100644 index d17dcd4cf..000000000 --- a/g2p_programs/views/managers/entitlement_manager_view.xml +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - view_entitlement_manager_tree - g2p.program.entitlement.manager - 1 - - - - - - - - - - - view_entitlement_manager_form - g2p.program.entitlement.manager - 1 - -
- - - - - - -
-
-
- - - - view_entitlement_manager_default_tree - g2p.program.entitlement.manager.default - 1 - - - - - - - - - - - - - - - view_entitlement_manager_default_form - g2p.program.entitlement.manager.default - 1 - -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - entitlement_manager_default_filter - g2p.program.entitlement.manager.default - - - - - - - - - - - - - - - Entitlement Managers - ir.actions.act_window - g2p.program.entitlement.manager.default - tree,form - - {} - [] - -

- Add an Entitlement Manager! -

- Click the create button to enter a new entitlement manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - diff --git a/g2p_programs/views/managers/notification_manager_view.xml b/g2p_programs/views/managers/notification_manager_view.xml deleted file mode 100644 index 34a8bc3ef..000000000 --- a/g2p_programs/views/managers/notification_manager_view.xml +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - view_notification_manager_tree - g2p.program.notification.manager - 1 - - - - - - - - - - - view_notification_manager_form - g2p.program.notification.manager - 1 - -
- - - - - - -
-
-
- - - - view_notification_manager_sms_tree - g2p.program.notification.manager.sms - 1 - - - - - - - - - - view_notification_manager_sms_form - g2p.program.notification.manager.sms - 1 - -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - notification_manager_sms_filter - g2p.program.notification.manager.sms - - - - - - - - - - - - - - - SMS Notification Managers - ir.actions.act_window - g2p.program.notification.manager.sms - tree,form - - {} - [] - -

- Add a SMS Notification Manager! -

- Click the create button to enter a new SMS notification manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - diff --git a/g2p_programs/views/managers/payment_manager_view.xml b/g2p_programs/views/managers/payment_manager_view.xml deleted file mode 100644 index 27e6e91f3..000000000 --- a/g2p_programs/views/managers/payment_manager_view.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - view_payment_manager_tree - g2p.program.payment.manager - 1 - - - - - - - - - - - view_payment_manager_form - g2p.program.payment.manager - 1 - -
- - - - - - -
-
-
- - - - view_payment_manager_default_tree - g2p.program.payment.manager.default - 1 - - - - - - - - - - - - view_payment_manager_default_form - g2p.program.payment.manager.default - 1 - -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - payment_manager_default_filter - g2p.program.payment.manager.default - - - - - - - - - - - - - - - Payment Managers - ir.actions.act_window - g2p.program.payment.manager.default - tree,form - - {} - [] - -

- Add a Payment Manager! -

- Click the create button to enter a new payment manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - diff --git a/g2p_programs/views/managers/program_manager_view.xml b/g2p_programs/views/managers/program_manager_view.xml deleted file mode 100644 index d86863cac..000000000 --- a/g2p_programs/views/managers/program_manager_view.xml +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - view_program_manager_tree - g2p.program.manager - 1 - - - - - - - - - - - view_program_manager_form - g2p.program.manager - 1 - -
- - - - - - -
-
-
- - - - view_program_manager_default_tree - g2p.program.manager.default - 1 - - - - - - - - - - view_program_manager_default_form - g2p.program.manager.default - 1 - -
- -
-
-
- - - - - - - - - - - program_manager_default_filter - g2p.program.manager.default - - - - - - - - - - - - - - - Program Managers - ir.actions.act_window - g2p.program.manager.default - tree,form - - {} - [] - -

- Add a Program Manager! -

- Click the create button to enter a new program manager. -

-
-
- - - - tree - - - - - - - form - - - - - - - diff --git a/g2p_programs/views/payment_batch_tag_view.xml b/g2p_programs/views/payment_batch_tag_view.xml deleted file mode 100644 index e0d6bd064..000000000 --- a/g2p_programs/views/payment_batch_tag_view.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - view_payment_batch_tag_tree - g2p.payment.batch.tag - 1 - - - - - - - - - - - - view_payment_batch_tag_form - g2p.payment.batch.tag - 1 - -
- - - - - - -
-
-
- - - Payments Batch Tags - ir.actions.act_window - g2p.payment.batch.tag - tree,form - {} - [] - - - - -
diff --git a/g2p_programs/views/payment_batch_view.xml b/g2p_programs/views/payment_batch_view.xml deleted file mode 100644 index 31b3bb28d..000000000 --- a/g2p_programs/views/payment_batch_view.xml +++ /dev/null @@ -1,185 +0,0 @@ - - - - - view_payment_batch_tree - g2p.payment.batch - 1 - - - - - - - - - - - - - - - - - view_payment_batch_form - g2p.payment.batch - 1 - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - payment_batch_filter - g2p.payment.batch - - - - - - - - - - - - - - - - - Payment Batches - ir.actions.act_window - g2p.payment.batch - tree,form - - {} - [] - -

- Payment Transactions -

- List of payment transactions generated from entitlements. -

-
-
- - - - tree - - - - - - - form - - - - - - - - -
diff --git a/g2p_programs/views/payment_view.xml b/g2p_programs/views/payment_view.xml deleted file mode 100644 index 6bf13880d..000000000 --- a/g2p_programs/views/payment_view.xml +++ /dev/null @@ -1,228 +0,0 @@ - - - - - view_payment_tree - g2p.payment - 1 - - - - - - - - - - - - - - - - - - - - - - view_payment_form - g2p.payment - 1 - -
-
-
- -
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - payment_filter - g2p.payment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Payments - ir.actions.act_window - g2p.payment - tree,form - - {} - [] - -

- Payment Transactions -

- List of payment transactions generated from entitlements. -

-
-
- - - - tree - - - - - - - form - - - - - - Assign Payments to Batch - - - list,form - code - action = model.open_wizard() - - - - -
diff --git a/g2p_programs/views/program_membership_view.xml b/g2p_programs/views/program_membership_view.xml deleted file mode 100644 index a3bd25a9a..000000000 --- a/g2p_programs/views/program_membership_view.xml +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - view_program_membership_tree - g2p.program_membership - 1 - - -
-
- Warning: Operation in progress: - -
- -
- - - - - -
- -
- - - -
- - - - -