47 lines
2.3 KiB
Python
47 lines
2.3 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import fields, models
|
|
from odoo.fields import Domain
|
|
|
|
|
|
class ResCompany(models.Model):
|
|
_inherit = "res.company"
|
|
|
|
documents_hr_payslips_tags = fields.Many2many(
|
|
'documents.tag', 'payslip_tags_table')
|
|
|
|
worker_payroll_folder_id = fields.Many2one(
|
|
'documents.document', string="Worker Payroll Folder", check_company=True,
|
|
domain=[('type', '=', 'folder'), ('shortcut_document_id', '=', False)],
|
|
help="Folder used when an employee with no user exists in the company, "
|
|
"to store their payroll documents in a centralized place.")
|
|
|
|
def _generate_employee_documents_main_folders(self):
|
|
""" Override from documents_hr module to add payslips related tags and permissions on the
|
|
employee document folder of each company. """
|
|
folders = super()._generate_employee_documents_main_folders()
|
|
group_payroll_user = self.env.ref('hr_payroll.group_hr_payroll_user')
|
|
payslip_tag = self.env.ref('documents_hr_payroll.documents_tag_payslips', raise_if_not_found=False)
|
|
for company, folder in zip(self, folders):
|
|
company.sudo().write({
|
|
'documents_hr_payslips_tags': [(6, 0, payslip_tag.ids)] if payslip_tag else [],
|
|
})
|
|
payroll_users = group_payroll_user.all_user_ids.filtered(lambda user: folder.company_id in user.company_ids)
|
|
folder.sudo().action_update_access_rights(
|
|
access_internal='none', access_via_link='none', is_access_via_link_hidden=True,
|
|
partners={partner.id: ('edit', False) for partner in payroll_users.partner_id})
|
|
return folders
|
|
|
|
def _get_used_folder_ids_domain(self, folder_ids):
|
|
return super()._get_used_folder_ids_domain(folder_ids) | Domain('worker_payroll_folder_id', 'in', folder_ids)
|
|
|
|
def _get_or_create_worker_payroll_folder(self):
|
|
if not self.worker_payroll_folder_id:
|
|
self.worker_payroll_folder_id = self.env['documents.document'].sudo().create({
|
|
'name': self.env._("Payroll %s", self.name),
|
|
'type': 'folder',
|
|
'owner_id': False,
|
|
'folder_id': self.documents_employee_folder_id.id,
|
|
}).id
|
|
return self.worker_payroll_folder_id
|