53 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
| # -*- coding: utf-8 -*-
 | |
| # Copyright 2017 Camptocamp SA
 | |
| # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
 | |
| 
 | |
| from odoo import _, api, models
 | |
| 
 | |
| 
 | |
| class QueueJob(models.Model):
 | |
| 
 | |
|     _inherit = 'queue.job'
 | |
| 
 | |
|     @api.multi
 | |
|     def related_action_unwrap_binding(self, component_usage='binder'):
 | |
|         """ Open a form view with the unwrapped record.
 | |
| 
 | |
|         For instance, for a job on a ``magento.product.product``,
 | |
|         it will open a ``product.product`` form view with the unwrapped
 | |
|         record.
 | |
| 
 | |
|         :param component_usage: base component usage to search for the binder
 | |
|         """
 | |
|         self.ensure_one()
 | |
|         model_name = self.model_name
 | |
|         binding = self.env[model_name].browse(self.record_ids).exists()
 | |
|         if not binding:
 | |
|             return None
 | |
|         if len(binding) > 1:
 | |
|             # not handled
 | |
|             return None
 | |
|         action = {
 | |
|             'name': _('Related Record'),
 | |
|             'type': 'ir.actions.act_window',
 | |
|             'view_type': 'form',
 | |
|             'view_mode': 'form',
 | |
|         }
 | |
|         with binding.backend_id.work_on(binding._name) as work:
 | |
|             binder = work.component(usage=component_usage)
 | |
|         try:
 | |
|             model = binder.unwrap_model()
 | |
|             record = binder.unwrap_binding(binding)
 | |
|             # the unwrapped record will be displayed
 | |
|             action.update({
 | |
|                 'res_model': model,
 | |
|                 'res_id': record.id,
 | |
|             })
 | |
|         except ValueError:
 | |
|             # the binding record will be displayed
 | |
|             action.update({
 | |
|                 'res_model': binding._name,
 | |
|                 'res_id': binding.id,
 | |
|             })
 | |
|         return action
 |