Browse Source

Merge pull request #402 from sodexis/9.0_base_multi_image

[PORT][9.0] base multi image
pull/409/head
Pedro M. Baeza 9 years ago
parent
commit
a33cb4a3d4
  1. 124
      base_multi_image/README.rst
  2. 7
      base_multi_image/__init__.py
  3. 28
      base_multi_image/__openerp__.py
  4. 44
      base_multi_image/hooks.py
  5. 165
      base_multi_image/i18n/de.po
  6. 165
      base_multi_image/i18n/en.po
  7. 165
      base_multi_image/i18n/es.po
  8. 165
      base_multi_image/i18n/fi.po
  9. 165
      base_multi_image/i18n/fr.po
  10. 165
      base_multi_image/i18n/fr_CA.po
  11. 166
      base_multi_image/i18n/it.po
  12. 165
      base_multi_image/i18n/pt_BR.po
  13. 165
      base_multi_image/i18n/ru.po
  14. 166
      base_multi_image/i18n/sl.po
  15. 22
      base_multi_image/i18n/sv.po
  16. 165
      base_multi_image/i18n/tr.po
  17. BIN
      base_multi_image/images/form.png
  18. BIN
      base_multi_image/images/kanban.png
  19. 5
      base_multi_image/models/__init__.py
  20. 176
      base_multi_image/models/image.py
  21. 98
      base_multi_image/models/owner.py
  22. 2
      base_multi_image/security/ir.model.access.csv
  23. BIN
      base_multi_image/static/description/icon.png
  24. 320
      base_multi_image/static/description/icon.svg
  25. 145
      base_multi_image/views/image_view.xml

124
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::
<field
name="image_ids"
nolabel="1"
context="{
'default_owner_model': 'my.model.name',
'default_owner_id': id,
}"
mode="kanban"/>
* 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
<https://github.com/OCA/server-tools/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
<https://github.com/OCA/
server-tools/issues/new?body=module:%20
base_multi_image%0Aversion:%20
9.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Original implementation
-----------------------
This module is inspired in previous module *product_images* from OpenLabs
and Akretion.
Contributors
------------
* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
* Rafael Blasco <rafabn@antiun.com>
* Jairo Llopis <yajo.sk8@gmail.com>
* Sodexis <dev@sodexis.com>
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.

7
base_multi_image/__init__.py

@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
# © 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com)
# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# © 2015 Antiun Ingeniería S.L. - Jairo Llopis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models

28
base_multi_image/__openerp__.py

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# © 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com)
# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# © 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",
],
}

44
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,)
)

165
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 ""

165
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 <transbot@odoo-community.org>\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"

165
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 ""

165
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 ""

165
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 ""

165
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 ""

166
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"

165
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 ""

165
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 ""

166
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č <m.mozetic@matmoz.si>, 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č <m.mozetic@matmoz.si>\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"

22
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"

165
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 ""

BIN
base_multi_image/images/form.png

After

Width: 1212  |  Height: 479  |  Size: 49 KiB

BIN
base_multi_image/images/kanban.png

After

Width: 1131  |  Height: 501  |  Size: 139 KiB

5
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

176
base_multi_image/models/image.py

@ -0,0 +1,176 @@
# -*- coding: utf-8 -*-
# © 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com)
# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# © 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.')

98
base_multi_image/models/owner.py

@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
# © 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com)
# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# © 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

2
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

BIN
base_multi_image/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 15 KiB

320
base_multi_image/static/description/icon.svg

@ -0,0 +1,320 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
sodipodi:docname="icon.svg"
viewBox="0 0 128 128"
version="1.1"
inkscape:version="0.91 r"
width="128"
height="128"
inkscape:export-filename="icon.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<title
id="title3056">Drawings Icon</title>
<defs
id="defs4">
<linearGradient
id="linearGradient3840">
<stop
id="stop3842"
style="stop-color:#008000"
offset="0" />
<stop
id="stop3844"
style="stop-color:#9def9d"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3629">
<stop
id="stop3631"
style="stop-color:#ffffff"
offset="0" />
<stop
id="stop3633"
style="stop-color:#dedede"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3637"
y2="689.96997"
xlink:href="#linearGradient3629"
gradientUnits="userSpaceOnUse"
x2="355.06"
y1="627.34003"
x1="265.67999"
inkscape:collect="always" />
<filter
id="filter3711"
inkscape:collect="always"
style="color-interpolation-filters:sRGB">
<feGaussianBlur
id="feGaussianBlur3713"
stdDeviation="1.6175068"
inkscape:collect="always" />
</filter>
<linearGradient
id="linearGradient3744"
y2="689.96997"
xlink:href="#linearGradient3629"
gradientUnits="userSpaceOnUse"
x2="355.06"
gradientTransform="matrix(0.77469246,0,0,0.77284478,74.87419,156.55306)"
y1="627.34003"
x1="265.67999"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3629"
id="linearGradient4174"
gradientUnits="userSpaceOnUse"
x1="265.67999"
y1="627.34003"
x2="355.06"
y2="689.96997" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3629"
id="linearGradient4248"
gradientUnits="userSpaceOnUse"
x1="265.67999"
y1="627.34003"
x2="355.06"
y2="689.96997" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3629"
id="linearGradient4250"
gradientUnits="userSpaceOnUse"
x1="265.67999"
y1="627.34003"
x2="355.06"
y2="689.96997" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3629"
id="linearGradient4252"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77469246,0,0,0.77284478,74.87419,156.55306)"
x1="265.67999"
y1="627.34003"
x2="355.06"
y2="689.96997" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3629"
id="linearGradient4266"
gradientUnits="userSpaceOnUse"
x1="265.67999"
y1="627.34003"
x2="355.06"
y2="689.96997" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3629"
id="linearGradient4268"
gradientUnits="userSpaceOnUse"
x1="265.67999"
y1="627.34003"
x2="355.06"
y2="689.96997" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3629"
id="linearGradient4270"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77469246,0,0,0.77284478,74.87419,156.55306)"
x1="265.67999"
y1="627.34003"
x2="355.06"
y2="689.96997" />
</defs>
<sodipodi:namedview
id="base"
fit-margin-left="0"
inkscape:zoom="11.2"
borderopacity="1.0"
inkscape:current-layer="layer1"
inkscape:cx="92.246275"
inkscape:cy="80.63155"
inkscape:window-maximized="1"
showgrid="false"
fit-margin-right="0"
inkscape:snap-nodes="false"
inkscape:document-units="px"
bordercolor="#666666"
inkscape:window-x="65"
inkscape:window-y="24"
fit-margin-bottom="0"
inkscape:window-width="1855"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
pagecolor="#ffffff"
inkscape:window-height="1056"
fit-margin-top="0" />
<g
id="layer1"
inkscape:label="Papers"
inkscape:groupmode="layer"
transform="translate(-254.06,-602.12)">
<g
id="g4254"
transform="matrix(0.77433453,-0.17292855,0.17292855,0.77433453,-60.645266,215.27704)">
<g
id="g4256"
transform="translate(2.4999999,3.9285715)">
<path
id="path4258"
style="fill:url(#linearGradient4266);stroke:#000000;stroke-width:1px;filter:url(#filter3711)"
inkscape:connector-curvature="0"
d="m 266.18,625.07 80.307,-15.152 26.769,90.914 -87.883,17.678 -19.193,-93.439 z" />
<path
id="path4260"
style="fill:url(#linearGradient4268)"
inkscape:connector-curvature="0"
d="m 266.18,625.07 80.307,-15.152 26.769,90.914 -87.883,17.678 -19.193,-93.439 z" />
</g>
<path
sodipodi:nodetypes="ccccc"
id="path4262"
style="fill:url(#linearGradient4270);stroke:#b8b8b8;stroke-width:0.77376807"
inkscape:connector-curvature="0"
d="m 279.33626,638.76952 65.69064,-12.23055 17.78177,72.34343 -65.82128,12.79442 z" />
<image
y="681.4696"
x="120.36314"
id="image4264"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAAAAACPAi4CAAAACXZwQWcAAABAAAAAQADq8/hgAAAE WklEQVRYw9WX6XKjRhCAef8HiySQvGt5vfZuEselOUAcEpe4GdI9MAgQOjb5k3SVyzY1801PX9Ot Nf9StP80QJR5miRpXtb/AFCnvmMySgmhlJn2Mal+BSBSj1NCGeNSGAMOd0/iQYCI95TAXnm+FCr/ I2ZYPwJILEJhPaGm7flBFIW+Z5sUvwEivguovG7pMR0cV2e+BbYArF3cBqQclKfEvryvSB2KaHa6 BYhgDSP7ZN7gmUNQCf86wCdgcBaKq04/cTzAuwbA/czKb8VdZYMSI8IAEOJ+XjTiFkF4SDjOARII HLiBK+4E/xHOIdEloMSAAwZx7hEOBKIquwA4lFPbR/3uEhzCqSUmgBiwrGgeIlQm5b0zO0CN3yKw 34QgQC4JKZqrGAFC0MpWvuwJ3V6hWD3BI5wchoDaBAumzYQgmsrd7ewZx5bosHIAAAtQp4+nXUuA +2yXy9Xyi4OsIorjauBLZQWtd0Gqrt3EvCXQlb4BMZYfsPP7cr0gvS4FaNw6Qus0ovtez8DZcYyH t8Wmk9XWdF+Mjf570Ke4q46UgAgUCtX55mKl/wSbsD83hrEE0VGJ1RrEWHz2aaXuIAEe7b3SNG/6 01oSzL/W20/T2r2uDNACARvjWelZQTTaCiCg2vSR1bzrsFgSQMk8SbPi8FWX+0GFbX2OXMarDoAm OGfo+wpXt7cwj4Hv+1n+rSMYW3HOfS4TAgHZIDIVYG38wNzchyB+kj4ZUwB4npw6ABokmgA2qz9k fbIkoWDLzQSQ0tbw2gA20kA/nmyqCHG8nmqQd2prbSKQZAIwnk5B5PSE/EWfACCUZGFSgHQKeE6D sCcExfc5wKEDRLMaJHBwTwA/zFzhOLBBPGODoCfEyYUb0XVBB1AGHXvho/SVDsSjF15QrtMG1xlp sDbCrCewj7UxAWAJSjsAlJOuHI0AX9Mi8IMgsJnMC2MMOJA2f7RhXI8AG/2LVxZZVlQWmKElnAFi T5nMH62L67Mb3lTmbIzVK3Uc9r6GvJAEyMa6d0KXP1oXliqbRPPzN0NvBcrBAmSpr37wlrB8GeRS 6zkJECZVNRKeuLfty1C+wc/zp7TD9jVQN7DUDq2vkUEzfAymIl9uZ5iL1B0U1Rw7surmc4SE/sUB E3KaDB8Wd1QS7hJQga4Kayow2aAsXiV0L458HE/jx9UbPi33CIf+ITwDSnxM/IcIcAGIrHzaH+BX 8Ky4awdq41nBZYsjG4/kEQLjg9Q5A9A1jJ7u3CJEa1OzmuvSKgubwPA24IT7WT7fJ5YmEtwbASWO 2AkP94871WpPOCc8vmYHaORhv5lf75VrV3bD+9nZIrUJamhXN9v9kMlu3wonYVlGe9msU1/cGTgK px0YmO2fsrKq66rMk8Bh7dd99sDIk+xxxsE5icqhqfsLflkz1pkbukSCBzI5bqG0EGrPGvfK2FeG DseRi1I5eVFuB8WvDp51FvsH13Fcz4+y6n86Oz8kfwPMD02INEiadQAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="73.870087"
width="66.013809"
transform="matrix(0.98201428,-0.18880665,0.23736204,0.97142126,0,0)" />
</g>
<g
id="g4229"
transform="matrix(0.79340926,0,0,0.79340926,57.365182,120.76411)">
<g
transform="translate(2.4999999,3.9285715)"
id="g3719">
<path
d="m 266.18,625.07 80.307,-15.152 26.769,90.914 -87.883,17.678 -19.193,-93.439 z"
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4174);stroke:#000000;stroke-width:1px;filter:url(#filter3711)"
id="path3689" />
<path
d="m 266.18,625.07 80.307,-15.152 26.769,90.914 -87.883,17.678 -19.193,-93.439 z"
inkscape:connector-curvature="0"
style="fill:url(#linearGradient3637)"
id="path2851" />
</g>
<path
d="m 279.33626,638.76952 65.69064,-12.23055 17.78177,72.34343 -65.82128,12.79442 z"
inkscape:connector-curvature="0"
style="fill:url(#linearGradient3744);stroke:#b8b8b8;stroke-width:0.77376807"
id="path3737"
sodipodi:nodetypes="ccccc" />
<image
transform="matrix(0.98201428,-0.18880665,0.23736204,0.97142126,0,0)"
width="66.013809"
height="73.870087"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAAAAACPAi4CAAAACXZwQWcAAABAAAAAQADq8/hgAAAE WklEQVRYw9WX6XKjRhCAef8HiySQvGt5vfZuEselOUAcEpe4GdI9MAgQOjb5k3SVyzY1801PX9Ot Nf9StP80QJR5miRpXtb/AFCnvmMySgmhlJn2Mal+BSBSj1NCGeNSGAMOd0/iQYCI95TAXnm+FCr/ I2ZYPwJILEJhPaGm7flBFIW+Z5sUvwEivguovG7pMR0cV2e+BbYArF3cBqQclKfEvryvSB2KaHa6 BYhgDSP7ZN7gmUNQCf86wCdgcBaKq04/cTzAuwbA/czKb8VdZYMSI8IAEOJ+XjTiFkF4SDjOARII HLiBK+4E/xHOIdEloMSAAwZx7hEOBKIquwA4lFPbR/3uEhzCqSUmgBiwrGgeIlQm5b0zO0CN3yKw 34QgQC4JKZqrGAFC0MpWvuwJ3V6hWD3BI5wchoDaBAumzYQgmsrd7ewZx5bosHIAAAtQp4+nXUuA +2yXy9Xyi4OsIorjauBLZQWtd0Gqrt3EvCXQlb4BMZYfsPP7cr0gvS4FaNw6Qus0ovtez8DZcYyH t8Wmk9XWdF+Mjf570Ke4q46UgAgUCtX55mKl/wSbsD83hrEE0VGJ1RrEWHz2aaXuIAEe7b3SNG/6 01oSzL/W20/T2r2uDNACARvjWelZQTTaCiCg2vSR1bzrsFgSQMk8SbPi8FWX+0GFbX2OXMarDoAm OGfo+wpXt7cwj4Hv+1n+rSMYW3HOfS4TAgHZIDIVYG38wNzchyB+kj4ZUwB4npw6ABokmgA2qz9k fbIkoWDLzQSQ0tbw2gA20kA/nmyqCHG8nmqQd2prbSKQZAIwnk5B5PSE/EWfACCUZGFSgHQKeE6D sCcExfc5wKEDRLMaJHBwTwA/zFzhOLBBPGODoCfEyYUb0XVBB1AGHXvho/SVDsSjF15QrtMG1xlp sDbCrCewj7UxAWAJSjsAlJOuHI0AX9Mi8IMgsJnMC2MMOJA2f7RhXI8AG/2LVxZZVlQWmKElnAFi T5nMH62L67Mb3lTmbIzVK3Uc9r6GvJAEyMa6d0KXP1oXliqbRPPzN0NvBcrBAmSpr37wlrB8GeRS 6zkJECZVNRKeuLfty1C+wc/zp7TD9jVQN7DUDq2vkUEzfAymIl9uZ5iL1B0U1Rw7surmc4SE/sUB E3KaDB8Wd1QS7hJQga4Kayow2aAsXiV0L458HE/jx9UbPi33CIf+ITwDSnxM/IcIcAGIrHzaH+BX 8Ky4awdq41nBZYsjG4/kEQLjg9Q5A9A1jJ7u3CJEa1OzmuvSKgubwPA24IT7WT7fJ5YmEtwbASWO 2AkP94871WpPOCc8vmYHaORhv5lf75VrV3bD+9nZIrUJamhXN9v9kMlu3wonYVlGe9msU1/cGTgK px0YmO2fsrKq66rMk8Bh7dd99sDIk+xxxsE5icqhqfsLflkz1pkbukSCBzI5bqG0EGrPGvfK2FeG DseRi1I5eVFuB8WvDp51FvsH13Fcz4+y6n86Oz8kfwPMD02INEiadQAAAABJRU5ErkJggg== "
id="image4222"
x="120.36314"
y="681.4696" />
</g>
<g
id="g4236"
transform="matrix(0.75185332,0.25340647,-0.25340647,0.75185332,272.3295,77.897414)">
<g
id="g4238"
transform="translate(2.4999999,3.9285715)">
<path
id="path4240"
style="fill:url(#linearGradient4248);stroke:#000000;stroke-width:1px;filter:url(#filter3711)"
inkscape:connector-curvature="0"
d="m 266.18,625.07 80.307,-15.152 26.769,90.914 -87.883,17.678 -19.193,-93.439 z" />
<path
id="path4242"
style="fill:url(#linearGradient4250)"
inkscape:connector-curvature="0"
d="m 266.18,625.07 80.307,-15.152 26.769,90.914 -87.883,17.678 -19.193,-93.439 z" />
</g>
<path
sodipodi:nodetypes="ccccc"
id="path4244"
style="fill:url(#linearGradient4252);stroke:#b8b8b8;stroke-width:0.77376807"
inkscape:connector-curvature="0"
d="m 279.33626,638.76952 65.69064,-12.23055 17.78177,72.34343 -65.82128,12.79442 z" />
<image
y="681.4696"
x="120.36314"
id="image4246"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAAAAACPAi4CAAAACXZwQWcAAABAAAAAQADq8/hgAAAE WklEQVRYw9WX6XKjRhCAef8HiySQvGt5vfZuEselOUAcEpe4GdI9MAgQOjb5k3SVyzY1801PX9Ot Nf9StP80QJR5miRpXtb/AFCnvmMySgmhlJn2Mal+BSBSj1NCGeNSGAMOd0/iQYCI95TAXnm+FCr/ I2ZYPwJILEJhPaGm7flBFIW+Z5sUvwEivguovG7pMR0cV2e+BbYArF3cBqQclKfEvryvSB2KaHa6 BYhgDSP7ZN7gmUNQCf86wCdgcBaKq04/cTzAuwbA/czKb8VdZYMSI8IAEOJ+XjTiFkF4SDjOARII HLiBK+4E/xHOIdEloMSAAwZx7hEOBKIquwA4lFPbR/3uEhzCqSUmgBiwrGgeIlQm5b0zO0CN3yKw 34QgQC4JKZqrGAFC0MpWvuwJ3V6hWD3BI5wchoDaBAumzYQgmsrd7ewZx5bosHIAAAtQp4+nXUuA +2yXy9Xyi4OsIorjauBLZQWtd0Gqrt3EvCXQlb4BMZYfsPP7cr0gvS4FaNw6Qus0ovtez8DZcYyH t8Wmk9XWdF+Mjf570Ke4q46UgAgUCtX55mKl/wSbsD83hrEE0VGJ1RrEWHz2aaXuIAEe7b3SNG/6 01oSzL/W20/T2r2uDNACARvjWelZQTTaCiCg2vSR1bzrsFgSQMk8SbPi8FWX+0GFbX2OXMarDoAm OGfo+wpXt7cwj4Hv+1n+rSMYW3HOfS4TAgHZIDIVYG38wNzchyB+kj4ZUwB4npw6ABokmgA2qz9k fbIkoWDLzQSQ0tbw2gA20kA/nmyqCHG8nmqQd2prbSKQZAIwnk5B5PSE/EWfACCUZGFSgHQKeE6D sCcExfc5wKEDRLMaJHBwTwA/zFzhOLBBPGODoCfEyYUb0XVBB1AGHXvho/SVDsSjF15QrtMG1xlp sDbCrCewj7UxAWAJSjsAlJOuHI0AX9Mi8IMgsJnMC2MMOJA2f7RhXI8AG/2LVxZZVlQWmKElnAFi T5nMH62L67Mb3lTmbIzVK3Uc9r6GvJAEyMa6d0KXP1oXliqbRPPzN0NvBcrBAmSpr37wlrB8GeRS 6zkJECZVNRKeuLfty1C+wc/zp7TD9jVQN7DUDq2vkUEzfAymIl9uZ5iL1B0U1Rw7surmc4SE/sUB E3KaDB8Wd1QS7hJQga4Kayow2aAsXiV0L458HE/jx9UbPi33CIf+ITwDSnxM/IcIcAGIrHzaH+BX 8Ky4awdq41nBZYsjG4/kEQLjg9Q5A9A1jJ7u3CJEa1OzmuvSKgubwPA24IT7WT7fJ5YmEtwbASWO 2AkP94871WpPOCc8vmYHaORhv5lf75VrV3bD+9nZIrUJamhXN9v9kMlu3wonYVlGe9msU1/cGTgK px0YmO2fsrKq66rMk8Bh7dd99sDIk+xxxsE5icqhqfsLflkz1pkbukSCBzI5bqG0EGrPGvfK2FeG DseRi1I5eVFuB8WvDp51FvsH13Fcz4+y6n86Oz8kfwPMD02INEiadQAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="73.870087"
width="66.013809"
transform="matrix(0.98201428,-0.18880665,0.23736204,0.97142126,0,0)" />
</g>
</g>
<g
id="layer4"
inkscape:label="Flower"
inkscape:groupmode="layer"
transform="translate(-254.06,-602.12)" />
<metadata
id="metadata42">
<rdf:RDF>
<cc:Work>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:publisher>
<cc:Agent
rdf:about="http://openclipart.org/">
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
<dc:title>Drawings Icon</dc:title>
<dc:date>2012-01-29T15:13:42</dc:date>
<dc:description>Icon for Drawings/Pictures folder.</dc:description>
<dc:source>https://openclipart.org/detail/167547/drawings-icon-by-andreibranescu</dc:source>
<dc:creator>
<cc:Agent>
<dc:title>andreibranescu</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>Inkscape</rdf:li>
<rdf:li>drawings</rdf:li>
<rdf:li>icon</rdf:li>
<rdf:li>pictures</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
</svg>

145
base_multi_image/views/image_view.xml

@ -0,0 +1,145 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="image_form_view" model="ir.ui.view">
<field name="name">Multi image form</field>
<field name="model">base_multi_image.image</field>
<field name="arch" type="xml">
<form string="Image">
<sheet>
<group>
<group
string="Owner"
attrs="{
'invisible': [
('show_technical', '=', False),
],
}">
<field name="show_technical" invisible="True"/>
<field name="owner_model"/>
<field name="owner_id"/>
<field name="sequence"/>
</group>
<group string="Name">
<field name="name"/>
<field name="storage"/>
<field name="extension"/>
</group>
</group>
<group>
<group string="Options">
<field
name="url"
attrs="{
'invisible': [('storage', '!=', 'url')],
'required': [('storage', '=', 'url')],
}"
widget="url"/>
<field
name="path"
attrs="{
'invisible': [('storage', '!=', 'file')],
'required': [('storage', '=', 'file')],
}"/>
<field name="filename" invisible="1"/>
<field
name="file_db_store"
attrs="{
'invisible': [('storage', '!=', 'db')],
'required': [('storage', '=', 'db')],
}"
filename="filename"/>
</group>
<group string="Preview">
<field name="image_medium"
widget="image"
readonly="True"
nolabel="1" />
</group>
</group>
<group string="Comments">
<field name="comments" nolabel="1" />
</group>
</sheet>
</form>
</field>
</record>
<record id="image_tree_view" model="ir.ui.view">
<field name="name">Multi image tree</field>
<field name="model">base_multi_image.image</field>
<field name="arch" type="xml">
<tree string="Images">
<field name="name"/>
<field name="storage"/>
<field name="owner_model"/>
<field name="owner_id"/>
<field name="sequence" invisible="True"/>
</tree>
</field>
</record>
<record id="image_kanban_view" model="ir.ui.view">
<field name="name">Product multi image kanban</field>
<field name="model">base_multi_image.image</field>
<field name="arch" type="xml">
<kanban string="Product Images">
<field name="name"/>
<field name="storage"/>
<field name="sequence"/>
<templates>
<t t-name="kanban-box">
<div style="position: relative">
<a t-if="! read_only_mode"
type="delete"
style="position: absolute; right: 0; padding: 4px; diplay: inline-block">X</a>
<div class="oe_module_vignette">
<a type="open">
<img
t-att-src="kanban_image(
'base_multi_image.image',
'image_small',
record.id.value)"
class="oe_kanban_image"/>
</a>
<div class="oe_module_desc">
<div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_color_border">
<table class="oe_kanban_table">
<tr>
<td class="oe_kanban_title1"
align="left"
valign="middle">
<h4>
<a type="open">
<field name="name"/>
</a>
</h4>
<field name="storage"/>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="image_action" model="ir.actions.act_window">
<field name="name">Multi images</field>
<field name="res_model">base_multi_image.image</field>
<field name="view_mode">kanban,tree,form</field>
<field name="help">Click to add an image attached to an specific record.</field>
</record>
<menuitem
id="image_menu"
action="image_action"
parent="base.menu_custom"/>
</data>
</openerp>
Loading…
Cancel
Save