You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.3 KiB
64 lines
2.3 KiB
# Copyright 2019 Camptocamp SA
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
|
|
|
from odoo import api, fields, models, tools, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class Image(models.Model):
|
|
_name = 'image'
|
|
_description = 'Image'
|
|
|
|
name = fields.Char('Name', required=True)
|
|
model_name = fields.Char('Model Name', required=True)
|
|
selector = fields.Text(
|
|
'Selector',
|
|
help='Python expression used as selector when multiple images are used'
|
|
'for the same object. The variable `object` refers '
|
|
'to the actual record on which the expression will be executed. '
|
|
'An empty expression will always return `True`.'
|
|
)
|
|
company_id = fields.Many2one(
|
|
'res.company', 'Company',
|
|
help='Company related check. If inherited object does not have a '
|
|
'`company_id` field, it will be ignored. '
|
|
'The check will first take the records with a company then, '
|
|
'if no match is found, the ones without a company.'
|
|
)
|
|
|
|
# image: all image fields are base64 encoded and PIL-supported
|
|
image = fields.Binary(
|
|
"Image", attachment=True,
|
|
help="This field holds the standard image, limited to 1024x1024px"
|
|
)
|
|
image_medium = fields.Binary(
|
|
"Medium-sized image", attachment=True,
|
|
help="Medium-sized image. It is automatically "
|
|
"resized as a 128x128px image, with aspect ratio preserved. "
|
|
"Use this field in form views or some kanban views."
|
|
)
|
|
image_small = fields.Binary(
|
|
"Small-sized image", attachment=True,
|
|
help="Small-sized image. It is automatically "
|
|
"resized as a 64x64px image, with aspect ratio preserved. "
|
|
"Use this field anywhere a small image is required."
|
|
)
|
|
|
|
@api.model
|
|
def _process_images(self, vals, required=False):
|
|
if set(['image', 'image_medium', 'image_small']) & set(vals.keys()):
|
|
tools.image_resize_images(vals)
|
|
elif required:
|
|
raise ValidationError(
|
|
_('At least one image type must be specified')
|
|
)
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
self._process_images(vals, required=True)
|
|
return super().create(vals)
|
|
|
|
@api.multi
|
|
def write(self, vals):
|
|
self._process_images(vals)
|
|
return super().write(vals)
|