odoo/ext/3rd-party-addons/connector/models/queue_job.py

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