71 lines
2.8 KiB
Python
71 lines
2.8 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import fields, models, _
|
|
|
|
|
|
class ApprovalRequest(models.Model):
|
|
_name = 'approval.request'
|
|
_inherit = ['approval.request', 'documents.mixin']
|
|
|
|
documents_count = fields.Integer(compute='_compute_documents_count')
|
|
documents_enabled = fields.Boolean(related='company_id.documents_approvals_settings')
|
|
|
|
def _get_document_vals_access_rights(self):
|
|
"""Make sure (only) request owner and approval users can view the document."""
|
|
return {
|
|
'access_via_link': 'view',
|
|
'access_internal': 'none',
|
|
'is_access_via_link_hidden': False,
|
|
}
|
|
|
|
def _get_document_owner(self):
|
|
return self.env.user
|
|
|
|
def _get_document_access_ids(self):
|
|
return [(self.request_owner_id.partner_id, ('view', False))]
|
|
|
|
def _get_document_tags(self):
|
|
return self.company_id.approvals_tag_ids
|
|
|
|
def _get_document_folder(self):
|
|
return self.company_id.approvals_folder_id
|
|
|
|
def _get_document_partner(self):
|
|
return self.partner_id
|
|
|
|
def _check_create_documents(self):
|
|
return self.company_id.documents_approvals_settings and super()._check_create_documents()
|
|
|
|
def _compute_documents_count(self):
|
|
grouped_data = self.env['documents.document']._read_group(domain=[('res_model', '=', 'approval.request'),
|
|
('res_id', 'in', self.ids),
|
|
('active', '=', True)],
|
|
groupby=['res_id'],
|
|
aggregates=['__count'])
|
|
mapped_data = dict(grouped_data)
|
|
for record in self:
|
|
record.documents_count = mapped_data.get(record.id, 0)
|
|
|
|
def action_get_attachment_view(self):
|
|
if not self.company_id.documents_approvals_settings:
|
|
return super().action_get_attachment_view()
|
|
default_user_folder_id = str(folder.id) if (folder := self._get_document_folder()) else False
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'res_model': 'documents.document',
|
|
'name': _('Documents'),
|
|
'view_mode': 'kanban,list,form',
|
|
'domain': [
|
|
'|',
|
|
('type', '=', 'folder'),
|
|
'&',
|
|
('res_model', '=', 'approval.request'),
|
|
('res_id', 'in', self.ids),
|
|
],
|
|
'context': {
|
|
'searchpanel_default_user_folder_id': default_user_folder_id,
|
|
'default_res_model': 'approval.request',
|
|
'default_res_id': self.ids[0],
|
|
},
|
|
}
|