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
 |