Files
odoo_source/addons/project/wizard/project_share_wizard.py
T
Aman Patel 33413b0d32 [FIX] project: traceback on inviting collaborators
Steps:
- Open project.
- Configuration -> Projects.
- Click the collaborator's stat button.
- Invite Collaborators.

Issue:
- Traceback comes ''frozendict' object is not callable'

Cause:
- The _context object is being treated as a callable function instead of a
dictionary-like object.
Reference PR:  https://github.com/odoo/odoo/pull/119771

Fix:
- Adding .get() so that it ensures that the value of 'default_project_id' is
retrieved correctly from the _context object without treating it as a callable
function.

task-3422050

closes odoo/odoo#128246

Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
2023-07-13 07:18:46 +02:00

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.get('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()