[IMP] event_track_calendar_event*:

change behaviour to allow multiple dates (calendar events) to event tracks
This commit is contained in:
clementthomas
2024-02-28 12:03:30 +01:00
parent a8467735f2
commit 3ed3a7fae4
8 changed files with 96 additions and 65 deletions

View File

@@ -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,
}

View File

@@ -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

View File

@@ -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'
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()

View File

@@ -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

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.ui.view" id="view_event_track_form_ctl_training_customization">
<field name="name">event.track.form.ctl.training.customization</field>
<field name="inherit_id" ref="website_event_track.view_event_track_form" />
<field name="model">event.track</field>
<field name="arch" type="xml">
<!--
Replace date with calendar events
-->
<field name="date" position="replace">
<field name="calendar_event_ids" context="{'default_name':name}" colspan="2">
<tree default_order="start,stop" editable="bottom">
<field name="name" string="Name" invisible="1" />
<field name="start" string="From" />
<field name="stop" string="To" />
</tree>
<form>
<group>
<field name="name" string="Name" />
<field name="start" string="From" />
<field name="stop" string="To" />
</group>
</form>
</field>
</field>
</field>
</record>
</odoo>