Files

83 lines
4.7 KiB
Python

from odoo import _, api, fields, models
class DocumentsSharing(models.TransientModel):
_inherit = "documents.sharing"
error_message_spreadsheet = fields.Char(
string="Error Message", compute="_compute_error_message_spreadsheet")
@api.depends('document_ids',
'invite_partner_ids', 'invite_role',
'share_access_ids.role', 'access_internal', 'access_via_link')
def _compute_error_message_spreadsheet(self):
for wizard in self:
wizard.error_message_spreadsheet = False
sp_frozen_docs = wizard.document_ids.filtered(lambda d: d.handler == 'frozen_spreadsheet')
sp_non_frozen_docs = wizard.document_ids.filtered(lambda d: d.handler == 'spreadsheet')
sp_docs = sp_frozen_docs | sp_non_frozen_docs
error_partners = self.env['res.partner']
is_inviting = wizard.invite_partner_ids
edit_access_partner = wizard.share_access_ids.filtered(
lambda s: s.role.endswith('edit') and not s.is_deleted
).partner_id
has_edit = wizard.invite_role == 'edit' if is_inviting else (
wizard.access_internal.endswith('edit') or wizard.access_via_link.endswith('edit')
or edit_access_partner)
if has_edit and sp_frozen_docs:
wizard.error_message_spreadsheet = _(
"Read only spreadsheet(s): %(document_names)s.",
document_names=', '.join(sp_frozen_docs.sorted('display_name').mapped('display_name')))
error_partners = edit_access_partner
elif sp_docs and wizard.access_via_link.endswith('edit'):
wizard.error_message_spreadsheet = _(
"You cannot share spreadsheet(s) via link in edit mode (%(document_names)s).",
document_names=', '.join(sp_docs.sorted('display_name').mapped('display_name')))
elif (sp_docs and (edit_partner_share := (
wizard.invite_partner_ids
if is_inviting and wizard.invite_role == 'edit'
else wizard.share_access_ids.filtered(
lambda s: s.role.endswith('edit') and not s.is_deleted
).partner_id
).filtered(lambda p: p.partner_share))):
wizard.error_message_spreadsheet = _(
"You can not share spreadsheet(s) in edit mode (%(document_names)s) to non-internal users.",
document_names=', '.join(sp_docs.sorted('display_name').mapped('display_name')))
error_partners = edit_partner_share
if wizard.error_message_spreadsheet and error_partners:
wizard.error_message_spreadsheet += ' '
wizard.error_message_spreadsheet += _('Partner(s): %(partner_names)s.',
partner_names=', '.join(error_partners.sorted('display_name').mapped('display_name')))
def _compute_access_internal_help(self):
super()._compute_access_internal_help()
for record in self:
if all(d.handler in ("spreadsheet", "frozen_spreadsheet") for d in record.document_ids):
if record.access_internal.endswith('view'):
record.access_internal_help = _("Can view the spreadsheet. Cannot make changes.")
elif record.access_internal.endswith('edit'):
record.access_internal_help = _("Can edit the spreadsheet, including structure and content.")
def _compute_access_via_link_help(self):
super()._compute_access_via_link_help()
for record in self:
is_spreadsheet_only = all(d.handler in ("spreadsheet", "frozen_spreadsheet") for d in record.document_ids)
if is_spreadsheet_only and record.access_via_link.endswith('view'):
record.access_via_link_help = _("Can view the spreadsheet. Cannot make changes.")
@api.depends('error_message_spreadsheet')
def _compute_has_warning_link_with_more_rights(self):
"""Hide other errors if we show the spreadsheet errors."""
with_spreadsheet_errors = self.filtered('error_message_spreadsheet')
with_spreadsheet_errors.has_warning_link_with_more_rights = False
super(DocumentsSharing, self - with_spreadsheet_errors)._compute_has_warning_link_with_more_rights()
@api.depends('error_message_spreadsheet')
def _compute_has_warning_partners_without_access(self):
"""Hide other errors if we show the spreadsheet errors."""
with_spreadsheet_errors = self.filtered('error_message_spreadsheet')
with_spreadsheet_errors.has_warning_partners_without_access = False
super(DocumentsSharing, self - with_spreadsheet_errors)._compute_has_warning_partners_without_access()