40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
| # Copyright 2018 Ivan Yelizariev <https://it-projects.info/team/yelizariev>
 | |
| # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
 | |
| 
 | |
| import logging
 | |
| 
 | |
| from odoo import models, api
 | |
| 
 | |
| 
 | |
| _logger = logging.getLogger(__name__)
 | |
| 
 | |
| 
 | |
| class IrModelData(models.Model):
 | |
|     _inherit = 'ir.model.data'
 | |
| 
 | |
|     @api.model
 | |
|     def create(self, vals):
 | |
|         """Catch cases of creating customize_show views. Reload theme to make new
 | |
|         customize_show view available right after new module installation. It's
 | |
|         also needed for CI tests when another modules expects new item in
 | |
|         "Customize menu".
 | |
| 
 | |
|         We cannot override ir.ui.view model to do it, because it's created
 | |
|         before creating ir.model.data, which is essential for
 | |
|         multi_theme_reload
 | |
| 
 | |
|         FIXME: themes are reloaded as much times as new module has views with
 | |
|         customize_show
 | |
|         """
 | |
| 
 | |
|         res = super(IrModelData, self).create(vals)
 | |
|         if (vals.get('model') == 'ir.ui.view' and
 | |
|                 not self.env.context.get('duplicate_view_for_website')):
 | |
|             view = self.env['ir.ui.view'].browse(vals.get('res_id'))
 | |
|             if view.customize_show:
 | |
|                 _logger.debug('Call multi_theme_reload '
 | |
|                               'after creating Customize View "%s"',
 | |
|                               vals.get('name'))
 | |
|                 self.env['res.config.settings'].multi_theme_reload()
 | |
|         return res
 |