From 846df53468d8f98f8a82086b97d7c238f49c07d8 Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Wed, 26 Jul 2023 15:58:28 -0400 Subject: [PATCH] bemade_planning_travel: new module begun for planning travel --- bemade_planning_travel/__init__.py | 1 + bemade_planning_travel/models/__init__.py | 1 + .../models/planning_slot.py | 42 +++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 bemade_planning_travel/__init__.py create mode 100644 bemade_planning_travel/models/__init__.py create mode 100644 bemade_planning_travel/models/planning_slot.py diff --git a/bemade_planning_travel/__init__.py b/bemade_planning_travel/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/bemade_planning_travel/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/bemade_planning_travel/models/__init__.py b/bemade_planning_travel/models/__init__.py new file mode 100644 index 0000000..a3bec19 --- /dev/null +++ b/bemade_planning_travel/models/__init__.py @@ -0,0 +1 @@ +from . import planning_slot diff --git a/bemade_planning_travel/models/planning_slot.py b/bemade_planning_travel/models/planning_slot.py new file mode 100644 index 0000000..e9ab27c --- /dev/null +++ b/bemade_planning_travel/models/planning_slot.py @@ -0,0 +1,42 @@ +from odoo import models, fields, api + + +class PlanningSlot(models.Model): + _inherit = "planning.slot" + + inbound_travel_slot = fields.Many2one(comodel_name="planning.slot", + string="Inbound Travel Plan", ) + outbound_travel_slot = fields.Many2one(comodel_name="planning.slot", + string="Outbound Travel Plan") + + # Fields for travel slots + travel_origin_slot = fields.One2many(comodel_name="planning.slot", + inverse_name="outbound_travel_slot") + travel_destination_slot = fields.One2many(comodel_name="planning.slot", + inverse_name="inbound_travel_slot") + is_travel_slot = fields.Boolean() + + def action_plan_travel(self): + # Get previous and next planning records for the same day, same resource + for rec in self: + prev_slot = rec._get_previous_same_day_same_resource_slot() + next_slot = rec._get_next_same_day_same_resource_slot() + + + def _get_previous_same_day_same_resource_slot(self): + start = self.start_datetime.replace(hour=0, minute=0, second=0, + microsecond=0) + domain = [('is_travel_slot', '=', False), + ('start_datetime', '>=', start), + ('end_datetime', '<=', self.start_datetime), + ('resource_id', '=', self.resource_id.id)] + return self.env['planning.slot'].search(domain) + + def _get_next_same_day_same_resource_slot(self): + end = self.end_datetime.replace(hour=23, minute=59, second=59, + microsecond=999999) + domain = [('is_travel_slot', '=', False), + ('start_datetime', '>=', self.end_datetime), + ('end_datetime', '<=', end), + ('resource_id', '=', self.resource_id.id)] + return self.env['planning.slot'].search(domain)