[IMP] hr_holidays: populate leaves

This commit adds the possibility to add the hr.leave and hr.leave.type models

taskID 2823582

closes odoo/odoo#89017

Signed-off-by: Kevin Baptiste <kba@odoo.com>
This commit is contained in:
Dossogne Bertrand
2022-04-26 09:57:50 +02:00
parent f10b59c964
commit 3f3d37bdbc
4 changed files with 102 additions and 0 deletions
+1
View File
@@ -3,5 +3,6 @@
from . import controllers
from . import models
from . import populate
from . import report
from . import wizard
+4
View File
@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import hr_leave, hr_leave_allocation
+73
View File
@@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import datetime
import random
from odoo import models
from odoo.tools import populate
from dateutil.relativedelta import relativedelta
from itertools import groupby
class HolidaysType(models.Model):
_inherit = "hr.leave.type"
_populate_sizes = {"small": 10, "medium": 30, "large": 100}
_populate_dependencies = ['res.company']
def _populate_factories(self):
company_ids = self.env.registry.populated_models['res.company']
return [
('name', populate.constant('leave_type_{counter}')),
('company_id', populate.randomize(company_ids)),
('requires_allocation', populate.randomize(['yes', 'no'], [0.3, 0.7])),
('employee_requests', populate.randomize(['yes', 'no'], [0.2, 0.8])),
('request_unit', populate.randomize(['hour', 'day'], [0.2, 0.8])),
]
class HolidaysRequest(models.Model):
_inherit = "hr.leave"
_populate_sizes = {"small": 100, "medium": 800, "large": 10000}
_populate_dependencies = ['hr.employee', 'hr.leave.type']
def _populate_factories(self):
employee_ids = self.env.registry.populated_models['hr.employee']
hr_leave_type_ids = self.env.registry.populated_models['hr.leave.type']
hr_leave_type_records = self.env['hr.leave.type'].browse(hr_leave_type_ids)
allocationless_leave_type_ids = hr_leave_type_records.filtered(lambda lt: lt.requires_allocation == 'no').ids
employee_records = self.env['hr.employee'].browse(employee_ids)
employee_by_company = {k: list(v) for k, v in groupby(employee_records, key=lambda rec: rec['company_id'].id)}
company_by_type = {rec.id: rec.company_id.id for rec in self.env['hr.leave.type'].browse(hr_leave_type_ids)}
def compute_employee_id(random=None, values=None, **kwargs):
company_id = company_by_type[values['holiday_status_id']]
return random.choice(employee_by_company[company_id]).id
def compute_date_from(counter, **kwargs):
date_from = datetime.datetime.now().replace(hour=0, minute=0, second=0)\
+ relativedelta(days=int(3 * int(counter)))
return date_from
def compute_date_to(counter, **kwargs):
date_to = datetime.datetime.now().replace(hour=23, minute=59, second=59)\
+ relativedelta(days=int(3 * int(counter)) + random.randint(0, 2))
return date_to
return [
('holiday_status_id', populate.randomize(allocationless_leave_type_ids)),
('employee_id', populate.compute(compute_employee_id)),
('holiday_type', populate.constant('employee')),
('date_from', populate.compute(compute_date_from)),
('date_to', populate.compute(compute_date_to)),
('state', populate.randomize([
'draft',
'confirm',
])),
]
@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
from odoo.tools import populate
class HolidaysAllocation(models.Model):
_inherit = "hr.leave.allocation"
_populate_sizes = {"small": 100, "medium": 800, "large": 10000}
_populate_dependencies = ['hr.employee', 'hr.leave.type']
def _populate_factories(self):
employee_ids = self.env.registry.populated_models['hr.employee']
hr_leave_type_ids = self.env['hr.leave.type']\
.browse(self.env.registry.populated_models['hr.leave.type'])\
.filtered(lambda lt: lt.requires_allocation == 'yes')\
.ids
return [
('holiday_status_id', populate.randomize(hr_leave_type_ids)),
('employee_id', populate.randomize(employee_ids)),
]