64 lines
2.6 KiB
Python
64 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import re
|
|
|
|
from odoo import api, fields, models, tools, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class WebsiteConfiguratorFeature(models.Model):
|
|
|
|
_name = 'website.configurator.feature'
|
|
_description = 'Website Configurator Feature'
|
|
_order = 'sequence'
|
|
|
|
sequence = fields.Integer()
|
|
name = fields.Char(translate=True)
|
|
description = fields.Char(translate=True)
|
|
icon = fields.Char()
|
|
iap_page_code = fields.Char(help='Page code used to tell IAP website_service for which page a snippet list should be generated')
|
|
website_config_preselection = fields.Char(help='Comma-separated list of website type/purpose for which this feature should be pre-selected')
|
|
page_view_id = fields.Many2one('ir.ui.view', ondelete='cascade')
|
|
module_id = fields.Many2one('ir.module.module', ondelete='cascade')
|
|
feature_url = fields.Char()
|
|
menu_sequence = fields.Integer(help='If set, a website menu will be created for the feature.')
|
|
menu_company = fields.Boolean(help='If set, add the menu as a second level menu, as a child of "Company" menu.')
|
|
|
|
@api.constrains('module_id', 'page_view_id')
|
|
def _check_module_xor_page_view(self):
|
|
if bool(self.module_id) == bool(self.page_view_id):
|
|
raise ValidationError(_("One and only one of the two fields 'page_view_id' and 'module_id' should be set"))
|
|
|
|
@staticmethod
|
|
def _process_svg(theme, colors, image_mapping):
|
|
svg = None
|
|
try:
|
|
with tools.file_open(f'{theme}/static/description/{theme}.svg', 'r') as file:
|
|
svg = file.read()
|
|
except FileNotFoundError:
|
|
return False
|
|
|
|
default_colors = {
|
|
'color1': '#3AADAA',
|
|
'color2': '#7C6576',
|
|
'color3': '#F6F6F6',
|
|
'color4': '#FFFFFF',
|
|
'color5': '#383E45',
|
|
'menu': '#MENU_COLOR',
|
|
'footer': '#FOOTER_COLOR',
|
|
}
|
|
color_mapping = {default_colors[color_key]: color_value for color_key, color_value in colors.items() if color_key in default_colors.keys()}
|
|
color_regex = '(?i)%s' % '|'.join('(%s)' % color for color in color_mapping.keys())
|
|
image_regex = '(?i)%s' % '|'.join('(%s)' % image for image in image_mapping.keys())
|
|
|
|
def subber_maker(mapping):
|
|
def subber(match):
|
|
key = match.group()
|
|
return mapping[key] if key in mapping else key
|
|
return subber
|
|
|
|
svg = re.sub(color_regex, subber_maker(color_mapping), svg)
|
|
svg = re.sub(image_regex, subber_maker(image_mapping), svg)
|
|
return svg
|