[IMP] website_slides: add views and access for slide progress

Purpose of this commit is to have access to slide.slide.partner model that
holds member progress on specific slide. It is used notably to build completion
on slide.channel.partner or to store vote data. It is interesting to have
access to it to have some detailed informations.

It is now reachable through the "attendees" smart button that replaces the
'views' button. Public / other views are moved in slide details as those
buttons do not add much to the slide usability.

Task-2607416

Part-of: odoo/odoo#74171
This commit is contained in:
Thibault Delavallée
2022-02-28 11:07:38 +00:00
parent ffa2ed0e75
commit 924ca810ef
6 changed files with 133 additions and 17 deletions
+1
View File
@@ -33,6 +33,7 @@ Featuring
'views/rating_rating_views.xml',
'views/slide_embed_views.xml',
'views/slide_question_views.xml',
'views/slide_slide_partner_views.xml',
'views/slide_slide_views.xml',
'views/slide_channel_partner_views.xml',
'views/slide_channel_views.xml',
+3 -1
View File
@@ -26,8 +26,10 @@ class SlidePartnerRelation(models.Model):
_name = 'slide.slide.partner'
_description = 'Slide / Partner decorated m2m'
_table = 'slide_slide_partner'
_rec_name = 'partner_id'
slide_id = fields.Many2one('slide.slide', ondelete="cascade", index=True, required=True)
slide_id = fields.Many2one('slide.slide', string="Content", ondelete="cascade", index=True, required=True)
slide_category = fields.Selection(related='slide_id.slide_category')
channel_id = fields.Many2one(
'slide.channel', string="Channel",
related="slide_id.channel_id", store=True, index=True, ondelete='cascade')
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo><data>
<record id="slide_slide_partner_view_search" model="ir.ui.view">
<field name="name">slide.slide.partner.view.search</field>
<field name="model">slide.slide.partner</field>
<field name="arch" type="xml">
<search string="Attendees">
<field name="partner_id"/>
<field name="slide_id"/>
<field name="channel_id"/>
<separator/>
<filter string="Completed" name="filter_completed" domain="[('completed', '=', True)]"/>
<group expand="0" string="Group By">
<filter string="Content" name="groupby_slide_id" context="{'group_by': 'slide_id'}"/>
</group>
</search>
</field>
</record>
<record id="slide_slide_partner_view_tree" model="ir.ui.view">
<field name="name">slide.slide.partner.view.tree</field>
<field name="model">slide.slide.partner</field>
<field name="arch" type="xml">
<tree string="Attendees" create="0" delete="0">
<field name="create_date" string="Accessed on"/>
<field name="partner_id"/>
<field name="slide_id" optional="hide"/>
<field name="channel_id" optional="hide"/>
<field name="completed" readonly="1"/>
<field name="quiz_attempts_count" readonly="1" string="# Quizz Attempts"
sum="# Total Attempts"/>
<field name="vote" readonly="1"
sum="# Likes"/>
</tree>
</field>
</record>
<record id="slide_slide_partner_view_form" model="ir.ui.view">
<field name="name">slide.slide.partner.view.form</field>
<field name="model">slide.slide.partner</field>
<field name="arch" type="xml">
<form string="Attendee" create="0">
<sheet>
<group col="2" name="main_content">
<group>
<field name="partner_id"/>
<field name="slide_id"/>
<field name="slide_category" invisible="1"/>
<field name="channel_id"/>
</group>
<group>
<field name="completed" readonly="1"/>
<field name="quiz_attempts_count" readonly="1"/>
<field name="vote" readonly="1"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="slide_slide_partner_action_from_slide" model="ir.actions.act_window">
<field name="name">Attendees</field>
<field name="res_model">slide.slide.partner</field>
<field name="view_mode">tree,form,kanban</field>
<field name="search_view_id" ref="website_slides.slide_slide_partner_view_search"/>
<field name="context">{'default_slide_id': active_id}</field>
<field name="domain">[('slide_id', '=', active_id)]</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
<strong>No Attendee Yet!</strong>
</p>
<p>
From here you'll be able to monitor attendees and to track their progress.
</p>
</field>
</record>
</data></odoo>
@@ -51,22 +51,11 @@
<field name="channel_type" invisible="1" readonly="1"/>
<field name="channel_allow_comment" invisible="1" readonly="1"/>
<div class="oe_button_box" name="button_box">
<button disabled="1" class="mx-auto disabled oe_read_only"
attrs="{'invisible': [('slide_views', '=', 0)]}" icon="fa-eye">
<button name="%(slide_slide_partner_action_from_slide)d"
class="oe_stat_button" type="action" icon="fa-graduation-cap"
attrs="{'invisible': [('slide_views', '=', 0)]}">
<span class="o_stat_value">
<field name="slide_views" widget="statinfo" nolabel="1"/> Member Views
</span>
</button>
<button disabled="disabled" class="mx-auto oe_read_only" icon="fa-eye"
attrs="{'invisible': [('public_views', '=', 0)]}">
<span class="o_stat_value">
<field name="public_views" widget="statinfo" nolabel="1"/> Public Views
</span>
</button>
<button disabled="1" class="mx-auto oe_read_only" icon="fa-eye"
attrs="{'invisible': [('total_views', '=', 0)]}">
<span class="o_stat_value">
<field name="total_views" widget="statinfo" nolabel="1"/> Total Views
<field name="slide_views" widget="statinfo" nolabel="1"/> Attendees
</span>
</button>
<button disabled="1" icon="fa-thumbs-up" class="oe_stat_button oe_read_only"
@@ -158,9 +147,11 @@
<field name="completion_time" widget="float_time" class="oe_inline"/>
<span> hours</span>
</div>
<field name="is_preview"/>
<field name="slide_resource_downloadable" attrs="{'invisible': ['|', ('slide_category', '!=', 'document'), ('source_type', '!=', 'local_file')]}"/>
<field name="date_published" string="Published Date" attrs="{'invisible': [('date_published', '=', False)]}" groups="base.group_no_one"/>
<field name="is_preview"/>
<field name="public_views"/>
<field name="total_views"/>
</group>
</group>
</page>
@@ -12,6 +12,7 @@
'data': [
'security/ir.model.access.csv',
'views/slide_channel_views.xml',
'views/slide_slide_partner_views.xml',
'views/slide_slide_views.xml',
'views/survey_survey_views.xml',
'views/website_slides_menu_views.xml',
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo><data>
<record id="slide_slide_partner_view_search" model="ir.ui.view">
<field name="name">slide.slide.partner.view.search.inherit.survey</field>
<field name="model">slide.slide.partner</field>
<field name="inherit_id" ref="website_slides.slide_slide_partner_view_search"/>
<field name="arch" type="xml">
<xpath expr="//filter[@name='filter_completed']" position="after">
<filter string="Certification Passed" name="filter_survey_scoring_success" domain="[('survey_scoring_success', '=', True)]"/>
</xpath>
</field>
</record>
<record id="slide_slide_partner_view_tree" model="ir.ui.view">
<field name="name">slide.slide.partner.view.tree.inherit.survey</field>
<field name="model">slide.slide.partner</field>
<field name="inherit_id" ref="website_slides.slide_slide_partner_view_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='completed']" position="after">
<field name="survey_scoring_success" string="Certification Passed"/>
</xpath>
</field>
</record>
<record id="slide_slide_partner_view_form" model="ir.ui.view">
<field name="name">slide.slide.partner.view.form.inherit.survey</field>
<field name="model">slide.slide.partner</field>
<field name="inherit_id" ref="website_slides.slide_slide_partner_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='completed']" position="after">
<field name="survey_scoring_success" readonly="1"
attrs="{'invisible': [('slide_category', '!=', 'certification')]}"/>
</xpath>
<xpath expr="//group[@name='main_content']" position="after">
<field name="user_input_ids" mode="tree" readonly="1"
attrs="{'invisible': [('slide_category', '!=', 'certification')]}"/>
</xpath>
</field>
</record>
</data></odoo>