\>
diff --git a/attachment_delete_restrict/readme/DESCRIPTION.md b/attachment_delete_restrict/readme/DESCRIPTION.md
new file mode 100644
index 00000000000..4db32eec628
--- /dev/null
+++ b/attachment_delete_restrict/readme/DESCRIPTION.md
@@ -0,0 +1,2 @@
+This module provides the ability to restrict the deletion of the
+attachments at different levels.
diff --git a/attachment_delete_restrict/static/description/icon.png b/attachment_delete_restrict/static/description/icon.png
new file mode 100644
index 00000000000..3a0328b516c
Binary files /dev/null and b/attachment_delete_restrict/static/description/icon.png differ
diff --git a/attachment_delete_restrict/static/description/index.html b/attachment_delete_restrict/static/description/index.html
new file mode 100644
index 00000000000..367733f568b
--- /dev/null
+++ b/attachment_delete_restrict/static/description/index.html
@@ -0,0 +1,477 @@
+
+
+
+
+
+README.rst
+
+
+
+
+
+
+
+
+
+
+
Restrict Deletion of Attachments
+
+

+
This module provides the ability to restrict the deletion of the
+attachments at different levels.
+
Table of contents
+
+
+
+
+
+
+- Go to Settings > General Settings> Permission section.
+- Choose the level of Restrict Delete Attachment for all models by
+default or for models with “default” restriction level.
+
+
+
+
+
+- Default : Use global configuration
+- Owner : Owner and admins only
+- Custom : Certain groups or users per related model.
+- Owner + Custom : Owner, admins and Certain groups or users per related
+model.
+- None : all users can delete them
+
+
Only Custom and Owner + Custom need specific configuration on models.
+
+
+
+
+- Go to Settings > Technical > Database Structure > Models.
+- Open a model for which attachment deletion should be restricted.
+- Select ‘Restrict Attachment Deletion’, and assign ‘Attachment
+Deletion Groups’ and/or ‘Attachment Deletion Users’ as necessary (if
+no assignment, no one can delete the attachments of this model).
+
+
For assigning ‘Attachment Deletion Groups’/’Attachment Deletion Users’
+to the model, you can alternatively add the model in the ‘Attachment
+Deletion Models’ tab in the respective group/user form.
+
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
Current maintainers:
+

+
This module is part of the OCA/server-tools project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
+
diff --git a/attachment_delete_restrict/tests/__init__.py b/attachment_delete_restrict/tests/__init__.py
new file mode 100644
index 00000000000..c6f40a3f2fb
--- /dev/null
+++ b/attachment_delete_restrict/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_attachment_delete_restrict
diff --git a/attachment_delete_restrict/tests/test_attachment_delete_restrict.py b/attachment_delete_restrict/tests/test_attachment_delete_restrict.py
new file mode 100644
index 00000000000..d4944b0a368
--- /dev/null
+++ b/attachment_delete_restrict/tests/test_attachment_delete_restrict.py
@@ -0,0 +1,178 @@
+# Copyright 2021 Quartile Limited
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import Command
+from odoo.exceptions import ValidationError
+from odoo.tests import TransactionCase, tagged
+
+
+class AbstractCase:
+ def test_restrict_none(self):
+ self._set_restrict_mode("none")
+ self.attachment.with_user(self.user).unlink()
+
+ def test_restrict_custom_user(self):
+ self._set_restrict_mode("custom")
+ with self.assertRaises(ValidationError):
+ self.attachment.with_user(self.user).unlink()
+ self._allow_user()
+ self.attachment.with_user(self.user).unlink()
+
+ def test_restrict_custom_user_with_sudo(self):
+ self._set_restrict_mode("custom")
+ self.attachment.with_user(self.user).sudo().unlink()
+
+ def test_restrict_custom_group(self):
+ self._set_restrict_mode("custom")
+ with self.assertRaises(ValidationError):
+ self.attachment.with_user(self.user).unlink()
+ self._allow_group()
+ self.attachment.with_user(self.user).unlink()
+
+ def test_restrict_owner(self):
+ self._set_restrict_mode("owner")
+ with self.assertRaises(ValidationError):
+ self.attachment.with_user(self.user).unlink()
+ self.attachment.with_user(self.user_owner).unlink()
+
+ def test_restrict_owner_admin(self):
+ self._set_restrict_mode("owner")
+ self.attachment.with_user(self.user_admin).unlink()
+
+ def test_restrict_owner_and_custom_user_forbidden(self):
+ self._set_restrict_mode("owner_custom")
+ with self.assertRaises(ValidationError):
+ self.attachment.with_user(self.user).unlink()
+
+ def test_restrict_owner_and_custom_user_owner(self):
+ self._set_restrict_mode("owner_custom")
+ self.attachment.with_user(self.user_owner).unlink()
+
+ def test_restrict_owner_and_custom_user_admin(self):
+ self._set_restrict_mode("owner_custom")
+ self.attachment.with_user(self.user_admin).unlink()
+
+ def test_restrict_owner_and_custom_user(self):
+ self._set_restrict_mode("owner_custom")
+ with self.assertRaises(ValidationError):
+ self.attachment.with_user(self.user).unlink()
+ self._allow_user()
+ self.attachment.with_user(self.user).unlink()
+
+ def test_restrict_owner_and_custom_user_group(self):
+ self._set_restrict_mode("owner_custom")
+ with self.assertRaises(ValidationError):
+ self.attachment.with_user(self.user).unlink()
+ self._allow_group()
+ self.attachment.with_user(self.user).unlink()
+
+
+@tagged("post_install", "-at_install")
+class TestAttachmentDeleteAbstract(TransactionCase):
+ allow_inherited_tests_method = True
+
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.param = cls.env["ir.config_parameter"]
+ cls.param.set_param(
+ "attachment_delete_restrict.global_restrict_delete_attachment", "none"
+ )
+ cls.partner_model = cls.env["ir.model"].search([("model", "=", "res.partner")])
+ cls.partner_1 = cls.env["res.partner"].create({"name": "partner_1"})
+ cls.group = cls.env.ref("base.group_user")
+ cls.user_owner = cls.env["res.users"].create(
+ {
+ "name": "test owner user",
+ "login": "test-owner@example.com",
+ "groups_id": [
+ Command.set(
+ [
+ cls.env.ref("base.group_user").id,
+ cls.env.ref("base.group_partner_manager").id,
+ ]
+ )
+ ],
+ }
+ )
+ cls.user = cls.env["res.users"].create(
+ {
+ "name": "test user",
+ "login": "test2@example.com",
+ "groups_id": [
+ Command.set(
+ [
+ cls.env.ref("base.group_user").id,
+ cls.env.ref("base.group_partner_manager").id,
+ ]
+ )
+ ],
+ }
+ )
+ cls.user_admin = cls.env["res.users"].create(
+ {
+ "name": "User admin",
+ "login": "admin@example.com",
+ "groups_id": [
+ Command.set(
+ [
+ cls.env.ref("base.group_system").id,
+ cls.env.ref("base.group_user").id,
+ cls.env.ref("base.group_partner_manager").id,
+ ]
+ )
+ ],
+ }
+ )
+ cls.attachment = (
+ cls.env["ir.attachment"]
+ .with_user(cls.user_owner)
+ .create(
+ {
+ "name": "test attachment 2",
+ "type": "binary",
+ "res_model": "res.partner",
+ "res_id": cls.partner_1.id,
+ }
+ )
+ )
+
+ def _set_restrict_mode(self, restrict_mode):
+ raise NotImplementedError
+
+ def _allow_user(self):
+ raise NotImplementedError
+
+ def _allow_group(self):
+ raise NotImplementedError
+
+
+class TestAttachmentDeleteGlobal(TestAttachmentDeleteAbstract, AbstractCase):
+ def _set_restrict_mode(self, restrict_mode):
+ self.param.set_param(
+ "attachment_delete_restrict.global_restrict_delete_attachment",
+ restrict_mode,
+ )
+
+ def _allow_user(self):
+ self.param.set_param(
+ "attachment_delete_restrict.global_delete_attachment_user_ids",
+ self.user.ids,
+ )
+
+ def _allow_group(self):
+ self.param.set_param(
+ "attachment_delete_restrict.global_delete_attachment_group_ids",
+ self.group.ids,
+ )
+
+
+class TestAttachmentDeleteModel(TestAttachmentDeleteAbstract, AbstractCase):
+ def _set_restrict_mode(self, restrict_mode):
+ self.partner_model.write({"restrict_delete_attachment": restrict_mode})
+
+ def _allow_user(self):
+ self.partner_model.write({"delete_attachment_user_ids": [(4, self.user.id)]})
+
+ def _allow_group(self):
+ self.partner_model.write({"delete_attachment_group_ids": [(4, self.group.id)]})
diff --git a/attachment_delete_restrict/views/ir_model_views.xml b/attachment_delete_restrict/views/ir_model_views.xml
new file mode 100644
index 00000000000..c5faef34978
--- /dev/null
+++ b/attachment_delete_restrict/views/ir_model_views.xml
@@ -0,0 +1,29 @@
+
+
+
+ ir.model form
+ ir.model
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/attachment_delete_restrict/views/res_config_setting_views.xml b/attachment_delete_restrict/views/res_config_setting_views.xml
new file mode 100644
index 00000000000..bbcb99bb171
--- /dev/null
+++ b/attachment_delete_restrict/views/res_config_setting_views.xml
@@ -0,0 +1,50 @@
+
+
+
+ res.config.settings.attachment.delete.restrict
+ res.config.settings
+
+
+
+
+
+
+
+
+
Authorized Groups:
+
+
+
+
Authorized Users:
+
+
+
+
+
+
+
+
+
diff --git a/attachment_delete_restrict/views/res_groups_views.xml b/attachment_delete_restrict/views/res_groups_views.xml
new file mode 100644
index 00000000000..3de88487049
--- /dev/null
+++ b/attachment_delete_restrict/views/res_groups_views.xml
@@ -0,0 +1,24 @@
+
+
+
+ res.groups.form
+ res.groups
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/attachment_delete_restrict/views/res_users_views.xml b/attachment_delete_restrict/views/res_users_views.xml
new file mode 100644
index 00000000000..e650756dd3c
--- /dev/null
+++ b/attachment_delete_restrict/views/res_users_views.xml
@@ -0,0 +1,24 @@
+
+
+
+ res.users.form
+ res.users
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/auditlog/README.rst b/auditlog/README.rst
index 37615e91c2d..42312cf1196 100644
--- a/auditlog/README.rst
+++ b/auditlog/README.rst
@@ -11,7 +11,7 @@ Audit Log
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:5d80401c7f72e7744b093dc1e4ee6fc2eec010879861d75c844494808dc0e867
+ !! source digest: sha256:eff893d734bc46c69f3872737aa234d2a2aaf763da5259ac3e977f22d1e4f3a9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/auditlog/__manifest__.py b/auditlog/__manifest__.py
index 990eefc417e..629376ca5bf 100644
--- a/auditlog/__manifest__.py
+++ b/auditlog/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Audit Log",
- "version": "18.0.2.0.5",
+ "version": "18.0.2.0.6",
"author": "ABF OSIELL, Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/server-tools",
diff --git a/auditlog/static/description/index.html b/auditlog/static/description/index.html
index 09bfb84c421..141e62d3af5 100644
--- a/auditlog/static/description/index.html
+++ b/auditlog/static/description/index.html
@@ -372,7 +372,7 @@ Audit Log
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:5d80401c7f72e7744b093dc1e4ee6fc2eec010879861d75c844494808dc0e867
+!! source digest: sha256:eff893d734bc46c69f3872737aa234d2a2aaf763da5259ac3e977f22d1e4f3a9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

This module allows the administrator to log user operations performed on
diff --git a/auditlog/tests/test_auditlog.py b/auditlog/tests/test_auditlog.py
index 58e38b71cfb..e4c3aeaa18b 100644
--- a/auditlog/tests/test_auditlog.py
+++ b/auditlog/tests/test_auditlog.py
@@ -10,6 +10,12 @@
class AuditlogCommon:
+ """Base case with basic log creation tests"""
+
+ # Ensure that test cases that inherit from this class run the methods
+ # that it provides.
+ allow_inherited_tests_method = True
+
def test_LogCreation(self):
"""First test, caching some data."""
self.groups_rule.subscribe()
diff --git a/auto_backup/i18n/sl.po b/auto_backup/i18n/sl.po
index 922adb25ca3..4700542f1dc 100644
--- a/auto_backup/i18n/sl.po
+++ b/auto_backup/i18n/sl.po
@@ -9,15 +9,16 @@ msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-03 10:08+0000\n"
-"PO-Revision-Date: 2018-03-03 10:08+0000\n"
-"Last-Translator: OCA Transbot , 2018\n"
+"PO-Revision-Date: 2026-01-22 18:41+0000\n"
+"Last-Translator: Matjaz Mozetic \n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
-"n%100==4 ? 2 : 3);\n"
+"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
+"n%100==4 ? 2 : 3;\n"
+"X-Generator: Weblate 5.15.2\n"
#. module: auto_backup
#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_conf_form
@@ -147,7 +148,7 @@ msgstr ""
#. module: auto_backup
#: model:ir.model.fields,field_description:auto_backup.field_db_backup__display_name
msgid "Display Name"
-msgstr "Prikazni naziv"
+msgstr "Prikazani naziv"
#. module: auto_backup
#. odoo-python
diff --git a/base_view_inheritance_extension/i18n/tr.po b/base_view_inheritance_extension/i18n/tr.po
index bd0e58da97f..5976f538885 100644
--- a/base_view_inheritance_extension/i18n/tr.po
+++ b/base_view_inheritance_extension/i18n/tr.po
@@ -9,14 +9,15 @@ msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-29 03:39+0000\n"
-"PO-Revision-Date: 2016-12-29 03:39+0000\n"
-"Last-Translator: Ahmet Altinisik , 2016\n"
+"PO-Revision-Date: 2026-01-22 08:50+0000\n"
+"Last-Translator: Betül Öğmen \n"
"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Weblate 5.15.2\n"
#. module: base_view_inheritance_extension
#: model_terms:ir.ui.view,arch_db:base_view_inheritance_extension.view_partner_simple_form
@@ -26,17 +27,17 @@ msgstr "İş ortağı formu"
#. module: base_view_inheritance_extension
#: model_terms:ir.ui.view,arch_db:base_view_inheritance_extension.view_partner_simple_form
msgid "Phone numbers"
-msgstr ""
+msgstr "Telefon numaraları"
#. module: base_view_inheritance_extension
#: model:ir.model.fields,field_description:base_view_inheritance_extension.field_ir_ui_view__smart_search
msgid "Smart Search"
-msgstr ""
+msgstr "Akıllı Arama"
#. module: base_view_inheritance_extension
#: model:ir.model,name:base_view_inheritance_extension.model_ir_ui_view
msgid "View"
-msgstr ""
+msgstr "Görünüm"
#~ msgid "ir.ui.view"
#~ msgstr "ir.ui.view"
diff --git a/database_cleanup/i18n/sl.po b/database_cleanup/i18n/sl.po
index 67ca280462f..f30ca52849e 100644
--- a/database_cleanup/i18n/sl.po
+++ b/database_cleanup/i18n/sl.po
@@ -9,15 +9,16 @@ msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-03 10:08+0000\n"
-"PO-Revision-Date: 2018-03-03 10:08+0000\n"
-"Last-Translator: OCA Transbot , 2018\n"
+"PO-Revision-Date: 2026-01-22 18:41+0000\n"
+"Last-Translator: Matjaz Mozetic \n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
-"n%100==4 ? 2 : 3);\n"
+"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
+"n%100==4 ? 2 : 3;\n"
+"X-Generator: Weblate 5.15.2\n"
#. module: database_cleanup
#: model:ir.model,name:database_cleanup.model_cleanup_create_indexes_line
@@ -164,7 +165,7 @@ msgstr "Čiščenje podatkovne baze"
#: model:ir.model.fields,field_description:database_cleanup.field_cleanup_purge_wizard_module__display_name
#: model:ir.model.fields,field_description:database_cleanup.field_cleanup_purge_wizard_table__display_name
msgid "Display Name"
-msgstr "Prikazni naziv"
+msgstr "Prikazani naziv"
#. module: database_cleanup
#: model:ir.model.fields,field_description:database_cleanup.field_cleanup_create_indexes_line__field_id
diff --git a/fetchmail_attach_from_folder/README.rst b/fetchmail_attach_from_folder/README.rst
index 2b3fd02d886..efecb7f4e02 100644
--- a/fetchmail_attach_from_folder/README.rst
+++ b/fetchmail_attach_from_folder/README.rst
@@ -11,7 +11,7 @@ Email gateway - folders
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:e4c93058a6151bbc67ceadf75cf0fee376e22dbd28e548bc91887592979779de
+ !! source digest: sha256:ab65e43855bfb568a640043322dc68354fa2d392958a160fb7b4b14d4c5ed9c0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/fetchmail_attach_from_folder/__manifest__.py b/fetchmail_attach_from_folder/__manifest__.py
index 5ade469c5fe..0a786bb1cc6 100644
--- a/fetchmail_attach_from_folder/__manifest__.py
+++ b/fetchmail_attach_from_folder/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Email gateway - folders",
"summary": "Attach mails in an IMAP folder to existing objects",
- "version": "18.0.1.0.0",
+ "version": "18.0.1.1.0",
"author": "Therp BV,Odoo Community Association (OCA)",
"maintainers": ["NL66278"],
"website": "https://github.com/OCA/server-tools",
diff --git a/fetchmail_attach_from_folder/i18n/de.po b/fetchmail_attach_from_folder/i18n/de.po
index da0d9713ec3..a33fb1652e5 100644
--- a/fetchmail_attach_from_folder/i18n/de.po
+++ b/fetchmail_attach_from_folder/i18n/de.po
@@ -44,7 +44,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/wizard/attach_mail_manually.py:0
-#, python-format
msgid "Attach emails manually"
msgstr ""
@@ -86,22 +85,6 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_change_ids
-msgid "Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_ids
-msgid "Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__folders_only
msgid ""
@@ -112,7 +95,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Confirm connection first."
msgstr ""
@@ -124,55 +106,28 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not create archive folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
-msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+msgid ""
+"Could not fetch %(message_uid)s in folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not open folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not search folder %(folder)s on server %(server)s"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "Count Changesets"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "Count Pending Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "Count Pending Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__object_id
msgid "Create a New Record"
@@ -332,18 +287,9 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Invalid folder %s!"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder____last_update
-#, fuzzy
-msgid "Last Modified on"
-msgstr "Zuletzt aktualisiert am"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__write_uid
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__write_uid
@@ -364,7 +310,7 @@ msgid "Match Algorithm"
msgstr ""
#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__msgid
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__message_uid
msgid "Message id"
msgstr ""
@@ -463,6 +409,11 @@ msgstr ""
msgid "Server Type"
msgstr ""
+#. module: fetchmail_attach_from_folder
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__x_server_type_env_default
+msgid "Server Type Env Default"
+msgstr ""
+
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__smart_search
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__smart_search
@@ -511,35 +462,11 @@ msgstr ""
msgid "The model to attach emails to"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "The number of pending changes of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "The number of pending changesets of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "The overall number of changesets of this record"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__path
msgid ""
-"The path to your mail folder. Typically would be something like 'INBOX."
-"myfolder'"
+"The path to your mail folder. Typically would be something like "
+"'INBOX.myfolder'"
msgstr ""
#. module: fetchmail_attach_from_folder
@@ -555,7 +482,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Unable to retrieve folders."
msgstr ""
@@ -564,14 +490,6 @@ msgstr ""
msgid "Use 1st match"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__user_can_see_changeset
-msgid "User Can See Changeset"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__wizard_id
msgid "Wizard"
@@ -601,3 +519,7 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:fetchmail_attach_from_folder.view_email_server_form
msgid "to,from"
msgstr ""
+
+#, fuzzy
+#~ msgid "Last Modified on"
+#~ msgstr "Zuletzt aktualisiert am"
diff --git a/fetchmail_attach_from_folder/i18n/es.po b/fetchmail_attach_from_folder/i18n/es.po
index 17aa02352bd..f73cd740e90 100644
--- a/fetchmail_attach_from_folder/i18n/es.po
+++ b/fetchmail_attach_from_folder/i18n/es.po
@@ -44,7 +44,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/wizard/attach_mail_manually.py:0
-#, python-format
msgid "Attach emails manually"
msgstr ""
@@ -86,22 +85,6 @@ msgstr ""
msgid "Cancel"
msgstr "Cancelar"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_change_ids
-msgid "Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_ids
-msgid "Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__folders_only
msgid ""
@@ -112,7 +95,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Confirm connection first."
msgstr ""
@@ -124,55 +106,28 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not create archive folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
-msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+msgid ""
+"Could not fetch %(message_uid)s in folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not open folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not search folder %(folder)s on server %(server)s"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "Count Changesets"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "Count Pending Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "Count Pending Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__object_id
msgid "Create a New Record"
@@ -332,18 +287,9 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Invalid folder %s!"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder____last_update
-#, fuzzy
-msgid "Last Modified on"
-msgstr "Última actualización en"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__write_uid
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__write_uid
@@ -364,7 +310,7 @@ msgid "Match Algorithm"
msgstr ""
#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__msgid
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__message_uid
msgid "Message id"
msgstr ""
@@ -463,6 +409,11 @@ msgstr ""
msgid "Server Type"
msgstr ""
+#. module: fetchmail_attach_from_folder
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__x_server_type_env_default
+msgid "Server Type Env Default"
+msgstr ""
+
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__smart_search
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__smart_search
@@ -511,35 +462,11 @@ msgstr ""
msgid "The model to attach emails to"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "The number of pending changes of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "The number of pending changesets of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "The overall number of changesets of this record"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__path
msgid ""
-"The path to your mail folder. Typically would be something like 'INBOX."
-"myfolder'"
+"The path to your mail folder. Typically would be something like "
+"'INBOX.myfolder'"
msgstr ""
#. module: fetchmail_attach_from_folder
@@ -555,7 +482,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Unable to retrieve folders."
msgstr ""
@@ -564,14 +490,6 @@ msgstr ""
msgid "Use 1st match"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__user_can_see_changeset
-msgid "User Can See Changeset"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__wizard_id
msgid "Wizard"
@@ -601,3 +519,7 @@ msgstr "o"
#: model_terms:ir.ui.view,arch_db:fetchmail_attach_from_folder.view_email_server_form
msgid "to,from"
msgstr ""
+
+#, fuzzy
+#~ msgid "Last Modified on"
+#~ msgstr "Última actualización en"
diff --git a/fetchmail_attach_from_folder/i18n/fetchmail_attach_from_folder.pot b/fetchmail_attach_from_folder/i18n/fetchmail_attach_from_folder.pot
index b0b1187e5c2..878fbd2c4f8 100644
--- a/fetchmail_attach_from_folder/i18n/fetchmail_attach_from_folder.pot
+++ b/fetchmail_attach_from_folder/i18n/fetchmail_attach_from_folder.pot
@@ -107,7 +107,8 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+msgid ""
+"Could not fetch %(message_uid)s in folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
@@ -304,7 +305,7 @@ msgid "Match Algorithm"
msgstr ""
#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__msgid
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__message_uid
msgid "Message id"
msgstr ""
diff --git a/fetchmail_attach_from_folder/i18n/fr.po b/fetchmail_attach_from_folder/i18n/fr.po
index 667b1a4fc5e..2d926f5f919 100644
--- a/fetchmail_attach_from_folder/i18n/fr.po
+++ b/fetchmail_attach_from_folder/i18n/fr.po
@@ -44,7 +44,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/wizard/attach_mail_manually.py:0
-#, python-format
msgid "Attach emails manually"
msgstr ""
@@ -86,22 +85,6 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_change_ids
-msgid "Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_ids
-msgid "Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__folders_only
msgid ""
@@ -112,7 +95,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Confirm connection first."
msgstr ""
@@ -124,55 +106,28 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not create archive folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
-msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+msgid ""
+"Could not fetch %(message_uid)s in folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not open folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not search folder %(folder)s on server %(server)s"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "Count Changesets"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "Count Pending Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "Count Pending Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__object_id
msgid "Create a New Record"
@@ -332,18 +287,9 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Invalid folder %s!"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder____last_update
-#, fuzzy
-msgid "Last Modified on"
-msgstr "Dernière mise à jour le"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__write_uid
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__write_uid
@@ -364,7 +310,7 @@ msgid "Match Algorithm"
msgstr ""
#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__msgid
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__message_uid
msgid "Message id"
msgstr ""
@@ -463,6 +409,11 @@ msgstr ""
msgid "Server Type"
msgstr ""
+#. module: fetchmail_attach_from_folder
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__x_server_type_env_default
+msgid "Server Type Env Default"
+msgstr ""
+
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__smart_search
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__smart_search
@@ -511,35 +462,11 @@ msgstr ""
msgid "The model to attach emails to"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "The number of pending changes of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "The number of pending changesets of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "The overall number of changesets of this record"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__path
msgid ""
-"The path to your mail folder. Typically would be something like 'INBOX."
-"myfolder'"
+"The path to your mail folder. Typically would be something like "
+"'INBOX.myfolder'"
msgstr ""
#. module: fetchmail_attach_from_folder
@@ -555,7 +482,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Unable to retrieve folders."
msgstr ""
@@ -564,14 +490,6 @@ msgstr ""
msgid "Use 1st match"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__user_can_see_changeset
-msgid "User Can See Changeset"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__wizard_id
msgid "Wizard"
@@ -601,3 +519,7 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:fetchmail_attach_from_folder.view_email_server_form
msgid "to,from"
msgstr ""
+
+#, fuzzy
+#~ msgid "Last Modified on"
+#~ msgstr "Dernière mise à jour le"
diff --git a/fetchmail_attach_from_folder/i18n/fr_CA.po b/fetchmail_attach_from_folder/i18n/fr_CA.po
index bd4e60e9af7..3fea44e85e4 100644
--- a/fetchmail_attach_from_folder/i18n/fr_CA.po
+++ b/fetchmail_attach_from_folder/i18n/fr_CA.po
@@ -44,7 +44,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/wizard/attach_mail_manually.py:0
-#, python-format
msgid "Attach emails manually"
msgstr ""
@@ -86,22 +85,6 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_change_ids
-msgid "Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_ids
-msgid "Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__folders_only
msgid ""
@@ -112,7 +95,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Confirm connection first."
msgstr ""
@@ -124,55 +106,28 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not create archive folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
-msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+msgid ""
+"Could not fetch %(message_uid)s in folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not open folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not search folder %(folder)s on server %(server)s"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "Count Changesets"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "Count Pending Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "Count Pending Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__object_id
msgid "Create a New Record"
@@ -332,17 +287,9 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Invalid folder %s!"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder____last_update
-msgid "Last Modified on"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__write_uid
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__write_uid
@@ -363,7 +310,7 @@ msgid "Match Algorithm"
msgstr ""
#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__msgid
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__message_uid
msgid "Message id"
msgstr ""
@@ -462,6 +409,11 @@ msgstr ""
msgid "Server Type"
msgstr ""
+#. module: fetchmail_attach_from_folder
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__x_server_type_env_default
+msgid "Server Type Env Default"
+msgstr ""
+
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__smart_search
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__smart_search
@@ -510,35 +462,11 @@ msgstr ""
msgid "The model to attach emails to"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "The number of pending changes of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "The number of pending changesets of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "The overall number of changesets of this record"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__path
msgid ""
-"The path to your mail folder. Typically would be something like 'INBOX."
-"myfolder'"
+"The path to your mail folder. Typically would be something like "
+"'INBOX.myfolder'"
msgstr ""
#. module: fetchmail_attach_from_folder
@@ -554,7 +482,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Unable to retrieve folders."
msgstr ""
@@ -563,14 +490,6 @@ msgstr ""
msgid "Use 1st match"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__user_can_see_changeset
-msgid "User Can See Changeset"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__wizard_id
msgid "Wizard"
diff --git a/fetchmail_attach_from_folder/i18n/it.po b/fetchmail_attach_from_folder/i18n/it.po
index 8ef2d80b10c..993eab6e64b 100644
--- a/fetchmail_attach_from_folder/i18n/it.po
+++ b/fetchmail_attach_from_folder/i18n/it.po
@@ -45,7 +45,6 @@ msgstr "Allegati assegnati"
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/wizard/attach_mail_manually.py:0
-#, python-format
msgid "Attach emails manually"
msgstr "Allega e-mail manualmente"
@@ -89,22 +88,6 @@ msgstr ""
msgid "Cancel"
msgstr "Annulla"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_change_ids
-msgid "Changeset Changes"
-msgstr "Modifiche dell'insieme di modifiche"
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_ids
-msgid "Changesets"
-msgstr "Insiemi di modifiche"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__folders_only
msgid ""
@@ -117,7 +100,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Confirm connection first."
msgstr "Prima confermare la connessione."
@@ -129,57 +111,28 @@ msgstr "Confermata"
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not create archive folder %(folder)s on server %(server)s"
msgstr "Impossibile creare la cartella %(folder)s nel server %(server)s"
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
-msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+msgid ""
+"Could not fetch %(message_uid)s in folder %(folder)s on server %(server)s"
msgstr ""
-"Impossibile recuperare %(msgid)s nella cartella %(folder)s nel server "
-"%(server)s"
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not open folder %(folder)s on server %(server)s"
msgstr "Impossibile aprire la cartella %(folder)s nel server %(server)s"
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not search folder %(folder)s on server %(server)s"
msgstr "Impossibile cercare la cartella %(folder)s nel server %(server)s"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "Count Changesets"
-msgstr "Conta insiemi di modifiche"
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "Count Pending Changeset Changes"
-msgstr "Conteggio modifiche dell'insieme di modifiche in attesa"
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "Count Pending Changesets"
-msgstr "Conteggio insieme di modifiche in attesa"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__object_id
msgid "Create a New Record"
@@ -207,7 +160,8 @@ msgstr "Data"
#. module: fetchmail_attach_from_folder
#: model:ir.model,name:fetchmail_attach_from_folder.model_fetchmail_server_folder
msgid "Define folders (IMAP mailboxes) from which to fetch mail."
-msgstr "Definire le cartelle (cassette posta IMAP) dalle quali ricevere e-mail."
+msgstr ""
+"Definire le cartelle (cassette posta IMAP) dalle quali ricevere e-mail."
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__delete_matching
@@ -345,17 +299,9 @@ msgstr "Server di posta in arrivo"
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Invalid folder %s!"
msgstr "Cartella non valida %s!"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder____last_update
-msgid "Last Modified on"
-msgstr "Ultima modifica il"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__write_uid
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__write_uid
@@ -376,7 +322,7 @@ msgid "Match Algorithm"
msgstr "Algoritmo di corrispondenza"
#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__msgid
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__message_uid
msgid "Message id"
msgstr "ID messaggio"
@@ -481,6 +427,11 @@ msgstr "Server"
msgid "Server Type"
msgstr "Tipo server"
+#. module: fetchmail_attach_from_folder
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__x_server_type_env_default
+msgid "Server Type Env Default"
+msgstr ""
+
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__smart_search
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__smart_search
@@ -536,38 +487,14 @@ msgstr ""
msgid "The model to attach emails to"
msgstr "Modello a cui allegare l'email"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "The number of pending changes of this record"
-msgstr "Numero di modifiche di questo record in attesa"
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "The number of pending changesets of this record"
-msgstr "Numero di insiemi di modifiche in attesa di questo record"
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "The overall number of changesets of this record"
-msgstr "Numero totale di insiemi di modifiche di questo record"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__path
msgid ""
-"The path to your mail folder. Typically would be something like 'INBOX."
-"myfolder'"
+"The path to your mail folder. Typically would be something like "
+"'INBOX.myfolder'"
msgstr ""
-"Percorso alla cartella e-mail. Normalmente è qualcosa del tipo 'INBOX."
-"miacartella'"
+"Percorso alla cartella e-mail. Normalmente è qualcosa del tipo "
+"'INBOX.miacartella'"
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__archive_path
@@ -584,7 +511,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Unable to retrieve folders."
msgstr "Impossibile ottenere le cartelle."
@@ -593,14 +519,6 @@ msgstr "Impossibile ottenere le cartelle."
msgid "Use 1st match"
msgstr "Utilizza la prima corrispondenza"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__user_can_see_changeset
-msgid "User Can See Changeset"
-msgstr "L'utente può vedere l'insieme delle modifiche"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__wizard_id
msgid "Wizard"
@@ -630,3 +548,39 @@ msgstr "o"
#: model_terms:ir.ui.view,arch_db:fetchmail_attach_from_folder.view_email_server_form
msgid "to,from"
msgstr "a,da"
+
+#~ msgid "Changeset Changes"
+#~ msgstr "Modifiche dell'insieme di modifiche"
+
+#~ msgid "Changesets"
+#~ msgstr "Insiemi di modifiche"
+
+#, python-format
+#~ msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+#~ msgstr ""
+#~ "Impossibile recuperare %(msgid)s nella cartella %(folder)s nel server "
+#~ "%(server)s"
+
+#~ msgid "Count Changesets"
+#~ msgstr "Conta insiemi di modifiche"
+
+#~ msgid "Count Pending Changeset Changes"
+#~ msgstr "Conteggio modifiche dell'insieme di modifiche in attesa"
+
+#~ msgid "Count Pending Changesets"
+#~ msgstr "Conteggio insieme di modifiche in attesa"
+
+#~ msgid "Last Modified on"
+#~ msgstr "Ultima modifica il"
+
+#~ msgid "The number of pending changes of this record"
+#~ msgstr "Numero di modifiche di questo record in attesa"
+
+#~ msgid "The number of pending changesets of this record"
+#~ msgstr "Numero di insiemi di modifiche in attesa di questo record"
+
+#~ msgid "The overall number of changesets of this record"
+#~ msgstr "Numero totale di insiemi di modifiche di questo record"
+
+#~ msgid "User Can See Changeset"
+#~ msgstr "L'utente può vedere l'insieme delle modifiche"
diff --git a/fetchmail_attach_from_folder/i18n/pt_BR.po b/fetchmail_attach_from_folder/i18n/pt_BR.po
index 334d4326b54..93a846de7e7 100644
--- a/fetchmail_attach_from_folder/i18n/pt_BR.po
+++ b/fetchmail_attach_from_folder/i18n/pt_BR.po
@@ -10,8 +10,8 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-29 11:14+0000\n"
"PO-Revision-Date: 2024-05-29 16:35+0000\n"
-"Last-Translator: Rodrigo Macedo \n"
+"Last-Translator: Rodrigo Macedo "
+"\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-server-"
"tools-8-0/language/pt_BR/)\n"
"Language: pt_BR\n"
@@ -47,7 +47,7 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/wizard/attach_mail_manually.py:0
-#, fuzzy, python-format
+#, fuzzy
msgid "Attach emails manually"
msgstr "Anexar mail manualmente"
@@ -89,22 +89,6 @@ msgstr ""
msgid "Cancel"
msgstr "Cancelar"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_change_ids
-msgid "Changeset Changes"
-msgstr "Mudanças no conjunto de alterações"
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_ids
-msgid "Changesets"
-msgstr "Conjunto de alterações"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__folders_only
msgid ""
@@ -115,7 +99,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Confirm connection first."
msgstr ""
@@ -127,55 +110,28 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not create archive folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
-msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+msgid ""
+"Could not fetch %(message_uid)s in folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not open folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not search folder %(folder)s on server %(server)s"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "Count Changesets"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "Count Pending Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "Count Pending Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__object_id
msgid "Create a New Record"
@@ -339,18 +295,9 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Invalid folder %s!"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder____last_update
-#, fuzzy
-msgid "Last Modified on"
-msgstr "Última atualização em"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__write_uid
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__write_uid
@@ -371,7 +318,7 @@ msgid "Match Algorithm"
msgstr ""
#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__msgid
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__message_uid
msgid "Message id"
msgstr "Identificação da mensagem"
@@ -470,6 +417,11 @@ msgstr "Servidor"
msgid "Server Type"
msgstr ""
+#. module: fetchmail_attach_from_folder
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__x_server_type_env_default
+msgid "Server Type Env Default"
+msgstr ""
+
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__smart_search
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__smart_search
@@ -518,38 +470,14 @@ msgstr ""
msgid "The model to attach emails to"
msgstr "O modelo para anexar emails ao"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "The number of pending changes of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "The number of pending changesets of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "The overall number of changesets of this record"
-msgstr "O número total de conjuntos de alterações deste registro"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__path
msgid ""
-"The path to your mail folder. Typically would be something like 'INBOX."
-"myfolder'"
+"The path to your mail folder. Typically would be something like "
+"'INBOX.myfolder'"
msgstr ""
-"O caminho para sua pasta de mail. Tipicamente seria alguma coisa como 'INBOX."
-"myfolder'"
+"O caminho para sua pasta de mail. Tipicamente seria alguma coisa como "
+"'INBOX.myfolder'"
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__archive_path
@@ -565,7 +493,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Unable to retrieve folders."
msgstr ""
@@ -574,14 +501,6 @@ msgstr ""
msgid "Use 1st match"
msgstr "Use a 1a combinação"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__user_can_see_changeset
-msgid "User Can See Changeset"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__wizard_id
msgid "Wizard"
@@ -612,6 +531,19 @@ msgstr "ou"
msgid "to,from"
msgstr "para,de"
+#~ msgid "Changeset Changes"
+#~ msgstr "Mudanças no conjunto de alterações"
+
+#~ msgid "Changesets"
+#~ msgstr "Conjunto de alterações"
+
+#, fuzzy
+#~ msgid "Last Modified on"
+#~ msgstr "Última atualização em"
+
+#~ msgid "The overall number of changesets of this record"
+#~ msgstr "O número total de conjuntos de alterações deste registro"
+
#~ msgid "Flag nonmatching"
#~ msgstr "Sinal sem correspondente"
diff --git a/fetchmail_attach_from_folder/i18n/ru.po b/fetchmail_attach_from_folder/i18n/ru.po
index 2474b5bd1ef..2c31bbf6716 100644
--- a/fetchmail_attach_from_folder/i18n/ru.po
+++ b/fetchmail_attach_from_folder/i18n/ru.po
@@ -46,7 +46,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/wizard/attach_mail_manually.py:0
-#, python-format
msgid "Attach emails manually"
msgstr ""
@@ -88,22 +87,6 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_change_ids
-msgid "Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_ids
-msgid "Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__folders_only
msgid ""
@@ -114,7 +97,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Confirm connection first."
msgstr ""
@@ -126,55 +108,28 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not create archive folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
-msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+msgid ""
+"Could not fetch %(message_uid)s in folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not open folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not search folder %(folder)s on server %(server)s"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "Count Changesets"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "Count Pending Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "Count Pending Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__object_id
msgid "Create a New Record"
@@ -334,17 +289,9 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Invalid folder %s!"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder____last_update
-msgid "Last Modified on"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__write_uid
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__write_uid
@@ -365,7 +312,7 @@ msgid "Match Algorithm"
msgstr ""
#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__msgid
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__message_uid
msgid "Message id"
msgstr ""
@@ -464,6 +411,11 @@ msgstr ""
msgid "Server Type"
msgstr ""
+#. module: fetchmail_attach_from_folder
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__x_server_type_env_default
+msgid "Server Type Env Default"
+msgstr ""
+
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__smart_search
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__smart_search
@@ -512,35 +464,11 @@ msgstr ""
msgid "The model to attach emails to"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "The number of pending changes of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "The number of pending changesets of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "The overall number of changesets of this record"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__path
msgid ""
-"The path to your mail folder. Typically would be something like 'INBOX."
-"myfolder'"
+"The path to your mail folder. Typically would be something like "
+"'INBOX.myfolder'"
msgstr ""
#. module: fetchmail_attach_from_folder
@@ -556,7 +484,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Unable to retrieve folders."
msgstr ""
@@ -565,14 +492,6 @@ msgstr ""
msgid "Use 1st match"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__user_can_see_changeset
-msgid "User Can See Changeset"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__wizard_id
msgid "Wizard"
diff --git a/fetchmail_attach_from_folder/i18n/sl.po b/fetchmail_attach_from_folder/i18n/sl.po
index 313221cedba..31f78f4263c 100644
--- a/fetchmail_attach_from_folder/i18n/sl.po
+++ b/fetchmail_attach_from_folder/i18n/sl.po
@@ -46,7 +46,7 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/wizard/attach_mail_manually.py:0
-#, fuzzy, python-format
+#, fuzzy
msgid "Attach emails manually"
msgstr "Ročno pripenjanje e-pošte"
@@ -88,22 +88,6 @@ msgstr ""
msgid "Cancel"
msgstr "Preklic"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_change_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_change_ids
-msgid "Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__changeset_ids
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__changeset_ids
-msgid "Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__folders_only
msgid ""
@@ -114,7 +98,6 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Confirm connection first."
msgstr ""
@@ -126,55 +109,28 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not create archive folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
-msgid "Could not fetch %(msgid)s in folder %(folder)s on server %(server)s"
+msgid ""
+"Could not fetch %(message_uid)s in folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not open folder %(folder)s on server %(server)s"
msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Could not search folder %(folder)s on server %(server)s"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "Count Changesets"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "Count Pending Changeset Changes"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "Count Pending Changesets"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__object_id
msgid "Create a New Record"
@@ -340,18 +296,9 @@ msgstr ""
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server_folder.py:0
-#, python-format
msgid "Invalid folder %s!"
msgstr ""
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail____last_update
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder____last_update
-#, fuzzy
-msgid "Last Modified on"
-msgstr "Zadnjič posodobljeno"
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__write_uid
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__write_uid
@@ -372,7 +319,7 @@ msgid "Match Algorithm"
msgstr ""
#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__msgid
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__message_uid
msgid "Message id"
msgstr "ID sporočila"
@@ -471,6 +418,11 @@ msgstr "Strežnik"
msgid "Server Type"
msgstr ""
+#. module: fetchmail_attach_from_folder
+#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__x_server_type_env_default
+msgid "Server Type Env Default"
+msgstr ""
+
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__smart_search
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__smart_search
@@ -526,35 +478,11 @@ msgstr ""
msgid "The model to attach emails to"
msgstr "Model, ki mu pripenjamo e-pošto"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changeset_changes
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changeset_changes
-msgid "The number of pending changes of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_pending_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_pending_changesets
-msgid "The number of pending changesets of this record"
-msgstr ""
-
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server__count_changesets
-#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__count_changesets
-msgid "The overall number of changesets of this record"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,help:fetchmail_attach_from_folder.field_fetchmail_server_folder__path
msgid ""
-"The path to your mail folder. Typically would be something like 'INBOX."
-"myfolder'"
+"The path to your mail folder. Typically would be something like "
+"'INBOX.myfolder'"
msgstr "Pot do e-poštne mape. Običajno je to nekaj kot 'INBOX.mojamapa'"
#. module: fetchmail_attach_from_folder
@@ -570,7 +498,6 @@ msgstr "Stanje, ki se dodeli sporočilom prenesenim iz te mape."
#. module: fetchmail_attach_from_folder
#. odoo-python
#: code:addons/fetchmail_attach_from_folder/models/fetchmail_server.py:0
-#, python-format
msgid "Unable to retrieve folders."
msgstr ""
@@ -579,14 +506,6 @@ msgstr ""
msgid "Use 1st match"
msgstr "Uporabi 1. ujemanje"
-#. module: fetchmail_attach_from_folder
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server__user_can_see_changeset
-#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_server_folder__user_can_see_changeset
-msgid "User Can See Changeset"
-msgstr ""
-
#. module: fetchmail_attach_from_folder
#: model:ir.model.fields,field_description:fetchmail_attach_from_folder.field_fetchmail_attach_mail_manually_mail__wizard_id
msgid "Wizard"
@@ -617,6 +536,10 @@ msgstr "ali"
msgid "to,from"
msgstr "to,from"
+#, fuzzy
+#~ msgid "Last Modified on"
+#~ msgstr "Zadnjič posodobljeno"
+
#~ msgid "Flag nonmatching"
#~ msgstr "Označi ne ujemajoča"
diff --git a/fetchmail_attach_from_folder/models/fetchmail_server.py b/fetchmail_attach_from_folder/models/fetchmail_server.py
index 7df4ba7a3e3..a42f8c35644 100644
--- a/fetchmail_attach_from_folder/models/fetchmail_server.py
+++ b/fetchmail_attach_from_folder/models/fetchmail_server.py
@@ -4,6 +4,7 @@
import re
from odoo import _, api, fields, models
+from odoo.exceptions import UserError
_logger = logging.getLogger(__name__)
@@ -30,7 +31,11 @@ def parse_list_response(line):
if this.state != "done":
this.folders_available = _("Confirm connection first.")
continue
- connection = this.connect()
+ try:
+ connection = this.connect()
+ except UserError:
+ this.folders_available = _("Confirm connection first.")
+ continue
list_result = connection.list()
if list_result[0] != "OK":
this.folders_available = _("Unable to retrieve folders.")
diff --git a/fetchmail_attach_from_folder/models/fetchmail_server_folder.py b/fetchmail_attach_from_folder/models/fetchmail_server_folder.py
index 072a709396a..eb173d757f3 100644
--- a/fetchmail_attach_from_folder/models/fetchmail_server_folder.py
+++ b/fetchmail_attach_from_folder/models/fetchmail_server_folder.py
@@ -180,22 +180,26 @@ def get_criteria(self):
def retrieve_imap_folder(self, connection):
"""Retrieve all mails for one IMAP folder."""
self.ensure_one()
- msgids = self.get_msgids(connection, self.get_criteria())
- for msgid in msgids[0].split():
+ message_uids = self.get_message_uids(connection, self.get_criteria())
+ for message_uid in message_uids[0].split():
# We will accept exceptions for single messages
try:
self.env.cr.execute("savepoint apply_matching")
- self.apply_matching(connection, msgid)
+ self.apply_matching(connection, message_uid)
self.env.cr.execute("release savepoint apply_matching")
except Exception:
self.env.cr.execute("rollback to savepoint apply_matching")
_logger.exception(
- "Failed to fetch mail %(msgid)s from server %(server)s",
- {"msgid": msgid, "server": self.server_id.name},
+ "Failed to fetch mail %(message_uid)s from server %(server)s",
+ {"message_uid": message_uid, "server": self.server_id.name},
)
- def get_msgids(self, connection, criteria):
+ def get_message_uids(self, connection, criteria):
"""Return imap ids of messages to process"""
+ # Note that these message_uids are linked to the folder on
+ # the imap server. They have nothing at all todo with the
+ # message_id field that is part of the message itself, and the
+ # two should not be confused.
self.ensure_one()
server = self.server_id
_logger.info(
@@ -207,7 +211,8 @@ def get_msgids(self, connection, criteria):
_("Could not open folder %(folder)s on server %(server)s")
% {"folder": self.path, "server": server.name}
)
- result, msgids = connection.search(None, criteria)
+ charset = None # Generally we do not need to set a charset.
+ result, message_uids = connection.uid("search", charset, criteria)
if result != "OK":
raise UserError(
_("Could not search folder %(folder)s on server %(server)s")
@@ -217,14 +222,14 @@ def get_msgids(self, connection, criteria):
"finished checking for emails in folder %(folder)s on server %(server)s",
{"folder": self.path, "server": server.name},
)
- return msgids
+ return message_uids
- def apply_matching(self, connection, msgid):
+ def apply_matching(self, connection, message_uid):
"""Return id of object matched (which will be the thread_id)."""
self.ensure_one()
thread_id = None
thread_model = self.env["mail.thread"]
- message_org = self.fetch_msg(connection, msgid)
+ message_org = self.fetch_msg(connection, message_uid)
if self.match_algorithm == "odoo_standard":
thread_id = thread_model.message_process(
self.model_id.model,
@@ -242,9 +247,9 @@ def apply_matching(self, connection, msgid):
matched = True if thread_id else False
if matched:
self.run_server_action(thread_id)
- self.update_msg(connection, msgid, matched=matched)
- if self.archive_path:
- self._archive_msg(connection, msgid)
+ self.update_msg(connection, message_uid, matched=matched)
+ if self.archive_path and not self.delete_matching:
+ self._archive_msg(connection, message_uid)
return thread_id # Can be None if no match found.
def run_server_action(self, matched_object_ids):
@@ -263,34 +268,38 @@ def run_server_action(self, matched_object_ids):
}
).run()
- def fetch_msg(self, connection, msgid):
+ def fetch_msg(self, connection, message_uid):
"""Select a single message from a folder."""
self.ensure_one()
- result, msgdata = connection.fetch(msgid, "(RFC822)")
+ result, msgdata = connection.uid("fetch", message_uid, "(RFC822)")
if result != "OK":
raise UserError(
- _("Could not fetch %(msgid)s in folder %(folder)s on server %(server)s")
- % {"msgid": msgid, "folder": self.path, "server": self.server_id.name}
+ _(
+ "Could not fetch %(message_uid)s in folder %(folder)s"
+ " on server %(server)s",
+ message_uid=message_uid,
+ folder=self.path,
+ server=self.server_id.name,
+ )
)
message_org = msgdata[0][1] # rfc822 message source
return message_org
- def update_msg(self, connection, msgid, matched=True, flagged=False):
+ def update_msg(self, connection, message_uid, matched=True, flagged=False):
"""Update msg in imap folder depending on match and settings."""
if matched:
if self.delete_matching:
- connection.store(msgid, "+FLAGS", "\\DELETED")
+ connection.uid("store", message_uid, "+FLAGS", "\\DELETED")
elif flagged and self.flag_nonmatching:
- connection.store(msgid, "-FLAGS", "\\FLAGGED")
+ connection.uid("store", message_uid, "-FLAGS", "\\FLAGGED")
else:
if self.flag_nonmatching:
- connection.store(msgid, "+FLAGS", "\\FLAGGED")
+ connection.uid("store", message_uid, "+FLAGS", "\\FLAGGED")
- def _archive_msg(self, connection, msgid):
+ def _archive_msg(self, connection, message_uid):
"""Archive message. Folder should already have been created."""
- self.ensure_one()
- connection.copy(msgid, self.archive_path)
- connection.store(msgid, "+FLAGS", "\\Deleted")
+ connection.uid("copy", message_uid, self.archive_path)
+ connection.uid("store", message_uid, "+FLAGS", "\\Deleted")
connection.expunge()
@api.model
@@ -331,10 +340,11 @@ def _find_match(self, message_dict):
matches = matcher.search_matches(self, message_dict)
if not matches:
_logger.info(
- "No match found for message %(subject)s with msgid %(msgid)s",
+ "No match found for message %(subject)s"
+ " with message_uid %(message_uid)s",
{
"subject": message_dict.get("subject", "no subject"),
- "msgid": message_dict.get("message_id", "no msgid"),
+ "message_uid": message_dict.get("message_id", "no message_uid"),
},
)
return None
diff --git a/fetchmail_attach_from_folder/static/description/index.html b/fetchmail_attach_from_folder/static/description/index.html
index 0c8dc0c3110..5066fe23a49 100644
--- a/fetchmail_attach_from_folder/static/description/index.html
+++ b/fetchmail_attach_from_folder/static/description/index.html
@@ -372,7 +372,7 @@ Email gateway - folders
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:e4c93058a6151bbc67ceadf75cf0fee376e22dbd28e548bc91887592979779de
+!! source digest: sha256:ab65e43855bfb568a640043322dc68354fa2d392958a160fb7b4b14d4c5ed9c0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Adds the possibility to attach emails from a certain IMAP folder to
diff --git a/fetchmail_attach_from_folder/tests/test_match_algorithms.py b/fetchmail_attach_from_folder/tests/test_match_algorithms.py
index 394e7fb2ebb..2666a10ecf9 100644
--- a/fetchmail_attach_from_folder/tests/test_match_algorithms.py
+++ b/fetchmail_attach_from_folder/tests/test_match_algorithms.py
@@ -1,5 +1,6 @@
# Copyright - 2015-2018 Therp BV .
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+# pylint: disable=method-required-super
from unittest.mock import MagicMock, patch
from odoo.tests.common import TransactionCase
@@ -39,21 +40,38 @@ class MockConnection:
def select(self, path=None):
return ("OK",)
- def store(self, msgid, msg_item, value):
+ def create(self, path):
+ """Mock creating a folder."""
+ return ("OK",)
+
+ def store(self, message_uid, msg_item, value):
"""Mock store command."""
return "OK"
- def fetch(self, msgid, parts):
+ def copy(self, message_uid, folder_path):
+ """Mock copy command."""
+ return "OK"
+
+ def fetch(self, message_uid, parts):
"""Return RFC822 formatted message."""
return ("OK", MSG_BODY)
def search(self, charset, criteria):
- """Return some msgid's."""
+ """Return some message uid's."""
return ("OK", ["123 456"])
def close(self):
pass
+ def expunge(self):
+ """Mock an IMAP4.expunge action"""
+ return ("OK", None)
+
+ def uid(self, command, *args):
+ """Return from the appropiate mocked method."""
+ method = getattr(self, command)
+ return method(*args)
+
class TestMatchAlgorithms(TransactionCase):
@classmethod
@@ -144,8 +162,8 @@ def test_apply_matching_exact(self):
folder = self.folder
folder.match_algorithm = "email_exact"
connection = MockConnection()
- msgid = "<485a8041-d560-a981-5afc-d31c1f136748@acme.com>"
- folder.apply_matching(connection, msgid)
+ message_uid = "<485a8041-d560-a981-5afc-d31c1f136748@acme.com>"
+ folder.apply_matching(connection, message_uid)
def test_retrieve_imap_folder_domain(self):
folder = self.folder
@@ -153,6 +171,12 @@ def test_retrieve_imap_folder_domain(self):
connection = MockConnection()
folder.retrieve_imap_folder(connection)
+ def test_archive_messages(self):
+ folder = self.folder
+ folder.archive_path = "archived_messages"
+ connection = MockConnection()
+ folder.retrieve_imap_folder(connection)
+
def test_non_action(self):
connection = MockConnection()
self.folder.action_id = False
@@ -227,6 +251,7 @@ def _mock_connection(self):
mock_conn = MagicMock()
mock_conn.select.return_value = ("OK",)
mock_conn.search.return_value = ("OK", [b"1"])
+ mock_conn.uid.return_value = ("OK", [b"1"])
mock_conn.fetch.return_value = (
"OK",
[(b"1 (RFC822 {123}", b"Mocked raw email content")],
@@ -237,7 +262,7 @@ def _mock_connection(self):
)
return mock_conn
- def _mock_fetch_msg(self, connection, msgid):
+ def _mock_fetch_msg(self, connection, message_uid):
"""Return a tuple like the real fetch_msg: (dict, bytes)"""
mail_message = {
"subject": "Test",
@@ -258,7 +283,9 @@ def test_default_get_populates_mail_ids(self, mock_connect):
patch.object(
self.folder.__class__, "fetch_msg", side_effect=self._mock_fetch_msg
),
- patch.object(self.folder.__class__, "get_msgids", return_value=[b"1"]),
+ patch.object(
+ self.folder.__class__, "get_message_uids", return_value=[b"1"]
+ ),
patch.object(self.folder.__class__, "get_criteria", return_value="ALL"),
):
wizard = self.Wizard.with_context(folder_id=self.folder.id).create({})
@@ -273,7 +300,7 @@ def test_attach_mails_only_with_object_id(self, mock_connect):
with patch.object(
self.folder.__class__,
"fetch_msg",
- side_effect=lambda conn, msgid: (
+ side_effect=lambda conn, message_uid: (
{
"subject": "With Object",
"date": "2025-07-23",
@@ -291,7 +318,7 @@ def test_attach_mails_only_with_object_id(self, mock_connect):
0,
0,
{
- "msgid": "1",
+ "message_uid": "1",
"subject": "No Object",
"object_id": False,
},
@@ -300,7 +327,7 @@ def test_attach_mails_only_with_object_id(self, mock_connect):
0,
0,
{
- "msgid": "2",
+ "message_uid": "2",
"subject": "With Object",
"object_id": f"res.partner,{self.partner.id}",
},
@@ -318,7 +345,7 @@ def test_attach_mails_only_with_object_id(self, mock_connect):
def test_prepare_mail_returns_expected_dict(self):
"""Test _prepare_mail returns correct structure."""
folder = self.folder
- msgid = "123"
+ message_uid = "123"
mail_message = {
"subject": "Test",
"date": "2025-07-23",
@@ -326,9 +353,9 @@ def test_prepare_mail_returns_expected_dict(self):
"body": "Body
",
}
- result = self.Wizard._prepare_mail(folder, msgid, mail_message)
+ result = self.Wizard._prepare_mail(folder, message_uid, mail_message)
expected = {
- "msgid": "123",
+ "message_uid": "123",
"subject": "Test",
"date": "2025-07-23",
"body": "Body
",
@@ -342,7 +369,9 @@ def test_wizard_name_is_translated(self):
with (
patch.object(FetchmailServer, "connect", return_value=MagicMock()),
patch.object(self.folder.__class__, "fetch_msg", return_value=({}, b"raw")),
- patch.object(self.folder.__class__, "get_msgids", return_value=[b"1"]),
+ patch.object(
+ self.folder.__class__, "get_message_uids", return_value=[b"1"]
+ ),
patch.object(self.folder.__class__, "get_criteria", return_value="ALL"),
):
wizard = self.Wizard.with_context(folder_id=self.folder.id).create({})
diff --git a/fetchmail_attach_from_folder/wizard/attach_mail_manually.py b/fetchmail_attach_from_folder/wizard/attach_mail_manually.py
index 7eaffadaad5..5d1355a922a 100644
--- a/fetchmail_attach_from_folder/wizard/attach_mail_manually.py
+++ b/fetchmail_attach_from_folder/wizard/attach_mail_manually.py
@@ -20,9 +20,9 @@ class AttachMailManually(models.TransientModel):
)
@api.model
- def _prepare_mail(self, folder, msgid, mail_message):
+ def _prepare_mail(self, folder, message_uid, mail_message):
return {
- "msgid": msgid,
+ "message_uid": message_uid,
"subject": mail_message.get("subject", ""),
"date": mail_message.get("date") or False,
"body": mail_message.get("body", ""),
@@ -43,11 +43,11 @@ def default_get(self, fields_list):
connection = folder.server_id.connect()
connection.select(folder.path)
criteria = "FLAGGED" if folder.flag_nonmatching else folder.get_criteria()
- msgids = folder.get_msgids(connection, criteria)
- for msgid in msgids[0].split():
- mail_message, message_org = folder.fetch_msg(connection, msgid)
+ message_uids = folder.get_message_uids(connection, criteria)
+ for message_uid in message_uids[0].split():
+ mail_message, message_org = folder.fetch_msg(connection, message_uid)
defaults["mail_ids"].append(
- (0, 0, self._prepare_mail(folder, msgid, mail_message))
+ (0, 0, self._prepare_mail(folder, message_uid, mail_message))
)
connection.close()
return defaults
@@ -61,11 +61,11 @@ def attach_mails(self):
for mail in self.mail_ids:
if not mail.object_id:
continue
- msgid = mail.msgid
- mail_message, message_org = folder.fetch_msg(connection, msgid)
+ message_uid = mail.message_uid
+ mail_message, message_org = folder.fetch_msg(connection, message_uid)
folder.attach_mail(mail.object_id, mail_message)
folder.update_msg(
- connection, msgid, matched=True, flagged=folder.flag_nonmatching
+ connection, message_uid, matched=True, flagged=folder.flag_nonmatching
)
connection.close()
return {"type": "ir.actions.act_window_close"}
@@ -97,7 +97,7 @@ class AttachMailManuallyMail(models.TransientModel):
_description = __doc__
wizard_id = fields.Many2one("fetchmail.attach.mail.manually", readonly=True)
- msgid = fields.Char("Message id", readonly=True)
+ message_uid = fields.Char("Message id", readonly=True)
subject = fields.Char(readonly=True)
date = fields.Datetime(readonly=True)
email_from = fields.Char("From", readonly=True)
diff --git a/odoo_test_xmlrunner/README.rst b/odoo_test_xmlrunner/README.rst
new file mode 100644
index 00000000000..9c7913840b0
--- /dev/null
+++ b/odoo_test_xmlrunner/README.rst
@@ -0,0 +1,209 @@
+.. image:: https://odoo-community.org/readme-banner-image
+ :target: https://odoo-community.org/get-involved?utm_source=readme
+ :alt: Odoo Community Association
+
+======================
+Unittest xUnit reports
+======================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:43d1f3fd22d63205a1755865145c5af7d858b24ac2c1683e7dfd8e791535373f
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github
+ :target: https://github.com/OCA/server-tools/tree/18.0/odoo_test_xmlrunner
+ :alt: OCA/server-tools
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-odoo_test_xmlrunner
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=18.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module generate unittest reports using unittest-xml-reporting tool.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Installation
+============
+
+Install python library https://pypi.org/project/unittest-xml-reporting/
+
+The module is automatically installed on the Odoo instance.
+
+Usage
+=====
+
+Run the native Odoo tests
+-------------------------
+
+Run the native Odoo tests. See the `Odoo
+documentation `__
+for more information.
+
+Gitlab CI usage example
+~~~~~~~~~~~~~~~~~~~~~~~
+
+Add the following job to your ``.gitlab-ci.yml`` file:
+
+.. code:: yaml
+
+
+ stages:
+ - test
+
+ variables:
+ POSTGRES_DB: odoo
+ POSTGRES_USER: odoo
+ POSTGRES_PASSWORD: odoo
+ POSTGRES_HOST_AUTH_METHOD: trust
+
+ test:
+ stage: test
+ image:
+ name: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
+ services:
+ - name: postgres:15
+ tags:
+ - gitlab-org-docker
+ script:
+ # install odoo and run tests
+ - oca_install_addons && oca_init_test_database && oca_run_tests
+ # generate coverage report
+ - coverage html -d htmlcov && coverage xml -o coverage.xml
+ # read line-rate from coverage.xml and print it as percentage
+ - total=$(grep -oP ']*line-rate="\K[0-9.]+' coverage.xml | head -n 1 | awk '{print $1 * 100}') && echo "total ${total}%"
+ coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
+ artifacts:
+ paths:
+ - htmlcov/*
+ when: always
+ reports:
+ junit: test_results/*.xml
+ coverage_report:
+ coverage_format: cobertura
+ path: coverage.xml
+
+Github Actions usage example
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add the following job to your ``.github/workflows/main.yml`` file:
+
+.. code:: yaml
+
+ name: tests
+
+ permissions:
+ contents: read
+ checks: write
+ id-token: write
+
+ on:
+ push:
+ branches: ["main"]
+ tags: ["*"]
+ pull_request:
+
+ jobs:
+ test:
+ runs-on: ubuntu-22.04
+ container: ${{ matrix.container }}
+ name: ${{ matrix.name }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - container: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
+ name: test with Odoo
+ services:
+ postgres:
+ image: postgres:12.0
+ env:
+ POSTGRES_USER: odoo
+ POSTGRES_PASSWORD: odoo
+ POSTGRES_DB: odoo
+ ports:
+ - 5432:5432
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ persist-credentials: false
+ - name: Install addons and dependencies
+ run: oca_install_addons
+ - name: Check licenses
+ run: manifestoo -d . check-licenses
+ - name: Check development status
+ run: manifestoo -d . check-dev-status --default-dev-status=Beta
+ - name: Initialize test db
+ run: oca_init_test_database
+ - name: Run tests
+ run: oca_run_tests
+ - uses: codecov/codecov-action@v4
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ - name: Publish Test Report
+ uses: mikepenz/action-junit-report@v4
+ if: success() || failure() # always run even if the previous step fails
+ with:
+ report_paths: 'test_results/*.xml'
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+-------
+
+* Smile
+
+Other credits
+-------------
+
+- `Smile `__:
+
+ - Martin Deconinck martin.deconinck@smile.fr
+
+- `Akretion `__:
+
+ - Florian Mounier florian.mounier@akretion.com
+
+Maintainers
+-----------
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/server-tools `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/odoo_test_xmlrunner/__init__.py b/odoo_test_xmlrunner/__init__.py
new file mode 100644
index 00000000000..382130c7586
--- /dev/null
+++ b/odoo_test_xmlrunner/__init__.py
@@ -0,0 +1 @@
+from . import odoo_tests # F401 imported but unused
diff --git a/odoo_test_xmlrunner/__manifest__.py b/odoo_test_xmlrunner/__manifest__.py
new file mode 100644
index 00000000000..395b79fc803
--- /dev/null
+++ b/odoo_test_xmlrunner/__manifest__.py
@@ -0,0 +1,18 @@
+{
+ "name": "Unittest xUnit reports",
+ "version": "18.0.1.0.0",
+ "depends": ["base"],
+ "author": "Smile, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "summary": """
+ This module override Odoo testing method to run them with xmlrunner tool.
+ """,
+ "website": "https://github.com/OCA/server-tools",
+ "category": "Tools",
+ "sequence": 20,
+ "installable": True,
+ "application": False,
+ "external_dependencies": {
+ "python": ["unittest-xml-reporting"],
+ },
+}
diff --git a/odoo_test_xmlrunner/i18n/it.po b/odoo_test_xmlrunner/i18n/it.po
new file mode 100644
index 00000000000..73388557f6d
--- /dev/null
+++ b/odoo_test_xmlrunner/i18n/it.po
@@ -0,0 +1,14 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
diff --git a/odoo_test_xmlrunner/i18n/odoo_test_xmlrunner.pot b/odoo_test_xmlrunner/i18n/odoo_test_xmlrunner.pot
new file mode 100644
index 00000000000..aadee09bfed
--- /dev/null
+++ b/odoo_test_xmlrunner/i18n/odoo_test_xmlrunner.pot
@@ -0,0 +1,13 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 18.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
diff --git a/odoo_test_xmlrunner/odoo_tests/__init__.py b/odoo_test_xmlrunner/odoo_tests/__init__.py
new file mode 100644
index 00000000000..571c37ecce6
--- /dev/null
+++ b/odoo_test_xmlrunner/odoo_tests/__init__.py
@@ -0,0 +1 @@
+from . import loader # F401 imported but unused
diff --git a/odoo_test_xmlrunner/odoo_tests/loader.py b/odoo_test_xmlrunner/odoo_tests/loader.py
new file mode 100644
index 00000000000..5ce61cc4e23
--- /dev/null
+++ b/odoo_test_xmlrunner/odoo_tests/loader.py
@@ -0,0 +1,51 @@
+import os
+
+from odoo.tools import config
+
+if config["test_enable"]:
+ from xmlrunner import XMLTestRunner
+ from xmlrunner.result import _XMLTestResult
+
+ from odoo.tests.result import OdooTestResult
+ from odoo.tests.suite import OdooSuite
+
+ unpatched_run = OdooSuite.run
+
+ def run(self, result):
+ # Override : Get and create a config dir
+ test_result_directory = config.get("test_result_directory", "test_results")
+ # create test result directory if not exists
+ if not os.path.exists(test_result_directory):
+ os.makedirs(test_result_directory)
+
+ # Suite run method will be called by the XMLTestRunner,
+ # so we need to run the original run method
+ unpatched_sub_run = self.run
+ self.run = lambda result, debug=False: unpatched_run(self, result, debug)
+ # Override : XMLTestRunner to run the tests and generate XML reports
+ try:
+ results = XMLTestRunner(
+ output=test_result_directory,
+ verbosity=2,
+ ).run(self)
+ finally:
+ self.run = unpatched_sub_run
+
+ result.update(results)
+ return result
+
+ OdooSuite.run = run
+
+ unpatched_update = OdooTestResult.update
+
+ def update(self, other):
+ # Adapt _XMLTestResult to OdooTestResult
+ if isinstance(other, _XMLTestResult):
+ self.failures_count += len(other.failures)
+ self.errors_count += len(other.errors)
+ self.skipped += len(other.skipped)
+ self.testsRun += other.testsRun
+ else:
+ unpatched_update(self, other)
+
+ OdooTestResult.update = update
diff --git a/odoo_test_xmlrunner/pyproject.toml b/odoo_test_xmlrunner/pyproject.toml
new file mode 100644
index 00000000000..4231d0cccb3
--- /dev/null
+++ b/odoo_test_xmlrunner/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/odoo_test_xmlrunner/readme/CONFIGURATION.md b/odoo_test_xmlrunner/readme/CONFIGURATION.md
new file mode 100644
index 00000000000..ebd8c0c3852
--- /dev/null
+++ b/odoo_test_xmlrunner/readme/CONFIGURATION.md
@@ -0,0 +1,2 @@
+Add to your odoo Configuration file:
+- **test_result_directory** (default: *test_results*) : The path (created if not exists) where the reports will be written to.
diff --git a/odoo_test_xmlrunner/readme/CREDITS.md b/odoo_test_xmlrunner/readme/CREDITS.md
new file mode 100644
index 00000000000..25c6a27a7d8
--- /dev/null
+++ b/odoo_test_xmlrunner/readme/CREDITS.md
@@ -0,0 +1,4 @@
+- [Smile](https://smile.eu/fr):
+ - Martin Deconinck
+- [Akretion](https://akretion.com):
+ - Florian Mounier
diff --git a/odoo_test_xmlrunner/readme/DESCRIPTION.md b/odoo_test_xmlrunner/readme/DESCRIPTION.md
new file mode 100644
index 00000000000..a6e2fc9ef35
--- /dev/null
+++ b/odoo_test_xmlrunner/readme/DESCRIPTION.md
@@ -0,0 +1 @@
+This module generate unittest reports using unittest-xml-reporting tool.
diff --git a/odoo_test_xmlrunner/readme/INSTALL.md b/odoo_test_xmlrunner/readme/INSTALL.md
new file mode 100644
index 00000000000..bd127a850b9
--- /dev/null
+++ b/odoo_test_xmlrunner/readme/INSTALL.md
@@ -0,0 +1,3 @@
+Install python library https://pypi.org/project/unittest-xml-reporting/
+
+The module is automatically installed on the Odoo instance.
diff --git a/odoo_test_xmlrunner/readme/USAGE.md b/odoo_test_xmlrunner/readme/USAGE.md
new file mode 100644
index 00000000000..6e22e01c08a
--- /dev/null
+++ b/odoo_test_xmlrunner/readme/USAGE.md
@@ -0,0 +1,108 @@
+
+## Run the native Odoo tests
+
+Run the native Odoo tests. See the [Odoo documentation](https://www.odoo.com/documentation/17.0/fr/developer/reference/backend/testing.html) for more information.
+
+### Gitlab CI usage example
+
+Add the following job to your `.gitlab-ci.yml` file:
+
+```yaml
+
+stages:
+ - test
+
+variables:
+ POSTGRES_DB: odoo
+ POSTGRES_USER: odoo
+ POSTGRES_PASSWORD: odoo
+ POSTGRES_HOST_AUTH_METHOD: trust
+
+test:
+ stage: test
+ image:
+ name: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
+ services:
+ - name: postgres:15
+ tags:
+ - gitlab-org-docker
+ script:
+ # install odoo and run tests
+ - oca_install_addons && oca_init_test_database && oca_run_tests
+ # generate coverage report
+ - coverage html -d htmlcov && coverage xml -o coverage.xml
+ # read line-rate from coverage.xml and print it as percentage
+ - total=$(grep -oP ']*line-rate="\K[0-9.]+' coverage.xml | head -n 1 | awk '{print $1 * 100}') && echo "total ${total}%"
+ coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
+ artifacts:
+ paths:
+ - htmlcov/*
+ when: always
+ reports:
+ junit: test_results/*.xml
+ coverage_report:
+ coverage_format: cobertura
+ path: coverage.xml
+```
+### Github Actions usage example
+
+Add the following job to your `.github/workflows/main.yml` file:
+
+```yaml
+name: tests
+
+permissions:
+ contents: read
+ checks: write
+ id-token: write
+
+on:
+ push:
+ branches: ["main"]
+ tags: ["*"]
+ pull_request:
+
+jobs:
+ test:
+ runs-on: ubuntu-22.04
+ container: ${{ matrix.container }}
+ name: ${{ matrix.name }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - container: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
+ name: test with Odoo
+ services:
+ postgres:
+ image: postgres:12.0
+ env:
+ POSTGRES_USER: odoo
+ POSTGRES_PASSWORD: odoo
+ POSTGRES_DB: odoo
+ ports:
+ - 5432:5432
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ persist-credentials: false
+ - name: Install addons and dependencies
+ run: oca_install_addons
+ - name: Check licenses
+ run: manifestoo -d . check-licenses
+ - name: Check development status
+ run: manifestoo -d . check-dev-status --default-dev-status=Beta
+ - name: Initialize test db
+ run: oca_init_test_database
+ - name: Run tests
+ run: oca_run_tests
+ - uses: codecov/codecov-action@v4
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ - name: Publish Test Report
+ uses: mikepenz/action-junit-report@v4
+ if: success() || failure() # always run even if the previous step fails
+ with:
+ report_paths: 'test_results/*.xml'
+
+```
diff --git a/odoo_test_xmlrunner/requirements.txt b/odoo_test_xmlrunner/requirements.txt
new file mode 100644
index 00000000000..718199204e9
--- /dev/null
+++ b/odoo_test_xmlrunner/requirements.txt
@@ -0,0 +1 @@
+unittest-xml-reporting
diff --git a/odoo_test_xmlrunner/static/description/icon.png b/odoo_test_xmlrunner/static/description/icon.png
new file mode 100644
index 00000000000..3a0328b516c
Binary files /dev/null and b/odoo_test_xmlrunner/static/description/icon.png differ
diff --git a/odoo_test_xmlrunner/static/description/index.html b/odoo_test_xmlrunner/static/description/index.html
new file mode 100644
index 00000000000..e71f15fb742
--- /dev/null
+++ b/odoo_test_xmlrunner/static/description/index.html
@@ -0,0 +1,560 @@
+
+
+
+
+
+README.rst
+
+
+
+
+
+
+
+
+
+
+
Unittest xUnit reports
+
+

+
This module generate unittest reports using unittest-xml-reporting tool.
+
Table of contents
+
+
+
+
+
+
+
Run the native Odoo tests. See the Odoo
+documentation
+for more information.
+
+
+
Add the following job to your .gitlab-ci.yml file:
+
+stages:
+ - test
+
+variables:
+ POSTGRES_DB: odoo
+ POSTGRES_USER: odoo
+ POSTGRES_PASSWORD: odoo
+ POSTGRES_HOST_AUTH_METHOD: trust
+
+test:
+ stage: test
+ image:
+ name: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
+ services:
+ - name: postgres:15
+ tags:
+ - gitlab-org-docker
+ script:
+ # install odoo and run tests
+ - oca_install_addons && oca_init_test_database && oca_run_tests
+ # generate coverage report
+ - coverage html -d htmlcov && coverage xml -o coverage.xml
+ # read line-rate from coverage.xml and print it as percentage
+ - total=$(grep -oP '<coverage[^>]*line-rate="\K[0-9.]+' coverage.xml | head -n 1 | awk '{print $1 * 100}') && echo "total ${total}%"
+ coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
+ artifacts:
+ paths:
+ - htmlcov/*
+ when: always
+ reports:
+ junit: test_results/*.xml
+ coverage_report:
+ coverage_format: cobertura
+ path: coverage.xml
+
+
+
+
+
Add the following job to your .github/workflows/main.yml file:
+
+name: tests
+
+permissions:
+ contents: read
+ checks: write
+ id-token: write
+
+on:
+ push:
+ branches: ["main"]
+ tags: ["*"]
+ pull_request:
+
+jobs:
+ test:
+ runs-on: ubuntu-22.04
+ container: ${{ matrix.container }}
+ name: ${{ matrix.name }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - container: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
+ name: test with Odoo
+ services:
+ postgres:
+ image: postgres:12.0
+ env:
+ POSTGRES_USER: odoo
+ POSTGRES_PASSWORD: odoo
+ POSTGRES_DB: odoo
+ ports:
+ - 5432:5432
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ persist-credentials: false
+ - name: Install addons and dependencies
+ run: oca_install_addons
+ - name: Check licenses
+ run: manifestoo -d . check-licenses
+ - name: Check development status
+ run: manifestoo -d . check-dev-status --default-dev-status=Beta
+ - name: Initialize test db
+ run: oca_init_test_database
+ - name: Run tests
+ run: oca_run_tests
+ - uses: codecov/codecov-action@v4
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ - name: Publish Test Report
+ uses: mikepenz/action-junit-report@v4
+ if: success() || failure() # always run even if the previous step fails
+ with:
+ report_paths: 'test_results/*.xml'
+
+
+
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/server-tools project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
+
diff --git a/requirements.txt b/requirements.txt
index 2ffa3961279..5d1fefa6f23 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,3 +9,4 @@ paramiko<4.0.0
pygount
pysftp
sentry_sdk>=2.0.0,<=2.22.0
+unittest-xml-reporting
diff --git a/sequence_python/README.rst b/sequence_python/README.rst
new file mode 100644
index 00000000000..820df473009
--- /dev/null
+++ b/sequence_python/README.rst
@@ -0,0 +1,125 @@
+.. image:: https://odoo-community.org/readme-banner-image
+ :target: https://odoo-community.org/get-involved?utm_source=readme
+ :alt: Odoo Community Association
+
+===============================
+Sequence from Python expression
+===============================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:75b6e7f4bb5eec0f62dfee2e39357c3255133a9f7e30bce48dff133241e73d3c
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github
+ :target: https://github.com/OCA/server-tools/tree/18.0/sequence_python
+ :alt: OCA/server-tools
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-sequence_python
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=18.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module allows to generate a sequence by a Python formula
+expression.
+
+Besides common Python functions and operators, it provides several
+functions like 'random' and 'uuid' in the expression, as well as
+variables such as the next number in the sequence. These are also listed
+next to the input field on the sequence form view.
+
+If you want to add more variables for use in the expression, you can
+extend this module.
+
+Use cases for this module could be:
+
+- You want to generate alphanumeric numbering
+- You want to apply some math to the number to prevent customers from
+ knowing their place in the sequence
+- You want to use UUID
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+To use this module, you need to:
+
+- Go to the form view of an ir.sequence record
+- Go to the Python tab
+- Enable the 'Use Python' checkbox
+- Change the default 'number' expression to something more fancy.
+
+Examples:
+
+.. code:: python
+
+ # To separate the Odoo-generated number with hyphens eg. 0-0-0-0-1
+ '-'.join(number_padded)
+
+ # To have an UUID as the sequence value
+ uuid.uuid4().hex
+
+ # To use an 8-digit binary number
+ '{0:#010b}'.format(number + 300)[2:]
+
+And so on.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+-------
+
+* Sunflower IT
+
+Contributors
+------------
+
+- Tom Blauwendraat
+- Francesco Apruzzese
+- `Heliconia Solutions Pvt. Ltd. `__
+
+ - Bhavesh Heliconia
+
+Maintainers
+-----------
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/server-tools `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/sequence_python/__init__.py b/sequence_python/__init__.py
new file mode 100644
index 00000000000..0650744f6bc
--- /dev/null
+++ b/sequence_python/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/sequence_python/__manifest__.py b/sequence_python/__manifest__.py
new file mode 100644
index 00000000000..c60003340d1
--- /dev/null
+++ b/sequence_python/__manifest__.py
@@ -0,0 +1,13 @@
+# Copyright 2020 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+{
+ "name": "Sequence from Python expression",
+ "summary": """Calculate a sequence number from a Python expression""",
+ "author": "Sunflower IT,Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/server-tools",
+ "version": "18.0.1.0.0",
+ "license": "AGPL-3",
+ "category": "Generic Modules",
+ "depends": ["base"],
+ "data": ["views/ir_sequence.xml"],
+}
diff --git a/sequence_python/i18n/ca.po b/sequence_python/i18n/ca.po
new file mode 100644
index 00000000000..904e5b917f3
--- /dev/null
+++ b/sequence_python/i18n/ca.po
@@ -0,0 +1,129 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sequence_python
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "number: The next number of the sequence (integer)"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"number_padded: Padded string of the next number of the sequence"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"random: The Python random module, eg. to use "
+"random.randint(0, 9)"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "sequence: Odoo record of the sequence being used"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"string: The Python string module, eg. to use "
+"random.choices(string.ascii_letters + string.digits, k=4)"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"uuid: The Python uuid module, eg. to use "
+"uuid.uuid4()"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Aside from this, you may use several"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Help with Python expressions"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__id
+msgid "ID"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__python_code_preview
+msgid "Preview"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Python Code"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__python_code
+msgid "Python expression"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model,name:sequence_python.model_ir_sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__smart_search
+msgid "Smart Search"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"The expression you type here will be evaluated as the next number. The "
+"following variables can be used:"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__use_python_code
+msgid "Use Python"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,help:sequence_python.field_ir_sequence__python_code
+msgid "Write Python code that generates the sequence body."
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "builtin Python functions"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "number"
+msgstr ""
diff --git a/sequence_python/i18n/es_AR.po b/sequence_python/i18n/es_AR.po
new file mode 100644
index 00000000000..22bc069b2bd
--- /dev/null
+++ b/sequence_python/i18n/es_AR.po
@@ -0,0 +1,141 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sequence_python
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2022-09-05 01:07+0000\n"
+"Last-Translator: Ignacio Buioli \n"
+"Language-Team: none\n"
+"Language: es_AR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "number: The next number of the sequence (integer)"
+msgstr "number: El siguiente número de la secuencia (entero)"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"number_padded: Padded string of the next number of the sequence"
+msgstr ""
+"number_padded: Relleno del siguiente número de la secuencia"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"random: The Python random module, eg. to use "
+"random.randint(0, 9)"
+msgstr ""
+"random: El módulo aleatorio de Python, ej. para utilizar "
+"random.randint(0, 9)"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "sequence: Odoo record of the sequence being used"
+msgstr ""
+"sequence: Registro Odoo de la secuencia que se está utilizando"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"string: The Python string module, eg. to use "
+"random.choices(string.ascii_letters + string.digits, k=4)"
+msgstr ""
+"string: El módulo string de Python, ej. para utilizar "
+"random.choices(string.ascii_letters + string.digits, k=4)"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"uuid: The Python uuid module, eg. to use "
+"uuid.uuid4()"
+msgstr ""
+"uuid: El módulo uuid de Python, ej. para utilizar uuid."
+"uuid4()"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Aside from this, you may use several"
+msgstr "Aparte de esto, puede utilizar varios"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__display_name
+msgid "Display Name"
+msgstr "Mostrar Nombre"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Help with Python expressions"
+msgstr "Ayuda con expresiones Python"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence____last_update
+msgid "Last Modified on"
+msgstr "Última modificación en"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__python_code_preview
+msgid "Preview"
+msgstr "Previsualización"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Python Code"
+msgstr "Código de Python"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__python_code
+msgid "Python expression"
+msgstr "Expresión de Python"
+
+#. module: sequence_python
+#: model:ir.model,name:sequence_python.model_ir_sequence
+msgid "Sequence"
+msgstr "Secuencia"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__smart_search
+msgid "Smart Search"
+msgstr "Búsqueda Inteligente"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"The expression you type here will be evaluated as the next number. The "
+"following variables can be used:"
+msgstr ""
+"La expresión que escriba acá se evaluará como el siguiente número. Se pueden "
+"utilizar las siguientes variables:"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__use_python_code
+msgid "Use Python"
+msgstr "Usar Python"
+
+#. module: sequence_python
+#: model:ir.model.fields,help:sequence_python.field_ir_sequence__python_code
+msgid "Write Python code that generates the sequence body."
+msgstr "Escriba el código de Python que genera el cuerpo de la secuencia."
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "builtin Python functions"
+msgstr "Funciones de Python incorporadas"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "number"
+msgstr "number"
diff --git a/sequence_python/i18n/it.po b/sequence_python/i18n/it.po
new file mode 100644
index 00000000000..b524452beb5
--- /dev/null
+++ b/sequence_python/i18n/it.po
@@ -0,0 +1,126 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sequence_python
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2024-11-13 10:06+0000\n"
+"Last-Translator: mymage \n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.6.2\n"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "number: The next number of the sequence (integer)"
+msgstr "number: il numero successivo della sequenza (intero)"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"number_padded: Padded string of the next number of the sequence"
+msgstr ""
+"number_padded: stringa riempita del numero successivo della "
+"sequenza"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"random: The Python random module, eg. to use "
+"random.randint(0, 9)"
+msgstr ""
+"random: il modulo random Python, es. da usare random."
+"randint(0, 9)"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "sequence: Odoo record of the sequence being used"
+msgstr "sequence: record Odoo della sequenza in uso"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"string: The Python string module, eg. to use "
+"random.choices(string.ascii_letters + string.digits, k=4)"
+msgstr ""
+"string: il modulo stringa Python, es.da usare random."
+"choices(string.ascii_letters + string.digits, k=4)"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"uuid: The Python uuid module, eg. to use "
+"uuid.uuid4()"
+msgstr ""
+"uuid: il modulo uuid Python da usare, es. da usare uuid."
+"uuid4()"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Aside from this, you may use several"
+msgstr "Oltre a questo, si possono usare diversi"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Help with Python expressions"
+msgstr "Aiuto con espressioni Python"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__python_code_preview
+msgid "Preview"
+msgstr "Anteprima"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Python Code"
+msgstr "Codice Python"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__python_code
+msgid "Python expression"
+msgstr "Espressione Python"
+
+#. module: sequence_python
+#: model:ir.model,name:sequence_python.model_ir_sequence
+msgid "Sequence"
+msgstr "Sequenza"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__smart_search
+msgid "Smart Search"
+msgstr "Ricerca intelligente"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"The expression you type here will be evaluated as the next number. The "
+"following variables can be used:"
+msgstr ""
+"L'espressione inserita qui verrà valutata come il numero successivo. Si "
+"possono usare le seguenti variabili:"
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__use_python_code
+msgid "Use Python"
+msgstr "Usa Python"
+
+#. module: sequence_python
+#: model:ir.model.fields,help:sequence_python.field_ir_sequence__python_code
+msgid "Write Python code that generates the sequence body."
+msgstr "Scrivere il codice Python che genera il corpo della sequenza."
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "builtin Python functions"
+msgstr "funzioni Python incorporate"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "number"
+msgstr "numero"
diff --git a/sequence_python/i18n/sequence_python.pot b/sequence_python/i18n/sequence_python.pot
new file mode 100644
index 00000000000..ec8af7e3e1c
--- /dev/null
+++ b/sequence_python/i18n/sequence_python.pot
@@ -0,0 +1,113 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sequence_python
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 18.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "number: The next number of the sequence (integer)"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"number_padded: Padded string of the next number of the sequence"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"random: The Python random module, eg. to use "
+"random.randint(0, 9)"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "sequence: Odoo record of the sequence being used"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"string: The Python string module, eg. to use "
+"random.choices(string.ascii_letters + string.digits, k=4)"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"uuid: The Python uuid module, eg. to use "
+"uuid.uuid4()"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Aside from this, you may use several"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Help with Python expressions"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__python_code_preview
+msgid "Preview"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "Python Code"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__python_code
+msgid "Python expression"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model,name:sequence_python.model_ir_sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__smart_search
+msgid "Smart Search"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid ""
+"The expression you type here will be evaluated as the next number. The "
+"following variables can be used:"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,field_description:sequence_python.field_ir_sequence__use_python_code
+msgid "Use Python"
+msgstr ""
+
+#. module: sequence_python
+#: model:ir.model.fields,help:sequence_python.field_ir_sequence__python_code
+msgid "Write Python code that generates the sequence body."
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "builtin Python functions"
+msgstr ""
+
+#. module: sequence_python
+#: model_terms:ir.ui.view,arch_db:sequence_python.sequence_view
+msgid "number"
+msgstr ""
diff --git a/sequence_python/models/__init__.py b/sequence_python/models/__init__.py
new file mode 100644
index 00000000000..5b015772ab2
--- /dev/null
+++ b/sequence_python/models/__init__.py
@@ -0,0 +1 @@
+from . import ir_sequence
diff --git a/sequence_python/models/ir_sequence.py b/sequence_python/models/ir_sequence.py
new file mode 100644
index 00000000000..374ebb97be8
--- /dev/null
+++ b/sequence_python/models/ir_sequence.py
@@ -0,0 +1,87 @@
+# Copyright 2020 Sunflower IT ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+import logging
+import random
+import string
+import uuid
+from inspect import getmembers, isclass, isfunction
+
+from odoo import fields, models
+from odoo.tools.safe_eval import safe_eval, wrap_module
+
+_logger = logging.getLogger(__name__)
+
+
+DEFAULT_PYTHON_CODE = "number_padded"
+
+
+class IrSequence(models.Model):
+ """
+ Inherit standard ir.sequence to let the possibility of using a Python formula
+ to calculate the sequence from input variables such as the sequence number.
+ This allows obfuscation of the order in which sequences are given out,
+ but can also be used for any other purpose.
+ """
+
+ _inherit = "ir.sequence"
+
+ # Python code
+ use_python_code = fields.Boolean(string="Use Python", default=False)
+ python_code = fields.Text(
+ string="Python expression",
+ default=DEFAULT_PYTHON_CODE,
+ help="Write Python code that generates the sequence body.",
+ )
+ python_code_preview = fields.Char("Preview", compute="_compute_python_code_preview")
+
+ def _get_python_eval_context(self, number_next):
+ """
+ Get the eval context to evaluate the Python code with.
+ The format is (variable name, description, value)
+ You can inherit this in your custom module.
+ :return: tuple
+ """
+ wrap_random = wrap_module(random, random.__all__)
+ uuid_elements = [e[0] for e in getmembers(uuid, isfunction)] + [
+ e[0] for e in getmembers(uuid, isclass)
+ ]
+ wrap_uuid = wrap_module(uuid, uuid_elements)
+ wrap_string = wrap_module(string, string.__all__)
+ if isinstance(number_next, tuple):
+ number_next = number_next[0]
+ return {
+ "number": number_next[0] if isinstance(number_next, tuple) else number_next,
+ "number_padded": f"{number_next:0{self.padding}d}",
+ "sequence": self,
+ "random": wrap_random,
+ "uuid": wrap_uuid,
+ "string": wrap_string,
+ }
+
+ def _get_python_value(self, number_next):
+ """
+ Use the python formula to get the value.
+ :return: string
+ """
+ eval_context = self._get_python_eval_context(number_next)
+ return safe_eval(self.python_code.strip(), eval_context)
+
+ def _compute_python_code_preview(self):
+ for this in self:
+ try:
+ this.python_code_preview = self.get_next_char(
+ (self.number_next_actual,)
+ )
+ except Exception as e: # noqa
+ this.python_code_preview = str(e)
+
+ def get_next_char(self, number_next):
+ if self.use_python_code:
+ interpolated_prefix, interpolated_suffix = self._get_prefix_suffix()
+ return (
+ interpolated_prefix
+ + self._get_python_value(number_next)
+ + interpolated_suffix
+ )
+ else:
+ return super().get_next_char(number_next)
diff --git a/sequence_python/pyproject.toml b/sequence_python/pyproject.toml
new file mode 100644
index 00000000000..4231d0cccb3
--- /dev/null
+++ b/sequence_python/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/sequence_python/readme/CONTRIBUTORS.md b/sequence_python/readme/CONTRIBUTORS.md
new file mode 100644
index 00000000000..3c777dad2d6
--- /dev/null
+++ b/sequence_python/readme/CONTRIBUTORS.md
@@ -0,0 +1,4 @@
+- Tom Blauwendraat \
+- Francesco Apruzzese \
+- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io)
+ - Bhavesh Heliconia
diff --git a/sequence_python/readme/DESCRIPTION.md b/sequence_python/readme/DESCRIPTION.md
new file mode 100644
index 00000000000..70419b92170
--- /dev/null
+++ b/sequence_python/readme/DESCRIPTION.md
@@ -0,0 +1,17 @@
+This module allows to generate a sequence by a Python formula
+expression.
+
+Besides common Python functions and operators, it provides several
+functions like 'random' and 'uuid' in the expression, as well as
+variables such as the next number in the sequence. These are also listed
+next to the input field on the sequence form view.
+
+If you want to add more variables for use in the expression, you can
+extend this module.
+
+Use cases for this module could be:
+
+- You want to generate alphanumeric numbering
+- You want to apply some math to the number to prevent customers from
+ knowing their place in the sequence
+- You want to use UUID
diff --git a/sequence_python/readme/USAGE.md b/sequence_python/readme/USAGE.md
new file mode 100644
index 00000000000..88d75e19dc0
--- /dev/null
+++ b/sequence_python/readme/USAGE.md
@@ -0,0 +1,21 @@
+To use this module, you need to:
+
+- Go to the form view of an ir.sequence record
+- Go to the Python tab
+- Enable the 'Use Python' checkbox
+- Change the default 'number' expression to something more fancy.
+
+Examples:
+
+``` python
+# To separate the Odoo-generated number with hyphens eg. 0-0-0-0-1
+'-'.join(number_padded)
+
+# To have an UUID as the sequence value
+uuid.uuid4().hex
+
+# To use an 8-digit binary number
+'{0:#010b}'.format(number + 300)[2:]
+```
+
+And so on.
diff --git a/sequence_python/static/description/icon.png b/sequence_python/static/description/icon.png
new file mode 100644
index 00000000000..3a0328b516c
Binary files /dev/null and b/sequence_python/static/description/icon.png differ
diff --git a/sequence_python/static/description/index.html b/sequence_python/static/description/index.html
new file mode 100644
index 00000000000..deef03047ba
--- /dev/null
+++ b/sequence_python/static/description/index.html
@@ -0,0 +1,471 @@
+
+
+
+
+
+README.rst
+
+
+
+
+
+
+
+
+
+
+
Sequence from Python expression
+
+

+
This module allows to generate a sequence by a Python formula
+expression.
+
Besides common Python functions and operators, it provides several
+functions like ‘random’ and ‘uuid’ in the expression, as well as
+variables such as the next number in the sequence. These are also listed
+next to the input field on the sequence form view.
+
If you want to add more variables for use in the expression, you can
+extend this module.
+
Use cases for this module could be:
+
+- You want to generate alphanumeric numbering
+- You want to apply some math to the number to prevent customers from
+knowing their place in the sequence
+- You want to use UUID
+
+
Table of contents
+
+
+
+
To use this module, you need to:
+
+- Go to the form view of an ir.sequence record
+- Go to the Python tab
+- Enable the ‘Use Python’ checkbox
+- Change the default ‘number’ expression to something more fancy.
+
+
Examples:
+
+# To separate the Odoo-generated number with hyphens eg. 0-0-0-0-1
+'-'.join(number_padded)
+
+# To have an UUID as the sequence value
+uuid.uuid4().hex
+
+# To use an 8-digit binary number
+'{0:#010b}'.format(number + 300)[2:]
+
+
And so on.
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/server-tools project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
+
diff --git a/sequence_python/tests/__init__.py b/sequence_python/tests/__init__.py
new file mode 100644
index 00000000000..b32ac6c6ab7
--- /dev/null
+++ b/sequence_python/tests/__init__.py
@@ -0,0 +1,3 @@
+# Copyright 2020 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from . import test_ir_sequence
diff --git a/sequence_python/tests/test_ir_sequence.py b/sequence_python/tests/test_ir_sequence.py
new file mode 100644
index 00000000000..c4f684177f8
--- /dev/null
+++ b/sequence_python/tests/test_ir_sequence.py
@@ -0,0 +1,39 @@
+# Copyright 2020 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo.tests.common import TransactionCase
+
+
+class TestIrSequence(TransactionCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.Sequence = cls.env["ir.sequence"]
+ cls.sequence = cls.Sequence.create(
+ {
+ "name": "Test sequence",
+ "implementation": "standard",
+ "code": "test.python.sequence",
+ "prefix": "A",
+ "padding": 2,
+ "number_next": 1,
+ "number_increment": 1,
+ "company_id": False,
+ "use_python_code": True,
+ "python_code": "'B' + number_padded + 'C'",
+ }
+ )
+
+ def test_standard_sequence(self):
+ self.assertEqual(self.sequence.python_code_preview, "AB01C")
+ next_number = self.sequence._next()
+ self.assertEqual(next_number, "AB01C")
+ next_number = self.sequence._next()
+ self.assertEqual(next_number, "AB02C")
+
+ def test_nogap_sequence(self):
+ self.sequence.write(dict(implementation="no_gap"))
+ next_number = self.sequence._next()
+ self.assertEqual(next_number, "AB01C")
+ next_number = self.sequence._next()
+ self.assertEqual(next_number, "AB02C")
diff --git a/sequence_python/views/ir_sequence.xml b/sequence_python/views/ir_sequence.xml
new file mode 100644
index 00000000000..b1b4d3cdfef
--- /dev/null
+++ b/sequence_python/views/ir_sequence.xml
@@ -0,0 +1,52 @@
+
+
+
+ ir.sequence
+
+
+
+
+
+
+
+
+
+
+
Help with Python expressions
+
The expression you type here will be evaluated as the next number. The following variables can be used:
+
+ number: The next number of the sequence (integer)
+ number_padded: Padded string of the next number of the sequence
+ sequence: Odoo record of the sequence being used
+ uuid: The Python uuid module, eg. to use uuid.uuid4()
+ random: The Python random module, eg. to use random.randint(0, 9)
+ string: The Python string module, eg. to use random.choices(string.ascii_letters + string.digits, k=4)
+
+
Aside from this, you may use several builtin Python functions
+
+
+
+
+
+
diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml
index 87f29e54cad..546ff5cabc2 100644
--- a/setup/_metapackage/pyproject.toml
+++ b/setup/_metapackage/pyproject.toml
@@ -1,7 +1,8 @@
[project]
name = "odoo-addons-oca-server-tools"
-version = "18.0.20251216.0"
+version = "18.0.20260128.0"
dependencies = [
+ "odoo-addon-attachment_delete_restrict==18.0.*",
"odoo-addon-attachment_queue==18.0.*",
"odoo-addon-attachment_synchronize==18.0.*",
"odoo-addon-attachment_unindex_content==18.0.*",
@@ -39,10 +40,12 @@ dependencies = [
"odoo-addon-module_analysis==18.0.*",
"odoo-addon-module_auto_update==18.0.*",
"odoo-addon-module_change_auto_install==18.0.*",
+ "odoo-addon-odoo_test_xmlrunner==18.0.*",
"odoo-addon-onchange_helper==18.0.*",
"odoo-addon-rpc_helper==18.0.*",
"odoo-addon-scheduler_error_mailer==18.0.*",
"odoo-addon-sentry==18.0.*",
+ "odoo-addon-sequence_python==18.0.*",
"odoo-addon-session_db==18.0.*",
"odoo-addon-test_auditlog==18.0.*",
"odoo-addon-test_base_time_window==18.0.*",