diff --git a/addons/event/models/event.py b/addons/event/models/event.py index 42a0c7f4eb9..26108f4b7c8 100644 --- a/addons/event/models/event.py +++ b/addons/event/models/event.py @@ -7,6 +7,7 @@ from odoo import _, api, fields, models from odoo.tools import format_datetime from odoo.exceptions import AccessError, UserError, ValidationError from odoo.tools.translate import html_translate +from odoo.tools.misc import _format_time_ago from dateutil.relativedelta import relativedelta @@ -102,6 +103,7 @@ class EventEvent(models.Model): name = fields.Char( string='Event', translate=True, required=True, readonly=False) + note = fields.Text(string='Note') active = fields.Boolean(default=True) user_id = fields.Many2one( 'res.users', string='Responsible', @@ -131,6 +133,7 @@ class EventEvent(models.Model): legend_blocked = fields.Char(related='stage_id.legend_blocked', string='Kanban Blocked Explanation', readonly=True) legend_done = fields.Char(related='stage_id.legend_done', string='Kanban Valid Explanation', readonly=True) legend_normal = fields.Char(related='stage_id.legend_normal', string='Kanban Ongoing Explanation', readonly=True) + duration_str = fields.Char(compute='_compute_duration_str') # Seats and computation seats_max = fields.Integer( string='Maximum Attendees Number', @@ -269,6 +272,11 @@ class EventEvent(models.Model): end_tz = fields.Datetime.context_timestamp(event, event.date_end) event.is_one_day = (begin_tz.date() == end_tz.date()) + @api.depends('date_begin', 'date_end') + def _compute_duration_str(self): + for event in self: + event.duration_str = _format_time_ago(self.env, event.date_end - event.date_begin, add_direction=False) + @api.onchange('is_online') def _onchange_is_online(self): if self.is_online: diff --git a/addons/event/static/src/scss/event.scss b/addons/event/static/src/scss/event.scss index c1ad84c10d8..b300ab54b1a 100644 --- a/addons/event/static/src/scss/event.scss +++ b/addons/event/static/src/scss/event.scss @@ -1,34 +1,39 @@ .o_kanban_view.o_event_kanban_view { - .o_kanban_record { position: relative; padding: 0; - display: flex; - + .o_kanban_record_title { + font-size: 1.2em; + } .o_event_left { flex: 1 1 25%; - text-align: center; color: white; background-color: $o-brand-primary; padding: 8px; - .o_day { font-size: 26px; } } - .o_event_right { - flex: 1 1 75%; padding: 8px; margin-left: 8px; - } + width: 70%; + .o_event_stat { + padding: 0; + height: 35px; + width: 60%; + } + } + .o_event_float_right { + right: 8px; + top: 40px; + } .o_event_bottom_right { - position: absolute; + width: 60px; right: 8px; bottom: 8px; - img { width: 20px; height: 20px; diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml index 8d10bc38265..dcf75e6a64a 100644 --- a/addons/event/views/event_views.xml +++ b/addons/event/views/event_views.xml @@ -175,6 +175,13 @@ + + Event registrations + ir.actions.act_window + event.registration + tree,kanban,form,calendar,graph + + Events Analysis @@ -251,6 +258,9 @@ + + + @@ -297,14 +307,29 @@ + + event.event.form.quick_create + event.event + 1000 + +
+ + + + + +
+
+
+ event.event.kanban event.event - + - + @@ -315,22 +340,13 @@ + + +
- -
+
@@ -338,26 +354,35 @@
-
-

+
-
- - To +

+

+

+
Duration
+
+
+
+
+
-

- - Expected attendees - -
- - Confirmed attendees - -
-

-
- +
+ +
@@ -436,7 +461,6 @@ ir.actions.act_window event.event kanban,calendar,tree,form,pivot - {"search_default_upcoming":1}

@@ -706,6 +730,5 @@ - diff --git a/addons/event_sale/models/event.py b/addons/event_sale/models/event.py index 79643ad7e50..0f55cf89e37 100644 --- a/addons/event_sale/models/event.py +++ b/addons/event_sale/models/event.py @@ -47,7 +47,7 @@ class Event(models.Model): 'sale.order.line', 'event_id', string='All sale order lines pointing to this event') - sales_total_price = fields.Monetary(compute='_compute_sales_total_price') + sale_total_price = fields.Monetary(compute='_compute_sale_total_price') currency_id = fields.Many2one( 'res.currency', string='Currency', default=lambda self: self.env.company.currency_id.id, readonly=True) @@ -73,9 +73,9 @@ class Event(models.Model): event.start_sale_date = min(start_dates) if start_dates else False @api.depends('sale_order_lines_ids') - def _compute_sales_total_price(self): + def _compute_sale_total_price(self): for event in self: - event.sales_total_price = sum([ + event.sale_total_price = sum([ event.currency_id._convert( sale_order_line_id.price_reduce_taxexcl, sale_order_line_id.currency_id, @@ -90,6 +90,18 @@ class Event(models.Model): non_open_events.event_registrations_open = False super(Event, self - non_open_events)._compute_event_registrations_open() + @api.depends('sale_order_lines_ids') + def _compute_sale_total_price(self): + for event in self: + event.sale_total_price = sum([ + event.currency_id._convert( + sale_order_line_id.price_reduce_taxexcl, + sale_order_line_id.currency_id, + sale_order_line_id.company_id, + sale_order_line_id.order_id.date_order) + for sale_order_line_id in event.sale_order_lines_ids + ]) + class EventTicket(models.Model): _name = 'event.event.ticket' diff --git a/addons/event_sale/views/event_views.xml b/addons/event_sale/views/event_views.xml index 8cc7b9e2421..277805bb66f 100644 --- a/addons/event_sale/views/event_views.xml +++ b/addons/event_sale/views/event_views.xml @@ -145,6 +145,18 @@ + + event.kanban.inherit + event.event + + + + +

Sales
+ +
+ + event.event.ticket.form event.event.ticket diff --git a/addons/mass_mailing_event/views/event_views.xml b/addons/mass_mailing_event/views/event_views.xml index 0bc4a121e63..86b870f706a 100644 --- a/addons/mass_mailing_event/views/event_views.xml +++ b/addons/mass_mailing_event/views/event_views.xml @@ -3,9 +3,10 @@ event.event.view.form.inherit.mass.mailing event.event + - +