This commit includes the addition of an 'Invite Collaborator' button to the project collaborator list view. When clicked, this button opens the same wizard as the 'Share Editable' button found on the project.project form view. By using this wizard, project collaborators can be added to the responsible project. task-2947578 Part-of: odoo/odoo#119771
56 lines
2.2 KiB
Python
56 lines
2.2 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):
|
|
# The project share action could be called in `project.collaborator`
|
|
# and so we have to check the active_model and active_id to use
|
|
# the right project.
|
|
active_model = self._context.get('active_model', '')
|
|
active_id = self._context.get('active_id', False)
|
|
if active_model == 'project.collaborator':
|
|
active_model = 'project.project'
|
|
active_id = self._context('default_project_id', False)
|
|
result = super(ProjectShareWizard, self.with_context(active_model=active_model, active_id=active_id)).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')
|
|
self.resource_ref._add_collaborators(self.partner_ids)
|
|
self._send_public_link(portal_partners)
|
|
self._send_signup_link(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()
|