Purpose of this commit is to globally improve code performance by limiting search impact by using cache when accessing ir.model. Note that tests are left untouched as they are generally done using admin (or at least data preparation is done as admin). Diff is kept small currently. Task-2638444 PR odoo/odoo#76005 Co-Authored-By: Thibault Delavallée <tde@odoo.com> Co-Authored-By: Victor Feyens <vfe@odoo.com>
49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ProjectShareWizard(models.TransientModel):
|
|
_name = 'project.share.wizard'
|
|
_inherit = 'portal.share'
|
|
_description = 'Project Sharing'
|
|
|
|
@api.model
|
|
def default_get(self, fields):
|
|
result = super().default_get(fields)
|
|
if not result.get('access_mode'):
|
|
result.update(
|
|
access_mode='read',
|
|
display_access_mode=True,
|
|
)
|
|
return result
|
|
|
|
@api.model
|
|
def _selection_target_model(self):
|
|
project_model = self.env['ir.model']._get('project.project')
|
|
return [(project_model.model, project_model.name)]
|
|
|
|
access_mode = fields.Selection([('read', 'Readonly'), ('edit', 'Edit')])
|
|
display_access_mode = fields.Boolean()
|
|
|
|
@api.depends('res_model', 'res_id')
|
|
def _compute_resource_ref(self):
|
|
for wizard in self:
|
|
if wizard.res_model and wizard.res_model == 'project.project':
|
|
wizard.resource_ref = '%s,%s' % (wizard.res_model, wizard.res_id or 0)
|
|
else:
|
|
wizard.resource_ref = None
|
|
|
|
def action_send_mail(self):
|
|
self.ensure_one()
|
|
if self.access_mode == 'edit':
|
|
portal_partners = self.partner_ids.filtered('user_ids')
|
|
note = self._get_note()
|
|
self.resource_ref._add_collaborators(self.partner_ids)
|
|
self._send_public_link(note, portal_partners)
|
|
self._send_signup_link(note, partners=self.partner_ids - portal_partners)
|
|
self.resource_ref.message_subscribe(partner_ids=self.partner_ids.ids)
|
|
return {'type': 'ir.actions.act_window_close'}
|
|
return super().action_send_mail()
|