From b0aafb31f4d84c296035fb515417eee03fcb823a Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Thu, 11 Jun 2026 09:31:26 +0200 Subject: [PATCH 01/15] [IMP] storage_backend: add storage category A way to classify storages in a functional way. For instance: you might have N storage backends for the shop, N storage backends for data import, N storage backends for EDI purposes. With this change you can finally organize them and let your customers understand what such storages do. --- storage_backend/__manifest__.py | 1 + storage_backend/models/__init__.py | 1 + storage_backend/models/storage_backend.py | 6 +++ .../models/storage_backend_category.py | 14 +++++ storage_backend/security/ir.model.access.csv | 1 + .../views/backend_storage_view.xml | 8 +++ .../views/storage_backend_category_view.xml | 54 +++++++++++++++++++ 7 files changed, 85 insertions(+) create mode 100644 storage_backend/models/storage_backend_category.py create mode 100644 storage_backend/views/storage_backend_category_view.xml diff --git a/storage_backend/__manifest__.py b/storage_backend/__manifest__.py index 3959cdbe63..f889c6b115 100644 --- a/storage_backend/__manifest__.py +++ b/storage_backend/__manifest__.py @@ -15,6 +15,7 @@ "depends": ["base", "component", "server_environment"], "data": [ "views/backend_storage_view.xml", + "views/storage_backend_category_view.xml", "data/data.xml", "security/ir.model.access.csv", ], diff --git a/storage_backend/models/__init__.py b/storage_backend/models/__init__.py index f45f402268..4a96db5b72 100644 --- a/storage_backend/models/__init__.py +++ b/storage_backend/models/__init__.py @@ -1 +1,2 @@ from . import storage_backend +from . import storage_backend_category diff --git a/storage_backend/models/storage_backend.py b/storage_backend/models/storage_backend.py index 2c4e5af464..bb8541d510 100644 --- a/storage_backend/models/storage_backend.py +++ b/storage_backend/models/storage_backend.py @@ -60,6 +60,12 @@ class StorageBackend(models.Model): _description = "Storage Backend" name = fields.Char(required=True) + categ_id = fields.Many2one( + "storage.backend.category", + string="Category", + ondelete="restrict", + help="Category to group backends for swapping operations", + ) backend_type = fields.Selection( selection=[("filesystem", "Filesystem")], required=True, default="filesystem" ) diff --git a/storage_backend/models/storage_backend_category.py b/storage_backend/models/storage_backend_category.py new file mode 100644 index 0000000000..a4e898435b --- /dev/null +++ b/storage_backend/models/storage_backend_category.py @@ -0,0 +1,14 @@ +# Copyright 2026 Camptocamp SA +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class StorageBackendCategory(models.Model): + _name = "storage.backend.category" + _description = "Storage Backend Category" + _order = "name" + + name = fields.Char(required=True, index=True) + description = fields.Text() + backend_ids = fields.One2many("storage.backend", "categ_id", string="Backends") diff --git a/storage_backend/security/ir.model.access.csv b/storage_backend/security/ir.model.access.csv index dd245d4814..1dbee96e50 100644 --- a/storage_backend/security/ir.model.access.csv +++ b/storage_backend/security/ir.model.access.csv @@ -1,2 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_storage_backend_edit,storage_backend edit,model_storage_backend,base.group_system,1,1,1,1 +access_storage_backend_category_edit,storage_backend_category edit,model_storage_backend_category,base.group_system,1,1,1,1 diff --git a/storage_backend/views/backend_storage_view.xml b/storage_backend/views/backend_storage_view.xml index 5c9735111a..339bf9bf53 100644 --- a/storage_backend/views/backend_storage_view.xml +++ b/storage_backend/views/backend_storage_view.xml @@ -5,6 +5,7 @@ + @@ -30,6 +31,7 @@ + @@ -42,6 +44,12 @@ + + diff --git a/storage_backend/views/storage_backend_category_view.xml b/storage_backend/views/storage_backend_category_view.xml new file mode 100644 index 0000000000..b85bb63f4e --- /dev/null +++ b/storage_backend/views/storage_backend_category_view.xml @@ -0,0 +1,54 @@ + + + + storage.backend.category + + + + + + + + + storage.backend.category + +
+ + + + + + + + + + + +
+
+
+ + + storage.backend.category + + + + + + + + + Storage Backend Category + ir.actions.act_window + storage.backend.category + list,form + + + + +
From d32e218bb05a1527677c3b9b575bb4cd96e98c0a Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Thu, 11 Jun 2026 09:38:27 +0200 Subject: [PATCH 02/15] [IMP] storage_file: limit swap to selected backends Is not allowed to swap files to a backend of a different category. A technical door is left opened in case for specific reasons you want force file swap by using the ctx key swap_backend_bypass_category_check. --- storage_file/models/storage_file.py | 17 +++++ storage_file/tests/test_swap_backend.py | 83 ++++++++++++++++++++++++ storage_file/views/storage_file_view.xml | 6 +- storage_file/wizards/swap_backend.py | 7 +- storage_file/wizards/swap_backend.xml | 21 +++++- 5 files changed, 129 insertions(+), 5 deletions(-) diff --git a/storage_file/models/storage_file.py b/storage_file/models/storage_file.py index b76c0d05e5..f5b5282c12 100644 --- a/storage_file/models/storage_file.py +++ b/storage_file/models/storage_file.py @@ -36,6 +36,11 @@ class StorageFile(models.Model): required=True, default=lambda self: self._get_default_backend_id(), ) + backend_categ_id = fields.Many2one( + "storage.backend.category", + related="backend_id.categ_id", + string="Backend Category", + ) url = fields.Char(compute="_compute_url", help="HTTP accessible path to the file") url_path = fields.Char( compute="_compute_url_path", help="Accessible path, no base URL" @@ -293,6 +298,18 @@ def _swap_backend(self, new_backend): new_backend.name, ) ) + if not self.env.context.get("swap_backend_bypass_category_check"): + for record in self.sudo(): + if not record.exists() or record.backend_id == new_backend: + continue + if record.backend_id.categ_id != new_backend.categ_id: + raise UserError( + self.env._( + "Destination backend category must match source backend " + "category for %s.", + record.name, + ) + ) moved = [] failed = [] for record in self.sudo(): diff --git a/storage_file/tests/test_swap_backend.py b/storage_file/tests/test_swap_backend.py index 5575be4b77..16b237e9db 100644 --- a/storage_file/tests/test_swap_backend.py +++ b/storage_file/tests/test_swap_backend.py @@ -5,6 +5,8 @@ import base64 from unittest import mock +from lxml import etree + from odoo.exceptions import UserError from odoo.tests import Form @@ -74,6 +76,33 @@ def test_swap_requires_destination_filename_strategy(self): with self.assertRaisesRegex(UserError, "The filename strategy is empty"): stfile._swap_backend(self.backend_b) + def test_swap_rejects_different_backend_category(self): + src_categ = self.env["storage.backend.category"].create({"name": "SRC"}) + dst_categ = self.env["storage.backend.category"].create({"name": "DST"}) + self.backend_a.categ_id = src_categ + self.backend_b.categ_id = dst_categ + stfile = self._create_storage_file(backend=self.backend_a) + + with self.assertRaisesRegex( + UserError, "Destination backend category must match source backend category" + ): + stfile._swap_backend(self.backend_b) + + def test_swap_allows_different_backend_category_with_bypass(self): + src_categ = self.env["storage.backend.category"].create({"name": "SRC"}) + dst_categ = self.env["storage.backend.category"].create({"name": "DST"}) + self.backend_a.categ_id = src_categ + self.backend_b.categ_id = dst_categ + stfile = self._create_storage_file(backend=self.backend_a, data=b"payload") + + result = stfile.with_context( + swap_backend_bypass_category_check=True + )._swap_backend(self.backend_b) + + self.assertEqual(stfile.backend_id, self.backend_b) + self.assertEqual(base64.b64decode(stfile.data), b"payload") + self.assertIn(stfile.name, result["moved"][0]) + def test_swap_failure_reports_in_failed(self): """Upload failure is caught and reported in the failed list.""" stfile = self._create_storage_file(data=b"payload") @@ -204,3 +233,57 @@ def test_write_backend_id_noop_if_same(self): stfile.backend_id = self.backend_a self.assertEqual(stfile.backend_id, self.backend_a) self.assertEqual(stfile.relative_path, old_path) + + # -- category-based filtering ---------------------------------------- + + def test_wizard_form_same_category_shown_as_dest(self): + """Wizard declares and applies a same-category destination domain.""" + categ = self.env["storage.backend.category"].create({"name": "Group A"}) + categ2 = self.env["storage.backend.category"].create({"name": "Group B"}) + backend_a_cat = self.backend_a.copy( + { + "name": "Backend A (Group A)", + "categ_id": categ.id, + "directory_path": "a_cat", + } + ) + backend_b_cat = self.backend_b.copy( + { + "name": "Backend B (Group A)", + "categ_id": categ.id, + "directory_path": "b_cat", + } + ) + backend_other = self.backend_a.copy( + { + "name": "Backend (Group B)", + "categ_id": categ2.id, + "directory_path": "other", + } + ) + stfile = self._create_storage_file(backend=backend_a_cat) + + # Assert the actual domain declared in the form view arch. + view = self.env.ref("storage_file.storage_file_swap_backend_view_form") + xml = etree.fromstring(view.arch_db.encode()) + dest_field = xml.xpath("//field[@name='dest_backend_id']") + self.assertEqual(len(dest_field), 1) + domain = dest_field[0].get("domain") + self.assertIn("('id', '!=', source_backend_id)", domain) + self.assertIn("('categ_id', '=', source_backend_categ_id)", domain) + self.assertNotIn("source_backend_id.categ_id", domain) + + with Form( + self.env["storage.file.swap.backend"].with_context( + active_model="storage.file", + active_ids=stfile.ids, + ) + ) as wiz_form: + self.assertEqual(wiz_form.source_backend_id, backend_a_cat) + # domain: categ_id = Group A → Group B backend excluded + same_categ_backends = self.env["storage.backend"].search( + [("categ_id", "=", categ.id), ("id", "!=", backend_a_cat.id)] + ) + self.assertIn(backend_b_cat, same_categ_backends) + self.assertNotIn(backend_other, same_categ_backends) + wiz_form.dest_backend_id = backend_b_cat diff --git a/storage_file/views/storage_file_view.xml b/storage_file/views/storage_file_view.xml index a922416d1d..acc313b06f 100644 --- a/storage_file/views/storage_file_view.xml +++ b/storage_file/views/storage_file_view.xml @@ -23,7 +23,11 @@ - + + diff --git a/storage_file/wizards/swap_backend.py b/storage_file/wizards/swap_backend.py index 6cb36245c8..fe82cb5eda 100644 --- a/storage_file/wizards/swap_backend.py +++ b/storage_file/wizards/swap_backend.py @@ -19,10 +19,15 @@ class StorageFileSwapBackend(models.TransientModel): string="Source Storage", readonly=True, ) + source_backend_categ_id = fields.Many2one( + "storage.backend.category", + related="source_backend_id.categ_id", + string="Source Backend Category", + readonly=True, + ) dest_backend_id = fields.Many2one( "storage.backend", string="Destination Storage", - domain="[('id', '!=', source_backend_id)]", ) file_ids = fields.Many2many( "storage.file", diff --git a/storage_file/wizards/swap_backend.xml b/storage_file/wizards/swap_backend.xml index 5aac2f5e81..66c5e0a11b 100644 --- a/storage_file/wizards/swap_backend.xml +++ b/storage_file/wizards/swap_backend.xml @@ -10,11 +10,26 @@
- - + + + - + From bbde17844823a85fac18bc2094510799fd1eb1c0 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Fri, 12 Jun 2026 09:21:30 +0200 Subject: [PATCH 03/15] [IMP] storage_image: form select only same category backend --- storage_image/views/storage_image.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/storage_image/views/storage_image.xml b/storage_image/views/storage_image.xml index 42338506e2..be5c875edd 100644 --- a/storage_image/views/storage_image.xml +++ b/storage_image/views/storage_image.xml @@ -40,7 +40,11 @@ - + + From 7e3ca264243a4cf686254c182e1066b88695bc6d Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Fri, 12 Jun 2026 09:21:58 +0200 Subject: [PATCH 04/15] [IMP] storage_media: form select only same category backend --- storage_media/views/storage_media_view.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/storage_media/views/storage_media_view.xml b/storage_media/views/storage_media_view.xml index 20ba7494c6..0f84abd25f 100644 --- a/storage_media/views/storage_media_view.xml +++ b/storage_media/views/storage_media_view.xml @@ -35,7 +35,11 @@ - + +
From ff1497b6a9c3c48c190625807d3524c913864cea Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 24 Jun 2026 07:46:33 +0000 Subject: [PATCH 05/15] [UPD] Update storage_backend.pot --- storage_backend/i18n/storage_backend.pot | 38 ++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/storage_backend/i18n/storage_backend.pot b/storage_backend/i18n/storage_backend.pot index 2ad02802f2..65aca79709 100644 --- a/storage_backend/i18n/storage_backend.pot +++ b/storage_backend/i18n/storage_backend.pot @@ -29,6 +29,23 @@ msgstr "" msgid "Backend Type Env Default" msgstr "" +#. module: storage_backend +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__backend_ids +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_category_view_form +msgid "Backends" +msgstr "" + +#. module: storage_backend +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend__categ_id +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_view_search +msgid "Category" +msgstr "" + +#. module: storage_backend +#: model:ir.model.fields,help:storage_backend.field_storage_backend__categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_backend #. odoo-python #: code:addons/storage_backend/models/storage_backend.py:0 @@ -43,14 +60,21 @@ msgstr "" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__create_uid +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__create_uid msgid "Created by" msgstr "" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__create_date +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__create_date msgid "Created on" msgstr "" +#. module: storage_backend +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__description +msgid "Description" +msgstr "" + #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__directory_path msgid "Directory Path" @@ -63,6 +87,7 @@ msgstr "" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__display_name +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__display_name msgid "Display Name" msgstr "" @@ -84,21 +109,25 @@ msgstr "" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__id +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__id msgid "ID" msgstr "" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__write_uid +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__write_uid msgid "Last Updated by" msgstr "" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__write_date +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__write_date msgid "Last Updated on" msgstr "" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__name +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__name msgid "Name" msgstr "" @@ -123,6 +152,15 @@ msgstr "" msgid "Storage Backend" msgstr "" +#. module: storage_backend +#: model:ir.actions.act_window,name:storage_backend.act_open_storage_backend_category_view +#: model:ir.model,name:storage_backend.model_storage_backend_category +#: model:ir.ui.menu,name:storage_backend.menu_storage_backend_category +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_category_view_form +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_category_view_search +msgid "Storage Backend Category" +msgstr "" + #. module: storage_backend #: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_view_form msgid "Test connection" From 3575b6a087f307e4b282f0cc26853ecdf07636a2 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 24 Jun 2026 07:46:35 +0000 Subject: [PATCH 06/15] [UPD] Update storage_file.pot --- storage_file/i18n/storage_file.pot | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/storage_file/i18n/storage_file.pot b/storage_file/i18n/storage_file.pot index 5078abea17..ca4b408bf3 100644 --- a/storage_file/i18n/storage_file.pot +++ b/storage_file/i18n/storage_file.pot @@ -51,6 +51,11 @@ msgstr "" msgid "Backend" msgstr "" +#. module: storage_file +#: model:ir.model.fields,field_description:storage_file.field_storage_file__backend_categ_id +msgid "Backend Category" +msgstr "" + #. module: storage_file #: model:ir.model.fields,field_description:storage_file.field_storage_backend__backend_view_use_internal_url msgid "Backend View Use Internal Url" @@ -76,6 +81,12 @@ msgstr "" msgid "Cancel" msgstr "" +#. module: storage_file +#: model:ir.model.fields,help:storage_file.field_storage_file__backend_categ_id +#: model:ir.model.fields,help:storage_file.field_storage_file_swap_backend__source_backend_categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_file #: model:ir.model.fields,field_description:storage_file.field_storage_file__checksum msgid "Checksum/SHA1" @@ -133,6 +144,13 @@ msgstr "" msgid "Destination Storage" msgstr "" +#. module: storage_file +#. odoo-python +#: code:addons/storage_file/models/storage_file.py:0 +msgid "" +"Destination backend category must match source backend category for %s." +msgstr "" + #. module: storage_file #. odoo-python #: code:addons/storage_file/wizards/swap_backend.py:0 @@ -367,6 +385,11 @@ msgstr "" msgid "Slug-ified name with ID for URL" msgstr "" +#. module: storage_file +#: model:ir.model.fields,field_description:storage_file.field_storage_file_swap_backend__source_backend_categ_id +msgid "Source Backend Category" +msgstr "" + #. module: storage_file #: model:ir.model.fields,field_description:storage_file.field_storage_file_swap_backend__source_backend_id msgid "Source Storage" From 9ef62189581c0ae1486c7c0768df5553ae23c81f Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 24 Jun 2026 07:46:35 +0000 Subject: [PATCH 07/15] [UPD] Update storage_image.pot --- storage_image/i18n/storage_image.pot | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/storage_image/i18n/storage_image.pot b/storage_image/i18n/storage_image.pot index c8dc2ae4e6..ebafffa6f0 100644 --- a/storage_image/i18n/storage_image.pot +++ b/storage_image/i18n/storage_image.pot @@ -45,11 +45,21 @@ msgstr "" msgid "Backend" msgstr "" +#. module: storage_image +#: model:ir.model.fields,field_description:storage_image.field_storage_image__backend_categ_id +msgid "Backend Category" +msgstr "" + #. module: storage_image #: model_terms:ir.ui.view,arch_db:storage_image.storage_file_replace_view_form msgid "Cancel" msgstr "" +#. module: storage_image +#: model:ir.model.fields,help:storage_image.field_storage_image__backend_categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_image #: model:ir.model.fields,field_description:storage_image.field_storage_image__checksum msgid "Checksum/SHA1" From b7280821bb30d931df047efffc9fde39fa60823f Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 24 Jun 2026 07:46:36 +0000 Subject: [PATCH 08/15] [UPD] Update storage_media.pot --- storage_media/i18n/storage_media.pot | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/storage_media/i18n/storage_media.pot b/storage_media/i18n/storage_media.pot index 7203d9caea..753eda546b 100644 --- a/storage_media/i18n/storage_media.pot +++ b/storage_media/i18n/storage_media.pot @@ -39,11 +39,21 @@ msgstr "" msgid "Backend" msgstr "" +#. module: storage_media +#: model:ir.model.fields,field_description:storage_media.field_storage_media__backend_categ_id +msgid "Backend Category" +msgstr "" + #. module: storage_media #: model_terms:ir.ui.view,arch_db:storage_media.storage_file_replace_view_form msgid "Cancel" msgstr "" +#. module: storage_media +#: model:ir.model.fields,help:storage_media.field_storage_media__backend_categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_media #: model:ir.model.fields,field_description:storage_media.field_storage_media__checksum msgid "Checksum/SHA1" From 8b19e709b9c0f869f4a03bece2995ededc4ee4d1 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 24 Jun 2026 07:46:37 +0000 Subject: [PATCH 09/15] [UPD] Update storage_thumbnail.pot --- storage_thumbnail/i18n/storage_thumbnail.pot | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/storage_thumbnail/i18n/storage_thumbnail.pot b/storage_thumbnail/i18n/storage_thumbnail.pot index adc4158782..86177432aa 100644 --- a/storage_thumbnail/i18n/storage_thumbnail.pot +++ b/storage_thumbnail/i18n/storage_thumbnail.pot @@ -23,6 +23,16 @@ msgstr "" msgid "Active" msgstr "" +#. module: storage_thumbnail +#: model:ir.model.fields,field_description:storage_thumbnail.field_storage_thumbnail__backend_categ_id +msgid "Backend Category" +msgstr "" + +#. module: storage_thumbnail +#: model:ir.model.fields,help:storage_thumbnail.field_storage_thumbnail__backend_categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_thumbnail #: model:ir.model.fields,field_description:storage_thumbnail.field_storage_thumbnail__checksum msgid "Checksum/SHA1" From 7c21840f8cde115c8593a07cb557bcd4d2ed33aa Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 24 Jun 2026 07:51:16 +0000 Subject: [PATCH 10/15] [BOT] post-merge updates --- README.md | 8 ++--- storage_backend/README.rst | 26 ++++++++------- storage_backend/__manifest__.py | 2 +- storage_backend/static/description/index.html | 32 +++++++++++-------- storage_file/README.rst | 2 +- storage_file/__manifest__.py | 2 +- storage_file/static/description/index.html | 2 +- storage_image/README.rst | 2 +- storage_image/__manifest__.py | 2 +- storage_image/static/description/index.html | 2 +- storage_media/__manifest__.py | 2 +- 11 files changed, 46 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index ee9557a725..12221a1d6c 100644 --- a/README.md +++ b/README.md @@ -35,15 +35,15 @@ addon | version | maintainers | summary [fs_storage_ms_drive](fs_storage_ms_drive/) | 18.0.2.0.0 | lmignon | Add the microsoft drives (OneDrive, Sharepoint) as a storage backend [image_tag](image_tag/) | 18.0.1.0.0 | | Image tag model [microsoft_drive_account](microsoft_drive_account/) | 18.0.2.0.1 | lmignon | Link user with Microsoft -[storage_backend](storage_backend/) | 18.0.1.0.0 | | Implement the concept of Storage with amazon S3, sftp... +[storage_backend](storage_backend/) | 18.0.1.1.0 | | Implement the concept of Storage with amazon S3, sftp... [storage_backend_ftp](storage_backend_ftp/) | 18.0.1.0.0 | | Implement FTP Storage [storage_backend_s3](storage_backend_s3/) | 18.0.1.1.0 | | Implement amazon S3 Storage [storage_backend_sftp](storage_backend_sftp/) | 18.0.1.0.0 | | Implement SFTP Storage -[storage_file](storage_file/) | 18.0.1.2.0 | | Storage file in storage backend +[storage_file](storage_file/) | 18.0.1.3.0 | | Storage file in storage backend [storage_file_swap_backend_queue](storage_file_swap_backend_queue/) | 18.0.1.1.0 | simahawk | Delegate storage file backend swap to queue jobs -[storage_image](storage_image/) | 18.0.1.2.0 | | Store image and resized image in a storage backend +[storage_image](storage_image/) | 18.0.1.3.0 | | Store image and resized image in a storage backend [storage_image_product](storage_image_product/) | 18.0.1.1.0 | | Link images to products and categories -[storage_media](storage_media/) | 18.0.1.3.0 | | Give the posibility to store media data in Odoo +[storage_media](storage_media/) | 18.0.1.4.0 | | Give the posibility to store media data in Odoo [storage_media_product](storage_media_product/) | 18.0.1.1.0 | | Link media to products and categories [storage_thumbnail](storage_thumbnail/) | 18.0.1.1.0 | | Abstract module that add the possibility to have thumbnail diff --git a/storage_backend/README.rst b/storage_backend/README.rst index 381ab35a67..e565dc2c16 100644 --- a/storage_backend/README.rst +++ b/storage_backend/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + =============== Storage Backend =============== @@ -7,13 +11,13 @@ Storage Backend !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:7b577a9f96f6fa3f26a6fa5603de86b8bca5cc78f82d1ed2948b84766989f458 + !! source digest: sha256:93486c7bc0b8c99e2e3fa71a055f5e4e43bf92c40926732f17bb557116c84b97 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status :alt: Production/Stable -.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstorage-lightgray.png?logo=github @@ -66,15 +70,15 @@ Authors Contributors ------------ -- Sébastien BEAU -- Raphaël Reverdy -- Florian da Costa -- Cédric Pigeon -- Renato Lima -- Benoît Guillot -- Laurent Mignon -- Denis Roussel -- Thien Vo +- Sébastien BEAU +- Raphaël Reverdy +- Florian da Costa +- Cédric Pigeon +- Renato Lima +- Benoît Guillot +- Laurent Mignon +- Denis Roussel +- Thien Vo Other credits ------------- diff --git a/storage_backend/__manifest__.py b/storage_backend/__manifest__.py index f889c6b115..54910063b2 100644 --- a/storage_backend/__manifest__.py +++ b/storage_backend/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Backend", "summary": "Implement the concept of Storage with amazon S3, sftp...", - "version": "18.0.1.0.0", + "version": "18.0.1.1.0", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", diff --git a/storage_backend/static/description/index.html b/storage_backend/static/description/index.html index 046d42905f..fa49bd30f7 100644 --- a/storage_backend/static/description/index.html +++ b/storage_backend/static/description/index.html @@ -3,7 +3,7 @@ -Storage Backend +README.rst -
-

Storage Backend

+
+ + +Odoo Community Association + +
+

Storage Backend

-

Production/Stable License: LGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

+

Production/Stable License: LGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

Table of contents

    @@ -386,13 +391,13 @@

    Storage Backend

-

Bug Tracker

+

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 @@ -400,15 +405,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Akretion
-

Contributors

+

Contributors

-

Other credits

+

Other credits

The migration of this module from 16.0 to 18.0 was financially supported by Camptocamp.

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -440,5 +445,6 @@

Maintainers

+
diff --git a/storage_file/README.rst b/storage_file/README.rst index eb7a8e63af..36208ba90d 100644 --- a/storage_file/README.rst +++ b/storage_file/README.rst @@ -11,7 +11,7 @@ Storage File !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c7ccd99c8428f973c93fbbdde0021b61a5db3077bc2d7722a2f929611f8ac415 + !! source digest: sha256:1a39ce2643e5a57b4e3f701fc78da93169b1f50f769ad33acdeda1de1691fa4f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/storage_file/__manifest__.py b/storage_file/__manifest__.py index 87c22813d0..510b1d59b9 100644 --- a/storage_file/__manifest__.py +++ b/storage_file/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage File", "summary": "Storage file in storage backend", - "version": "18.0.1.2.0", + "version": "18.0.1.3.0", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", diff --git a/storage_file/static/description/index.html b/storage_file/static/description/index.html index 8f336fd518..4391f4351a 100644 --- a/storage_file/static/description/index.html +++ b/storage_file/static/description/index.html @@ -372,7 +372,7 @@

Storage File

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:c7ccd99c8428f973c93fbbdde0021b61a5db3077bc2d7722a2f929611f8ac415 +!! source digest: sha256:1a39ce2643e5a57b4e3f701fc78da93169b1f50f769ad33acdeda1de1691fa4f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Production/Stable License: LGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

External file management depending on Storage Backend module.

diff --git a/storage_image/README.rst b/storage_image/README.rst index b119ddd1e8..bf59199252 100644 --- a/storage_image/README.rst +++ b/storage_image/README.rst @@ -11,7 +11,7 @@ Storage Image !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5d665efc3d0b5c44f7dec44b33a76b1f1d53557ca28803cdaf1613f2814bb73b + !! source digest: sha256:712e4584c2da173c5f4276cd4c4a84ede999188592a0ff0c8f82c118754bc178 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/storage_image/__manifest__.py b/storage_image/__manifest__.py index e91a2d1dd4..14761d5c7a 100644 --- a/storage_image/__manifest__.py +++ b/storage_image/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Image", "summary": "Store image and resized image in a storage backend", - "version": "18.0.1.2.0", + "version": "18.0.1.3.0", "category": "Storage", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", diff --git a/storage_image/static/description/index.html b/storage_image/static/description/index.html index da1d4dfef7..b1cce27b65 100644 --- a/storage_image/static/description/index.html +++ b/storage_image/static/description/index.html @@ -372,7 +372,7 @@

Storage Image

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:5d665efc3d0b5c44f7dec44b33a76b1f1d53557ca28803cdaf1613f2814bb73b +!! source digest: sha256:712e4584c2da173c5f4276cd4c4a84ede999188592a0ff0c8f82c118754bc178 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Production/Stable License: LGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

External image management depending on Storage File module.

diff --git a/storage_media/__manifest__.py b/storage_media/__manifest__.py index abc65c1a52..983e18c01b 100644 --- a/storage_media/__manifest__.py +++ b/storage_media/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Storage Media", "summary": "Give the posibility to store media data in Odoo", - "version": "18.0.1.3.0", + "version": "18.0.1.4.0", "category": "Uncategorized", "website": "https://github.com/OCA/storage", "author": " Akretion, Odoo Community Association (OCA)", From 8a10e9929fa83274cec6e1ef08c288b577b72336 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 24 Jun 2026 07:51:32 +0000 Subject: [PATCH 11/15] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: storage-18.0/storage-18.0-storage_thumbnail Translate-URL: https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-storage_thumbnail/ --- storage_thumbnail/i18n/it.po | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/storage_thumbnail/i18n/it.po b/storage_thumbnail/i18n/it.po index 5403a71050..f1a5fc5009 100644 --- a/storage_thumbnail/i18n/it.po +++ b/storage_thumbnail/i18n/it.po @@ -26,6 +26,16 @@ msgstr "Percorso accessibile, non URL base" msgid "Active" msgstr "Attivo" +#. module: storage_thumbnail +#: model:ir.model.fields,field_description:storage_thumbnail.field_storage_thumbnail__backend_categ_id +msgid "Backend Category" +msgstr "" + +#. module: storage_thumbnail +#: model:ir.model.fields,help:storage_thumbnail.field_storage_thumbnail__backend_categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_thumbnail #: model:ir.model.fields,field_description:storage_thumbnail.field_storage_thumbnail__checksum msgid "Checksum/SHA1" From 3482053095644723f11bf350cbfcddefd7e80feb Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 24 Jun 2026 07:51:32 +0000 Subject: [PATCH 12/15] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: storage-18.0/storage-18.0-storage_backend Translate-URL: https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-storage_backend/ --- storage_backend/i18n/es.po | 38 ++++++++++++++++++++++++++++++++++++++ storage_backend/i18n/it.po | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/storage_backend/i18n/es.po b/storage_backend/i18n/es.po index dd0bbfcc51..d314dff078 100644 --- a/storage_backend/i18n/es.po +++ b/storage_backend/i18n/es.po @@ -32,6 +32,23 @@ msgstr "Tipo de servidor" msgid "Backend Type Env Default" msgstr "Tipo de servidor Ent Por defecto" +#. module: storage_backend +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__backend_ids +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_category_view_form +msgid "Backends" +msgstr "" + +#. module: storage_backend +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend__categ_id +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_view_search +msgid "Category" +msgstr "" + +#. module: storage_backend +#: model:ir.model.fields,help:storage_backend.field_storage_backend__categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_backend #. odoo-python #: code:addons/storage_backend/models/storage_backend.py:0 @@ -46,14 +63,21 @@ msgstr "¡Conexión de Prueba Exitosa!" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__create_uid +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__create_uid msgid "Created by" msgstr "Creado por" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__create_date +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__create_date msgid "Created on" msgstr "Creado el" +#. module: storage_backend +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__description +msgid "Description" +msgstr "" + #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__directory_path msgid "Directory Path" @@ -66,6 +90,7 @@ msgstr "Ruta del Directorio Ent Predet" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__display_name +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__display_name msgid "Display Name" msgstr "Mostrar Nombre" @@ -87,21 +112,25 @@ msgstr "Tiene Validación" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__id +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__id msgid "ID" msgstr "ID(identificación)" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__write_uid +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__write_uid msgid "Last Updated by" msgstr "Última Actualización por" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__write_date +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__write_date msgid "Last Updated on" msgstr "Última Actualización el" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__name +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__name msgid "Name" msgstr "Nombre" @@ -126,6 +155,15 @@ msgstr "Valores por defecto del Entorno de Servidor" msgid "Storage Backend" msgstr "Servidor de Almacenamiento" +#. module: storage_backend +#: model:ir.actions.act_window,name:storage_backend.act_open_storage_backend_category_view +#: model:ir.model,name:storage_backend.model_storage_backend_category +#: model:ir.ui.menu,name:storage_backend.menu_storage_backend_category +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_category_view_form +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_category_view_search +msgid "Storage Backend Category" +msgstr "" + #. module: storage_backend #: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_view_form msgid "Test connection" diff --git a/storage_backend/i18n/it.po b/storage_backend/i18n/it.po index 857e437968..2b3f1d59f2 100644 --- a/storage_backend/i18n/it.po +++ b/storage_backend/i18n/it.po @@ -32,6 +32,23 @@ msgstr "Tipo backend" msgid "Backend Type Env Default" msgstr "Tipo backend ambiente predefinito" +#. module: storage_backend +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__backend_ids +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_category_view_form +msgid "Backends" +msgstr "" + +#. module: storage_backend +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend__categ_id +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_view_search +msgid "Category" +msgstr "" + +#. module: storage_backend +#: model:ir.model.fields,help:storage_backend.field_storage_backend__categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_backend #. odoo-python #: code:addons/storage_backend/models/storage_backend.py:0 @@ -46,14 +63,21 @@ msgstr "Test connessione avvenuto con successo!" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__create_uid +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__create_uid msgid "Created by" msgstr "Creato da" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__create_date +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__create_date msgid "Created on" msgstr "Creato il" +#. module: storage_backend +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__description +msgid "Description" +msgstr "" + #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__directory_path msgid "Directory Path" @@ -66,6 +90,7 @@ msgstr "Percorso cartella ambiente predefinito" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__display_name +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__display_name msgid "Display Name" msgstr "Nome visualizzato" @@ -87,21 +112,25 @@ msgstr "Ha validazione" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__id +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__id msgid "ID" msgstr "ID" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__write_uid +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__write_uid msgid "Last Updated by" msgstr "Ultimo aggiornamento di" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__write_date +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__write_date msgid "Last Updated on" msgstr "Ultimo aggiornamento il" #. module: storage_backend #: model:ir.model.fields,field_description:storage_backend.field_storage_backend__name +#: model:ir.model.fields,field_description:storage_backend.field_storage_backend_category__name msgid "Name" msgstr "Nome" @@ -126,6 +155,15 @@ msgstr "Predefiniti ambiente server" msgid "Storage Backend" msgstr "Backend deposito" +#. module: storage_backend +#: model:ir.actions.act_window,name:storage_backend.act_open_storage_backend_category_view +#: model:ir.model,name:storage_backend.model_storage_backend_category +#: model:ir.ui.menu,name:storage_backend.menu_storage_backend_category +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_category_view_form +#: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_category_view_search +msgid "Storage Backend Category" +msgstr "" + #. module: storage_backend #: model_terms:ir.ui.view,arch_db:storage_backend.storage_backend_view_form msgid "Test connection" From e3ace8efa99502611d87cfcb4e487f47774ce6ca Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 24 Jun 2026 07:51:32 +0000 Subject: [PATCH 13/15] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: storage-18.0/storage-18.0-storage_image Translate-URL: https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-storage_image/ --- storage_image/i18n/it.po | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/storage_image/i18n/it.po b/storage_image/i18n/it.po index d779ad2cf3..5131eadb18 100644 --- a/storage_image/i18n/it.po +++ b/storage_image/i18n/it.po @@ -48,11 +48,21 @@ msgstr "Nome alternativo immagine" msgid "Backend" msgstr "" +#. module: storage_image +#: model:ir.model.fields,field_description:storage_image.field_storage_image__backend_categ_id +msgid "Backend Category" +msgstr "" + #. module: storage_image #: model_terms:ir.ui.view,arch_db:storage_image.storage_file_replace_view_form msgid "Cancel" msgstr "Annulla" +#. module: storage_image +#: model:ir.model.fields,help:storage_image.field_storage_image__backend_categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_image #: model:ir.model.fields,field_description:storage_image.field_storage_image__checksum msgid "Checksum/SHA1" From 7d802bd76b8a272d0c0f946df2c1302a13de17e7 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 24 Jun 2026 07:51:32 +0000 Subject: [PATCH 14/15] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: storage-18.0/storage-18.0-storage_media Translate-URL: https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-storage_media/ --- storage_media/i18n/it.po | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/storage_media/i18n/it.po b/storage_media/i18n/it.po index 35fdc13e77..6940df6f06 100644 --- a/storage_media/i18n/it.po +++ b/storage_media/i18n/it.po @@ -42,11 +42,21 @@ msgstr "In archivio" msgid "Backend" msgstr "" +#. module: storage_media +#: model:ir.model.fields,field_description:storage_media.field_storage_media__backend_categ_id +msgid "Backend Category" +msgstr "" + #. module: storage_media #: model_terms:ir.ui.view,arch_db:storage_media.storage_file_replace_view_form msgid "Cancel" msgstr "Annulla" +#. module: storage_media +#: model:ir.model.fields,help:storage_media.field_storage_media__backend_categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_media #: model:ir.model.fields,field_description:storage_media.field_storage_media__checksum msgid "Checksum/SHA1" From 1a7f158476d0bd450d15404d90e0245ad7dc97ae Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 24 Jun 2026 07:51:32 +0000 Subject: [PATCH 15/15] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: storage-18.0/storage-18.0-storage_file Translate-URL: https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-storage_file/ --- storage_file/i18n/it.po | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/storage_file/i18n/it.po b/storage_file/i18n/it.po index fc633a1c24..f1283e7f61 100644 --- a/storage_file/i18n/it.po +++ b/storage_file/i18n/it.po @@ -56,6 +56,11 @@ msgstr "" msgid "Backend" msgstr "" +#. module: storage_file +#: model:ir.model.fields,field_description:storage_file.field_storage_file__backend_categ_id +msgid "Backend Category" +msgstr "" + #. module: storage_file #: model:ir.model.fields,field_description:storage_file.field_storage_backend__backend_view_use_internal_url msgid "Backend View Use Internal Url" @@ -81,6 +86,12 @@ msgstr "URL base per i file" msgid "Cancel" msgstr "" +#. module: storage_file +#: model:ir.model.fields,help:storage_file.field_storage_file__backend_categ_id +#: model:ir.model.fields,help:storage_file.field_storage_file_swap_backend__source_backend_categ_id +msgid "Category to group backends for swapping operations" +msgstr "" + #. module: storage_file #: model:ir.model.fields,field_description:storage_file.field_storage_file__checksum msgid "Checksum/SHA1" @@ -149,6 +160,12 @@ msgstr "" msgid "Destination Storage" msgstr "" +#. module: storage_file +#. odoo-python +#: code:addons/storage_file/models/storage_file.py:0 +msgid "Destination backend category must match source backend category for %s." +msgstr "" + #. module: storage_file #. odoo-python #: code:addons/storage_file/wizards/swap_backend.py:0 @@ -392,6 +409,11 @@ msgstr "Frazione" msgid "Slug-ified name with ID for URL" msgstr "Nome frazionato con ID per URL" +#. module: storage_file +#: model:ir.model.fields,field_description:storage_file.field_storage_file_swap_backend__source_backend_categ_id +msgid "Source Backend Category" +msgstr "" + #. module: storage_file #: model:ir.model.fields,field_description:storage_file.field_storage_file_swap_backend__source_backend_id msgid "Source Storage"