[IMP] website_slides: add partner completed course filter

PURPOSE

Before this commit, it was possible to send an email to all attendees only.
After this commit, it will be possible to send an email to attendees that
completed the course.

SPECIFICATION

Adds a searchable o2m field in the res.partner model to find all the completed
courses linked to that partner.

LINKS

Task ID : 2216352
PR : #49592
This commit is contained in:
Patrick Hoste
2020-08-24 13:42:54 +00:00
committed by Thibault Delavallée
parent a91972a910
commit 0b43747a4b
4 changed files with 51 additions and 28 deletions
@@ -5,16 +5,11 @@
<field name="model">slide.channel</field>
<field name="inherit_id" ref="website_slides.view_slide_channel_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_redirect_to_done_members']" position="before">
<button class="oe_stat_button" type="object"
name="action_mass_mailing_attendees"
icon="fa-envelope-o"
attrs="{'invisible': [('members_count', '=', 0)]}">
<div class="o_field_widget o_stat_info">
<span class="o_stat_text">Mail Attendees</span>
</div>
</button>
</xpath>
<button name="action_channel_invite" position="after">
<button name="action_mass_mailing_attendees" string="Contact Attendees" type="object"
class="oe_highlight" attrs="{'invisible': [('members_count', '=', 0)]}"
groups="mass_mailing.group_mass_mailing_user"/>
</button>
</field>
</record>
@@ -23,10 +18,13 @@
<field name="model">slide.channel</field>
<field name="inherit_id" ref="website_slides.slide_channel_view_kanban"/>
<field name="arch" type="xml">
<xpath expr="//a[@name='action_channel_invite']" position="after">
<a class="dropdown-item" name="action_mass_mailing_attendees" role="menuitem" type="object">
Mail Attendees
</a>
<xpath expr="//div[@name='action_channel_invite']" position="after">
<div role="menuitem">
<a name="action_mass_mailing_attendees" type="object"
groups="mass_mailing.group_mass_mailing_user">
Contact Attendees
</a>
</div>
</xpath>
</field>
</record>
@@ -10,6 +10,9 @@ class ResPartner(models.Model):
slide_channel_ids = fields.Many2many(
'slide.channel', 'slide_channel_partner', 'partner_id', 'channel_id',
string='eLearning Courses', groups="website_slides.group_website_slides_officer")
slide_channel_completed_ids = fields.One2many(
'slide.channel', string='Completed Courses', compute='_compute_slide_channel_completed_ids',
search='_search_slide_channel_completed_ids')
slide_channel_count = fields.Integer(
'Course Count', compute='_compute_slide_channel_count',
groups="website_slides.group_website_slides_officer")
@@ -17,6 +20,17 @@ class ResPartner(models.Model):
'Company Course Count', compute='_compute_slide_channel_company_count',
groups="website_slides.group_website_slides_officer")
def _compute_slide_channel_completed_ids(self):
for partner in self:
partner.slide_channel_completed_ids = self.env['slide.channel.partner'].search([
('partner_id', '=', partner.id),
('completed', '=', True)
]).mapped('channel_id')
def _search_slide_channel_completed_ids(self, operator, value):
cp_done = self.env['slide.channel.partner'].search([('channel_id', operator, value), ('completed', '=', True)])
return [('id', 'in', cp_done.partner_id.ids)]
@api.depends('is_company')
def _compute_slide_channel_count(self):
read_group_res = self.env['slide.channel.partner'].sudo().read_group(
@@ -7,6 +7,11 @@ $o-kanban-large-record-width: 400px;
.o_kanban_record {
width: $o-kanban-large-record-width;
}
.o_kanban_slides_card_manage_pane {
> div {
@include o-kanban-dashboard-dropdown-link;
}
}
}
table.o_section_list_view tr.o_data_row.o_is_section {
@@ -214,20 +214,26 @@
<a role="button" class="dropdown-toggle o-no-caret btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
<span class="fa fa-ellipsis-v" aria-hidden="false"/>
</a>
<div class="dropdown-menu" role="menu">
<ul class="oe_kanban_colorpicker" data-field="color"/>
<t t-if="widget.deletable">
<a class="dropdown-item" role="menuitem" type="delete">Delete</a>
</t>
<a class="dropdown-item" role="menuitem" type="edit">
Edit
</a>
<a class="dropdown-item" name="action_view_slides" role="menuitem" type="object">
Lessons
</a>
<a class="dropdown-item" name="action_channel_invite" role="menuitem" type="object">
Invite
</a>
<div class="o_kanban_card_manage_pane dropdown-menu" role="menu">
<div role="menuitem" aria-haspopup="true" class="o_no_padding_kanban_colorpicker">
<ul class="oe_kanban_colorpicker" data-field="color" role="popup"/>
</div>
<div class="o_kanban_slides_card_manage_pane">
<t t-if="widget.deletable">
<div role="menuitem">
<a class="dropdown-item" type="delete">Delete</a>
</div>
</t>
<div role="menuitem">
<a type="edit">Edit</a>
</div>
<div role="menuitem">
<a name="action_view_slides" type="object">Lessons</a>
</div>
<div role="menuitem" name="action_channel_invite">
<a name="action_channel_invite" type="object">Invite</a>
</div>
</div>
</div>
</div>
<div class="o_kanban_card_header">