From 3f3d37bdbcc6b4d1ea67dc23fa12c1ff56ca0c77 Mon Sep 17 00:00:00 2001 From: Dossogne Bertrand Date: Fri, 15 Apr 2022 13:21:08 +0000 Subject: [PATCH] [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 --- addons/hr_holidays/__init__.py | 1 + addons/hr_holidays/populate/__init__.py | 4 + addons/hr_holidays/populate/hr_leave.py | 73 +++++++++++++++++++ .../populate/hr_leave_allocation.py | 24 ++++++ 4 files changed, 102 insertions(+) create mode 100644 addons/hr_holidays/populate/__init__.py create mode 100644 addons/hr_holidays/populate/hr_leave.py create mode 100644 addons/hr_holidays/populate/hr_leave_allocation.py diff --git a/addons/hr_holidays/__init__.py b/addons/hr_holidays/__init__.py index 4e9b019bd7a..d26fccf560c 100644 --- a/addons/hr_holidays/__init__.py +++ b/addons/hr_holidays/__init__.py @@ -3,5 +3,6 @@ from . import controllers from . import models +from . import populate from . import report from . import wizard diff --git a/addons/hr_holidays/populate/__init__.py b/addons/hr_holidays/populate/__init__.py new file mode 100644 index 00000000000..a56554e40f5 --- /dev/null +++ b/addons/hr_holidays/populate/__init__.py @@ -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 diff --git a/addons/hr_holidays/populate/hr_leave.py b/addons/hr_holidays/populate/hr_leave.py new file mode 100644 index 00000000000..a26d1146854 --- /dev/null +++ b/addons/hr_holidays/populate/hr_leave.py @@ -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', + ])), + ] diff --git a/addons/hr_holidays/populate/hr_leave_allocation.py b/addons/hr_holidays/populate/hr_leave_allocation.py new file mode 100644 index 00000000000..dcd76ed3bb3 --- /dev/null +++ b/addons/hr_holidays/populate/hr_leave_allocation.py @@ -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)), + ]