diff --git a/advanced_translation/README.rst b/advanced_translation/README.rst
index c760c205c..3aee315f4 100644
--- a/advanced_translation/README.rst
+++ b/advanced_translation/README.rst
@@ -40,25 +40,25 @@ Usage
You can go in the Technical Settings/Translations/Advanced Translations
-- Enter all terms you want to use
-
-- Use method get of ir.advanced.translation in order to fetch
- translations
-
-- Make models inherit the class 'translatable.model' so that they can
- now use these methods:
-
- - translate(field_name): Will retrieve the translation of a
- char/selection field and replaces keywords by advanced
- translations. Keywords should be placed in brackets.
- - get_list: Return comma separated field values (see doc in
- translatable_model.py)
- - get_date(field_name, date_format='date_full'): Returns a date
- field directly formatted in the format wanted. date_format can be
- an advanced translation which will return the date format wanted
- (can change depending on the language), or it can directly be a
- date format used by Babel package :
- http://babel.pocoo.org/en/latest/dates.html
+- Enter all terms you want to use
+
+- Use method get of ir.advanced.translation in order to fetch
+ translations
+
+- Make models inherit the class 'translatable.model' so that they can
+ now use these methods:
+
+ - translate(field_name): Will retrieve the translation of a
+ char/selection field and replaces keywords by advanced translations.
+ Keywords should be placed in brackets.
+ - get_list: Return comma separated field values (see doc in
+ translatable_model.py)
+ - get_date(field_name, date_format='date_full'): Returns a date field
+ directly formatted in the format wanted. date_format can be an
+ advanced translation which will return the date format wanted (can
+ change depending on the language), or it can directly be a date
+ format used by Babel package :
+ http://babel.pocoo.org/en/latest/dates.html
Bug Tracker
===========
@@ -81,7 +81,7 @@ Authors
Contributors
------------
-- Emanuel Cino
+- Emanuel Cino
Maintainers
-----------
diff --git a/advanced_translation/static/description/index.html b/advanced_translation/static/description/index.html
index c711aa33f..6b5d887c5 100644
--- a/advanced_translation/static/description/index.html
+++ b/advanced_translation/static/description/index.html
@@ -400,15 +400,15 @@
Make models inherit the class ‘translatable.model’ so that they can
now use these methods:
translate(field_name): Will retrieve the translation of a
-char/selection field and replaces keywords by advanced
-translations. Keywords should be placed in brackets.
+char/selection field and replaces keywords by advanced translations.
+Keywords should be placed in brackets.
get_list: Return comma separated field values (see doc in
translatable_model.py)
-get_date(field_name, date_format=’date_full’): Returns a date
-field directly formatted in the format wanted. date_format can be
-an advanced translation which will return the date format wanted
-(can change depending on the language), or it can directly be a
-date format used by Babel package :
+ get_date(field_name, date_format=’date_full’): Returns a date field
+directly formatted in the format wanted. date_format can be an
+advanced translation which will return the date format wanted (can
+change depending on the language), or it can directly be a date
+format used by Babel package :
http://babel.pocoo.org/en/latest/dates.html
diff --git a/child_compassion/README.rst b/child_compassion/README.rst
index ec90425c6..fd2adfc29 100644
--- a/child_compassion/README.rst
+++ b/child_compassion/README.rst
@@ -43,18 +43,18 @@ Configuration
Access rights
-------------
-- Assign the rights to the users so that they can access the new
- "Sponsorship" menu
+- Assign the rights to the users so that they can access the new
+ "Sponsorship" menu
Configuration menu
------------------
-- Find the configuration menu in Sponsorship/Configuration (must be
- given rights)
-- Configure the default hold durations in the menu Global
- Childpool/Availability Management
-- Assign people to be notified when receiving National Office Disaster
- Alerts using the menu Communication/Staff Notifications
+- Find the configuration menu in Sponsorship/Configuration (must be
+ given rights)
+- Configure the default hold durations in the menu Global
+ Childpool/Availability Management
+- Assign people to be notified when receiving National Office Disaster
+ Alerts using the menu Communication/Staff Notifications
Odoo.conf file
--------------
@@ -70,8 +70,8 @@ Demand planning
You can add in the system settings default values for weekly demand and
resupply quantities by setting the following keys:
-- child_compassion.default_demand
-- child_compassion.default_resupply
+- child_compassion.default_demand
+- child_compassion.default_resupply
Usage
=====
@@ -84,8 +84,8 @@ Changelog
14.0.1.4.0
----------
-- ADD World Bank Data API fields in the Field Offices for fetching
- country statistics.
+- ADD World Bank Data API fields in the Field Offices for fetching
+ country statistics.
Bug Tracker
===========
@@ -108,10 +108,10 @@ Authors
Contributors
------------
-- Emanuel Cino
-- Cyril Sester
-- Kevin Cristi
-- David Coninckx
+- Emanuel Cino
+- Cyril Sester
+- Kevin Cristi
+- David Coninckx
Maintainers
-----------
diff --git a/child_compassion/__manifest__.py b/child_compassion/__manifest__.py
index de2b6c177..e5c07f6bd 100644
--- a/child_compassion/__manifest__.py
+++ b/child_compassion/__manifest__.py
@@ -29,7 +29,7 @@
# pylint: disable=C8101
{
"name": "Compassion Children",
- "version": "17.0.1.0.7",
+ "version": "17.0.1.0.9",
"category": "Compassion",
"author": "Compassion CH",
"license": "AGPL-3",
diff --git a/child_compassion/migrations/17.0.1.0.9/pre-migration.py b/child_compassion/migrations/17.0.1.0.9/pre-migration.py
new file mode 100644
index 000000000..cb6a83a99
--- /dev/null
+++ b/child_compassion/migrations/17.0.1.0.9/pre-migration.py
@@ -0,0 +1,23 @@
+from openupgradelib import openupgrade
+
+
+def migrate(cr, version):
+ if not openupgrade.column_exists(
+ cr, "compassion_project", "gps_latitude_obfuscated"
+ ):
+ openupgrade.logged_query(
+ cr,
+ """
+ ALTER TABLE compassion_project
+ ADD COLUMN gps_latitude_obfuscated float,
+ ADD COLUMN gps_longitude_obfuscated float;
+ """,
+ )
+ openupgrade.logged_query(
+ cr,
+ """
+ UPDATE compassion_project
+ SET gps_longitude_obfuscated = TRUNC(CAST(gps_longitude AS numeric), 0),
+ gps_latitude_obfuscated = TRUNC(CAST(gps_latitude AS numeric), 0);
+""",
+ )
diff --git a/child_compassion/models/project_compassion.py b/child_compassion/models/project_compassion.py
index 4e1971037..1c825890e 100644
--- a/child_compassion/models/project_compassion.py
+++ b/child_compassion/models/project_compassion.py
@@ -11,6 +11,7 @@
import logging
import re
from datetime import datetime, timedelta
+from random import random
import requests
@@ -85,6 +86,12 @@ class CompassionProject(models.Model):
zip_code = fields.Char(readonly=True)
gps_latitude = fields.Float(readonly=True)
gps_longitude = fields.Float(readonly=True)
+ gps_latitude_obfuscated = fields.Float(
+ compute="_compute_gps_obfuscated", store=True
+ )
+ gps_longitude_obfuscated = fields.Float(
+ compute="_compute_gps_obfuscated", store=True
+ )
google_link = fields.Char(readonly=True, compute="_compute_google_link")
timezone = fields.Char(readonly=True, compute="_compute_timezone", store=True)
cluster = fields.Char(readonly=True)
@@ -473,13 +480,26 @@ def _get_months(self):
@api.depends("lifecycle_ids", "lifecycle_ids.date")
def _compute_last_lifecycle(self):
for project in self:
- last_info = project.lifecycle_ids[:1]
- reactivation_lifecycle = project.lifecycle_ids.filtered(
+ if not project.lifecycle_ids:
+ project.last_lifecycle_id = False
+ continue
+
+ # Sort lifecycle events by date descending
+ sorted_events = project.lifecycle_ids.sorted(
+ key=lambda r: (str(r.date or ""), r.id), reverse=True
+ )
+ # Take first (newest) event
+ last_info = sorted_events[0]
+
+ reactivation_lifecycle = sorted_events.filtered(
lambda r, _last=last_info: r.date == _last.date
and r.type == "Reactivation"
- )[:1]
+ )
+
# If it exists, lifecycle with type 'Reactivation' is determinant
- project.last_lifecycle_id = reactivation_lifecycle or last_info
+ project.last_lifecycle_id = (
+ reactivation_lifecycle[0] if reactivation_lifecycle else last_info
+ )
def _search_last_lifecycle_id(self, operator, value):
return [("lifecycle_ids", operator, value)]
@@ -516,6 +536,45 @@ def _get_materials(self):
("Plastic", "Plastic"),
]
+ @api.depends("gps_latitude", "gps_longitude", "closest_city")
+ def _compute_gps_obfuscated(self):
+ """
+ This method calculates and stores the obfuscated coordinates
+ (latitude and longitude).
+ """
+ api_key = (
+ self.env["ir.config_parameter"].sudo().get_param("google_maps_api_key")
+ )
+ base_url = "https://maps.googleapis.com/maps/api/geocode/json"
+ for project in self:
+ try:
+ parts = [
+ project.closest_city,
+ project.state_province,
+ project.country_id.name,
+ ]
+ address_string = ", ".join(filter(None, parts))
+ params = {"address": address_string, "key": api_key}
+ response = requests.get(base_url, params=params, timeout=3)
+ data = response.json()
+ if data["status"] == "OK":
+ location = data["results"][0]["geometry"]["location"]
+ project.gps_latitude_obfuscated = location["lat"]
+ project.gps_longitude_obfuscated = location["lng"]
+ except Exception:
+ # Fallback to randomized gps coords
+ logging.warning("Request failed", exc_info=True)
+ project.gps_latitude_obfuscated = (
+ (int(project.gps_latitude) + random())
+ if project.gps_latitude
+ else 0
+ )
+ project.gps_longitude_obfuscated = (
+ (int(project.gps_longitude) + random())
+ if project.gps_longitude
+ else 0
+ )
+
@api.depends("gps_longitude", "gps_latitude")
def _compute_timezone(self):
tf = TimezoneFinder()
diff --git a/child_compassion/static/img/child_compassion.childpack_full/1904_dossier_de_DE.jpg b/child_compassion/static/img/child_compassion.childpack_full/1904_dossier_de_DE.jpg
old mode 100755
new mode 100644
index 95d75a71a..3f413c842
Binary files a/child_compassion/static/img/child_compassion.childpack_full/1904_dossier_de_DE.jpg and b/child_compassion/static/img/child_compassion.childpack_full/1904_dossier_de_DE.jpg differ
diff --git a/child_compassion/static/img/child_compassion.childpack_small/1904_dossier_de_DE.jpg b/child_compassion/static/img/child_compassion.childpack_small/1904_dossier_de_DE.jpg
old mode 100755
new mode 100644
index 56b758681..431a2cd74
Binary files a/child_compassion/static/img/child_compassion.childpack_small/1904_dossier_de_DE.jpg and b/child_compassion/static/img/child_compassion.childpack_small/1904_dossier_de_DE.jpg differ
diff --git a/child_compassion/views/project_compassion_view.xml b/child_compassion/views/project_compassion_view.xml
index 647048f41..47c5925ca 100644
--- a/child_compassion/views/project_compassion_view.xml
+++ b/child_compassion/views/project_compassion_view.xml
@@ -80,7 +80,9 @@
-
+
diff --git a/gift_compassion/data/gift_thresholds.xml b/gift_compassion/data/gift_thresholds.xml
index 61543e4f8..d8122f321 100644
--- a/gift_compassion/data/gift_thresholds.xml
+++ b/gift_compassion/data/gift_thresholds.xml
@@ -1,4 +1,4 @@
-
+
2000
-
+
diff --git a/gift_compassion/i18n/de.po b/gift_compassion/i18n/de.po
new file mode 100644
index 000000000..2762fed0e
--- /dev/null
+++ b/gift_compassion/i18n/de.po
@@ -0,0 +1,872 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * gift_compassion
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-02-05 13:05+0000\n"
+"PO-Revision-Date: 2026-02-05 15:08+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: de\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: Poedit 3.8\n"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_recurring_contract_group
+msgid "A group of contracts"
+msgstr "Eine Gruppe von Verträgen"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__account_credit
+msgid "Account Credit"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__account_debit
+msgid "Account Debit"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.gift_accounting_settings_form
+msgid "Accounting"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_needaction
+msgid "Action Needed"
+msgstr "Aktion notwendig"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__amount
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_tree
+msgid "Amount"
+msgstr "Betrag"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__amount_us_dollars
+msgid "Amount due"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__analytic
+msgid "Analytic"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__analytic_tag
+msgid "Analytic Tag"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_attachment_count
+msgid "Attachment Count"
+msgstr "# Anhänge"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__attribution
+msgid "Attribution"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.cron,cron_name:gift_compassion.process_gift_cron
+msgid "Base: Auto-vacuum internal data"
+msgstr "Basis: Auto-Vacuum für interne Daten"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Birthday"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Cancel Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__child_id
+msgid "Child"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.act_window,name:gift_compassion.action_collect_invoices
+msgid "Collect Invoices"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Collect invoices"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__company_id
+msgid "Company"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_res_config_settings
+msgid "Config Settings"
+msgstr "Konfig-Einstellungen"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__create_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__create_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__create_uid
+msgid "Created by"
+msgstr "Angelegt von"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__create_date
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__create_date
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__create_date
+msgid "Created on"
+msgstr "Angelegt am"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__currency_id
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__currency_id
+msgid "Currency"
+msgstr "Währung"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__currency_usd
+msgid "Currency Usd"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__date_partner_paid
+msgid "Date Partner Paid"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__delivered
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+#, python-format
+msgid "Delivered"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_account_partial_reconcile__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_generate_gift_wizard__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract_group__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__display_name
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__domain
+msgid "Domain"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__draft
+#, python-format
+msgid "Draft"
+msgstr ""
+
+#. module: gift_compassion
+#: model:base.automation,name:gift_compassion.enable_postponed_gifts
+#: model:ir.actions.server,name:gift_compassion.enable_postponed_gifts_ir_actions_server
+msgid "Enable postponed gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__exchange_rate
+msgid "Exchange Rate"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__failed_message_ids
+msgid "Failed Messages"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Family Gift"
+msgstr "Geschenk für Patenkind & Familie"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__field_office_notes
+msgid "Field Office Notes"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__company_id
+msgid "Field is retrieve from the associated sponsorship"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_follower_ids
+msgid "Followers"
+msgstr "Beobachter"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_channel_ids
+msgid "Followers (Channels)"
+msgstr "Beobachter (Kanäle)"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_partner_ids
+msgid "Followers (Partners)"
+msgstr "Beobachter (Partner)"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line__gift_id
+msgid "GMC Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:account.account,name:gift_compassion.comp_2002_2
+msgid "GMC Gift Due"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__payment_id
+msgid "GMC Payment"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid ""
+"GMC gift payment accounting entries are disabled. (compassion accounting "
+"settings)"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_id
+msgid "GMC message"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gender
+msgid "Gender"
+msgstr "Geschlecht"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "General"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+#, python-format
+msgid "Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__gift_attribution
+msgid "Gift Attribution"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_gift_collect_wizard
+msgid "Gift Collect Wizard"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gift_date
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Gift Date"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__gift_frequency
+msgid "Gift Frequency"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_generate_gift_wizard
+msgid "Gift Generation Wizard"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Gift OK"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.act_window,name:gift_compassion.open_view_gift_threshold_settings
+msgid "Gift Threshold Configuration"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_gift_threshold_settings
+#: model:ir.ui.menu,name:gift_compassion.menu_gift_configuration
+msgid "Gift Thresholds"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__gift_type
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Gift Type"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_notify_ids
+msgid "Gift Undeliverable"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Gift Undeliverable Notification"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_analytic_id
+msgid "Gift analytic account"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_analytic_tag_id
+msgid "Gift analytic tag"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_expense_account_id
+msgid "Gift expense account"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gift_type
+msgid "Gift for"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_journal_id
+msgid "Gift journal id"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__sponsorship_gift_type
+msgid "Gift type"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_sponsorship_contract_gift_form
+msgid "Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gmc_gift_id
+msgid "Gmc Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Graduation/Final"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Group By..."
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__project_suspended
+msgid "Hold Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move__id
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line__id
+#: model:ir.model.fields,field_description:gift_compassion.field_account_partial_reconcile__id
+#: model:ir.model.fields,field_description:gift_compassion.field_generate_gift_wizard__id
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__id
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__id
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__id
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract_group__id
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__id
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__id
+msgid "ID"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_needaction
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_unread
+msgid "If checked, new messages require your attention."
+msgstr "Falls markiert, benötigen neue Nachrichten Ihre Kenntnisnahme."
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_has_error
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+"Das Senden mancher Nachrichten ist fehlgeschlagen wenn dieses Fenster "
+"angekreuzt ist."
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__in_progress
+#, python-format
+msgid "In Progress"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__instructions
+msgid "Instructions"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__inverse_payment_id
+msgid "Inverse move"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_collect
+msgid "Invoice Lines"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__invoice_line_ids
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__invoice_line_ids
+msgid "Invoice lines"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Invoiced"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Invoices"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_is_follower
+msgid "Is Follower"
+msgstr "Ist Beobachter"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__is_param_set
+msgid "Is Param Set"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__journal_id
+msgid "Journal"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_account_move
+msgid "Journal Entry"
+msgstr "Journalbuchung"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_account_move_line
+msgid "Journal Item"
+msgstr "Journalposten"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_account_partial_reconcile____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_generate_gift_wizard____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract_group____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift____last_update
+msgid "Last Modified on"
+msgstr "Zuletzt geändert am"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__write_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__write_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__write_uid
+msgid "Last Updated by"
+msgstr "Zuletzt aktualisiert durch"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__write_date
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__write_date
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__write_date
+msgid "Last Updated on"
+msgstr "Zuletzt aktualisiert am"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "Hauptanhänge"
+
+#. module: gift_compassion
+#: model:ir.actions.server,name:gift_compassion.deliver_gift
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Mark as delivered"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__max_amount
+msgid "Max Amount"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_has_error
+msgid "Message Delivery error"
+msgstr "Error beim senden der Nachricht"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_ids
+msgid "Messages"
+msgstr "Mitteilungen"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__min_amount
+msgid "Min Amount"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__name
+msgid "Name"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Neediest Families"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Neediest Families Split"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__no_birthday_invoice
+msgid "No Birthday Invoice"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.actions.act_window,help:gift_compassion.action_sponsorship_gift
+msgid "No gifts."
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Not sent"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__number_gifts
+msgid "Number Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_needaction_counter
+msgid "Number of Actions"
+msgstr "Anzahl der Aktionen"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "Anzahl der Nachrichten, die eine Aktion erfordern"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr "Anzahl der Nachrichten mit einem Fehler beim Senden."
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_unread_counter
+msgid "Number of unread messages"
+msgstr "Anzahl ungelesene Nachrichten"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_account_partial_reconcile
+msgid "Partial Reconcile"
+msgstr "Teilausgleich Offene Posten"
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__beneficiary_exited
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__participant_exited
+msgid "Participant Exited"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__beneficiary_exited_more_than_90_days_ago
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__participant_exited_more_than_90_days_ago
+msgid "Participant Exited More Than 90 Days Ago"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__beneficiary_exited/whereabouts_unknown
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__participant_exited/whereabouts_unknown
+msgid "Participant Exited/Whereabouts Unknown"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Participant Gift"
+msgstr "Geschenk für Patenkind"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__partner_id
+msgid "Partner"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__threshold_alert
+msgid "Partner exceeded the maximum gift amount allowed"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_income_account_id
+msgid "Payable gift account"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__open
+#, python-format
+msgid "Pending"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__date_sent
+msgid "Process Date"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.cron,name:gift_compassion.process_gift_cron
+msgid "Process gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__product_id
+msgid "Product"
+msgstr "Produkt"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__project_id
+msgid "Project"
+msgstr "Kinderzentrum"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Project Gift"
+msgstr "Spende für das Kinderzentrum"
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__project_transitioned
+msgid "Project Transitioned"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_recurring_contract
+msgid "Recurring contract"
+msgstr "Laufender Vertrag"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.server,name:gift_compassion.send_gift
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Send Now"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Sent"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Sponsor payments"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Sponsored Child Family"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__sponsorship_id
+#, python-format
+msgid "Sponsorship"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_sponsorship_gift
+msgid "Sponsorship Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__sponsorship_gift_type
+msgid "Sponsorship Gift Type"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.act_window,name:gift_compassion.action_sponsorship_gift
+#: model:ir.ui.menu,name:gift_compassion.menu_sponsorship_gift
+msgid "Sponsorship Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/contracts.py:0
+#, python-format
+msgid "Sponsorship gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__state
+msgid "State"
+msgstr "Bundesland"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Status"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__status_change_date
+msgid "Status Change Date"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Survival"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__suspended
+#, python-format
+msgid "Suspended"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_recurring_contract__no_birthday_invoice
+msgid ""
+"The automatic birthday gift will not generate an invoice.This means a "
+"birthday gift will always be sent to GMC even if we didn't register a "
+"payment."
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid ""
+"This will cancel the message for GMC and put the gift in Delivered state. "
+"Are you sure?"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__threshold_alert
+msgid "Threshold Alert"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__threshold_alert_type
+msgid "Threshold Alert Type"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "To Verify"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__undeliverable
+#, python-format
+msgid "Undeliverable"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__undeliverable_reason
+msgid "Undeliverable Reason"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_unread
+msgid "Unread Messages"
+msgstr "Ungelesene Mitteilungen"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "Zähler der ungelelesen Nachrichten"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__verify
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+#, python-format
+msgid "Verify"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__website_message_ids
+msgid "Website Messages"
+msgstr "Website Nachrichten"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__website_message_ids
+msgid "Website communication history"
+msgstr "Website Kommunikationshistorie"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Will unreconcile the payment"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__yearly_threshold
+msgid "Yearly Threshold"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.constraint,message:gift_compassion.constraint_gift_threshold_settings_unique_gift_threshold
+msgid "You already have a threshold rule for this gift"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/account_partial_reconcile.py:0
+#, python-format
+msgid "You cannot delete the %s. It is already sent to GMC."
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "You cannot delete the %s.It is already sent to GMC."
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_collect
+msgid "_Add to gift"
+msgstr ""
diff --git a/gift_compassion/i18n/fr_CH.po b/gift_compassion/i18n/fr_CH.po
new file mode 100644
index 000000000..2dc43f77f
--- /dev/null
+++ b/gift_compassion/i18n/fr_CH.po
@@ -0,0 +1,870 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * gift_compassion
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-02-05 13:05+0000\n"
+"PO-Revision-Date: 2026-02-05 15:06+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: fr_CH\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: Poedit 3.8\n"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_recurring_contract_group
+msgid "A group of contracts"
+msgstr "Un groupe de contrats"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__account_credit
+msgid "Account Credit"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__account_debit
+msgid "Account Debit"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.gift_accounting_settings_form
+msgid "Accounting"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_needaction
+msgid "Action Needed"
+msgstr "A besoin d'une action"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__amount
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_tree
+msgid "Amount"
+msgstr "Montant"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__amount_us_dollars
+msgid "Amount due"
+msgstr "Montant dû"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__analytic
+msgid "Analytic"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__analytic_tag
+msgid "Analytic Tag"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_attachment_count
+msgid "Attachment Count"
+msgstr "Nombre de pièces jointes"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__attribution
+msgid "Attribution"
+msgstr "Répartition"
+
+#. module: gift_compassion
+#: model:ir.cron,cron_name:gift_compassion.process_gift_cron
+msgid "Base: Auto-vacuum internal data"
+msgstr "Base : données internes sur l'aspiration automatique"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Birthday"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Cancel Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__child_id
+msgid "Child"
+msgstr "Enfant"
+
+#. module: gift_compassion
+#: model:ir.actions.act_window,name:gift_compassion.action_collect_invoices
+msgid "Collect Invoices"
+msgstr "Collecter les factures"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Collect invoices"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__company_id
+msgid "Company"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_res_config_settings
+msgid "Config Settings"
+msgstr "Paramètres de configuration"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__create_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__create_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__create_date
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__create_date
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__create_date
+msgid "Created on"
+msgstr "Créé le"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__currency_id
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__currency_id
+msgid "Currency"
+msgstr "Devise"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__currency_usd
+msgid "Currency Usd"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__date_partner_paid
+msgid "Date Partner Paid"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__delivered
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+#, python-format
+msgid "Delivered"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_account_partial_reconcile__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_generate_gift_wizard__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract_group__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__display_name
+msgid "Display Name"
+msgstr "Nom d'affichage"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__domain
+msgid "Domain"
+msgstr "Domaine"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__draft
+#, python-format
+msgid "Draft"
+msgstr ""
+
+#. module: gift_compassion
+#: model:base.automation,name:gift_compassion.enable_postponed_gifts
+#: model:ir.actions.server,name:gift_compassion.enable_postponed_gifts_ir_actions_server
+msgid "Enable postponed gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__exchange_rate
+msgid "Exchange Rate"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__failed_message_ids
+msgid "Failed Messages"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Family Gift"
+msgstr "Cadeau Famille"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__field_office_notes
+msgid "Field Office Notes"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__company_id
+msgid "Field is retrieve from the associated sponsorship"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_follower_ids
+msgid "Followers"
+msgstr "Abonnés"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_channel_ids
+msgid "Followers (Channels)"
+msgstr "Abonnés (Canaux)"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_partner_ids
+msgid "Followers (Partners)"
+msgstr "Abonnés (Partenaires)"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line__gift_id
+msgid "GMC Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:account.account,name:gift_compassion.comp_2002_2
+msgid "GMC Gift Due"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__payment_id
+msgid "GMC Payment"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid ""
+"GMC gift payment accounting entries are disabled. (compassion accounting "
+"settings)"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_id
+msgid "GMC message"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gender
+msgid "Gender"
+msgstr "Genre"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "General"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+#, python-format
+msgid "Gift"
+msgstr "Cadeau"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__gift_attribution
+msgid "Gift Attribution"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_gift_collect_wizard
+msgid "Gift Collect Wizard"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gift_date
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Gift Date"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__gift_frequency
+msgid "Gift Frequency"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_generate_gift_wizard
+msgid "Gift Generation Wizard"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Gift OK"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.act_window,name:gift_compassion.open_view_gift_threshold_settings
+msgid "Gift Threshold Configuration"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_gift_threshold_settings
+#: model:ir.ui.menu,name:gift_compassion.menu_gift_configuration
+msgid "Gift Thresholds"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__gift_type
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Gift Type"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_notify_ids
+msgid "Gift Undeliverable"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Gift Undeliverable Notification"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_analytic_id
+msgid "Gift analytic account"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_analytic_tag_id
+msgid "Gift analytic tag"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_expense_account_id
+msgid "Gift expense account"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gift_type
+msgid "Gift for"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_journal_id
+msgid "Gift journal id"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__sponsorship_gift_type
+msgid "Gift type"
+msgstr "Type de cadeau"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_sponsorship_contract_gift_form
+msgid "Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gmc_gift_id
+msgid "Gmc Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Graduation/Final"
+msgstr "Fin de parrainage"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Group By..."
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__project_suspended
+msgid "Hold Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move__id
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line__id
+#: model:ir.model.fields,field_description:gift_compassion.field_account_partial_reconcile__id
+#: model:ir.model.fields,field_description:gift_compassion.field_generate_gift_wizard__id
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__id
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__id
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__id
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract_group__id
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__id
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__id
+msgid "ID"
+msgstr "Identifiant"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_needaction
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_unread
+msgid "If checked, new messages require your attention."
+msgstr "si elle est cochée, de nouveaux messages requièrent votre attention."
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_has_error
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr "Si actif, certains messages ont une erreur de livraison."
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__in_progress
+#, python-format
+msgid "In Progress"
+msgstr "En cours"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__instructions
+msgid "Instructions"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__inverse_payment_id
+msgid "Inverse move"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_collect
+msgid "Invoice Lines"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__invoice_line_ids
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__invoice_line_ids
+msgid "Invoice lines"
+msgstr "Lignes de factures"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Invoiced"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Invoices"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_is_follower
+msgid "Is Follower"
+msgstr "Est un abonné"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__is_param_set
+msgid "Is Param Set"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__journal_id
+msgid "Journal"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_account_move
+msgid "Journal Entry"
+msgstr "Entrée de journal"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_account_move_line
+msgid "Journal Item"
+msgstr "Article de journal"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_account_partial_reconcile____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_generate_gift_wizard____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract_group____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift____last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__write_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__write_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__write_date
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__write_date
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "Pièce jointe principale"
+
+#. module: gift_compassion
+#: model:ir.actions.server,name:gift_compassion.deliver_gift
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Mark as delivered"
+msgstr "Marquer comme Transmis"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__max_amount
+msgid "Max Amount"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_has_error
+msgid "Message Delivery error"
+msgstr "Erreur d'envoi du message"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__min_amount
+msgid "Min Amount"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__name
+msgid "Name"
+msgstr "Nom"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Neediest Families"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Neediest Families Split"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__no_birthday_invoice
+msgid "No Birthday Invoice"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.actions.act_window,help:gift_compassion.action_sponsorship_gift
+msgid "No gifts."
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Not sent"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__number_gifts
+msgid "Number Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_needaction_counter
+msgid "Number of Actions"
+msgstr "Nombre d'Actions"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "Nombre de messages demandant une action"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr "Nombre de messages avec des erreurs d'envoi"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_unread_counter
+msgid "Number of unread messages"
+msgstr "Nombre de messages non lus"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_account_partial_reconcile
+msgid "Partial Reconcile"
+msgstr "Lettrage partiel"
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__beneficiary_exited
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__participant_exited
+msgid "Participant Exited"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__beneficiary_exited_more_than_90_days_ago
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__participant_exited_more_than_90_days_ago
+msgid "Participant Exited More Than 90 Days Ago"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__beneficiary_exited/whereabouts_unknown
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__participant_exited/whereabouts_unknown
+msgid "Participant Exited/Whereabouts Unknown"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Participant Gift"
+msgstr "Cadeau pour un enfant"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__partner_id
+msgid "Partner"
+msgstr "Partenaire"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__threshold_alert
+msgid "Partner exceeded the maximum gift amount allowed"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_income_account_id
+msgid "Payable gift account"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__open
+#, python-format
+msgid "Pending"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__date_sent
+msgid "Process Date"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.cron,name:gift_compassion.process_gift_cron
+msgid "Process gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__product_id
+msgid "Product"
+msgstr "Produit"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__project_id
+msgid "Project"
+msgstr "Projet"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Project Gift"
+msgstr "Cadeau centre de développement de l'enfant"
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__project_transitioned
+msgid "Project Transitioned"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_recurring_contract
+msgid "Recurring contract"
+msgstr "Contrat récurrent"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.server,name:gift_compassion.send_gift
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Send Now"
+msgstr "Envoyer"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Sent"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Sponsor payments"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Sponsored Child Family"
+msgstr "Famille de l'enfant"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__sponsorship_id
+#, python-format
+msgid "Sponsorship"
+msgstr "Parrainage"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_sponsorship_gift
+msgid "Sponsorship Gift"
+msgstr "Cadeau de parrainage"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__sponsorship_gift_type
+msgid "Sponsorship Gift Type"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.act_window,name:gift_compassion.action_sponsorship_gift
+#: model:ir.ui.menu,name:gift_compassion.menu_sponsorship_gift
+msgid "Sponsorship Gifts"
+msgstr "Cadeaux de parrainage"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/contracts.py:0
+#, python-format
+msgid "Sponsorship gifts"
+msgstr "Cadeaux de parrainage"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__state
+msgid "State"
+msgstr "État"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Status"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__status_change_date
+msgid "Status Change Date"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Survival"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__suspended
+#, python-format
+msgid "Suspended"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_recurring_contract__no_birthday_invoice
+msgid ""
+"The automatic birthday gift will not generate an invoice.This means a "
+"birthday gift will always be sent to GMC even if we didn't register a "
+"payment."
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid ""
+"This will cancel the message for GMC and put the gift in Delivered state. "
+"Are you sure?"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__threshold_alert
+msgid "Threshold Alert"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__threshold_alert_type
+msgid "Threshold Alert Type"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "To Verify"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__undeliverable
+#, python-format
+msgid "Undeliverable"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__undeliverable_reason
+msgid "Undeliverable Reason"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_unread
+msgid "Unread Messages"
+msgstr "Messages non lus"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "Compteur de messages non lus"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__verify
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+#, python-format
+msgid "Verify"
+msgstr "A vérifier"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__website_message_ids
+msgid "Website Messages"
+msgstr "Messages du site web"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__website_message_ids
+msgid "Website communication history"
+msgstr "Historique de communication du site web"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Will unreconcile the payment"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__yearly_threshold
+msgid "Yearly Threshold"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.constraint,message:gift_compassion.constraint_gift_threshold_settings_unique_gift_threshold
+msgid "You already have a threshold rule for this gift"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/account_partial_reconcile.py:0
+#, python-format
+msgid "You cannot delete the %s. It is already sent to GMC."
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "You cannot delete the %s.It is already sent to GMC."
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_collect
+msgid "_Add to gift"
+msgstr ""
diff --git a/gift_compassion/i18n/it.po b/gift_compassion/i18n/it.po
new file mode 100644
index 000000000..3cd46c318
--- /dev/null
+++ b/gift_compassion/i18n/it.po
@@ -0,0 +1,870 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * gift_compassion
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-02-05 13:05+0000\n"
+"PO-Revision-Date: 2026-02-05 15:08+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: it\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: Poedit 3.8\n"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_recurring_contract_group
+msgid "A group of contracts"
+msgstr "Un gruppo di contratti"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__account_credit
+msgid "Account Credit"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__account_debit
+msgid "Account Debit"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.gift_accounting_settings_form
+msgid "Accounting"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_needaction
+msgid "Action Needed"
+msgstr "Azione Necessaria"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__amount
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_tree
+msgid "Amount"
+msgstr "Importo"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__amount_us_dollars
+msgid "Amount due"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__analytic
+msgid "Analytic"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__analytic_tag
+msgid "Analytic Tag"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_attachment_count
+msgid "Attachment Count"
+msgstr "Numero allegati"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__attribution
+msgid "Attribution"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.cron,cron_name:gift_compassion.process_gift_cron
+msgid "Base: Auto-vacuum internal data"
+msgstr "Base: pulizia automatica dati interni"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Birthday"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Cancel Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__child_id
+msgid "Child"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.act_window,name:gift_compassion.action_collect_invoices
+msgid "Collect Invoices"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Collect invoices"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__company_id
+msgid "Company"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_res_config_settings
+msgid "Config Settings"
+msgstr "Impostazioni di configurazione"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__create_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__create_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__create_uid
+msgid "Created by"
+msgstr "Creato da"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__create_date
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__create_date
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__create_date
+msgid "Created on"
+msgstr "Creato il"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__currency_id
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__currency_id
+msgid "Currency"
+msgstr "Valuta"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__currency_usd
+msgid "Currency Usd"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__date_partner_paid
+msgid "Date Partner Paid"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__delivered
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+#, python-format
+msgid "Delivered"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_account_partial_reconcile__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_generate_gift_wizard__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract_group__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__display_name
+msgid "Display Name"
+msgstr "Nome visualizzato"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__domain
+msgid "Domain"
+msgstr "Dominio"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__draft
+#, python-format
+msgid "Draft"
+msgstr ""
+
+#. module: gift_compassion
+#: model:base.automation,name:gift_compassion.enable_postponed_gifts
+#: model:ir.actions.server,name:gift_compassion.enable_postponed_gifts_ir_actions_server
+msgid "Enable postponed gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__exchange_rate
+msgid "Exchange Rate"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__failed_message_ids
+msgid "Failed Messages"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Family Gift"
+msgstr "Regalo per il bambino e la famiglia"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__field_office_notes
+msgid "Field Office Notes"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__company_id
+msgid "Field is retrieve from the associated sponsorship"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_channel_ids
+msgid "Followers (Channels)"
+msgstr "Followers (Canali)"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_partner_ids
+msgid "Followers (Partners)"
+msgstr "Followers (Partner)"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line__gift_id
+msgid "GMC Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:account.account,name:gift_compassion.comp_2002_2
+msgid "GMC Gift Due"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__payment_id
+msgid "GMC Payment"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid ""
+"GMC gift payment accounting entries are disabled. (compassion accounting "
+"settings)"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_id
+msgid "GMC message"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gender
+msgid "Gender"
+msgstr "Sesso"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "General"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+#, python-format
+msgid "Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__gift_attribution
+msgid "Gift Attribution"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_gift_collect_wizard
+msgid "Gift Collect Wizard"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gift_date
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Gift Date"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__gift_frequency
+msgid "Gift Frequency"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_generate_gift_wizard
+msgid "Gift Generation Wizard"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Gift OK"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.act_window,name:gift_compassion.open_view_gift_threshold_settings
+msgid "Gift Threshold Configuration"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_gift_threshold_settings
+#: model:ir.ui.menu,name:gift_compassion.menu_gift_configuration
+msgid "Gift Thresholds"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__gift_type
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Gift Type"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_notify_ids
+msgid "Gift Undeliverable"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Gift Undeliverable Notification"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_analytic_id
+msgid "Gift analytic account"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_analytic_tag_id
+msgid "Gift analytic tag"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_expense_account_id
+msgid "Gift expense account"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gift_type
+msgid "Gift for"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_journal_id
+msgid "Gift journal id"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__sponsorship_gift_type
+msgid "Gift type"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_sponsorship_contract_gift_form
+msgid "Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__gmc_gift_id
+msgid "Gmc Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Graduation/Final"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Group By..."
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__project_suspended
+msgid "Hold Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move__id
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line__id
+#: model:ir.model.fields,field_description:gift_compassion.field_account_partial_reconcile__id
+#: model:ir.model.fields,field_description:gift_compassion.field_generate_gift_wizard__id
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__id
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__id
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__id
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract_group__id
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__id
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__id
+msgid "ID"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_needaction
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_unread
+msgid "If checked, new messages require your attention."
+msgstr "Se selezionato, i nuovi messaggi richiedono la tua attenzione"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_has_error
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr "Se selezionato, alcuni messaggi presentano un errore di consegna."
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__in_progress
+#, python-format
+msgid "In Progress"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__instructions
+msgid "Instructions"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__inverse_payment_id
+msgid "Inverse move"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_collect
+msgid "Invoice Lines"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__invoice_line_ids
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__invoice_line_ids
+msgid "Invoice lines"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Invoiced"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Invoices"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_is_follower
+msgid "Is Follower"
+msgstr "E' Follower"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__is_param_set
+msgid "Is Param Set"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__journal_id
+msgid "Journal"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_account_move
+msgid "Journal Entry"
+msgstr "Registrazione contabile"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_account_move_line
+msgid "Journal Item"
+msgstr "Voce del giornale"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_account_move_line____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_account_partial_reconcile____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_generate_gift_wizard____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract_group____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift____last_update
+msgid "Last Modified on"
+msgstr "Ultima modifica il"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__write_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__write_uid
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__write_uid
+msgid "Last Updated by"
+msgstr "Ultima modifica di"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_collect_wizard__write_date
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__write_date
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__write_date
+msgid "Last Updated on"
+msgstr "Ultima modifica il"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "Allegato principale"
+
+#. module: gift_compassion
+#: model:ir.actions.server,name:gift_compassion.deliver_gift
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Mark as delivered"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__max_amount
+msgid "Max Amount"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_has_error
+msgid "Message Delivery error"
+msgstr "Errore di consegna messaggio"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_ids
+msgid "Messages"
+msgstr "Messaggi"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__min_amount
+msgid "Min Amount"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__name
+msgid "Name"
+msgstr "Nome"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Neediest Families"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Neediest Families Split"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__no_birthday_invoice
+msgid "No Birthday Invoice"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.actions.act_window,help:gift_compassion.action_sponsorship_gift
+msgid "No gifts."
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Not sent"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_recurring_contract__number_gifts
+msgid "Number Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_needaction_counter
+msgid "Number of Actions"
+msgstr "Numero di Azioni"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "Numero di messaggi che richiedono un'azione"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr "Numero di messaggi con errore di consegna"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__message_unread_counter
+msgid "Number of unread messages"
+msgstr "Numero di messaggi non letti"
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_account_partial_reconcile
+msgid "Partial Reconcile"
+msgstr "Riconciliazione parziale"
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__beneficiary_exited
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__participant_exited
+msgid "Participant Exited"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__beneficiary_exited_more_than_90_days_ago
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__participant_exited_more_than_90_days_ago
+msgid "Participant Exited More Than 90 Days Ago"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__beneficiary_exited/whereabouts_unknown
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__participant_exited/whereabouts_unknown
+msgid "Participant Exited/Whereabouts Unknown"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Participant Gift"
+msgstr "Regalo per il bambino"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__partner_id
+msgid "Partner"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__threshold_alert
+msgid "Partner exceeded the maximum gift amount allowed"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_res_config_settings__gift_income_account_id
+msgid "Payable gift account"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__open
+#, python-format
+msgid "Pending"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__date_sent
+msgid "Process Date"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.cron,name:gift_compassion.process_gift_cron
+msgid "Process gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__product_id
+msgid "Product"
+msgstr "Prodotto"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__project_id
+msgid "Project"
+msgstr "Progetto"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Project Gift"
+msgstr "Donazione per il centro"
+
+#. module: gift_compassion
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__undeliverable_reason__project_transitioned
+msgid "Project Transitioned"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_recurring_contract
+msgid "Recurring contract"
+msgstr "Contratto ricorrente"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.server,name:gift_compassion.send_gift
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Send Now"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Sent"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Sponsor payments"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Sponsored Child Family"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__sponsorship_id
+#, python-format
+msgid "Sponsorship"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model,name:gift_compassion.model_sponsorship_gift
+msgid "Sponsorship Gift"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__sponsorship_gift_type
+msgid "Sponsorship Gift Type"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.actions.act_window,name:gift_compassion.action_sponsorship_gift
+#: model:ir.ui.menu,name:gift_compassion.menu_sponsorship_gift
+msgid "Sponsorship Gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/contracts.py:0
+#, python-format
+msgid "Sponsorship gifts"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__state
+msgid "State"
+msgstr "Stato"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+msgid "Status"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__status_change_date
+msgid "Status Change Date"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "Survival"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__suspended
+#, python-format
+msgid "Suspended"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_recurring_contract__no_birthday_invoice
+msgid ""
+"The automatic birthday gift will not generate an invoice.This means a "
+"birthday gift will always be sent to GMC even if we didn't register a "
+"payment."
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid ""
+"This will cancel the message for GMC and put the gift in Delivered state. "
+"Are you sure?"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__threshold_alert
+msgid "Threshold Alert"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__threshold_alert_type
+msgid "Threshold Alert Type"
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "To Verify"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__undeliverable
+#, python-format
+msgid "Undeliverable"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__undeliverable_reason
+msgid "Undeliverable Reason"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_unread
+msgid "Unread Messages"
+msgstr "Messaggi Non Letti"
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "Contatore di messsaggi non letti"
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#: model:ir.model.fields.selection,name:gift_compassion.selection__sponsorship_gift__state__verify
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_filter
+#, python-format
+msgid "Verify"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_sponsorship_gift__website_message_ids
+msgid "Website Messages"
+msgstr "Messaggi sito web"
+
+#. module: gift_compassion
+#: model:ir.model.fields,help:gift_compassion.field_sponsorship_gift__website_message_ids
+msgid "Website communication history"
+msgstr "Storico comunicazione sito"
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_form
+msgid "Will unreconcile the payment"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.fields,field_description:gift_compassion.field_gift_threshold_settings__yearly_threshold
+msgid "Yearly Threshold"
+msgstr ""
+
+#. module: gift_compassion
+#: model:ir.model.constraint,message:gift_compassion.constraint_gift_threshold_settings_unique_gift_threshold
+msgid "You already have a threshold rule for this gift"
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/account_partial_reconcile.py:0
+#, python-format
+msgid "You cannot delete the %s. It is already sent to GMC."
+msgstr ""
+
+#. module: gift_compassion
+#: code:addons/gift_compassion/models/sponsorship_gift.py:0
+#, python-format
+msgid "You cannot delete the %s.It is already sent to GMC."
+msgstr ""
+
+#. module: gift_compassion
+#: model_terms:ir.ui.view,arch_db:gift_compassion.view_gift_collect
+msgid "_Add to gift"
+msgstr ""
diff --git a/gift_compassion/models/gift_threshold_settings.py b/gift_compassion/models/gift_threshold_settings.py
index 04ad65896..432c0e6c3 100644
--- a/gift_compassion/models/gift_threshold_settings.py
+++ b/gift_compassion/models/gift_threshold_settings.py
@@ -7,6 +7,7 @@
# The licence is in the file __manifest__.py
#
##############################################################################
+import math
from odoo import fields, models
@@ -32,3 +33,20 @@ class GiftThresholdSettings(models.Model):
"You already have a threshold rule for this gift",
)
]
+
+ def get_ceiling_converted_amount(self, amount, company, date):
+ raw_amount = self.currency_id._convert(
+ from_amount=amount,
+ to_currency=company.currency_id,
+ company=company,
+ date=date,
+ round=False,
+ )
+ return f"{company.currency_id.name} {int(math.ceil(raw_amount))}"
+
+ def get_gift_frequency_indicator(self):
+ if self.yearly_threshold and self.gift_frequency == 2:
+ return "*"
+ if not self.yearly_threshold and self.gift_frequency == 1:
+ return "**"
+ return ""
diff --git a/intervention_compassion/__manifest__.py b/intervention_compassion/__manifest__.py
index aab03c34a..ec2a3be75 100644
--- a/intervention_compassion/__manifest__.py
+++ b/intervention_compassion/__manifest__.py
@@ -29,7 +29,7 @@
# pylint: disable=C8101
{
"name": "Compassion Interventions",
- "version": "17.0.1.2.0",
+ "version": "17.0.1.2.1",
"category": "Compassion",
"author": "Compassion CH",
"license": "AGPL-3",
diff --git a/intervention_compassion/data/account.analytic.plan.csv b/intervention_compassion/data/account.analytic.plan.csv
index 51d6a5f44..75c4b9d2a 100644
--- a/intervention_compassion/data/account.analytic.plan.csv
+++ b/intervention_compassion/data/account.analytic.plan.csv
@@ -1,20 +1,34 @@
id,name,parent_id:id
-analytic_group_interventions,Interventions,
-analytic_group_church_plant_initiatives,Church Plant Initiative,analytic_group_interventions
-analytic_group_disaster_response,Disaster Response,analytic_group_interventions
-analytic_group_education,Education,analytic_group_interventions
-analytic_group_formal_education,Formal Education,analytic_group_interventions
-analytic_group_hiv_aids,HIV-AIDS,analytic_group_interventions
-analytic_group_hiv_education,Hiv-Education,analytic_group_interventions
-analytic_group_hvc,HVC,analytic_group_interventions
-analytic_group_health,Health,analytic_group_interventions
-analytic_group_income_generation,Income Generation/Household Security,analytic_group_interventions
-analytic_group_infrastructure,Infrastructure,analytic_group_interventions
-analytic_group_learning_materials,Learning Materials,analytic_group_interventions
-analytic_group_medical,Medical,analytic_group_interventions
-analytic_group_non_formal_education,Non-Formal Education,analytic_group_interventions
-analytic_group_parent_education,Parent Education,analytic_group_interventions
-analytic_group_sponsorship_launch,Sponsorship Launch,analytic_group_interventions
-analytic_group_survival,Survival,analytic_group_interventions
-analytic_group_vector_borne_interventions,Vector Borne Interventions,analytic_group_interventions
-analytic_group_wash,Wash,analytic_group_interventions
+analytic_group_fund,fund,
+analytic_group_bible,bible fund,analytic_group_fund
+analytic_group_drf,drf fund,analytic_group_fund
+analytic_group_vocational_fund,vocational fund,analytic_group_fund
+analytic_group_aids,aids fund,analytic_group_fund
+analytic_group_hvc_fund,hvc fund,analytic_group_fund
+analytic_group_medical_fund,medical fund,analytic_group_fund
+analytic_group_child_development,child development fund,analytic_group_fund
+analytic_group_survival_fund,survival fund,analytic_group_fund
+analytic_group_wash_fund,wash fund,analytic_group_fund
+analytic_group_church_plant_initiatives,Church Plant Initiative,analytic_group_bible
+analytic_group_disaster_response,Disaster Response,analytic_group_drf
+analytic_group_education,Education,analytic_group_vocational_fund
+analytic_group_formal_education,Formal Education,analytic_group_vocational_fund
+analytic_group_hiv_aids,HIV-AIDS,analytic_group_aids
+analytic_group_hiv_education,Hiv-Education,analytic_group_aids
+analytic_group_hvc,HVC,analytic_group_hvc_fund
+analytic_group_health,Health,analytic_group_medical_fund
+analytic_group_income_generation,Income Generation/Household Security,analytic_group_vocational_fund
+analytic_group_infrastructure,Infrastructure,analytic_group_drf
+analytic_group_learning_materials,Learning Materials,analytic_group_vocational_fund
+analytic_group_medical,Medical,analytic_group_medical_fund
+analytic_group_non_formal_education,Non-Formal Education,analytic_group_vocational_fund
+analytic_group_parent_education,Parent Education,analytic_group_vocational_fund
+analytic_group_sponsorship_launch,Sponsorship Launch,analytic_group_child_development
+analytic_group_survival,Survival,analytic_group_survival_fund
+analytic_group_vector_borne_interventions,Vector Borne Interventions,analytic_group_medical_fund
+analytic_group_wash,Wash,analytic_group_wash_fund
+analytic_group_unrestricted,unrestricted fund,analytic_group_fund
+analytic_group_christmas,christmas fund,analytic_group_fund
+analytic_group_local,local fund,analytic_group_fund
+analytic_group_ldp,ldp fund,analytic_group_fund
+analytic_group_usp,unsponsored fund,analytic_group_fund
diff --git a/intervention_compassion/views/compassion_intervention_view.xml b/intervention_compassion/views/compassion_intervention_view.xml
index c261155bb..a5c242614 100644
--- a/intervention_compassion/views/compassion_intervention_view.xml
+++ b/intervention_compassion/views/compassion_intervention_view.xml
@@ -107,6 +107,7 @@
General Settings -> Compassion -> Message Center``
- and set the following:
+ - Navigate to
+ ``Settings -> General Settings -> Compassion -> Message Center``
+ and set the following:
- - ``connect_gpid``: Your GPA ID for using GMC message services
- - ``connect_gp_name``: Your GPA name for using GMC message
- services
- - ``connect_api_key``: API key for using GMC message services
- - ``connect_client``: Username for token requests
- - ``connect_secret``: Password for token requests
+ - ``connect_gpid``: Your GPA ID for using GMC message services
+ - ``connect_gp_name``: Your GPA name for using GMC message services
+ - ``connect_api_key``: API key for using GMC message services
+ - ``connect_client``: Username for token requests
+ - ``connect_secret``: Password for token requests
3. **User Setup**:
- - Create a user with the required access rights and set the login
- credentials to match those sent by GMC in tokens.
- - Assign the "GMC Manager" access rights to users responsible for
- managing messages.
- - Go in the FastAPI endpoints and assign the user to the Onramp
- endpoint.
- - Hit the "Sync Registry" button to activate the Onramp service.
+ - Create a user with the required access rights and set the login
+ credentials to match those sent by GMC in tokens.
+ - Assign the "GMC Manager" access rights to users responsible for
+ managing messages.
+ - Go in the FastAPI endpoints and assign the user to the Onramp
+ endpoint.
+ - Hit the "Sync Registry" button to activate the Onramp service.
Usage
=====
@@ -115,21 +114,20 @@ Usage
Once configured, the Compassion Connect module will handle the
following:
-- **Sending Messages**: Automatically queues and sends messages to
- Compassion International. GMC Managers can view and manage the
- outgoing message queue through the ``Message Center`` menu. They can
- also manually trigger the sending of queued messages if needed.
-- **Receiving Messages**: Listens for incoming messages from Compassion
- International and processes them accordingly. GMC Managers can
- monitor incoming messages in real-time through the
- ``Incoming Messages`` view, where they can see the status and details
- of each message.
-- **Message Management**: Provides an interface for viewing and
- managing the message queues. GMC Managers have access to the
- ``Message Queue`` dashboard, which displays both incoming and
- outgoing messages. They can filter, search, and sort messages based
- on various criteria. Additionally, they can retry failed messages,
- delete unnecessary ones, and view detailed logs for troubleshooting.
+- **Sending Messages**: Automatically queues and sends messages to
+ Compassion International. GMC Managers can view and manage the
+ outgoing message queue through the ``Message Center`` menu. They can
+ also manually trigger the sending of queued messages if needed.
+- **Receiving Messages**: Listens for incoming messages from Compassion
+ International and processes them accordingly. GMC Managers can monitor
+ incoming messages in real-time through the ``Incoming Messages`` view,
+ where they can see the status and details of each message.
+- **Message Management**: Provides an interface for viewing and managing
+ the message queues. GMC Managers have access to the ``Message Queue``
+ dashboard, which displays both incoming and outgoing messages. They
+ can filter, search, and sort messages based on various criteria.
+ Additionally, they can retry failed messages, delete unnecessary ones,
+ and view detailed logs for troubleshooting.
This module ensures that your Odoo system stays in sync with Compassion
International, facilitating smooth and efficient communication.
@@ -140,7 +138,7 @@ Changelog
17.0.1.1.0
----------
-- Changed the mechanism of the Onramp route for using FastAPI.
+- Changed the mechanism of the Onramp route for using FastAPI.
Bug Tracker
===========
@@ -163,10 +161,10 @@ Authors
Contributors
------------
-- Emanuel Cino
-- Cyril Sester
-- David Coninckx
-- Nathan Flückiger
+- Emanuel Cino
+- Cyril Sester
+- David Coninckx
+- Nathan Flückiger
Maintainers
-----------
diff --git a/message_center_compassion/static/description/index.html b/message_center_compassion/static/description/index.html
index 51f8d3dde..621ce8f25 100644
--- a/message_center_compassion/static/description/index.html
+++ b/message_center_compassion/static/description/index.html
@@ -436,8 +436,8 @@
Add the following settings in the .conf file of Odoo:
connect_url : URL to the entry point of GMC Onramp
connect_token_server : Base URL of the token server
-connect_token_cert : Comma-separated list of full URLs of
-the public keys of the token server
+connect_token_cert : Comma-separated list of full URLs of the
+public keys of the token server
@@ -447,8 +447,7 @@
Settings -> General Settings -> Compassion -> Message Center
and set the following:
connect_gpid : Your GPA ID for using GMC message services
-connect_gp_name : Your GPA name for using GMC message
-services
+connect_gp_name : Your GPA name for using GMC message services
connect_api_key : API key for using GMC message services
connect_client : Username for token requests
connect_secret : Password for token requests
@@ -478,16 +477,15 @@
outgoing message queue through the Message Center menu. They can
also manually trigger the sending of queued messages if needed.
Receiving Messages : Listens for incoming messages from Compassion
-International and processes them accordingly. GMC Managers can
-monitor incoming messages in real-time through the
-Incoming Messages view, where they can see the status and details
-of each message.
-Message Management : Provides an interface for viewing and
-managing the message queues. GMC Managers have access to the
-Message Queue dashboard, which displays both incoming and
-outgoing messages. They can filter, search, and sort messages based
-on various criteria. Additionally, they can retry failed messages,
-delete unnecessary ones, and view detailed logs for troubleshooting.
+International and processes them accordingly. GMC Managers can monitor
+incoming messages in real-time through the Incoming Messages view,
+where they can see the status and details of each message.
+Message Management : Provides an interface for viewing and managing
+the message queues. GMC Managers have access to the Message Queue
+dashboard, which displays both incoming and outgoing messages. They
+can filter, search, and sort messages based on various criteria.
+Additionally, they can retry failed messages, delete unnecessary ones,
+and view detailed logs for troubleshooting.
This module ensures that your Odoo system stays in sync with Compassion
International, facilitating smooth and efficient communication.
diff --git a/onramp_simulator/README.rst b/onramp_simulator/README.rst
index 28913d6fd..88e829c4c 100644
--- a/onramp_simulator/README.rst
+++ b/onramp_simulator/README.rst
@@ -51,8 +51,8 @@ Authors
Contributors
------------
-- Emanuel Cino
-- Quentin Gigon
+- Emanuel Cino
+- Quentin Gigon
Maintainers
-----------
diff --git a/partner_communication/__manifest__.py b/partner_communication/__manifest__.py
index 15230aede..294290ce4 100644
--- a/partner_communication/__manifest__.py
+++ b/partner_communication/__manifest__.py
@@ -30,7 +30,7 @@
# pylint: disable=C8101
{
"name": "Partner Communication",
- "version": "17.0.1.0.6",
+ "version": "17.0.1.0.7",
"category": "Other",
"author": "Compassion Switzerland",
"license": "AGPL-3",
diff --git a/partner_communication/models/communication_snippet.py b/partner_communication/models/communication_snippet.py
index 119109745..65f96c2e8 100644
--- a/partner_communication/models/communication_snippet.py
+++ b/partner_communication/models/communication_snippet.py
@@ -1,12 +1,34 @@
from odoo import fields, models
+class CommunicationSnippetCategory(models.Model):
+ _name = "communication.snippet.category"
+ _description = "Communication Snippet Category"
+
+ name = fields.Char(string="Category Name", required=True)
+
+ _sql_constraints = [
+ (
+ "name_unique",
+ "unique(name)",
+ "The name of the category must be unique.",
+ )
+ ]
+
+
class CommunicationSnippet(models.Model):
_name = "communication.snippet"
_description = "Communication Snippet"
name = fields.Char(required=True, index=True)
snippet_text = fields.Html(required=True, translate=True)
+ description = fields.Text(string="Description")
+
+ category_id = fields.Many2one(
+ "communication.snippet.category",
+ string="Category",
+ help="Category of the communication snippet",
+ )
def action_edit_snippet(self):
self.ensure_one()
diff --git a/partner_communication/security/ir.model.access.csv b/partner_communication/security/ir.model.access.csv
index ac4dfc9f3..57d0a57bc 100644
--- a/partner_communication/security/ir.model.access.csv
+++ b/partner_communication/security/ir.model.access.csv
@@ -11,3 +11,4 @@ access_partner_communication_generate_wizard,access_partner_communication_genera
access_partner_communication_download_print_wizard,access_partner_communication_download_print_wizard,model_partner_communication_download_print_job_wizard,base.group_user,1,0,1,0
access_partner_communication_default_config,access_partner_communication_default_config,model_partner_communication_default_config,base.group_user,1,1,1,1
access_communication_snippets,Full access on communication_snippets,model_communication_snippet,base.group_user,1,1,1,1
+access_comm_snippet_category_user,communication.snippet.category,model_communication_snippet_category,base.group_user,1,1,1,1
diff --git a/partner_communication/views/communication_snippet_view.xml b/partner_communication/views/communication_snippet_view.xml
index df1276fb9..03cd62d9c 100644
--- a/partner_communication/views/communication_snippet_view.xml
+++ b/partner_communication/views/communication_snippet_view.xml
@@ -8,6 +8,14 @@
+
+
@@ -20,6 +28,8 @@
+
+
+
+ communication.snippet.search
+ communication.snippet
+
+
+
+
+
+
+
+
+
+
Text Snippets
communication.snippet
diff --git a/partner_communication_compassion/README.rst b/partner_communication_compassion/README.rst
index 9ae7198bd..8f880a743 100644
--- a/partner_communication_compassion/README.rst
+++ b/partner_communication_compassion/README.rst
@@ -30,8 +30,8 @@ communication templates.
Features
--------
-- **Communication Generation**: Automatically generate and send
- communications based on predefined templates.
+- **Communication Generation**: Automatically generate and send
+ communications based on predefined templates.
**Table of contents**
diff --git a/partner_communication_compassion/__manifest__.py b/partner_communication_compassion/__manifest__.py
index ff0d5657b..260bbbe6a 100644
--- a/partner_communication_compassion/__manifest__.py
+++ b/partner_communication_compassion/__manifest__.py
@@ -29,7 +29,7 @@
# pylint: disable=C8101
{
"name": "Compassion Partner Communications",
- "version": "17.0.1.0.0",
+ "version": "17.0.1.0.1",
"category": "Other",
"author": "Compassion CH",
"development_status": "Production/Stable",
@@ -49,6 +49,7 @@
"data/depart_communications.xml",
"data/communication_config.xml",
"data/utm_data.xml",
+ "data/ir_cron_data.xml",
"views/communication_job_view.xml",
"views/disaster_alert_view.xml",
"views/partner_compassion_view.xml",
diff --git a/partner_communication_compassion/data/communication_config.xml b/partner_communication_compassion/data/communication_config.xml
index 6ed7e455d..5486d918f 100644
--- a/partner_communication_compassion/data/communication_config.xml
+++ b/partner_communication_compassion/data/communication_config.xml
@@ -256,7 +256,7 @@
- Project Suspension
+ Project Suspension Announcement
True
-
- Project Suspension Extension 1
-
-
- digital
- True
-
-
-
- Project Suspension Extension 2
-
+
+ Project Suspension Follow Up
- digital
- True
-
-
-
- Project Reactivation
-
+
+
+ Project: 2-Month Suspension Announcement/Follow-Up
+
+ code
+ model._cron_suspension_communication()
+
+ 1
+ days
+ -1
+
+
+
+
diff --git a/partner_communication_compassion/data/project_lifecycle_emails.xml b/partner_communication_compassion/data/project_lifecycle_emails.xml
index b534559ca..8468e8c92 100644
--- a/partner_communication_compassion/data/project_lifecycle_emails.xml
+++ b/partner_communication_compassion/data/project_lifecycle_emails.xml
@@ -72,133 +72,19 @@
-
-
- Project Suspension Extension 1
-
- ${object.partner_id and object.partner_id.email and object.partner_id.id or False }
- Extension of the project suspension
- "${object.user_id.company_id.name}" <${object.user_id.company_id.email}>
-
-
- % set child = object.get_objects()
- % set project = child.mapped('project_id')[0]
- % set suspension = project.lifecycle_ids[0]
- % set reasons = suspension.suspension_reason_ids
- % set details = suspension.suspension_detail
-
-
- ${object.partner_id.salutation},
-
-
- We informed you some time ago about the project suspension of the center ${project.fcp_id}.
-
-
- We received the information that the suspension was extended for 3 months
- % if suspension.extension_1_reason_ids:
- because of ${suspension.get_list('extension_1_reason_ids.value')}.
- % else:
- in order to put back the project on a sustainable process.
- % endif
-
-
- You will receive updated information as soon as we get them.
-
-
- Yours sincerely
-
-
-
-
-
- Project Suspension Extension 2
-
- ${object.partner_id and object.partner_id.email and object.partner_id.id or False }
- Extension of the project suspension
- "${object.user_id.company_id.name}" <${object.user_id.company_id.email}>
-
-
- % set child = object.get_objects()
- % set project = child.mapped('project_id')[0]
- % set suspension = project.lifecycle_ids[0]
- % set reasons = suspension.suspension_reason_ids
- % set details = suspension.suspension_detail
-
-
- ${object.partner_id.salutation},
-
-
- We informed you some time ago about the extension of the project suspension ${project.fcp_id}.
-
-
- We received the information that the suspension was again extended for 3 months
- % if suspension.extension_2_reason_ids:
- because of ${suspension.get_list('extension_2_reason_ids.value')}.
- % else:
- in order to put back the project on a sustainable process.
- % endif
- This is the last chance for the center to correct their processes or the project will be closed.
-
-
- You will receive updated information as soon as we get them.
-
-
- Yours sincerely
-
-
-
-
-
- Project Reactivation
+
+ FCP Suspension Follow Up
+
${object.partner_id and object.partner_id.email and object.partner_id.id or False }
- Project Reactivation
+ name="subject"
+ >Additional information about the center
"${object.user_id.company_id.name}" <${object.user_id.company_id.email}>
-
-
- % set child = object.get_objects()
- % set project = child.mapped('project_id')[0]
- % set reactivation = project.lifecycle_ids[0]
- % set details = reactivation.fcp_improvement_desc
-
-
- ${object.partner_id.salutation},
-
-
- A few time ago the project ${project.fcp_id} where ${child.get('your sponsored child')} ${child.get('is')} registered was on suspension.
- We are happy to inform you that the problem is resolved and that the project is again sane and active.
- The project will do regular tuitions and spiritual activites to keep the situation healthy.
-
-
- % if details:
- ${details}
-
-
- % endif
- Yours sincerely
-
-
diff --git a/partner_communication_compassion/migrations/17.0.1.0.1/pre-migration.py b/partner_communication_compassion/migrations/17.0.1.0.1/pre-migration.py
new file mode 100644
index 000000000..6aeaaed3f
--- /dev/null
+++ b/partner_communication_compassion/migrations/17.0.1.0.1/pre-migration.py
@@ -0,0 +1,31 @@
+from odoo import SUPERUSER_ID, api
+
+
+def migrate(cr, version):
+ env = api.Environment(cr, SUPERUSER_ID, {})
+
+ # List of XML IDs to be removed
+ obsolete_xml_ids = [
+ "project_suspension_e1",
+ "project_suspension_e2",
+ "project_reactivation",
+ ]
+
+ for xml_id in obsolete_xml_ids:
+ # ref() finds the database record using the XML ID
+ record = env.ref(
+ f"partner_communication_compassion.{xml_id}", raise_if_not_found=False
+ )
+
+ if record:
+ # 1. Find and delete all communication logs linked to this config
+ logs = env["partner.communication.job"].search(
+ [("config_id", "=", record.id)]
+ )
+ if logs:
+ logs.write(
+ {"config_id": 1}
+ ) # Set to Default config (ID=1) to avoid orphaned logs
+
+ # 2. Delete the config record itself
+ record.unlink()
diff --git a/partner_communication_compassion/models/compassion_project.py b/partner_communication_compassion/models/compassion_project.py
index 6a99a102a..8b261d366 100644
--- a/partner_communication_compassion/models/compassion_project.py
+++ b/partner_communication_compassion/models/compassion_project.py
@@ -1,4 +1,6 @@
-from odoo import fields, models
+from dateutil.relativedelta import relativedelta
+
+from odoo import api, fields, models
class CompassionProject(models.Model):
@@ -10,3 +12,79 @@ class CompassionProject(models.Model):
"communication.snippet",
string="Caption to use for pictures, or prayer shared by fcp, or else",
)
+
+ last_suspension_communication_date = fields.Date(
+ string="Date of the last suspension communication",
+ help="Records the date of the last suspension communication.",
+ )
+
+ def reactivate_project(self):
+ """
+ Inherit reactivation to trigger 'FCP Suspension Follow Up'
+ """
+ # 1. Execute original logic
+ res = super().reactivate_project()
+
+ # 2. Trigger the communication
+ self._trigger_communication("project_suspension_follow_up")
+
+ return res
+
+ def _trigger_communication(self, config_xml_id):
+ """
+ Finds all active sponsors for children in the project and
+ sends communication to the sponsor.
+ """
+ # 1. Get the communication configuration record
+ comm_config = self.env.ref(f"partner_communication_compassion.{config_xml_id}")
+
+ for project in self:
+ # 2. Find all active sponsorships for children in this project
+ contracts = self.env["recurring.contract"].search(
+ [("child_id.project_id", "=", project.id), ("state", "=", "active")]
+ )
+
+ # 3. Send communication to each sponsor
+ for contract in contracts:
+ contract.with_context(
+ default_object_ids=contract.child_id.id
+ ).send_communication(communication=comm_config, correspondent=True)
+
+ # 4. Update the last suspension communication date
+ project.last_suspension_communication_date = fields.Date.today()
+
+ @api.model
+ def _cron_suspension_communication(self):
+ """
+ Finds all projects suspended for more than 2 months without follow-up
+ communication and triggers the appropriate communication.
+ """
+ today = fields.Date.today()
+ two_months_ago = today - relativedelta(months=2)
+
+ # Find projects suspended for > 2 months
+ # AND (no follow-up yet OR last follow-up was > 2 months ago)
+ projects = self.search(
+ [
+ ("suspension", "in", ["suspended", "fund-suspended"]),
+ ("last_lifecycle_id.type", "=", "Suspension"),
+ ("last_lifecycle_id.date", "<=", two_months_ago),
+ "|",
+ ("last_suspension_communication_date", "=", False),
+ ("last_suspension_communication_date", "<=", two_months_ago),
+ ]
+ )
+
+ for project in projects:
+ last_lifecycle_date = project.last_lifecycle_id.date
+
+ if (
+ not project.last_suspension_communication_date
+ or project.last_suspension_communication_date < last_lifecycle_date
+ ):
+ # 1. First time for this lifecycle event: Announcement
+ project._trigger_communication("project_suspension")
+
+ else:
+ # 2. We already announced it, but 2 months have passed: Follow-up
+ project._trigger_communication("project_suspension_follow_up")
diff --git a/partner_communication_reminder/README.rst b/partner_communication_reminder/README.rst
index 0e75b64e6..71a8ba8ca 100644
--- a/partner_communication_reminder/README.rst
+++ b/partner_communication_reminder/README.rst
@@ -56,10 +56,10 @@ Authors
Contributors
------------
-- \`Compassion CH \`:
+- \`Compassion CH \`:
- - Simon Gonzalez
- - Emanuel Cino
+ - Simon Gonzalez
+ - Emanuel Cino
Maintainers
-----------
diff --git a/partner_communication_revision/README.rst b/partner_communication_revision/README.rst
index ef08f52c3..24d330821 100644
--- a/partner_communication_revision/README.rst
+++ b/partner_communication_revision/README.rst
@@ -35,7 +35,7 @@ Installation
You need to add regex library
-- sudo pip install regex
+- sudo pip install regex
Usage
=====
@@ -45,9 +45,9 @@ Go into communication rules (config) in order to edit translations.
Known issues / Roadmap
======================
-- Make javascript widgets to ease the editing process
-- Make possible to use global keywords across the templates
-- Improve usability
+- Make javascript widgets to ease the editing process
+- Make possible to use global keywords across the templates
+- Improve usability
Bug Tracker
===========
@@ -70,7 +70,7 @@ Authors
Contributors
------------
-- Emanuel Cino
+- Emanuel Cino
Maintainers
-----------
diff --git a/partner_salutation/README.rst b/partner_salutation/README.rst
index 68667565c..6dc5d06e3 100644
--- a/partner_salutation/README.rst
+++ b/partner_salutation/README.rst
@@ -59,7 +59,7 @@ Authors
Contributors
------------
-- Emanuel Cino
+- Emanuel Cino
Maintainers
-----------
diff --git a/partner_search_fuzzy/README.rst b/partner_search_fuzzy/README.rst
index df384026b..b4f71f676 100644
--- a/partner_search_fuzzy/README.rst
+++ b/partner_search_fuzzy/README.rst
@@ -66,7 +66,7 @@ Authors
Contributors
------------
-- Emanuel Cino
+- Emanuel Cino
Maintainers
-----------
diff --git a/sbc_compassion/README.rst b/sbc_compassion/README.rst
index 813f196d4..f160fac02 100644
--- a/sbc_compassion/README.rst
+++ b/sbc_compassion/README.rst
@@ -35,15 +35,15 @@ Installation
To install this module, you need to install dependencies:
-- requires the following libraries (names from apt-get):
+- requires the following libraries (names from apt-get):
- - libzbar-dev
+ - libzbar-dev
-- requires tesseract for extracting text from PDF files (for S2B
- letters scan):
+- requires tesseract for extracting text from PDF files (for S2B letters
+ scan):
- - tesseract-ocr
- - tesseract-ocr-language_code (for any desired language)
+ - tesseract-ocr
+ - tesseract-ocr-language_code (for any desired language)
Usage
=====
@@ -56,14 +56,14 @@ Changelog
17.0.1.1.0 (2024-10-01)
-----------------------
-- Replace FPDF with a QWeb report for the Sponsorship Letter.
+- Replace FPDF with a QWeb report for the Sponsorship Letter.
10.0.1.2.1 (2018-11-02)
-----------------------
-- Change how we send Original Language to GMC. From now on, we map it
- to the translated language in Odoo, in order to avoid unnecessary
- translation at the National Office.
+- Change how we send Original Language to GMC. From now on, we map it to
+ the translated language in Odoo, in order to avoid unnecessary
+ translation at the National Office.
Bug Tracker
===========
@@ -86,10 +86,10 @@ Authors
Contributors
------------
-- Emanuel Cino
-- Emmanuel Mathier
-- Loic Hausammann
-- Emmanuel Girardin
+- Emanuel Cino
+- Emmanuel Mathier
+- Loic Hausammann
+- Emmanuel Girardin
Maintainers
-----------
diff --git a/sbc_compassion/__manifest__.py b/sbc_compassion/__manifest__.py
index 93edf97df..a473a2f98 100644
--- a/sbc_compassion/__manifest__.py
+++ b/sbc_compassion/__manifest__.py
@@ -37,6 +37,7 @@
"website": "https://github.com/CompassionCH/compassion-modules",
"depends": [
"sponsorship_compassion",
+ "advanced_translation",
],
"external_dependencies": {
"python": [
diff --git a/sbc_compassion/models/correspondence.py b/sbc_compassion/models/correspondence.py
index d1adc9581..3b4cb08be 100644
--- a/sbc_compassion/models/correspondence.py
+++ b/sbc_compassion/models/correspondence.py
@@ -144,7 +144,7 @@ class Correspondence(models.Model):
# 2. Attachments and scans
##########################
sponsor_letter_scan = fields.Binary()
- file_name = fields.Char()
+ file_name = fields.Char(compute="_compute_file_name", store=True)
letter_format = fields.Selection(
[("pdf", "pdf"), ("zip", "zip")],
compute="_compute_letter_format",
@@ -470,6 +470,8 @@ def _check_translation_language(self):
lang_detector = self.env["langdetect"]
for letter in self.with_context(skip_lang_detect=True):
+ # Determine which text is analyzed
+ is_translation = bool(letter.translated_text or letter.english_text)
letter_text = (
letter.translated_text or letter.english_text or letter.original_text
)
@@ -492,8 +494,16 @@ def _check_translation_language(self):
continue
detected_lang = lang_detector.detect_language(clean_text)
- if detected_lang and detected_lang != letter.translation_language_id:
- letter.translation_language_id = detected_lang
+ if detected_lang:
+ # update the target langauge only if analyzing translated text
+ if is_translation and detected_lang != letter.translation_language_id:
+ letter.translation_language_id = detected_lang
+
+ # update the source language if analyzing original text
+ elif (
+ not is_translation and detected_lang != letter.original_language_id
+ ):
+ letter.original_language_id = detected_lang
@api.depends("uuid")
def _compute_read_url(self):
@@ -610,7 +620,6 @@ def create(self, vals_list):
# Make sure the translation language is set correctly.
letters._check_translation_language()
for letter in letters:
- letter.file_name = letter._get_file_name()
attachment = self.env["ir.attachment"].search(
[
("res_model", "=", "correspondence"),
@@ -694,8 +703,8 @@ def create_commkit(self):
datetime.date.today()
)
messages = self.env["gmc.message"]
+ action_id = self.env.ref("sbc_compassion.create_letter").id
for letter in self:
- action_id = self.env.ref("sbc_compassion.create_letter").id
message_vals = {
"action_id": action_id,
"object_id": letter.id,
@@ -843,21 +852,25 @@ def reactivate_letters(self, message="Project reactivated"):
gmc_messages.write({"state": "new"})
gmc_messages.process_messages()
- def _get_file_name(self):
- self.ensure_one()
- name = ""
- if self.communication_type_ids.ids:
- name = (
- self.communication_type_ids[0]
- .with_context(lang=self.partner_id.lang)
- .name
- + " "
- )
- name += self.child_id.local_id
- if self.kit_identifier:
- name += " " + self.kit_identifier
- name += "." + (self.letter_format or "pdf")
- return name
+ @api.depends(
+ "communication_type_ids", "child_id", "kit_identifier", "letter_format"
+ )
+ def _compute_file_name(self):
+ for letter in self:
+ name = ""
+ if letter.communication_type_ids.ids:
+ name = (
+ letter.communication_type_ids[0]
+ .with_context(lang=letter.partner_id.lang)
+ .name
+ + " "
+ )
+ if letter.child_id:
+ name += letter.child_id.local_id
+ if letter.kit_identifier:
+ name += " " + letter.kit_identifier
+ name += "." + (letter.letter_format or "pdf")
+ letter.file_name = name
def data_to_json(self, mapping_name=None):
json_data = super().data_to_json(mapping_name)
diff --git a/sbc_compassion/models/correspondence_s2b_generator.py b/sbc_compassion/models/correspondence_s2b_generator.py
index 99b197a1c..7898d7402 100644
--- a/sbc_compassion/models/correspondence_s2b_generator.py
+++ b/sbc_compassion/models/correspondence_s2b_generator.py
@@ -82,6 +82,24 @@ def _compute_preview(self):
for generator in self:
generator.preview = generator.letter_ids[:1].preview
+ @api.model_create_multi
+ def create(self, vals_list):
+ """
+ Overwrites the default create method and sets the language
+ if not already provided
+ """
+ for vals in vals_list:
+ if vals.get("body") and not vals.get("language_id"):
+ detected_language = (
+ self.env["langdetect"].sudo().detect_language(vals["body"])
+ )
+ if detected_language:
+ vals["language_id"] = detected_language.id
+ return super().create(vals_list)
+
+ ##########################################################################
+ # VIEW CALLBACKS #
+ ##########################################################################
@api.onchange("selection_domain")
def onchange_domain(self):
if self.selection_domain:
@@ -151,6 +169,8 @@ def generate_letters_job(self, preview_mode=False):
"original_language_id": self.language_id.id,
"original_text": text,
"state": "Draft" if preview_mode else "Received in the system",
+ "email_read": fields.Datetime.now(),
+ "generator_id": self.id,
}
if self.image_ids:
vals["original_attachment_ids"] = [Command.clear()] + [
diff --git a/sbc_compassion/static/description/index.html b/sbc_compassion/static/description/index.html
index a639bee35..2e8b13b7e 100644
--- a/sbc_compassion/static/description/index.html
+++ b/sbc_compassion/static/description/index.html
@@ -399,8 +399,8 @@
libzbar-dev
-requires tesseract for extracting text from PDF files (for S2B
-letters scan):
+requires tesseract for extracting text from PDF files (for S2B letters
+scan):
tesseract-ocr
tesseract-ocr-language_code (for any desired language)
@@ -421,8 +421,8 @@
-Change how we send Original Language to GMC. From now on, we map it
-to the translated language in Odoo, in order to avoid unnecessary
+ Change how we send Original Language to GMC. From now on, we map it to
+the translated language in Odoo, in order to avoid unnecessary
translation at the National Office.
diff --git a/sponsorship_compassion/README.rst b/sponsorship_compassion/README.rst
index c293044b7..13f66fdb6 100644
--- a/sponsorship_compassion/README.rst
+++ b/sponsorship_compassion/README.rst
@@ -41,20 +41,20 @@ a projects will be cancelled.
If you want to change sponsorship with a fund donation, you can add the
following key-value in the System Parameters:
-- sponsorship_compassion.suspend_product_id : product_id
+- sponsorship_compassion.suspend_product_id : product_id
Usage
=====
To use this module, you need to:
-- go to Sponsorship -> Sponsorships
+- go to Sponsorship -> Sponsorships
Known issues / Roadmap
======================
-- Tests for R4 : test the hold states when sending commitments to GMC
-- Test end sponsorship wizard
+- Tests for R4 : test the hold states when sending commitments to GMC
+- Test end sponsorship wizard
Bug Tracker
===========
@@ -77,9 +77,9 @@ Authors
Contributors
------------
-- Cyril Sester
-- Emanuel Cino
-- Quentin Gigon
+- Cyril Sester
+- Emanuel Cino
+- Quentin Gigon
Maintainers
-----------
diff --git a/sponsorship_compassion/models/contracts.py b/sponsorship_compassion/models/contracts.py
index a9473f54e..5af12df78 100644
--- a/sponsorship_compassion/models/contracts.py
+++ b/sponsorship_compassion/models/contracts.py
@@ -449,6 +449,15 @@ def _compute_can_make_gift(self):
@api.depends_context("allow_during_suspension")
def _compute_can_write_letter(self):
+ """
+ Computes whether a letter can be written for the current sponsorship.
+
+ A letter is permitted if:
+ 1. The project has not suspended S2B letters
+ (or the context bypasses the suspension)
+ 2. THe contract is in an active/pending state, OR it is 'terminated' but still
+ within the configured allowed time (default 90 days) since its end date.
+ """
days_allowed = (
self.env["ir.config_parameter"]
.sudo()
@@ -456,14 +465,18 @@ def _compute_can_write_letter(self):
)
now = fields.Datetime.now()
for sponsorship in self:
+ # Project/center has suspended letters
hold_letters = (
sponsorship.project_id.hold_s2b_letters
and not self.env.context.get("allow_during_suspension")
)
+ # Letter not 'terminated', 'canceled', or a 'draft'. AND not on hold
is_allowed = (
sponsorship.state not in ["terminated", "cancelled", "draft"]
and not hold_letters
)
+ # If 'terminated' but not on hold, check if within allowed
+ # time since end date
if sponsorship.state == "terminated" and not hold_letters:
is_allowed = (now - sponsorship.end_date).days <= int(days_allowed)
sponsorship.can_write_letter = is_allowed
@@ -775,7 +788,6 @@ def contract_active(self):
not_active = self.filtered(lambda c: not c.is_active)
if not_active:
not_active.write({"activation_date": fields.Datetime.now()})
- self.write({"state": "active"})
last_line_id = self.search(
[("sponsorship_line_id", "!=", False)],
order="sponsorship_line_id desc",
@@ -789,6 +801,13 @@ def contract_active(self):
last_line_id += 1
contract.sponsorship_line_id = last_line_id
+ # Flush env so db reflects payment mode
+ self.mapped("partner_id").flush()
+ self.flush()
+
+ # trigger auto comm job after payment info is written to the db
+ self.write({"state": "active"})
+
# Cancel the old invoices if a contract is activated
delay = datetime.now() + relativedelta(seconds=30)
self.with_delay(
diff --git a/sponsorship_compassion/models/sponsorship_gift_type.py b/sponsorship_compassion/models/sponsorship_gift_type.py
index c90a5a921..09bce2437 100644
--- a/sponsorship_compassion/models/sponsorship_gift_type.py
+++ b/sponsorship_compassion/models/sponsorship_gift_type.py
@@ -12,9 +12,9 @@ class SponsorshipGiftType(models.Model):
)
gmc_gift_type = fields.Selection(
[
- ("Project Gift", "Project"),
- ("Family Gift", "Family"),
- ("Beneficiary Gift", "Participant"),
+ ("Project Gift", "Project Gift"),
+ ("Family Gift", "Family Gift"),
+ ("Beneficiary Gift", "Participant Gift"),
]
)
gmc_attribution = fields.Selection(
diff --git a/sponsorship_sub_management/README.rst b/sponsorship_sub_management/README.rst
index 20ed896a7..39cc200d3 100644
--- a/sponsorship_sub_management/README.rst
+++ b/sponsorship_sub_management/README.rst
@@ -66,19 +66,19 @@ Usage
To use this module, you need to:
-- Go to Sponsorship -> Track sponsorships
+- Go to Sponsorship -> Track sponsorships
Known issues / Roadmap
======================
To add in the tests:
-- Departure -> Departure -> Sub reject
-- Departure -> Exchange of child -> Sub accept
+- Departure -> Departure -> Sub reject
+- Departure -> Exchange of child -> Sub accept
Further functionality:
-- Make the SDS notifications work
+- Make the SDS notifications work
Bug Tracker
===========
@@ -101,9 +101,9 @@ Authors
Contributors
------------
-- David Coninckx
-- Emanuel Cino
-- Noé Berdoz
+- David Coninckx
+- Emanuel Cino
+- Noé Berdoz
Maintainers
-----------
diff --git a/thankyou_letters/README.rst b/thankyou_letters/README.rst
index 71fc5fac4..28bc162ea 100644
--- a/thankyou_letters/README.rst
+++ b/thankyou_letters/README.rst
@@ -34,15 +34,15 @@ Configuration
By default, three donation configurations are set:
-- Small gifts (< 100CHF)
-- Standard gifts (100 - 999 CHF)
-- Large gifts (1000 CHF)
+- Small gifts (< 100CHF)
+- Standard gifts (100 - 999 CHF)
+- Large gifts (1000 CHF)
You can customize the limits by setting the three system parameters:
-- thankyou_letters.small
-- thankyou_letters.standard
-- thankyou_letters.large
+- thankyou_letters.small
+- thankyou_letters.standard
+- thankyou_letters.large
One example template comes installed and is the same for the 3 donation
types. You can however create other ones and attach them in the
@@ -53,7 +53,7 @@ In order to get a summary of the donations, activate the CRON sending it
and add a system parameter to set a User ID receiving the summary by
e-mail:
-- thankyou_letters.summary_user_id (1 for instance = admin)
+- thankyou_letters.summary_user_id (1 for instance = admin)
You can as well edit the report layout for printing by changing the
report thankyou_letters.donation
@@ -69,11 +69,11 @@ Usage
Known issues / Roadmap
======================
-- Test invoices amount generates the correct thank you configuration
-- Test invoices unreconcile removes from the thank you letter
-- Test new invoices reconcile merge in the same letter and updates the
- configuration
-- Test success sentences are set in texts
+- Test invoices amount generates the correct thank you configuration
+- Test invoices unreconcile removes from the thank you letter
+- Test new invoices reconcile merge in the same letter and updates the
+ configuration
+- Test success sentences are set in texts
Bug Tracker
===========
@@ -96,7 +96,7 @@ Authors
Contributors
------------
-- Emanuel Cino
+- Emanuel Cino
Maintainers
-----------
diff --git a/thankyou_letters/views/generate_communication_wizard_view.xml b/thankyou_letters/views/generate_communication_wizard_view.xml
index 3a2ebf893..439ca4692 100644
--- a/thankyou_letters/views/generate_communication_wizard_view.xml
+++ b/thankyou_letters/views/generate_communication_wizard_view.xml
@@ -25,10 +25,13 @@
-
+
Generate Communications
partner.communication.generate.wizard
-
+
form
new
{