summaryrefslogtreecommitdiff
path: root/addons/event
diff options
context:
space:
mode:
authorqmo-odoo <qmo@odoo.com>2020-01-16 08:36:13 +0000
committerqmo-odoo <qmo@odoo.com>2020-03-26 14:59:16 +0000
commit91eded2eb280ddb2dc4acfe92cab5c98a7554fee (patch)
tree1e8d9964a5b97b6aa6baa93e3ec8f5c2a6d9f835 /addons/event
parent307263c22d9ea1eecc1f6fba478c24a7a845f2c7 (diff)
[IMP] website_event, event: Add event.tag.category and event.tag + rename event.type display name
This commit changes the display name for the model event.type from "Event Category" to "Event Template" This change was needed before introducing the new model event.tag.category which will be used to group tags (event.tag) This commit introduces two new models: event.tag.category & event.tag The tags will be grouped by category and will be used to filter events. In the front-end, if the user activates the "filter by categories", each event.tag.category will generate a new dropdown of related tags. Clicking on one of these tags will add a new "tag badge" above the events (same way as in eLearning). LINKS: TaskID:2162438 PR: #43856
Diffstat (limited to 'addons/event')
-rw-r--r--addons/event/__manifest__.py1
-rw-r--r--addons/event/data/event_demo.xml50
-rw-r--r--addons/event/models/__init__.py1
-rw-r--r--addons/event/models/event_event.py13
-rw-r--r--addons/event/models/event_tag.py26
-rw-r--r--addons/event/security/ir.model.access.csv4
-rw-r--r--addons/event/views/event_menu_views.xml6
-rw-r--r--addons/event/views/event_tag_views.xml79
-rw-r--r--addons/event/views/event_views.xml13
9 files changed, 184 insertions, 9 deletions
diff --git a/addons/event/__manifest__.py b/addons/event/__manifest__.py
index e49f260e24a..2c1e03c7d1c 100644
--- a/addons/event/__manifest__.py
+++ b/addons/event/__manifest__.py
@@ -32,6 +32,7 @@ Key Features
'views/res_config_settings_views.xml',
'views/event_templates.xml',
'views/res_partner_views.xml',
+ 'views/event_tag_views.xml'
],
'demo': [
'data/res_users_demo.xml',
diff --git a/addons/event/data/event_demo.xml b/addons/event/data/event_demo.xml
index 91651959471..01022610b7e 100644
--- a/addons/event/data/event_demo.xml
+++ b/addons/event/data/event_demo.xml
@@ -25,6 +25,50 @@
<field name="default_timezone">Europe/Brussels</field>
</record>
+ <!-- Category and Tags -->
+ <record id="event_tag_category_1" model="event.tag.category">
+ <field name="name">Age</field>
+ </record>
+
+ <record id="event_tag_category_2" model="event.tag.category">
+ <field name="name">Activity</field>
+ </record>
+
+ <record id="event_tag_category_1_tag_1" model="event.tag">
+ <field name="name">5-10</field>
+ <field name="category_id" ref="event_tag_category_1"/>
+ </record>
+
+ <record id="event_tag_category_1_tag_2" model="event.tag">
+ <field name="name">10-14</field>
+ <field name="category_id" ref="event_tag_category_1"/>
+ </record>
+
+ <record id="event_tag_category_1_tag_3" model="event.tag">
+ <field name="name">15-18</field>
+ <field name="category_id" ref="event_tag_category_1"/>
+ </record>
+
+ <record id="event_tag_category_1_tag_4" model="event.tag">
+ <field name="name">18+</field>
+ <field name="category_id" ref="event_tag_category_1"/>
+ </record>
+
+ <record id="event_tag_category_2_tag_1" model="event.tag">
+ <field name="name">Culture</field>
+ <field name="category_id" ref="event_tag_category_2"/>
+ </record>
+
+ <record id="event_tag_category_2_tag_2" model="event.tag">
+ <field name="name">Music</field>
+ <field name="category_id" ref="event_tag_category_2"/>
+ </record>
+
+ <record id="event_tag_category_2_tag_3" model="event.tag">
+ <field name="name">Sport</field>
+ <field name="category_id" ref="event_tag_category_2"/>
+ </record>
+
<!-- Event -->
<record id="event.event_0" model="event.event">
<field name="name">Design Fair Los Angeles</field>
@@ -37,6 +81,7 @@
<field name="date_tz">US/Pacific</field>
<field name="event_type_id" ref="event_type_0"/>
<field name="stage_id" ref="event_stage_booked"/>
+ <field name="tag_ids" eval="[(6, 0, [event_tag_category_1_tag_1,event_tag_category_2_tag_1])]"/>
</record>
<record id="event_0_ticket_0" model="event.event.ticket">
<field name="name">Free</field>
@@ -72,6 +117,7 @@
<field name="address_id" ref="event.res_partner_location_0"/>
<field name="stage_id" ref="event_stage_booked"/>
<field name="kanban_state">blocked</field>
+ <field name="tag_ids" eval="[(6, 0, [event_tag_category_1_tag_4,event_tag_category_2_tag_3])]"/>
</record>
<record id="message_event_1_0" model="mail.message">
@@ -125,6 +171,7 @@
<field name="seats_availability">limited</field>
<field name="seats_max">200</field>
<field name="stage_id" ref="event_stage_booked"/>
+ <field name="tag_ids" eval="[(6, 0, [event_tag_category_1_tag_4,event_tag_category_2_tag_1])]"/>
</record>
<record id="event_2_ticket_1" model="event.event.ticket">
<field name="name">Standard</field>
@@ -160,6 +207,7 @@
<field name="event_type_id" ref="event_type_0"/>
<field name="address_id" ref="event.res_partner_location_1"/>
<field name="stage_id" ref="event_stage_announced"/>
+ <field name="tag_ids" eval="[(6, 0, [event_tag_category_1_tag_3,event_tag_category_2_tag_2])]"/>
</record>
<record id="event_3_ticket_0" model="event.event.ticket">
<field name="name">Standard</field>
@@ -200,6 +248,7 @@
<field name="event_type_id" ref="event_type_1"/>
<field name="stage_id" ref="event_stage_done"/>
<field name="kanban_state">done</field>
+ <field name="tag_ids" eval="[(6, 0, [event_tag_category_1_tag_4,event_tag_category_2_tag_1])]"/>
</record>
<record id="event_4_ticket_0" model="event.event.ticket">
<field name="name">General Admission</field>
@@ -224,6 +273,7 @@
<field eval="(DateTime.today()+ timedelta(days=371)).strftime('%Y-%m-%d 17:00:00')" name="date_end"/>
<field name="event_type_id" ref="event_type_2"/>
<field name="address_id" ref="event.res_partner_location_1"/>
+ <field name="tag_ids" eval="[(6, 0, [event_tag_category_1_tag_2,event_tag_category_2_tag_3])]"/>
</record>
<record id="event.event_6" model="event.event">
diff --git a/addons/event/models/__init__.py b/addons/event/models/__init__.py
index 943b57206f9..4aefa5d6068 100644
--- a/addons/event/models/__init__.py
+++ b/addons/event/models/__init__.py
@@ -5,6 +5,7 @@ from . import event_event
from . import event_mail
from . import event_registration
from . import event_stage
+from . import event_tag
from . import event_ticket
from . import res_config_settings
from . import res_partner
diff --git a/addons/event/models/event_event.py b/addons/event/models/event_event.py
index 301cfb99266..a091da8ff6b 100644
--- a/addons/event/models/event_event.py
+++ b/addons/event/models/event_event.py
@@ -21,10 +21,10 @@ except ImportError:
class EventType(models.Model):
_name = 'event.type'
- _description = 'Event Category'
+ _description = 'Event Template'
_order = 'sequence, id'
- name = fields.Char('Event Category', required=True, translate=True)
+ name = fields.Char('Event Template', required=True, translate=True)
sequence = fields.Integer()
# tickets
use_ticket = fields.Boolean('Ticketing')
@@ -32,6 +32,7 @@ class EventType(models.Model):
'event.type.ticket', 'event_type_id',
string='Tickets', compute='_compute_event_type_ticket_ids',
readonly=False, store=True)
+ tag_ids = fields.Many2many('event.tag', string="Tags", copy=True)
# registration
has_seats_limitation = fields.Boolean('Limited Seats')
seats_max = fields.Integer(
@@ -91,7 +92,6 @@ class EventType(models.Model):
if not template.has_seats_limitation:
template.seats_max = 0
-
class EventEvent(models.Model):
"""Event"""
_name = 'event.event'
@@ -118,11 +118,13 @@ class EventEvent(models.Model):
'res.partner', string='Organizer', tracking=True,
default=lambda self: self.env.company.partner_id,
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
- event_type_id = fields.Many2one('event.type', string='Category', ondelete='set null')
+ event_type_id = fields.Many2one('event.type', string='Template', ondelete='set null')
color = fields.Integer('Kanban Color Index')
event_mail_ids = fields.One2many(
'event.mail', 'event_id', string='Mail Schedule', copy=True,
compute='_compute_from_event_type', readonly=False, store=True)
+ tag_ids = fields.Many2many('event.tag', string="Tags", readonly=False,
+ copy=True, store=True, compute="_compute_from_event_type")
# Kanban fields
kanban_state = fields.Selection([('normal', 'In Progress'), ('done', 'Done'), ('blocked', 'Blocked')], default='normal')
kanban_state_label = fields.Char(
@@ -379,6 +381,9 @@ class EventEvent(models.Model):
})
for line in event.event_type_id.event_type_ticket_ids]
+ if event.event_type_id.tag_ids:
+ event.tag_ids = event.event_type_id.tag_ids
+
@api.constrains('seats_max', 'seats_available', 'seats_availability')
def _check_seats_limit(self):
if any(event.seats_availability == 'limited' and event.seats_max and event.seats_available < 0 for event in self):
diff --git a/addons/event/models/event_tag.py b/addons/event/models/event_tag.py
new file mode 100644
index 00000000000..fc5f733386a
--- /dev/null
+++ b/addons/event/models/event_tag.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import _, api, fields, models
+
+
+class EventTagCategory(models.Model):
+ _name = "event.tag.category"
+ _description = "Event Tag Category"
+ _order = "sequence"
+
+ name = fields.Char("Name", required=True, translate=True)
+ sequence = fields.Integer('Sequence', default=0)
+ tag_ids = fields.One2many('event.tag', 'category_id', string="Tags")
+
+class EventTag(models.Model):
+ _name = "event.tag"
+ _description = "Event Tag"
+ _order = "sequence"
+
+ name = fields.Char("Name", required=True, translate=True)
+ sequence = fields.Integer('Sequence', default=0)
+ category_id = fields.Many2one("event.tag.category", string="Category", required=True, ondelete='cascade')
+
+ def name_get(self):
+ return [(tag.id, _("%s: %s" % (tag.category_id.name, tag.name))) for tag in self]
diff --git a/addons/event/security/ir.model.access.csv b/addons/event/security/ir.model.access.csv
index 9d680924f5d..909f21e4b80 100644
--- a/addons/event/security/ir.model.access.csv
+++ b/addons/event/security/ir.model.access.csv
@@ -19,3 +19,7 @@ access_event_type_mail_event_user,event.type.mail.event.user,model_event_type_ma
access_event_type_mail_event_manager,event.type.mail.event.manager,model_event_type_mail,event.group_event_manager,1,1,1,1
access_event_stage_user,event.stage.user,model_event_stage,event.group_event_user,1,1,1,1
access_event_stage_manager,event.stage.manager,model_event_stage,event.group_event_manager,1,1,1,1
+access_event_category,event.tag.category,model_event_tag_category,event.group_event_user,1,0,0,0
+access_event_category_manager,event.tag.category manager,model_event_tag_category,event.group_event_manager,1,1,1,1
+access_event_tag,event.tag,model_event_tag,event.group_event_user,1,0,0,0
+access_event_tag_manager,event.tag manager,model_event_tag,event.group_event_manager,1,1,1,1
diff --git a/addons/event/views/event_menu_views.xml b/addons/event/views/event_menu_views.xml
index 3f42322e9b3..ffb58639d61 100644
--- a/addons/event/views/event_menu_views.xml
+++ b/addons/event/views/event_menu_views.xml
@@ -28,7 +28,7 @@
sequence="99"
parent="event_main_menu"
groups="event.group_event_user"/>
- <menuitem name="Event Categories"
+ <menuitem name="Event Templates"
id="menu_event_type"
sequence="1"
parent="menu_event_configuration"/>
@@ -37,5 +37,9 @@
sequence="10"
parent="menu_event_configuration"
groups="base.group_no_one"/>
+ <menuitem name="Event Tags Categories"
+ id="menu_event_category"
+ sequence="20"
+ parent="menu_event_configuration"/>
</data></odoo>
diff --git a/addons/event/views/event_tag_views.xml b/addons/event/views/event_tag_views.xml
new file mode 100644
index 00000000000..6d2ae530bb9
--- /dev/null
+++ b/addons/event/views/event_tag_views.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<odoo>
+ <data>
+ <!-- EVENT.TAG.CATEGORY VIEWS -->
+ <record id="event_tag_category_view_tree" model="ir.ui.view">
+ <field name="name">event.tag.category.view.tree</field>
+ <field name="model">event.tag.category</field>
+ <field name="arch" type="xml">
+ <tree string="Event Category">
+ <field name="sequence" widget="handle"/>
+ <field name="name"/>
+ <field name="tag_ids" widget="many2many_tags" />
+ </tree>
+ </field>
+ </record>
+
+ <record id="event_tag_category_view_form" model="ir.ui.view">
+ <field name="name">event.tag.category.view.form</field>
+ <field name="model">event.tag.category</field>
+ <field name="arch" type="xml">
+ <form string="Event Category">
+ <sheet>
+ <div class="oe_title">
+ <h1><field nolabel="1" name="name"/></h1>
+ </div>
+ <group>
+ <field name="tag_ids" context="{'default_category_id': active_id}">
+ <tree string="Tags" editable="bottom">
+ <field name="sequence" widget="handle"/>
+ <field name="name"/>
+ </tree>
+ </field>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="event_tag_category_action_tree" model="ir.actions.act_window" >
+ <field name="name">Event Tags Categories</field>
+ <field name="res_model">event.tag.category</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <!-- EVENT.TAG VIEWS -->
+ <record id="event_tag_view_tree" model="ir.ui.view">
+ <field name="name">event.tag.view.tree</field>
+ <field name="model">event.tag</field>
+ <field name="arch" type="xml">
+ <tree string="Event Tags Categories">
+ <field name="sequence" widget="handle"/>
+ <field name="name"/>
+ <field name="category_id"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="event_tag_view_form" model="ir.ui.view">
+ <field name="name">event.tag.view.form</field>
+ <field name="model">event.tag</field>
+ <field name="arch" type="xml">
+ <form string="Event Category Tag">
+ <sheet>
+ <div class="oe_title">
+ <label for="name" class="oe_edit_only"/>
+ <h1><field name="name"/></h1>
+ </div>
+ <field name="category_id" widget="many2one"/>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="menu_event_category" model="ir.ui.menu">
+ <field name="action" ref="event.event_tag_category_action_tree"/>
+ </record>
+
+ </data>
+</odoo>
diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml
index 43f778f9a5e..7a9842507f2 100644
--- a/addons/event/views/event_views.xml
+++ b/addons/event/views/event_views.xml
@@ -86,6 +86,10 @@
</div>
</div>
</div>
+ <div class="col-12 col-lg-6 o_setting_box" >
+ <label for="tag_ids" string="Tags"/>
+ <field name="tag_ids" widget="many2many_tags" options="{'no_quick_create': True}"/>
+ </div>
</div>
<h2>Attendees</h2>
<div class="row mt16 o_settings_container" name="event_type_attendees">
@@ -131,7 +135,7 @@
<field name="name">event.type.tree</field>
<field name="model">event.type</field>
<field name="arch" type="xml">
- <tree string="Event Category">
+ <tree string="Event Template">
<field name="sequence" widget="handle"/>
<field name="name"/>
</tree>
@@ -142,7 +146,7 @@
<field name="name">event.type.search</field>
<field name="model">event.type</field>
<field name="arch" type="xml">
- <search string="Event Categories">
+ <search string="Event Templates">
<field name="name"/>
<filter string="Online Event" name="online_event" help="Online Event" domain="[('is_online', '=', True)]"/>
</search>
@@ -150,7 +154,7 @@
</record>
<record model="ir.actions.act_window" id="action_event_type">
- <field name="name">Event Categories</field>
+ <field name="name">Event Templates</field>
<field name="res_model">event.type</field>
</record>
@@ -227,6 +231,7 @@
</group>
<group>
<field name="event_type_id" options="{'no_create':True}"/>
+ <field name="tag_ids" widget="many2many_tags" options="{'no_quick_create': True}"/>
<field name="auto_confirm" groups="base.group_no_one"/>
</group>
<group>
@@ -446,7 +451,7 @@
domain="[('activity_ids.date_deadline', '&gt;', context_today().strftime('%Y-%m-%d'))]"/>
<group expand="0" string="Group By">
<filter string="Responsible" name="responsible" context="{'group_by': 'user_id'}"/>
- <filter string="Event Category" name="event_type_id" context="{'group_by': 'event_type_id'}"/>
+ <filter string="Template" name="event_type_id" context="{'group_by': 'event_type_id'}"/>
<filter string="Stage" name="stage_id" context="{'group_by': 'stage_id'}"/>
<filter string="Start Date" name="date_begin" domain="[]" context="{'group_by': 'date_begin'}"/>
</group>