Files
enterprise-addons/documents_hr/models/res_company.py
T

64 lines
3.2 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
from odoo.fields import Domain
class ResCompany(models.Model):
_inherit = "res.company"
documents_hr_settings = fields.Boolean(default=True)
documents_employee_folder_id = fields.Many2one('documents.document', string="Employees Folder",
domain=[('type', '=', 'folder'), ('shortcut_document_id', '=', False)], check_company=True)
employee_subfolders = fields.Char(
"Employees Subfolder",
help='Comma separated list of folder names that need to be created under each employee folder.')
documents_hr_contracts_tags = fields.Many2many('documents.tag', 'documents_hr_contracts_tags_table')
def _get_used_folder_ids_domain(self, folder_ids):
return super()._get_used_folder_ids_domain(folder_ids) | (
Domain('documents_employee_folder_id', 'in', folder_ids) & Domain('documents_hr_settings', '=', True)
)
@api.model_create_multi
def create(self, vals_list):
companies = super().create(vals_list)
companies._generate_employee_documents_main_folders()
return companies
def write(self, vals):
""" Override to move all employee subfolders if the HR Employee folder has been modified in settings.
And ensure that companies that was never configured get their employee subfolders. """
subfolders_changed = vals.get('employee_subfolders')
employees_without_subfolder = self.env['hr.employee']
employees_with_subfolders = self.env['hr.employee']
if vals.get('documents_employee_folder_id'):
employees = self.env['hr.employee'].sudo().search([('company_id', 'in', self.ids)])
# Might be that companies was never configured and no subfolder exists for employees.
employees_without_subfolder = employees.filtered(lambda e: not e.hr_employee_folder_id)
employees_with_subfolders = employees - employees_without_subfolder
employees_with_subfolders.hr_employee_folder_id.folder_id = vals['documents_employee_folder_id']
# done in two times otherwise the folder_id will propagate it's own access rights instead of the write values
employees_with_subfolders.hr_employee_folder_id.write({
'access_via_link': 'edit',
'access_internal': 'none',
})
result = super().write(vals)
if employees_without_subfolder:
employees_without_subfolder._generate_employee_documents_folders(skip_subfolders=subfolders_changed)
if subfolders_changed:
self.env['hr.employee'].search([('company_id', 'in', self.ids)])._generate_employee_documents_subfolders()
return result
def _generate_employee_documents_main_folders(self):
for company in self:
company.sudo().documents_employee_folder_id = self.env['documents.document'].sudo().create({
'name': company.env._('Employees - %s', company.name),
'type': 'folder',
'folder_id': False,
'company_id': company.id,
'is_access_via_link_hidden': True,
'owner_id': False,
})
return self.mapped('documents_employee_folder_id')