summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorryv-odoo <ryv@odoo.com>2019-11-26 13:04:27 +0000
committerPatrick Hoste <pko@odoo.com>2020-02-04 14:48:31 +0000
commitcec6c77a0b1f1fe6b04dd88a71861390f22e7a8d (patch)
tree786fcb75f3ef20a32e922cb23e9aa84b543cdcb8 /addons
parentce7cc63b58994885ce1ac1391e2b135a81630b20 (diff)
[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
Diffstat (limited to 'addons')
-rw-r--r--addons/event/models/event_event.py22
-rw-r--r--addons/event/models/event_registration.py10
-rw-r--r--addons/event/views/event_views.xml15
-rw-r--r--addons/event_sale/models/event_registration.py17
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 @@
</field>
</record>
+ <record id="event_event_view_graph" model="ir.ui.view" >
+ <field name="name">event.event.view.graph</field>
+ <field name="model">event.event</field>
+ <field name="arch" type="xml">
+ <graph string="Events">
+ <field name="name" type="row"/>
+ <field name="seats_available" type="measure"/>
+ </graph>
+ </field>
+ </record>
+
<record model="ir.actions.act_window" id="action_event_view">
<field name="name">Events</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">event.event</field>
- <field name="view_mode">kanban,calendar,tree,form,pivot</field>
+ <field name="view_mode">kanban,calendar,tree,form,pivot,graph</field>
<field name="search_view_id" ref="view_event_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
@@ -658,6 +669,8 @@
<search string="Event Registration">
<field name="id" string="Registration ID"/>
<field name="name" string="Participant" filter_domain="['|', '|', ('name', 'ilike', self), ('email', 'ilike', self), ('origin', 'ilike', self)]"/>
+ <filter string="Ongoing Events" name="filter_is_ongoing" domain="[('event_id.is_ongoing', '=', True)]"/>
+ <separator/>
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<filter string="Expected" name="expected" domain="[('state', 'in', ['draft', 'open', 'done'])]"/>
<separator/>
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