diff --git a/event_track_calendar_event/__manifest__.py b/event_track_calendar_event/__manifest__.py index 38d5614..d8bef21 100644 --- a/event_track_calendar_event/__manifest__.py +++ b/event_track_calendar_event/__manifest__.py @@ -9,17 +9,17 @@ "author": "Elabore", "website": "https://www.elabore.coop", "category": "", - 'summary': 'Link event tracks to calendar event', + 'summary': 'Replace date of event track with list of calendar events', 'description': """ -Link event tracks to calendar event +Replace date of event track with list of calendar events ---------------------------------------------------- -* Create calendar event on event track creation -* Update calendar event on event track update -* Update event track when calendar event updated +* Create calendar events on event track form +* Sync calendar event attendees with event track registration """, "depends": ["website_event_track","calendar"], - "data": [ + "data": [ + "views/event_track_views.xml" ], "installable": True, } diff --git a/event_track_calendar_event/models/__init__.py b/event_track_calendar_event/models/__init__.py index 3ef27e9..ac878f3 100644 --- a/event_track_calendar_event/models/__init__.py +++ b/event_track_calendar_event/models/__init__.py @@ -1,4 +1,4 @@ from . import calendar_event -from . import event_event -from . import event_registration from . import event_track +from . import event_registration +from . import event_event \ No newline at end of file diff --git a/event_track_calendar_event/models/calendar_event.py b/event_track_calendar_event/models/calendar_event.py index ae50eef..4fa619e 100644 --- a/event_track_calendar_event/models/calendar_event.py +++ b/event_track_calendar_event/models/calendar_event.py @@ -1,8 +1,17 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import fields, models, api, Command class CalendarEvent(models.Model): _inherit = 'calendar.event' - \ No newline at end of file + event_track_id = fields.Many2one('event.track', "Event track") + + @api.model_create_multi + def create(self, vals_list): + res = super(CalendarEvent,self).create(vals_list) + for event in res: + if event.event_track_id: + event.event_track_id.sync_calendar_event() + + diff --git a/event_track_calendar_event/models/event_track.py b/event_track_calendar_event/models/event_track.py index 28d7f5a..8ea6fe3 100644 --- a/event_track_calendar_event/models/event_track.py +++ b/event_track_calendar_event/models/event_track.py @@ -6,8 +6,26 @@ from datetime import timedelta class EventTrack(models.Model): _inherit = "event.track" - calendar_event = fields.Many2one('calendar.event', 'Calendar event') + calendar_event_ids = fields.One2many('calendar.event', 'event_track_id', 'Days') + date = fields.Datetime(compute="_compute_date") + def _compute_date(self): + """Date become a field computed from first calendar event date + """ + for event_track in self: + if event_track.calendar_event_ids: + event_track.date = event_track.calendar_event_ids.sorted(key=lambda r: r.start)[0].start + else: + event_track.date = None + + def get_calendar_event_values(self): + """return default values of calendar events + """ + return { + 'partner_ids':[Command.set(self.get_calendar_event_partner_value())], + 'location':self.location_id.name if self.location_id else '', + 'user_id':self.user_id.id + } def get_calendar_event_partner_value(self): """Compute list of partner ids for calendar event @@ -23,36 +41,28 @@ class EventTrack(models.Model): partner_ids.extend([registration.partner_id.id for registration in self.event_id.registration_ids if registration.partner_id]) return partner_ids - - - def get_calendar_event_values(self): - self.ensure_one() - - return { - 'start':self.date, - 'duration':self.duration, - 'stop':self.date + timedelta(minutes=round((self.duration or 1.0) * 60)), - 'user_id':self.user_id.id, - 'partner_ids':[Command.set(self.get_calendar_event_partner_value())], - 'name':self.event_id.name+' - '+self.name, - } - - + + def sync_calendar_event(self): + """synchronize calendar event values with event track data + """ for track in self: - if not track.calendar_event: - track.calendar_event = self.env['calendar.event'].create(track.get_calendar_event_values()) - else: - track.calendar_event.write(track.get_calendar_event_values()) + track.calendar_event_ids.write(track.get_calendar_event_values()) + @api.model_create_multi def create(self, vals_list): + """ + after creation of event track synchronise calendar event values + """ res = super(EventTrack, self).create(vals_list) - for track in res: - track.sync_calendar_event() + res.sync_calendar_event() return res def write(self, vals): + """ + after modification of event track synchronise calendar event values + """ res = super().write(vals) self.sync_calendar_event() return res diff --git a/event_track_calendar_event/views/event_track_views.xml b/event_track_calendar_event/views/event_track_views.xml new file mode 100644 index 0000000..c56e308 --- /dev/null +++ b/event_track_calendar_event/views/event_track_views.xml @@ -0,0 +1,29 @@ + + + + event.track.form.ctl.training.customization + + event.track + + + + + + + + + +
+ + + + + +
+
+
+
+
+
diff --git a/event_track_calendar_event_event_track_location/models/__init__.py b/event_track_calendar_event_event_track_location/models/__init__.py index 4452179..70fbe9e 100644 --- a/event_track_calendar_event_event_track_location/models/__init__.py +++ b/event_track_calendar_event_event_track_location/models/__init__.py @@ -1,3 +1,2 @@ -from . import event_event from . import event_track from . import event_track_location \ No newline at end of file diff --git a/event_track_calendar_event_event_track_location/models/event_event.py b/event_track_calendar_event_event_track_location/models/event_event.py deleted file mode 100644 index 1d3e665..0000000 --- a/event_track_calendar_event_event_track_location/models/event_event.py +++ /dev/null @@ -1,13 +0,0 @@ -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import fields, models, api, Command - - -class EventEvent(models.Model): - _inherit = "event.event" - - def write(self, vals): - res = super().write(vals) - for event in self: - for track in event.track_ids: - track.sync_calendar_event() - return res diff --git a/event_track_calendar_event_event_track_location/models/event_track.py b/event_track_calendar_event_event_track_location/models/event_track.py index 3ab3a52..eae2648 100644 --- a/event_track_calendar_event_event_track_location/models/event_track.py +++ b/event_track_calendar_event_event_track_location/models/event_track.py @@ -1,12 +1,12 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import fields, models, api, Command, _ from datetime import timedelta +from odoo.tools import format_date class EventTrack(models.Model): _inherit = "event.track" - - calendar_event = fields.Many2one('calendar.event', 'Calendar event') + location_already_in_use = fields.Boolean('Location already in use', compute='_compute_location_already_in_use') location_already_in_use_message = fields.Text(compute='_compute_location_already_in_use') @@ -17,31 +17,28 @@ class EventTrack(models.Model): location_already_in_use = False location_already_in_use_message = "" - if track.location_id and track.date: + for calendar_event in track.calendar_event_ids: + if track.location_id and calendar_event.start: - #search if other track exists for same day on same location - search_other_tracks = [('location_id','=',track.location_id.id),('date','>',track.date.replace(hour=0,minute=0)),('date','<',track.date.replace(hour=23,minute=59))] - if track.id or track.id.origin: - search_other_tracks.append(('id','!=',track.id or track.id.origin)) - other_tracks = self.search(search_other_tracks) + #search if other calendar event exists for same day on same location + search_other_calendar_events = [('event_track_id.location_id','=',track.location_id.id),('start','>=',calendar_event.start.replace(hour=0,minute=0)),('start','<=',calendar_event.start.replace(hour=23,minute=59))] + + if track.id or track.id.origin: + search_other_calendar_events.append(('event_track_id','!=',track.id or track.id.origin)) + other_calendar_events = self.env["calendar.event"].search(search_other_calendar_events) - if other_tracks: - location_already_in_use = True - for other_track in other_tracks: - location_already_in_use_message += other_track.event_id.name+" - "+other_track.name+"\n" + if other_calendar_events: + location_already_in_use = True + for other_calendar_event in other_calendar_events: + location_already_in_use_message += other_calendar_event.event_track_id.event_id.name+" - "+\ + other_calendar_event.event_track_id.name+\ + " ("+format_date(self.env, other_calendar_event.start)+")"+"\n" track.location_already_in_use = location_already_in_use track.location_already_in_use_message = location_already_in_use_message - def get_calendar_event_values(self): - self.ensure_one() - res = super(EventTrack, self).get_calendar_event_values() - res['location'] = self.location_id.name - - return res - def get_calendar_event_partner_value(self): """Add event track location partner to list of partner ids """