From 2e22397cc346244941349ba67ae3c4f1430d7bd9 Mon Sep 17 00:00:00 2001 From: Patrick Tombez Date: Tue, 2 Oct 2018 10:57:52 +0200 Subject: [PATCH 01/29] Add module custom_image --- base_conditional_image/README.rst | 106 +++++ base_conditional_image/__init__.py | 1 + base_conditional_image/__manifest__.py | 19 + base_conditional_image/i18n/custom_image.pot | 141 ++++++ base_conditional_image/models/__init__.py | 2 + .../models/abstract_image.py | 66 +++ base_conditional_image/models/image.py | 63 +++ .../readme/CONTRIBUTORS.rst | 1 + base_conditional_image/readme/DESCRIPTION.rst | 8 + base_conditional_image/readme/INSTALL.rst | 11 + base_conditional_image/readme/USAGE.rst | 7 + .../security/ir.model.access.csv | 3 + .../static/description/index.html | 447 ++++++++++++++++++ base_conditional_image/views/image_view.xml | 53 +++ 14 files changed, 928 insertions(+) create mode 100644 base_conditional_image/README.rst create mode 100644 base_conditional_image/__init__.py create mode 100644 base_conditional_image/__manifest__.py create mode 100644 base_conditional_image/i18n/custom_image.pot create mode 100644 base_conditional_image/models/__init__.py create mode 100644 base_conditional_image/models/abstract_image.py create mode 100644 base_conditional_image/models/image.py create mode 100644 base_conditional_image/readme/CONTRIBUTORS.rst create mode 100644 base_conditional_image/readme/DESCRIPTION.rst create mode 100644 base_conditional_image/readme/INSTALL.rst create mode 100644 base_conditional_image/readme/USAGE.rst create mode 100644 base_conditional_image/security/ir.model.access.csv create mode 100644 base_conditional_image/static/description/index.html create mode 100644 base_conditional_image/views/image_view.xml diff --git a/base_conditional_image/README.rst b/base_conditional_image/README.rst new file mode 100644 index 00000000000..a0c93c5253e --- /dev/null +++ b/base_conditional_image/README.rst @@ -0,0 +1,106 @@ +================== +Conditional Images +================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/licence-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/9.0/base_conditional_image + :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-9-0/server-tools-9-0-base_conditional_image + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/149/9.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of any model to support conditional images +(based on the record attributes) and to manage them either globally or by company. + +The main goal behind this module is to avoid storing the same image multiple times. +For example, for every partner, there is a related image (most of the time, it's the default one). +With this module properly set up, it will be stored only one time and you can change it whenever you want for all partners. + +**WARNING**: this module cannot be used on the same objects using the module `base_multi_image`. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +The sole purpose of this module is to add an abstract model to be inherited. +So, you will not notice any changes on install. + +To develop using this module, you have to inherit the abstract model `abstract.conditional.image` +to the model that needs the conditional images:: + + class ResPartner(models.Model): + _inherit = ['res.partner', 'abstract.conditional.image'] + _name = 'res.partner' + +Then, configure how the images will be selected for each record. + +Usage +===== + +Go to *Technical Settings > Settings > Images* to configure all the images. +You can define images for specific objects, depending on the attributes and the company of the object. + +The `selector` should return a boolean expression. All fields of the object are available to compute the result. + +The system will first try to match an image with a company set up, then with the ones without a company. +If your object does not have a `company_id` field, this check will be ignored and only images without a company will be used. + +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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Patrick Tombez + +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/base_conditional_image/__init__.py b/base_conditional_image/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/base_conditional_image/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/base_conditional_image/__manifest__.py b/base_conditional_image/__manifest__.py new file mode 100644 index 00000000000..a1fc89cd768 --- /dev/null +++ b/base_conditional_image/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +{ + 'name': 'Conditional Images', + 'version': '12.0.1.0.0', + 'author': 'Camptocamp, Odoo Community Association (OCA)', + 'license': 'AGPL-3', + 'category': 'Misc', + 'depends': [ + 'base', + ], + 'website': 'http://github.com/OCA/server-tools', + 'data': [ + 'views/image_view.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/base_conditional_image/i18n/custom_image.pot b/base_conditional_image/i18n/custom_image.pot new file mode 100644 index 00000000000..bf3f96c9142 --- /dev/null +++ b/base_conditional_image/i18n/custom_image.pot @@ -0,0 +1,141 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * custom_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-10-02 08:36+0000\n" +"PO-Revision-Date: 2018-10-02 08:36+0000\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: custom_image +#: code:addons/custom_image/models/image.py:47 +#, python-format +msgid "At least one image type must be specified" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_company_id +msgid "Company" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,help:custom_image.field_image_company_id +msgid "Company related check. If inherited object does not have a `company_id` field, it will be ignored. The check will first take the records with a company then, if not match is found, the ones without a company." +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_create_uid +msgid "Created by" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_create_date +msgid "Created on" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_abstract_custom_image_display_name +#: model:ir.model.fields,field_description:custom_image.field_image_display_name +msgid "Display Name" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_abstract_custom_image_id +#: model:ir.model.fields,field_description:custom_image.field_image_id +msgid "ID" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_abstract_custom_image_image +#: model:ir.model.fields,field_description:custom_image.field_abstract_custom_image_image_medium +#: model:ir.model.fields,field_description:custom_image.field_abstract_custom_image_image_small +#: model:ir.model.fields,field_description:custom_image.field_image_image +msgid "Image" +msgstr "" + +#. module: custom_image +#: model:ir.actions.act_window,name:custom_image.image_action +#: model:ir.ui.menu,name:custom_image.image_menu +msgid "Images" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_abstract_custom_image___last_update +#: model:ir.model.fields,field_description:custom_image.field_image___last_update +msgid "Last Modified on" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_write_date +msgid "Last Updated on" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_image_medium +msgid "Medium-sized image" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,help:custom_image.field_image_image_medium +msgid "Medium-sized image. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views." +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_model_name +msgid "Model Name" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_name +msgid "Name" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,help:custom_image.field_image_selector +msgid "Python expression used to distinguish the images for the same object. The variable `object` refer to the actual record on which the expression will be executed. An empty expression will always return `True`." +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_selector +#: model:ir.ui.view,arch_db:custom_image.view_image_form +msgid "Selector" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,field_description:custom_image.field_image_image_small +msgid "Small-sized image" +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,help:custom_image.field_image_image_small +msgid "Small-sized image. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required." +msgstr "" + +#. module: custom_image +#: model:ir.model.fields,help:custom_image.field_image_image +msgid "This field holds the standard image, limited to 1024x1024px" +msgstr "" + +#. module: custom_image +#: model:ir.model,name:custom_image.model_abstract_custom_image +msgid "abstract.custom.image" +msgstr "" + +#. module: custom_image +#: model:ir.model,name:custom_image.model_image +msgid "image" +msgstr "" + diff --git a/base_conditional_image/models/__init__.py b/base_conditional_image/models/__init__.py new file mode 100644 index 00000000000..8deef0ec780 --- /dev/null +++ b/base_conditional_image/models/__init__.py @@ -0,0 +1,2 @@ +from . import image +from . import abstract_image diff --git a/base_conditional_image/models/abstract_image.py b/base_conditional_image/models/abstract_image.py new file mode 100644 index 00000000000..0aa43c5786c --- /dev/null +++ b/base_conditional_image/models/abstract_image.py @@ -0,0 +1,66 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +from odoo import fields, models +from odoo.tools.safe_eval import safe_eval + + +class AbstractConditionalImage(models.AbstractModel): + _name = 'abstract.conditional.image' + + image = fields.Binary( + compute='_compute_image', string="Image", + store=False, readonly=True + ) + image_medium = fields.Binary( + compute='_compute_image', string="Image", + store=False, readonly=True + ) + image_small = fields.Binary( + compute='_compute_image', string="Image", + store=False, readonly=True + ) + + @staticmethod + def _compute_selector_test_without_company(image_selector, record): + return bool( + safe_eval(image_selector.selector or "True", {'object': record}) + ) + + @staticmethod + def _compute_selector_test_with_company(image_selector, record): + if (image_selector.company_id == record.company_id or + record.company_id and not image_selector.company_id): + return AbstractConditionalImage\ + ._compute_selector_test_without_company( + image_selector, record + ) + return False + + def _compute_image(self): + if 'company_id' in self._fields: + search_clause = [('model_name', '=', self._name)] + test_method = self._compute_selector_test_with_company + else: + # If inherited object doesn't have a `company_id` field, + # remove the items with a company defined and the related checks + search_clause = [('model_name', '=', self._name), + ('company_id', '=', False)] + test_method = self._compute_selector_test_without_company + + image_selectors = self.env['image'].search( + search_clause, order='company_id, selector' + ) + + for rec in self: + found = None + for image_selector in image_selectors: + if test_method(image_selector, rec): + found = image_selector + break + + rec.update({ + 'image': found and found.image, + 'image_medium': found and found.image_medium, + 'image_small': found and found.image_small, + }) diff --git a/base_conditional_image/models/image.py b/base_conditional_image/models/image.py new file mode 100644 index 00000000000..f361fef2b20 --- /dev/null +++ b/base_conditional_image/models/image.py @@ -0,0 +1,63 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +from odoo import api, fields, models, tools, _ +from odoo.exceptions import ValidationError + + +class Image(models.Model): + _name = 'image' + + name = fields.Char('Name', required=True) + model_name = fields.Char('Model Name', required=True) + selector = fields.Text( + 'Selector', + help='Python expression used as selector when multiple images are used' + 'for the same object. The variable `object` refer ' + 'to the actual record on which the expression will be executed. ' + 'An empty expression will always return `True`.' + ) + company_id = fields.Many2one( + 'res.company', 'Company', + help='Company related check. If inherited object does not have a ' + '`company_id` field, it will be ignored. ' + 'The check will first take the records with a company then, ' + 'if not match is found, the ones without a company.' + ) + + # image: all image fields are base64 encoded and PIL-supported + image = fields.Binary( + "Image", attachment=True, + help="This field holds the standard image, limited to 1024x1024px" + ) + image_medium = fields.Binary( + "Medium-sized image", attachment=True, + help="Medium-sized image. It is automatically " + "resized as a 128x128px image, with aspect ratio preserved. " + "Use this field in form views or some kanban views." + ) + image_small = fields.Binary( + "Small-sized image", attachment=True, + help="Small-sized image. It is automatically " + "resized as a 64x64px image, with aspect ratio preserved. " + "Use this field anywhere a small image is required." + ) + + @api.model + def _process_images(self, vals, required=False): + if set(['image', 'image_medium', 'image_small']) & set(vals.keys()): + tools.image_resize_images(vals) + elif required: + raise ValidationError( + _('At least one image type must be specified') + ) + + @api.model + def create(self, vals): + self._process_images(vals, required=True) + return super().create(vals) + + @api.multi + def write(self, vals): + self._process_images(vals) + return super().write(vals) diff --git a/base_conditional_image/readme/CONTRIBUTORS.rst b/base_conditional_image/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..78f10edddc1 --- /dev/null +++ b/base_conditional_image/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Patrick Tombez diff --git a/base_conditional_image/readme/DESCRIPTION.rst b/base_conditional_image/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..43630823e69 --- /dev/null +++ b/base_conditional_image/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +This module extends the functionality of any model to support conditional images +(based on the record attributes) and to manage them either globally or by company. + +The main goal behind this module is to avoid storing the same image multiple times. +For example, for every partner, there is a related image (most of the time, it's the default one). +With this module properly set up, it will be stored only one time and you can change it whenever you want for all partners. + +**WARNING**: this module cannot be used on the same objects using the module `base_multi_image`. diff --git a/base_conditional_image/readme/INSTALL.rst b/base_conditional_image/readme/INSTALL.rst new file mode 100644 index 00000000000..18474d1c9fe --- /dev/null +++ b/base_conditional_image/readme/INSTALL.rst @@ -0,0 +1,11 @@ +The sole purpose of this module is to add an abstract model to be inherited. +So, you will not notice any changes on install. + +To develop using this module, you have to inherit the abstract model `abstract.conditional.image` +to the model that needs the conditional images:: + + class ResPartner(models.Model): + _inherit = ['res.partner', 'abstract.conditional.image'] + _name = 'res.partner' + +Then, configure how the images will be selected for each record. diff --git a/base_conditional_image/readme/USAGE.rst b/base_conditional_image/readme/USAGE.rst new file mode 100644 index 00000000000..6c70db0389e --- /dev/null +++ b/base_conditional_image/readme/USAGE.rst @@ -0,0 +1,7 @@ +Go to *Technical Settings > Settings > Images* to configure all the images. +You can define images for specific objects, depending on the attributes and the company of the object. + +The `selector` should return a boolean expression. All fields of the object are available to compute the result. + +The system will first try to match an image with a company set up, then with the ones without a company. +If your object does not have a `company_id` field, this check will be ignored and only images without a company will be used. diff --git a/base_conditional_image/security/ir.model.access.csv b/base_conditional_image/security/ir.model.access.csv new file mode 100644 index 00000000000..0609565ced6 --- /dev/null +++ b/base_conditional_image/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_conditional_image,Conditional Image,base_conditional_image.model_image,base.group_no_one,1,1,1,1 +access_conditional_image_users,Conditional Image Users,base_conditional_image.model_image,base.group_user,1,0,0,0 diff --git a/base_conditional_image/static/description/index.html b/base_conditional_image/static/description/index.html new file mode 100644 index 00000000000..43ed7f52d66 --- /dev/null +++ b/base_conditional_image/static/description/index.html @@ -0,0 +1,447 @@ + + + + + + +Conditional Images + + + +
+

Conditional Images

+ + +

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runbot

+

This module extends the functionality of any model to support conditional images +(based on the record attributes) and to manage them either globally or by company.

+

The main goal behind this module is to avoid storing the same image multiple times. +For example, for every partner, there is a related image (most of the time, it’s the default one). +With this module properly set up, it will be stored only one time and you can change it whenever you want for all partners.

+

WARNING: this module cannot be used on the same objects using the module base_multi_image.

+

Table of contents

+ +
+

Installation

+

The sole purpose of this module is to add an abstract model to be inherited. +So, you will not notice any changes on install.

+

To develop using this module, you have to inherit the abstract model abstract.conditional.image +to the model that needs the conditional images:

+
+class ResPartner(models.Model):
+    _inherit = ['res.partner', 'abstract.conditional.image']
+    _name = 'res.partner'
+
+

Then, configure how the images will be selected for each record.

+
+
+

Usage

+

Go to Technical Settings > Settings > Images to configure all the images. +You can define images for specific objects, depending on the attributes and the company of the object.

+

The selector should return a boolean expression. All fields of the object are available to compute the result.

+

The system will first try to match an image with a company set up, then with the ones without a company. +If your object does not have a company_id field, this check will be ignored and only images without a company will be used.

+
+
+

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 smashing it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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/base_conditional_image/views/image_view.xml b/base_conditional_image/views/image_view.xml new file mode 100644 index 00000000000..837299b7c15 --- /dev/null +++ b/base_conditional_image/views/image_view.xml @@ -0,0 +1,53 @@ + + + + + image.tree + image + + + + + + + + + + + + image.form + image + +
+ + + + + + + + + + + + + +
+
+
+ + + Images + image + form + tree,form + + + +
+
From a698d620c84546bce0443f678944c680876798dd Mon Sep 17 00:00:00 2001 From: Patrick Tombez <35060345+p-tombez@users.noreply.github.com> Date: Thu, 14 Nov 2019 10:30:53 +0100 Subject: [PATCH 02/29] Apply suggestions from code review Co-Authored-By: Alex Saunier --- base_conditional_image/README.rst | 10 +- .../i18n/base_conditional_image.pot | 139 ++++++++++++++++++ base_conditional_image/models/image.py | 4 +- .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 8 +- 5 files changed, 150 insertions(+), 11 deletions(-) create mode 100644 base_conditional_image/i18n/base_conditional_image.pot create mode 100644 base_conditional_image/static/description/icon.png diff --git a/base_conditional_image/README.rst b/base_conditional_image/README.rst index a0c93c5253e..26327262477 100644 --- a/base_conditional_image/README.rst +++ b/base_conditional_image/README.rst @@ -14,13 +14,13 @@ Conditional Images :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/9.0/base_conditional_image + :target: https://github.com/OCA/server-tools/tree/12.0/base_conditional_image :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-9-0/server-tools-9-0-base_conditional_image + :target: https://translation.odoo-community.org/projects/server-tools-12-0/server-tools-12-0-base_conditional_image :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/149/9.0 + :target: https://runbot.odoo-community.org/runbot/149/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -71,7 +71,7 @@ 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 smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -101,6 +101,6 @@ 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. +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/base_conditional_image/i18n/base_conditional_image.pot b/base_conditional_image/i18n/base_conditional_image.pot new file mode 100644 index 00000000000..a241befff1a --- /dev/null +++ b/base_conditional_image/i18n/base_conditional_image.pot @@ -0,0 +1,139 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_conditional_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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: base_conditional_image +#: code:addons/base_conditional_image/models/image.py:52 +#, python-format +msgid "At least one image type must be specified" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__company_id +msgid "Company" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,help:base_conditional_image.field_image__company_id +msgid "Company related check. If inherited object does not have a `company_id` field, it will be ignored. The check will first take the records with a company then, if no match is found, the ones without a company." +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__create_uid +msgid "Created by" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__create_date +msgid "Created on" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_abstract_conditional_image__display_name +#: model:ir.model.fields,field_description:base_conditional_image.field_image__display_name +msgid "Display Name" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_abstract_conditional_image__id +#: model:ir.model.fields,field_description:base_conditional_image.field_image__id +msgid "ID" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_abstract_conditional_image__image +#: model:ir.model.fields,field_description:base_conditional_image.field_abstract_conditional_image__image_medium +#: model:ir.model.fields,field_description:base_conditional_image.field_abstract_conditional_image__image_small +#: model:ir.model.fields,field_description:base_conditional_image.field_image__image +msgid "Image" +msgstr "" + +#. module: base_conditional_image +#: model:ir.actions.act_window,name:base_conditional_image.image_action +#: model:ir.ui.menu,name:base_conditional_image.image_menu +msgid "Images" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_abstract_conditional_image____last_update +#: model:ir.model.fields,field_description:base_conditional_image.field_image____last_update +msgid "Last Modified on" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__image_medium +msgid "Medium-sized image" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,help:base_conditional_image.field_image__image_medium +msgid "Medium-sized image. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views." +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__model_name +msgid "Model Name" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__name +msgid "Name" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,help:base_conditional_image.field_image__selector +msgid "Python expression used as selector when multiple images are usedfor the same object. The variable `object` refers to the actual record on which the expression will be executed. An empty expression will always return `True`." +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__selector +#: model_terms:ir.ui.view,arch_db:base_conditional_image.view_image_form +msgid "Selector" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,field_description:base_conditional_image.field_image__image_small +msgid "Small-sized image" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,help:base_conditional_image.field_image__image_small +msgid "Small-sized image. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required." +msgstr "" + +#. module: base_conditional_image +#: model:ir.model.fields,help:base_conditional_image.field_image__image +msgid "This field holds the standard image, limited to 1024x1024px" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model,name:base_conditional_image.model_abstract_conditional_image +msgid "abstract.conditional.image" +msgstr "" + +#. module: base_conditional_image +#: model:ir.model,name:base_conditional_image.model_image +msgid "image" +msgstr "" + diff --git a/base_conditional_image/models/image.py b/base_conditional_image/models/image.py index f361fef2b20..6c32e0e9b20 100644 --- a/base_conditional_image/models/image.py +++ b/base_conditional_image/models/image.py @@ -13,7 +13,7 @@ class Image(models.Model): selector = fields.Text( 'Selector', help='Python expression used as selector when multiple images are used' - 'for the same object. The variable `object` refer ' + 'for the same object. The variable `object` refers ' 'to the actual record on which the expression will be executed. ' 'An empty expression will always return `True`.' ) @@ -22,7 +22,7 @@ class Image(models.Model): help='Company related check. If inherited object does not have a ' '`company_id` field, it will be ignored. ' 'The check will first take the records with a company then, ' - 'if not match is found, the ones without a company.' + 'if no match is found, the ones without a company.' ) # image: all image fields are base64 encoded and PIL-supported diff --git a/base_conditional_image/static/description/icon.png b/base_conditional_image/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/base_conditional_image/static/description/index.html b/base_conditional_image/static/description/index.html index 43ed7f52d66..63a9f2d3a0f 100644 --- a/base_conditional_image/static/description/index.html +++ b/base_conditional_image/static/description/index.html @@ -3,7 +3,7 @@ - + Conditional Images -
-

Conditional Images

+
+ + +Odoo Community Association + +
+

Conditional Images

-

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module extends the functionality of any model to support conditional images (based on the record attributes) and to manage them either globally or by company.

@@ -396,7 +401,7 @@

Conditional Images

-

Installation

+

Installation

The sole purpose of this module is to add an abstract model to be inherited. So, you will not notice any changes on install.

To develop using this module, you have to inherit the abstract model @@ -410,7 +415,7 @@

Installation

Then, configure how the images will be selected for each record.

-

Usage

+

Usage

Go to Technical Settings > Settings > Images to configure all the images. You can define images for specific objects, depending on the attributes and the company of the object.

@@ -422,7 +427,7 @@

Usage

company will be used.

-

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 @@ -430,15 +435,15 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
-

Other credits

+

Other credits

The migration of this module from 12.0 to 14.0 was financially supported by Camptocamp

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -474,5 +479,6 @@

Maintainers

+
diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index 25d7fe2e438..783bf6d717f 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "odoo-addons-oca-server-tools" -version = "18.0.20260430.0" +version = "18.0.20260520.0" dependencies = [ "odoo-addon-attachment_delete_restrict==18.0.*", "odoo-addon-attachment_queue==18.0.*", @@ -9,6 +9,7 @@ dependencies = [ "odoo-addon-auditlog==18.0.*", "odoo-addon-auto_backup==18.0.*", "odoo-addon-autovacuum_message_attachment==18.0.*", + "odoo-addon-base_conditional_image==18.0.*", "odoo-addon-base_cron_exclusion==18.0.*", "odoo-addon-base_exception==18.0.*", "odoo-addon-base_fontawesome==18.0.*", From d19a616016e21f06ea80061ae4d7d1cff8a07921 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 20 May 2026 13:44:57 +0000 Subject: [PATCH 27/29] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: server-tools-18.0/server-tools-18.0-autovacuum_message_attachment Translate-URL: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-autovacuum_message_attachment/ --- autovacuum_message_attachment/i18n/ca.po | 2 ++ autovacuum_message_attachment/i18n/es.po | 2 ++ autovacuum_message_attachment/i18n/es_AR.po | 2 ++ autovacuum_message_attachment/i18n/fr.po | 2 ++ autovacuum_message_attachment/i18n/it.po | 2 ++ 5 files changed, 10 insertions(+) diff --git a/autovacuum_message_attachment/i18n/ca.po b/autovacuum_message_attachment/i18n/ca.po index 1764d6e3bde..6653e92cd24 100644 --- a/autovacuum_message_attachment/i18n/ca.po +++ b/autovacuum_message_attachment/i18n/ca.po @@ -136,6 +136,8 @@ msgstr "" #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image_consumer_mixin__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids diff --git a/autovacuum_message_attachment/i18n/es.po b/autovacuum_message_attachment/i18n/es.po index 4c321589856..2e77563458f 100644 --- a/autovacuum_message_attachment/i18n/es.po +++ b/autovacuum_message_attachment/i18n/es.po @@ -138,6 +138,8 @@ msgstr "Todos" #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image_consumer_mixin__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids diff --git a/autovacuum_message_attachment/i18n/es_AR.po b/autovacuum_message_attachment/i18n/es_AR.po index b3667f0cb93..6f5cbba59cb 100644 --- a/autovacuum_message_attachment/i18n/es_AR.po +++ b/autovacuum_message_attachment/i18n/es_AR.po @@ -138,6 +138,8 @@ msgstr "Todos" #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image_consumer_mixin__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids diff --git a/autovacuum_message_attachment/i18n/fr.po b/autovacuum_message_attachment/i18n/fr.po index d7f73284848..2b05db501aa 100644 --- a/autovacuum_message_attachment/i18n/fr.po +++ b/autovacuum_message_attachment/i18n/fr.po @@ -138,6 +138,8 @@ msgstr "Tous" #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image_consumer_mixin__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids diff --git a/autovacuum_message_attachment/i18n/it.po b/autovacuum_message_attachment/i18n/it.po index de5f4cc70e0..dd6b561742f 100644 --- a/autovacuum_message_attachment/i18n/it.po +++ b/autovacuum_message_attachment/i18n/it.po @@ -138,6 +138,8 @@ msgstr "Tutti" #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_model__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_module__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_cleanup_purge_wizard_table__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image__assigned_attachment_ids +#: model:ir.model.fields,field_description:autovacuum_message_attachment.field_conditional_image_consumer_mixin__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_database_autovacuum_tuning__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_db_backup__assigned_attachment_ids #: model:ir.model.fields,field_description:autovacuum_message_attachment.field_decimal_precision__assigned_attachment_ids From 4c4f695ea5065b584c12c5c1294049640dd5f18b Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 20 May 2026 13:44:58 +0000 Subject: [PATCH 28/29] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: server-tools-18.0/server-tools-18.0-base_name_search_improved Translate-URL: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-base_name_search_improved/ --- base_name_search_improved/i18n/ca.po | 2 ++ base_name_search_improved/i18n/de.po | 2 ++ base_name_search_improved/i18n/es.po | 2 ++ base_name_search_improved/i18n/es_ES.po | 2 ++ base_name_search_improved/i18n/eu.po | 2 ++ base_name_search_improved/i18n/fi.po | 2 ++ base_name_search_improved/i18n/fr.po | 2 ++ base_name_search_improved/i18n/hr.po | 2 ++ base_name_search_improved/i18n/hr_HR.po | 2 ++ base_name_search_improved/i18n/it.po | 2 ++ base_name_search_improved/i18n/nb_NO.po | 2 ++ base_name_search_improved/i18n/nl.po | 2 ++ base_name_search_improved/i18n/pt_BR.po | 2 ++ base_name_search_improved/i18n/sl.po | 2 ++ base_name_search_improved/i18n/tr.po | 2 ++ base_name_search_improved/i18n/tr_TR.po | 2 ++ base_name_search_improved/i18n/zh_CN.po | 2 ++ 17 files changed, 34 insertions(+) diff --git a/base_name_search_improved/i18n/ca.po b/base_name_search_improved/i18n/ca.po index cc28057b011..478b8c2b838 100644 --- a/base_name_search_improved/i18n/ca.po +++ b/base_name_search_improved/i18n/ca.po @@ -224,6 +224,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/de.po b/base_name_search_improved/i18n/de.po index abef8c250ee..f5d0205b9e7 100644 --- a/base_name_search_improved/i18n/de.po +++ b/base_name_search_improved/i18n/de.po @@ -224,6 +224,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/es.po b/base_name_search_improved/i18n/es.po index 2ef869c9a15..084ddca3a89 100644 --- a/base_name_search_improved/i18n/es.po +++ b/base_name_search_improved/i18n/es.po @@ -250,6 +250,8 @@ msgstr "¿Búsqueda inteligente por nombre activada?" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/es_ES.po b/base_name_search_improved/i18n/es_ES.po index 8ce64f9084b..cef85fe50e3 100644 --- a/base_name_search_improved/i18n/es_ES.po +++ b/base_name_search_improved/i18n/es_ES.po @@ -224,6 +224,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/eu.po b/base_name_search_improved/i18n/eu.po index f932158c6bb..09a6b6346c1 100644 --- a/base_name_search_improved/i18n/eu.po +++ b/base_name_search_improved/i18n/eu.po @@ -222,6 +222,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/fi.po b/base_name_search_improved/i18n/fi.po index fe73336cd63..41ad521d6c6 100644 --- a/base_name_search_improved/i18n/fi.po +++ b/base_name_search_improved/i18n/fi.po @@ -222,6 +222,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/fr.po b/base_name_search_improved/i18n/fr.po index 6fa3d25283f..563adb27c74 100644 --- a/base_name_search_improved/i18n/fr.po +++ b/base_name_search_improved/i18n/fr.po @@ -222,6 +222,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/hr.po b/base_name_search_improved/i18n/hr.po index 9060cbdfa18..ee6067a084b 100644 --- a/base_name_search_improved/i18n/hr.po +++ b/base_name_search_improved/i18n/hr.po @@ -223,6 +223,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/hr_HR.po b/base_name_search_improved/i18n/hr_HR.po index 53dae688618..21a6c227184 100644 --- a/base_name_search_improved/i18n/hr_HR.po +++ b/base_name_search_improved/i18n/hr_HR.po @@ -224,6 +224,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/it.po b/base_name_search_improved/i18n/it.po index 914a6bebe52..fbec49a0b4d 100644 --- a/base_name_search_improved/i18n/it.po +++ b/base_name_search_improved/i18n/it.po @@ -248,6 +248,8 @@ msgstr "Ricerca nome intelligente abilitata?" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/nb_NO.po b/base_name_search_improved/i18n/nb_NO.po index fa97ff8da28..34cb3af9cab 100644 --- a/base_name_search_improved/i18n/nb_NO.po +++ b/base_name_search_improved/i18n/nb_NO.po @@ -223,6 +223,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/nl.po b/base_name_search_improved/i18n/nl.po index c545fb181d9..2482f8b6874 100644 --- a/base_name_search_improved/i18n/nl.po +++ b/base_name_search_improved/i18n/nl.po @@ -222,6 +222,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/pt_BR.po b/base_name_search_improved/i18n/pt_BR.po index bcbb689e65a..46c1343db06 100644 --- a/base_name_search_improved/i18n/pt_BR.po +++ b/base_name_search_improved/i18n/pt_BR.po @@ -225,6 +225,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/sl.po b/base_name_search_improved/i18n/sl.po index 1e9b5720c7c..ddf9e64fed7 100644 --- a/base_name_search_improved/i18n/sl.po +++ b/base_name_search_improved/i18n/sl.po @@ -224,6 +224,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/tr.po b/base_name_search_improved/i18n/tr.po index 25416f48bad..0bf816ab5a8 100644 --- a/base_name_search_improved/i18n/tr.po +++ b/base_name_search_improved/i18n/tr.po @@ -235,6 +235,8 @@ msgstr "Akıllı İsim Araması Etkin mi?" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/tr_TR.po b/base_name_search_improved/i18n/tr_TR.po index cd2616913f6..043155f4b81 100644 --- a/base_name_search_improved/i18n/tr_TR.po +++ b/base_name_search_improved/i18n/tr_TR.po @@ -223,6 +223,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search diff --git a/base_name_search_improved/i18n/zh_CN.po b/base_name_search_improved/i18n/zh_CN.po index d950dbd729d..3255292d841 100644 --- a/base_name_search_improved/i18n/zh_CN.po +++ b/base_name_search_improved/i18n/zh_CN.po @@ -223,6 +223,8 @@ msgstr "" #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_own__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_user__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_change_password_wizard__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image__smart_search +#: model:ir.model.fields,field_description:base_name_search_improved.field_conditional_image_consumer_mixin__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_decimal_precision__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_digest__smart_search #: model:ir.model.fields,field_description:base_name_search_improved.field_digest_tip__smart_search From 9fcbf77a85878eb27238275c436e86529fd70daf Mon Sep 17 00:00:00 2001 From: Francesco Foresti Date: Wed, 20 May 2026 13:58:41 +0000 Subject: [PATCH 29/29] Translated using Weblate (Italian) Currently translated at 100.0% (5 of 5 strings) Translation: server-tools-18.0/server-tools-18.0-module_auto_update Translate-URL: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-module_auto_update/it/ --- module_auto_update/i18n/it.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module_auto_update/i18n/it.po b/module_auto_update/i18n/it.po index a0f41a4abcc..ff2f611a1fd 100644 --- a/module_auto_update/i18n/it.po +++ b/module_auto_update/i18n/it.po @@ -9,21 +9,21 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-07-21 02:43+0000\n" -"PO-Revision-Date: 2024-05-03 16:34+0000\n" -"Last-Translator: mymage \n" +"PO-Revision-Date: 2026-05-20 14:50+0000\n" +"Last-Translator: Francesco Foresti \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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 4.17\n" +"X-Generator: Weblate 5.15.2\n" #. module: module_auto_update #: model:ir.actions.server,name:module_auto_update.ir_module_module_upgrade_changed_checksum #: model:ir.ui.menu,name:module_auto_update.menu_ir_module_module_upgrade_changed_checksum msgid "Auto-Upgrade Modules" -msgstr "Aggiorna Moduli Automaticamente" +msgstr "Aggiorna moduli automaticamente" #. module: module_auto_update #. odoo-python