diff --git a/base_multi_image/README.rst b/base_multi_image/README.rst
new file mode 100644
index 000000000..d33a0c264
--- /dev/null
+++ b/base_multi_image/README.rst
@@ -0,0 +1,123 @@
+.. 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 > Configuration > 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/8.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
+
+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..524b8ddcf
--- /dev/null
+++ b/base_multi_image/__openerp__.py
@@ -0,0 +1,27 @@
+# -*- 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).
+
+{
+ "name": "Multiple images base",
+ "summary": "Allow multiple images for database objects",
+ "version": "8.0.2.0.0",
+ "author": "Serv. Tecnol. Avanzados - Pedro M. Baeza, "
+ "Antiun Ingeniería, S.L., "
+ "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 @@
+
+
+
+
diff --git a/base_multi_image/views/image_view.xml b/base_multi_image/views/image_view.xml
new file mode 100644
index 000000000..d6907a511
--- /dev/null
+++ b/base_multi_image/views/image_view.xml
@@ -0,0 +1,142 @@
+
+
+
+
+
+ Multi image form
+ base_multi_image.image
+
+
+
+
+
+
+ Multi image tree
+ base_multi_image.image
+
+
+
+
+
+
+
+
+
+
+
+
+ Product multi image kanban
+ base_multi_image.image
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Multi images
+ base_multi_image.image
+ kanban,tree,form
+
+
+
+
+
+