From cec6c77a0b1f1fe6b04dd88a71861390f22e7a8d Mon Sep 17 00:00:00 2001 From: ryv-odoo Date: Tue, 26 Nov 2019 13:04:27 +0000 Subject: [PATCH 1/6] [IMP] event: adds graph view and adds change for event_barcode PURPOSE - In order to get an overview over events, add a graph view grouped by event name and measure by seats available. - Before this commit you had to install event_sale to see the popup window in the barcode interface when scanning an attendee. With this commit you'll see the popup even when event_sale is not installed. SPECIFICATION - Add the minimal information about the registration in the event module and overrides it in the event_sale module to add the necessary informations. That makes the window popup appear everytime when scanning an attendee. - Add a "is_ongoing" field on event model to use it as a filter in event_barcode. LINKS Task ID : 2093336 PR : #43420 Enterprise PR : odoo/enterprise#7760 --- addons/event/models/event_event.py | 22 ++++++++++++++++++- addons/event/models/event_registration.py | 10 +++++++-- addons/event/views/event_views.xml | 15 ++++++++++++- .../event_sale/models/event_registration.py | 17 +++++++------- 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/addons/event/models/event_event.py b/addons/event/models/event_event.py index 42e55b83e1b..2e78da33d97 100644 --- a/addons/event/models/event_event.py +++ b/addons/event/models/event_event.py @@ -170,12 +170,13 @@ class EventEvent(models.Model): date_end = fields.Datetime(string='End Date', required=True, tracking=True) date_begin_located = fields.Char(string='Start Date Located', compute='_compute_date_begin_tz') date_end_located = fields.Char(string='End Date Located', compute='_compute_date_end_tz') + is_ongoing = fields.Boolean('Is Ongoing', compute='_compute_is_ongoing', search='_search_is_ongoing') is_one_day = fields.Boolean(compute='_compute_field_is_one_day') start_sale_date = fields.Date('Start sale date', compute='_compute_start_sale_date') # Location and communication is_online = fields.Boolean('Online Event') address_id = fields.Many2one( - 'res.partner', string='Location', tracking=True, + 'res.partner', string='Venue', tracking=True, default=lambda self: self.env.company.partner_id, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]") country_id = fields.Many2one('res.country', 'Country', related='address_id.country_id', store=True, readonly=False) @@ -251,6 +252,25 @@ class EventEvent(models.Model): else: event.date_end_located = False + @api.depends('date_begin', 'date_end') + def _compute_is_ongoing(self): + now = fields.Datetime.now() + for event in self: + event.is_ongoing = event.date_begin <= now < event.date_end + + def _search_is_ongoing(self, operator, value): + if operator not in ['=', '!=']: + raise ValueError(_('This operator is not supported')) + if not isinstance(value, bool): + raise ValueError(_('Value should be True or False (not %s)'), value) + now = fields.Datetime.now() + if (operator == '=' and value) or (operator == '!=' and not value): + domain = [('date_begin', '<=', now), ('date_end', '>', now)] + else: + domain = ['|', ('date_begin', '>', now), ('date_end', '<=', now)] + event_ids = self.env['event.event']._search(domain) + return [('id', 'in', event_ids)] + @api.depends('date_begin', 'date_end', 'date_tz') def _compute_field_is_one_day(self): for event in self: diff --git a/addons/event/models/event_registration.py b/addons/event/models/event_registration.py index 575e3442786..4fe978314b3 100644 --- a/addons/event/models/event_registration.py +++ b/addons/event/models/event_registration.py @@ -249,6 +249,12 @@ class EventRegistration(models.Model): else: return _('on ') + format_datetime(self.env, self.event_begin_date, tz=self.event_id.date_tz, dt_format='medium') - def summary(self): + def _get_registration_summary(self): self.ensure_one() - return {'information': []} + return { + 'id': self.id, + 'partner_id': self.partner_id.id, + 'ticket_name': self.event_ticket_id.name or _('None'), + 'name': self.name, + 'event_name': self.event_id.name, + } diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml index be2bdacf90d..59034a2c180 100644 --- a/addons/event/views/event_views.xml +++ b/addons/event/views/event_views.xml @@ -485,11 +485,22 @@ + + event.event.view.graph + event.event + + + + + + + + Events ir.actions.act_window event.event - kanban,calendar,tree,form,pivot + kanban,calendar,tree,form,pivot,graph

@@ -658,6 +669,8 @@ + + diff --git a/addons/event_sale/models/event_registration.py b/addons/event_sale/models/event_registration.py index be96547f10e..3a9b23f0694 100644 --- a/addons/event_sale/models/event_registration.py +++ b/addons/event_sale/models/event_registration.py @@ -60,21 +60,20 @@ class EventRegistration(models.Model): } return {} - def summary(self): - res = super(EventRegistration, self).summary() - if self.event_ticket_id.product_id.image_128: - res['image'] = '/web/image/product.product/%s/image_128' % self.event_ticket_id.product_id.id - information = res.setdefault('information', {}) - information.append((_('Name'), self.name)) - information.append((_('Ticket'), self.event_ticket_id.name or _('None'))) + def _get_registration_summary(self): + res = super(EventRegistration, self)._get_registration_summary() order = self.sale_order_id.sudo() order_line = self.sale_order_line_id.sudo() + has_to_pay = False if not order or float_is_zero(order_line.price_total, precision_digits=order.currency_id.rounding): payment_status = _('Free') elif not order.invoice_ids or any(invoice.payment_state != 'paid' for invoice in order.invoice_ids): payment_status = _('To pay') - res['alert'] = _('The registration must be paid') + has_to_pay = True else: payment_status = _('Paid') - information.append((_('Payment'), payment_status)) + res.update({ + 'payment_status': payment_status, + 'has_to_pay': has_to_pay + }) return res From 67c090e48a8b6bd418998198d9672efe079fbc73 Mon Sep 17 00:00:00 2001 From: ryv-odoo Date: Tue, 26 Nov 2019 13:36:10 +0000 Subject: [PATCH 2/6] [IMP] website_event_track: improve track proposal PURPOSE - When creating a talk proposal, the spaces and carriage return were ignored - Track name change from "Location" into "Room" - Remove link between image/biography and the related partner and allow the user to add one when submitting a track proposal. SPECIFICATION - Adds the plaintext2html requirement to the controller. - Adds an input to upload an image on a track proposal. Task ID : 2093336 PR : #43420 --- addons/website_event_track/controllers/main.py | 11 +++++++---- addons/website_event_track/models/event_track.py | 5 ++--- .../views/event_track_templates.xml | 15 +++++++++++---- .../views/event_track_views.xml | 15 ++++++++------- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/addons/website_event_track/controllers/main.py b/addons/website_event_track/controllers/main.py index 747ec271c86..95c7a909959 100644 --- a/addons/website_event_track/controllers/main.py +++ b/addons/website_event_track/controllers/main.py @@ -6,11 +6,12 @@ import babel.dates import collections import datetime import pytz +import base64 from werkzeug.exceptions import NotFound from odoo import fields, http from odoo.http import request -from odoo.tools import html_escape as escape, html2plaintext +from odoo.tools import plaintext2html, html2plaintext class WebsiteEventTrackController(http.Controller): @@ -93,6 +94,7 @@ class WebsiteEventTrackController(http.Controller): return request.render("website_event_track.agenda", { 'event': event, + 'main_object': event, 'days': days, 'tracks_by_days': tracks_by_days, 'tag': tag @@ -129,7 +131,7 @@ class WebsiteEventTrackController(http.Controller): if not event.can_access_from_current_website(): raise NotFound() - return request.render("website_event_track.event_track_proposal", {'event': event}) + return request.render("website_event_track.event_track_proposal", {'event': event, 'main_object': event}) @http.route(['''/event//track_proposal/post'''], type='http', auth="public", methods=['POST'], website=True) def event_track_proposal_post(self, event, **post): @@ -146,11 +148,12 @@ class WebsiteEventTrackController(http.Controller): 'partner_name': post['partner_name'], 'partner_email': post['email_from'], 'partner_phone': post['phone'], - 'partner_biography': escape(post['biography']), + 'partner_biography': plaintext2html(post['biography']), 'event_id': event.id, 'tag_ids': [(6, 0, tags)], 'user_id': False, - 'description': escape(post['description']) + 'description': plaintext2html(post['description']), + 'image': base64.b64encode(post['image'].read()) if post.get('image') else False }) if request.env.user != request.website.user_id: track.sudo().message_subscribe(partner_ids=request.env.user.partner_id.ids) diff --git a/addons/website_event_track/models/event_track.py b/addons/website_event_track/models/event_track.py index 7d7b20a72be..870d57c4cd9 100644 --- a/addons/website_event_track/models/event_track.py +++ b/addons/website_event_track/models/event_track.py @@ -66,14 +66,14 @@ class Track(models.Model): date = fields.Datetime('Track Date') date_end = fields.Datetime('Track End Date', compute='_compute_end_date', store=True) duration = fields.Float('Duration', default=1.5, help="Track duration in hours.") - location_id = fields.Many2one('event.track.location', 'Room') + location_id = fields.Many2one('event.track.location', 'Location') event_id = fields.Many2one('event.event', 'Event', required=True) color = fields.Integer('Color', related="stage_id.color") priority = fields.Selection([ ('0', 'Low'), ('1', 'Medium'), ('2', 'High'), ('3', 'Highest')], 'Priority', required=True, default='1') - image = fields.Image("Image", related='partner_id.image_128', store=True, readonly=False) + image = fields.Image("Image", max_width=128, max_height=128) @api.depends('name') def _compute_website_url(self): @@ -88,7 +88,6 @@ class Track(models.Model): self.partner_name = self.partner_id.name self.partner_email = self.partner_id.email self.partner_phone = self.partner_id.phone - self.partner_biography = self.partner_id.website_description @api.depends('date', 'duration') def _compute_end_date(self): diff --git a/addons/website_event_track/views/event_track_templates.xml b/addons/website_event_track/views/event_track_templates.xml index a40ba933c53..eabbd1dfe9c 100644 --- a/addons/website_event_track/views/event_track_templates.xml +++ b/addons/website_event_track/views/event_track_templates.xml @@ -222,7 +222,8 @@

- + +

@@ -338,7 +339,7 @@
-