[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:
committed by
Thibault Delavallée
parent
a91972a910
commit
0b43747a4b
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user