Files
enterprise-addons/planning/static/tests/planning_mock_models.js
T

163 lines
5.2 KiB
JavaScript

import { Domain } from "@web/core/domain";
import { defineModels, fields, models } from "@web/../tests/web_test_helpers";
import { hrModels } from "@hr/../tests/hr_test_helpers";
export class PlanningSlot extends models.Model {
_name = "planning.slot";
name = fields.Char();
start_datetime = fields.Datetime({ string: "Start Date Time" });
end_datetime = fields.Datetime({ string: "End Date Time" });
allocated_hours = fields.Float();
allocated_percentage = fields.Float();
role_id = fields.Many2one({ relation: "planning.role" });
color = fields.Integer();
repeat = fields.Boolean();
recurrency_id = fields.Many2one({ relation: "planning.recurrency" });
recurrence_update = fields.Selection({
selection: [
["this", "This shift"],
["subsequent", "This and following shifts"],
["all", "All shifts"],
],
});
resource_id = fields.Many2one({ relation: "resource.resource" });
state = fields.Selection({
selection: [
["draft", "Draft"],
["published", "Published"],
],
});
department_id = fields.Many2one({ relation: "hr.department" });
employee_id = fields.Many2one({ relation: "hr.employee" });
role_ids = fields.One2many({ relation: "planning.role" });
resource_type = fields.Selection({
selection: [
["user", "Human"],
["material", "Material"],
],
});
user_id = fields.Many2one({ relation: "res.users" });
conflicting_slot_ids = fields.Many2many({ relation: "planning.slot" });
resource_roles = fields.Many2many({ relation: "resource.resource" });
resource_color = fields.Integer({ related: 'resource_id.color' });
template_id = fields.Many2one({ relation: "planning.slot.template" });
_gantt_resource_employees_working_periods(groups, start_time, end_time) {
const resourceIds = new Set();
for (const group of groups) {
const resId = group.resource_id ? group.resource_id[0] : false;
if (resId) {
resourceIds.add(resId)
}
}
const employeeIds = new Set();
const employee_id_to_ressource_id = {}
const working_periods = {}
for (const resource of this.env["resource.resource"].browse([...resourceIds])) {
if (!resource.employee_id) {
continue
}
const resource_id = resource.id
const employee_id = resource.employee_id[0]
employeeIds.add(employee_id)
employee_id_to_ressource_id[employee_id] = resource_id
working_periods[resource_id] = []
}
if (employeeIds.size) {
const hr_contract_read_group = this.env["hr.version"].formatted_read_group(
new Domain([
["employee_id", "in", [...employeeIds]],
]).toList(),
["employee_id", "contract_date_start:day", "contract_date_end:day"],
[],
"",
"",
"",
);
hr_contract_read_group.forEach((contract) => {
const employee_id = contract.employee_id[0];
const resource_id = employee_id_to_ressource_id[employee_id];
working_periods[resource_id].push({
start: contract["contract_date_start:day"][1],
end: contract["contract_date_end:day"][1],
});
});
employeeIds
.difference(new Set(hr_contract_read_group.map((a) => a.employee_id[0])))
.forEach((employee_id) => {
const resource_id = employee_id_to_ressource_id[employee_id]
working_periods[resource_id].push({
start: start_time,
end: end_time,
});
});
}
return working_periods;
}
}
export class PlanningRecurrency extends models.Model {
_name = "planning.recurrency";
repeat_interval = fields.Integer();
}
export class PlanningSlotTemplate extends models.Model {
_name = "planning.slot.template";
start_time = fields.Float();
end_time = fields.Float();
duration_days = fields.Integer();
_records = [
{ id: 1, start_time: 9, end_time: 17, duration_days: 2 },
];
}
class PlanningFilterResource extends models.Model {
_name = "planning.filter.resource";
resource_id = fields.Many2one({ relation: "resource.resource" });
checked = fields.Boolean();
resource_type = fields.Selection({
selection: [
["user", "Human"],
["material", "Material"],
],
});
}
export class ResourceResource extends models.ServerModel {
_name = "resource.resource";
resource_type = fields.Selection({
selection: [
["user", "Human"],
["material", "Material"],
],
});
}
export class PlanningRole extends models.ServerModel {
_name = "planning.role";
}
export const planningModels = {
...hrModels,
PlanningSlot,
PlanningRecurrency,
PlanningSlotTemplate,
PlanningFilterResource,
ResourceResource,
PlanningRole,
};
export function definePlanningModels() {
defineModels(planningModels);
}