64 lines
3.2 KiB
Python
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')
|