diff --git a/base_multi_image/README.rst b/base_multi_image/README.rst new file mode 100644 index 000000000..3674b6dd0 --- /dev/null +++ b/base_multi_image/README.rst @@ -0,0 +1,124 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +==================== +Multiple Images Base +==================== + +This module extends the functionality of any model to support multiple images +(a gallery) attached to it and allow you to manage them. + +Installation +============ + +This module adds abstract models to work on. Its sole purpose is to serve as +base for other modules that implement galleries, so if you install this one +manually you will notice no change. You should install any other module based +on this one and this will get installed automatically. + +Usage +===== + +To manage all stored images, you need to: + +* Go to *Settings > Technical > Multi images*. + +... but you probably prefer to manage them from the forms supplied by +submodules that inherit this behavior. + +Development +=========== + +To develop a module based on this one: + +* See module ``product_multi_image`` as an example. + +* You have to inherit model ``base_multi_image.owner`` to the model that needs + the gallery:: + + class MyOwner(models.Model): + _name = "my.model.name" + _inherit = ["my.model.name", "base_multi_image.owner"] + + # If you need this, you will need ``post_init_hook_for_submodules`` + old_image_field = fields.Binary(related="image_main", store=False) + +* Somewhere in the owner view, add:: + + + +* If the model you are extending already had an image field, and you want to + trick Odoo to make those images to multi-image mode, you will need to make + use of the provided :meth:`~.hooks.pre_init_hook_for_submodules`, like + the ``product_multi_image`` module does:: + + from openerp.addons.base_multi_image.hooks import \ + pre_init_hook_for_submodules + + + def pre_init_hook(cr): + pre_init_hook_for_submodules(cr, "product.template", "image") + pre_init_hook_for_submodules(cr, "product.product", "image_variant") + + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/149/9.0 + +Known issues / Roadmap +====================== + +* *OS file* storage mode for images is meant to provide a path where Odoo has + read access and the image is already found, **not for making the module store + images there**. It would be nice to add that feature though. + +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 +`_. + +Credits +======= + +Original implementation +----------------------- +This module is inspired in previous module *product_images* from OpenLabs +and Akretion. + +Contributors +------------ + +* Pedro M. Baeza +* Rafael Blasco +* Jairo Llopis +* Sodexis + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/base_multi_image/__init__.py b/base_multi_image/__init__.py new file mode 100644 index 000000000..ef1af5949 --- /dev/null +++ b/base_multi_image/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/base_multi_image/__openerp__.py b/base_multi_image/__openerp__.py new file mode 100644 index 000000000..7fc905cb8 --- /dev/null +++ b/base_multi_image/__openerp__.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# © 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Multiple images base", + "summary": "Allow multiple images for database objects", + "version": "9.0.1.0.0", + "author": "Serv. Tecnol. Avanzados - Pedro M. Baeza, " + "Antiun Ingeniería, S.L., Sodexis, " + "Odoo Community Association (OCA)", + "license": "AGPL-3", + "website": "http://www.antiun.com", + "category": "Tools", + "depends": ['base'], + 'installable': True, + "data": [ + "security/ir.model.access.csv", + "views/image_view.xml", + ], + "images": [ + "images/form.png", + "images/kanban.png", + ], +} diff --git a/base_multi_image/hooks.py b/base_multi_image/hooks.py new file mode 100644 index 000000000..74d29ed55 --- /dev/null +++ b/base_multi_image/hooks.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import api, SUPERUSER_ID +import logging + +_logger = logging.getLogger(__name__) + + +def pre_init_hook_for_submodules(cr, model, field): + """Moves images from single to multi mode. + + Feel free to use this as a ``pre_init_hook`` for submodules. + + :param str model: + Model name, like ``product.template``. + + :param str field: + Binary field that had the images in that :param:`model`, like + ``image``. + """ + env = api.Environment(cr, SUPERUSER_ID, dict()) + with cr.savepoint(): + cr.execute( + """ + INSERT INTO base_multi_image_image ( + owner_id, + owner_model, + storage, + file_db_store + ) + SELECT + id, + %%s, + 'db', + %(field)s + FROM + %(table)s + WHERE + %(field)s IS NOT NULL + """ % {"table": env[model]._table, "field": field}, + (model,) + ) diff --git a/base_multi_image/i18n/de.po b/base_multi_image/i18n/de.po new file mode 100644 index 000000000..3d721bfa3 --- /dev/null +++ b/base_multi_image/i18n/de.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-09 16:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: German (http://www.transifex.com/oca/OCA-server-tools-8-0/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "Erstellt von" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "Erstellt am:" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "ID" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert von" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Name" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "Reihenfolge" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "" diff --git a/base_multi_image/i18n/en.po b/base_multi_image/i18n/en.po new file mode 100644 index 000000000..fc5370994 --- /dev/null +++ b/base_multi_image/i18n/en.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-09 16:29+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: English (http://www.transifex.com/oca/OCA-server-tools-8-0/language/en/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "A document can have only one image with the same name." + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "Comments" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "Created by" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "Created on" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "Database" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "File extension" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "Filename" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "ID" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "Image" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "Image path" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "Image remote URL" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "Image stored in database" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "Image title" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "Images" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "Main image" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "Multi images" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Name" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "OS file" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "Options" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "Owner" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "Owner model" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "Preview" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "Product Images" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "Sequence" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "Storage" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "URL" diff --git a/base_multi_image/i18n/es.po b/base_multi_image/i18n/es.po new file mode 100644 index 000000000..8f3c18dca --- /dev/null +++ b/base_multi_image/i18n/es.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-09 16:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-server-tools-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "ID" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Nombre" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "Secuencia" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "" diff --git a/base_multi_image/i18n/fi.po b/base_multi_image/i18n/fi.po new file mode 100644 index 000000000..ff7b2f774 --- /dev/null +++ b/base_multi_image/i18n/fi.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-09 16:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: Finnish (http://www.transifex.com/oca/OCA-server-tools-8-0/language/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "Luonut" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "Luotu" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "ID" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "Viimeksi päivittänyt" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "Viimeksi päivitetty" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Nimi" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "" diff --git a/base_multi_image/i18n/fr.po b/base_multi_image/i18n/fr.po new file mode 100644 index 000000000..9076febe3 --- /dev/null +++ b/base_multi_image/i18n/fr.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-09 16:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: French (http://www.transifex.com/oca/OCA-server-tools-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "Créé par" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "Créé le" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "ID" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Nom" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "" diff --git a/base_multi_image/i18n/fr_CA.po b/base_multi_image/i18n/fr_CA.po new file mode 100644 index 000000000..3757a027f --- /dev/null +++ b/base_multi_image/i18n/fr_CA.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-09 16:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: French (Canada) (http://www.transifex.com/oca/OCA-server-tools-8-0/language/fr_CA/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr_CA\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Nom" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "" diff --git a/base_multi_image/i18n/it.po b/base_multi_image/i18n/it.po new file mode 100644 index 000000000..cd0b62a6a --- /dev/null +++ b/base_multi_image/i18n/it.po @@ -0,0 +1,166 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +# Paolo Valier, 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-17 15:36+0000\n" +"PO-Revision-Date: 2016-03-13 08:39+0000\n" +"Last-Translator: Paolo Valier\n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "Un documento può avere una sola immagine con lo stesso nome." + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "Commenti" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "Creato da" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "Creato il" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "Database" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "Estensione file" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "Nome del file" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "ID" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "Immagine" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "Percorso immagine" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "URL remoto dell'immagine" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "Immagine salata del database" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "Titolo dell'immagine" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "Immagini" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "Ultimo aggiornamento da" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "Immagine principale" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "Immagini multiple" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Nome" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "Opzioni" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "Proprietario" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "Anteprima" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "Immagini del Prodotto" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "Sequenza" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "URL" diff --git a/base_multi_image/i18n/pt_BR.po b/base_multi_image/i18n/pt_BR.po new file mode 100644 index 000000000..c9ae66782 --- /dev/null +++ b/base_multi_image/i18n/pt_BR.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-09 16:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-server-tools-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "Criado por" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "Criado em" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "Identificação" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "Última atualização por" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "Última atualização em" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Nome" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "Sequência" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "" diff --git a/base_multi_image/i18n/ru.po b/base_multi_image/i18n/ru.po new file mode 100644 index 000000000..01588f4ac --- /dev/null +++ b/base_multi_image/i18n/ru.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-09 16:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: Russian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Название" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "" diff --git a/base_multi_image/i18n/sl.po b/base_multi_image/i18n/sl.po new file mode 100644 index 000000000..d7464ecd4 --- /dev/null +++ b/base_multi_image/i18n/sl.po @@ -0,0 +1,166 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +# Matjaž Mozetič , 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-10 05:44+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "Dokument lahko vsebuje le eno sliko z istim nazivom." + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "Komentarji" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "Ustvaril" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "Ustvarjeno" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "Podatkovna baza" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "Končnica datoteke" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "Naziv datoteke" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "ID" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "Slika" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "Pot do slike" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "URL povezava do slike" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "Slika shranjena v podatkovno bazo" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "Naziv slike" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "Slike" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "Zadnji posodobil" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "Zadnjič posodobljeno" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "Glavna slika" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "Več slik" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Naziv" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "OS datoteka" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "Možnosti" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "Lastnik" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "Model lastnika" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "Predogled" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "Slike proizvoda" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "Zaporedje" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "Shranjevalni medij" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "URL" diff --git a/base_multi_image/i18n/sv.po b/base_multi_image/i18n/sv.po new file mode 100644 index 000000000..ba538d6ff --- /dev/null +++ b/base_multi_image/i18n/sv.po @@ -0,0 +1,22 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_images_olbs +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 5.0.14\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2010-11-22 10:19:32+0000\n" +"PO-Revision-Date: 2010-11-22 10:19:32+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: product_images_olbs +#: model:ir.module.module,shortdesc:product_images_olbs.module_meta_information +msgid "Product Image Gallery" +msgstr "Product Image Gallery" + diff --git a/base_multi_image/i18n/tr.po b/base_multi_image/i18n/tr.po new file mode 100644 index 000000000..8ce2d153a --- /dev/null +++ b/base_multi_image/i18n/tr.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_multi_image +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-12 02:05+0000\n" +"PO-Revision-Date: 2016-03-09 16:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: Turkish (http://www.transifex.com/oca/OCA-server-tools-8-0/language/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/image.py:22 +#: sql_constraint:base_multi_image.image:0 +#, python-format +msgid "A document can have only one image with the same name." +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,comments:0 +msgid "Comments" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,create_uid:0 +msgid "Created by" +msgstr "Oluşturan" + +#. module: base_multi_image +#: field:base_multi_image.image,create_date:0 +msgid "Created on" +msgstr "Oluşturuldu" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "Database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,extension:0 +msgid "File extension" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,filename:0 +msgid "Filename" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,id:0 field:base_multi_image.owner,id:0 +msgid "ID" +msgstr "ID" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Image" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,path:0 help:base_multi_image.image,path:0 +msgid "Image path" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,url:0 +msgid "Image remote URL" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,file_db_store:0 +msgid "Image stored in database" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,name:0 +msgid "Image title" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_tree_view +#: field:base_multi_image.owner,image_ids:0 +msgid "Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,write_uid:0 +msgid "Last Updated by" +msgstr "Son güncelleyen" + +#. module: base_multi_image +#: field:base_multi_image.image,write_date:0 +msgid "Last Updated on" +msgstr "Son güncellenme" + +#. module: base_multi_image +#: code:addons/base_multi_image/models/owner.py:73 +#, python-format +msgid "Main image" +msgstr "" + +#. module: base_multi_image +#: model:ir.actions.act_window,name:base_multi_image.image_action +#: model:ir.ui.menu,name:base_multi_image.image_menu +msgid "Multi images" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Name" +msgstr "Adı" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "OS file" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Options" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +#: field:base_multi_image.image,owner_id:0 +msgid "Owner" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,owner_model:0 +msgid "Owner model" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_form_view +msgid "Preview" +msgstr "" + +#. module: base_multi_image +#: view:base_multi_image.image:base_multi_image.image_kanban_view +msgid "Product Images" +msgstr "" + +#. module: base_multi_image +#: field:base_multi_image.image,sequence:0 +msgid "Sequence" +msgstr "Sıra" + +#. module: base_multi_image +#: field:base_multi_image.image,storage:0 +msgid "Storage" +msgstr "" + +#. module: base_multi_image +#: selection:base_multi_image.image,storage:0 +msgid "URL" +msgstr "" diff --git a/base_multi_image/images/form.png b/base_multi_image/images/form.png new file mode 100644 index 000000000..62f619b6a Binary files /dev/null and b/base_multi_image/images/form.png differ diff --git a/base_multi_image/images/kanban.png b/base_multi_image/images/kanban.png new file mode 100644 index 000000000..067cd4088 Binary files /dev/null and b/base_multi_image/images/kanban.png differ diff --git a/base_multi_image/models/__init__.py b/base_multi_image/models/__init__.py new file mode 100644 index 000000000..aa8f852f6 --- /dev/null +++ b/base_multi_image/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import image, owner diff --git a/base_multi_image/models/image.py b/base_multi_image/models/image.py new file mode 100644 index 000000000..187cbbf90 --- /dev/null +++ b/base_multi_image/models/image.py @@ -0,0 +1,176 @@ +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import base64 +import urllib +import os +import logging +from openerp import models, fields, api, exceptions, _ +from openerp import tools + +_logger = logging.getLogger(__name__) + + +class Image(models.Model): + _name = "base_multi_image.image" + _order = "sequence, owner_model, owner_id, id" + _sql_constraints = [ + ('uniq_name_owner', 'UNIQUE(owner_id, owner_model, name)', + _('A document can have only one image with the same name.')), + ] + + owner_id = fields.Integer( + "Owner", + required=True) + owner_model = fields.Char( + required=True) + storage = fields.Selection( + [('url', 'URL'), ('file', 'OS file'), ('db', 'Database')], + required=True) + name = fields.Char( + 'Image title', + translate=True) + filename = fields.Char() + extension = fields.Char( + 'File extension', + readonly=True) + file_db_store = fields.Binary( + 'Image stored in database', + filters='*.png,*.jpg,*.gif') + path = fields.Char( + "Image path", + help="Image path") + url = fields.Char( + 'Image remote URL') + image_main = fields.Binary( + "Full-sized image", + compute="_get_image") + image_medium = fields.Binary( + "Medium-sized image", + compute="_get_image_sizes", + help="Medium-sized image. It is automatically resized as a " + "128 x 128 px image, with aspect ratio preserved, only when the " + "image exceeds one of those sizes. Use this field in form views " + "or kanban views.") + image_small = fields.Binary( + "Small-sized image", + compute="_get_image_sizes", + help="Small-sized image. It is automatically resized as a 64 x 64 px " + "image, with aspect ratio preserved. Use this field anywhere a " + "small image is required.") + comments = fields.Text( + 'Comments', + translate=True) + sequence = fields.Integer( + default=10) + show_technical = fields.Boolean( + compute="_show_technical") + + @api.multi + @api.depends('storage', 'path', 'file_db_store', 'url') + def _get_image(self): + """Get image data from the right storage type.""" + for s in self: + s.image_main = getattr(s, "_get_image_from_%s" % s.storage)() + + @api.multi + @api.depends("owner_id", "owner_model") + def _show_technical(self): + """Know if you need to show the technical fields.""" + self.show_technical = all( + "default_owner_%s" % f not in self.env.context + for f in ("id", "model")) + + @api.multi + def _get_image_from_db(self): + return self.file_db_store + + @api.multi + def _get_image_from_file(self): + if self.path and os.path.exists(self.path): + try: + with open(self.path, 'rb') as f: + return base64.b64encode(f.read()) + except Exception as e: + _logger.error("Can not open the image %s, error : %s", + self.path, e, exc_info=True) + else: + _logger.error("The image %s doesn't exist ", self.path) + + return False + + @api.multi + def _get_image_from_url(self): + return self._get_image_from_url_cached(self.url) + + @api.model + @tools.ormcache(skiparg=1) + def _get_image_from_url_cached(self, url): + """Allow to download an image and cache it by its URL.""" + if url: + try: + (filename, header) = urllib.urlretrieve(url) + with open(filename, 'rb') as f: + return base64.b64encode(f.read()) + except: + _logger.error("URL %s cannot be fetched", url, + exc_info=True) + + return False + + @api.multi + @api.depends('image_main') + def _get_image_sizes(self): + for s in self: + try: + vals = tools.image_get_resized_images( + s.with_context(bin_size=False).image_main) + except: + vals = {"image_medium": False, + "image_small": False} + s.update(vals) + + @api.model + def _make_name_pretty(self, name): + return name.replace('_', ' ').capitalize() + + @api.onchange('url') + def _onchange_url(self): + if self.url: + filename = self.url.split('/')[-1] + self.name, self.extension = os.path.splitext(filename) + self.name = self._make_name_pretty(self.name) + + @api.onchange('path') + def _onchange_path(self): + if self.path: + self.name, self.extension = os.path.splitext(os.path.basename( + self.path)) + self.name = self._make_name_pretty(self.name) + + @api.onchange('filename') + def _onchange_filename(self): + if self.filename: + self.name, self.extension = os.path.splitext(self.filename) + self.name = self._make_name_pretty(self.name) + + @api.constrains('storage', 'url') + def _check_url(self): + if self.storage == 'url' and not self.url: + raise exceptions.ValidationError( + 'You must provide an URL for the image.') + + @api.constrains('storage', 'path') + def _check_path(self): + if self.storage == 'file' and not self.path: + raise exceptions.ValidationError( + 'You must provide a file path for the image.') + + @api.constrains('storage', 'file_db_store') + def _check_store(self): + if self.storage == 'db' and not self.file_db_store: + raise exceptions.ValidationError( + 'You must provide an attached file for the image.') diff --git a/base_multi_image/models/owner.py b/base_multi_image/models/owner.py new file mode 100644 index 000000000..1f85bc03c --- /dev/null +++ b/base_multi_image/models/owner.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import _, api, fields, models, tools + + +class Owner(models.AbstractModel): + _name = "base_multi_image.owner" + + image_ids = fields.One2many( + comodel_name='base_multi_image.image', + inverse_name='owner_id', + string='Images', + domain=lambda self: [("owner_model", "=", self._name)], + copy=True) + image_main = fields.Binary( + string="Main image", + store=False, + compute="_get_multi_image", + inverse="_set_multi_image_main") + image_main_medium = fields.Binary( + string="Medium image", + compute="_get_multi_image", + inverse="_set_multi_image_main_medium", + store=False) + image_main_small = fields.Binary( + string="Small image", + compute="_get_multi_image", + inverse="_set_multi_image_main_small", + store=False) + + @api.multi + @api.depends('image_ids') + def _get_multi_image(self): + """Get the main image for this object. + + This is provided as a compatibility layer for submodels that already + had one image per record. + """ + for s in self: + first = s.image_ids[:1] + s.image_main = first.image_main + s.image_main_medium = first.image_medium + s.image_main_small = first.image_small + + @api.multi + def _set_multi_image(self, image=False, name=False): + """Save or delete the main image for this record. + + This is provided as a compatibility layer for submodels that already + had one image per record. + """ + # Values to save + values = { + "storage": "db", + "file_db_store": tools.image_resize_image_big(image), + "owner_model": self._name, + } + if name: + values["name"] = name + + for s in self: + if image: + values["owner_id"] = s.id + # Editing + if s.image_ids: + s.image_ids[0].write(values) + # Adding + else: + values.setdefault("name", name or _("Main image")) + s.image_ids = [(0, 0, values)] + # Deleting + elif s.image_ids: + s.image_ids[0].unlink() + + @api.multi + def _set_multi_image_main(self): + self._set_multi_image(self.image_main) + + @api.multi + def _set_multi_image_main_medium(self): + self._set_multi_image(self.image_main_medium) + + @api.multi + def _set_multi_image_main_small(self): + self._set_multi_image(self.image_main_small) + + @api.multi + def unlink(self): + """Mimic `ondelete="cascade"` for multi images.""" + images = self.mapped("image_ids") + result = super(Owner, self).unlink() + if result: + images.unlink() + return result diff --git a/base_multi_image/security/ir.model.access.csv b/base_multi_image/security/ir.model.access.csv new file mode 100644 index 000000000..0b4130359 --- /dev/null +++ b/base_multi_image/security/ir.model.access.csv @@ -0,0 +1,2 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_images","Manage multi images","model_base_multi_image_image","base.group_user",1,1,1,1 diff --git a/base_multi_image/static/description/icon.png b/base_multi_image/static/description/icon.png new file mode 100644 index 000000000..c11adb164 Binary files /dev/null and b/base_multi_image/static/description/icon.png differ diff --git a/base_multi_image/static/description/icon.svg b/base_multi_image/static/description/icon.svg new file mode 100644 index 000000000..8d552fcb9 --- /dev/null +++ b/base_multi_image/static/description/icon.svg @@ -0,0 +1,320 @@ + + + + + Drawings Icon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + Drawings Icon + 2012-01-29T15:13:42 + Icon for Drawings/Pictures folder. + https://openclipart.org/detail/167547/drawings-icon-by-andreibranescu + + + andreibranescu + + + + + Inkscape + drawings + icon + pictures + + + + + + + + + + + diff --git a/base_multi_image/views/image_view.xml b/base_multi_image/views/image_view.xml new file mode 100644 index 000000000..b4b925714 --- /dev/null +++ b/base_multi_image/views/image_view.xml @@ -0,0 +1,145 @@ + + + + + + Multi image form + base_multi_image.image + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + Multi image tree + base_multi_image.image + + + + + + + + + + + + + Product multi image kanban + base_multi_image.image + + + + + + + +
+ X +
+ + + +
+
+ + + + +
+

+ + + +

+ +
+
+
+
+
+
+
+
+
+
+ + + Multi images + base_multi_image.image + kanban,tree,form + Click to add an image attached to an specific record. + + + + +
+