[IMP] event: add payment status in barcode / attendee kanban view
PURPOSE Introduce a clearer way of handling registrations for multiple events occurring at the same time and place by * improve attendess kanban view; * introducing a Registration Desk menu item; SPECIFICATIONS Introduce a computed "payment_status" selection field, allowing to display status of a registration, based on its SO and ``is_paid```field. It is better fro UX and display. It is not stored as currently stored fields are sufficient for current requirement. Add it to the kanban view. Prepare barcode improvements by improving _get_registration_summary returned data dict, adding some information to display in event_barcode. Reorganize registrations actions, and prepare a generic one leading to attendees kanban view for registration desk. LINKS Task ID #2214290 Community PR odoo/odoo#47511 Enterprise PR odoo/enterprise#9190
This commit is contained in:
committed by
Thibault Delavallée
parent
d169b5b509
commit
885437ee21
@@ -268,8 +268,10 @@ class EventRegistration(models.Model):
|
||||
self.ensure_one()
|
||||
return {
|
||||
'id': self.id,
|
||||
'name': self.name,
|
||||
'partner_id': self.partner_id.id,
|
||||
'ticket_name': self.event_ticket_id.name or _('None'),
|
||||
'name': self.name,
|
||||
'event_name': self.event_id.name,
|
||||
'event_id': self.event_id.id,
|
||||
'event_display_name': self.event_id.display_name,
|
||||
'company_name': self.event_id.company_id and self.event_id.company_id.name or False,
|
||||
}
|
||||
|
||||
@@ -161,6 +161,17 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="event_registration_action" model="ir.actions.act_window">
|
||||
<field name="res_model">event.registration</field>
|
||||
<field name="name">Attendees</field>
|
||||
<field name="view_mode">kanban,tree,form,calendar,graph</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create an Attendee
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="event_registration_action_tree" model="ir.actions.act_window">
|
||||
<field name="name">Event registrations</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
@@ -702,12 +713,12 @@
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_registration">
|
||||
<field name="name">Attendees</field>
|
||||
<field name="res_model">event.registration</field>
|
||||
<field name="domain"></field>
|
||||
<field name="view_mode">pivot,graph,kanban,tree,form</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="search_view_id" ref="view_registration_search"/>
|
||||
<field name="name">Attendees</field>
|
||||
<field name="res_model">event.registration</field>
|
||||
<field name="domain"></field>
|
||||
<field name="view_mode">pivot,graph,kanban,tree,form</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="search_view_id" ref="view_registration_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Attendees"
|
||||
|
||||
@@ -12,10 +12,27 @@ class EventRegistration(models.Model):
|
||||
# TDE FIXME: maybe add an onchange on sale_order_id
|
||||
sale_order_id = fields.Many2one('sale.order', string='Source Sales Order', ondelete='cascade')
|
||||
sale_order_line_id = fields.Many2one('sale.order.line', string='Sales Order Line', ondelete='cascade')
|
||||
payment_status = fields.Selection(string="Payment Status", selection=[
|
||||
('to_pay', 'Not Paid'),
|
||||
('paid', 'Paid'),
|
||||
('free', 'Free'),
|
||||
], compute="_compute_payment_status", compute_sudo=True)
|
||||
utm_campaign_id = fields.Many2one(compute='_compute_utm_campaign_id', readonly=False, store=True)
|
||||
utm_source_id = fields.Many2one(compute='_compute_utm_source_id', readonly=False, store=True)
|
||||
utm_medium_id = fields.Many2one(compute='_compute_utm_medium_id', readonly=False, store=True)
|
||||
|
||||
@api.depends('is_paid', 'sale_order_id.currency_id', 'sale_order_line_id.price_total')
|
||||
def _compute_payment_status(self):
|
||||
for record in self:
|
||||
so = record.sale_order_id
|
||||
so_line = record.sale_order_line_id
|
||||
if not so or float_is_zero(so_line.price_total, precision_digits=so.currency_id.rounding):
|
||||
record.payment_status = 'free'
|
||||
elif record.is_paid:
|
||||
record.payment_status = 'paid'
|
||||
else:
|
||||
record.payment_status = 'to_pay'
|
||||
|
||||
@api.depends('sale_order_id')
|
||||
def _compute_utm_campaign_id(self):
|
||||
for registration in self:
|
||||
@@ -102,18 +119,9 @@ class EventRegistration(models.Model):
|
||||
|
||||
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')
|
||||
has_to_pay = True
|
||||
else:
|
||||
payment_status = _('Paid')
|
||||
res.update({
|
||||
'payment_status': payment_status,
|
||||
'has_to_pay': has_to_pay
|
||||
'payment_status': self.payment_status,
|
||||
'payment_status_value': dict(self._fields['payment_status']._description_selection(self.env))[self.payment_status],
|
||||
'has_to_pay': not self.is_paid,
|
||||
})
|
||||
return res
|
||||
|
||||
@@ -12,6 +12,24 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="event_registration_view_kanban" model="ir.ui.view">
|
||||
<field name="name">event.registration.kanban.inherit.event.sale</field>
|
||||
<field name="model">event.registration</field>
|
||||
<field name="inherit_id" ref="event.event_registration_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@id='event_attendees_kanban_icons_desktop']" position="inside">
|
||||
<div class="mt-auto pt-2">
|
||||
<field name="payment_status"/>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='event_ticket_id']" position="before">
|
||||
<div class="d-md-none" >
|
||||
<field name="payment_status"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_event_registration_ticket_form" model="ir.ui.view">
|
||||
<field name="name">event.registration.form.inherit</field>
|
||||
<field name="model">event.registration</field>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<field name="model">sale.order</field>
|
||||
<field name="inherit_id" ref="sale.view_order_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<xpath expr="//button[@name='preview_sale_order']" position="before">
|
||||
<button name="action_view_attendee_list" type="object"
|
||||
class="oe_stat_button" icon="fa-users" attrs="{'invisible': [('attendee_count', '=', 0)]}">
|
||||
<field name="attendee_count" widget="statinfo" string="Attendees"/>
|
||||
|
||||
@@ -225,6 +225,7 @@
|
||||
<menuitem
|
||||
id="menu_event_track"
|
||||
name="Tracks"
|
||||
sequence="40"
|
||||
action="action_event_track"
|
||||
parent="event.event_main_menu"
|
||||
groups="base.group_no_one"/>
|
||||
|
||||
Reference in New Issue
Block a user