65 lines
2.8 KiB
Python
65 lines
2.8 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import fields, models, _
|
||
|
|
||
|
|
||
|
class Company(models.Model):
|
||
|
_inherit = 'res.company'
|
||
|
|
||
|
leave_timesheet_task_id = fields.Many2one(
|
||
|
'project.task', string="Time Off Task",
|
||
|
domain="[('project_id', '=', internal_project_id)]")
|
||
|
|
||
|
def init(self):
|
||
|
type_ids = [(4, self.env.ref('hr_timesheet.internal_project_default_stage').id)]
|
||
|
companies = self.search(['|', ('internal_project_id', '=', False), ('leave_timesheet_task_id', '=', False)])
|
||
|
internal_projects_by_company_dict = None
|
||
|
Project = self.env['project.project']
|
||
|
for company in companies:
|
||
|
company = company.with_company(company)
|
||
|
if not company.internal_project_id:
|
||
|
if not internal_projects_by_company_dict:
|
||
|
internal_projects_by_company_read = Project.search_read([
|
||
|
('name', '=', _('Internal')),
|
||
|
('allow_timesheets', '=', True),
|
||
|
('company_id', 'in', companies.ids),
|
||
|
], ['company_id', 'id'])
|
||
|
internal_projects_by_company_dict = {res['company_id'][0]: res['id'] for res in internal_projects_by_company_read}
|
||
|
project_id = internal_projects_by_company_dict.get(company.id, False)
|
||
|
if not project_id:
|
||
|
project_id = Project.create({
|
||
|
'name': _('Internal'),
|
||
|
'allow_timesheets': True,
|
||
|
'company_id': company.id,
|
||
|
'type_ids': type_ids,
|
||
|
}).id
|
||
|
company.write({'internal_project_id': project_id})
|
||
|
if not company.leave_timesheet_task_id:
|
||
|
task = company.env['project.task'].create({
|
||
|
'name': _('Time Off'),
|
||
|
'project_id': company.internal_project_id.id,
|
||
|
'active': True,
|
||
|
'company_id': company.id,
|
||
|
})
|
||
|
company.write({
|
||
|
'leave_timesheet_task_id': task.id,
|
||
|
})
|
||
|
|
||
|
def _create_internal_project_task(self):
|
||
|
projects = super()._create_internal_project_task()
|
||
|
for project in projects:
|
||
|
company = project.company_id
|
||
|
company = company.with_company(company)
|
||
|
if not company.leave_timesheet_task_id:
|
||
|
task = company.env['project.task'].sudo().create({
|
||
|
'name': _('Time Off'),
|
||
|
'project_id': company.internal_project_id.id,
|
||
|
'active': True,
|
||
|
'company_id': company.id,
|
||
|
})
|
||
|
company.write({
|
||
|
'leave_timesheet_task_id': task.id,
|
||
|
})
|
||
|
return projects
|