[IMP] rating: make methods private

Purpose is to lessen access to internal methods and make them private. No
need to expose internal computation.

Task-2812665 (Rating: Cleanup rating flow code)

Part-of: odoo/odoo#80707
This commit is contained in:
Thibault Delavallée
2022-04-04 17:48:23 +02:00
parent cce67a0a4d
commit 05c7e84239
6 changed files with 28 additions and 22 deletions
+7 -7
View File
@@ -29,12 +29,12 @@
<field name="name">Task: Rating Request</field>
<field name="model_id" ref="project.model_project_task"/>
<field name="subject">{{ object.project_id.company_id.name }}: Satisfaction Survey</field>
<field name="email_from">{{ (object.rating_get_rated_partner_id().email_formatted if object.rating_get_rated_partner_id() else user.email_formatted) }}</field>
<field name="partner_to" >{{ object.rating_get_partner_id().id }}</field>
<field name="email_from">{{ (object._rating_get_operator().email_formatted if object._rating_get_operator() else user.email_formatted) }}</field>
<field name="partner_to" >{{ object._rating_get_partner().id }}</field>
<field name="body_html" type="html">
<div>
<t t-set="access_token" t-value="object.rating_get_access_token()"/>
<t t-set="partner" t-value="object.rating_get_partner_id()"/>
<t t-set="access_token" t-value="object._rating_get_access_token()"/>
<t t-set="partner" t-value="object._rating_get_partner()"/>
<table border="0" cellpadding="0" cellspacing="0" width="590" style="width:100%; margin:0px auto;">
<tbody>
<tr><td valign="top" style="font-size: 13px;">
@@ -45,8 +45,8 @@
Hello,<br/><br/>
</t>
Please take a moment to rate our services related to the task "<strong t-out="object.name or ''">Planning and budget</strong>"
<t t-if="object.rating_get_rated_partner_id().name">
assigned to <strong t-out="object.rating_get_rated_partner_id().name or ''">Mitchell Admin</strong>.<br/>
<t t-if="object._rating_get_operator().name">
assigned to <strong t-out="object._rating_get_operator().name or ''">Mitchell Admin</strong>.<br/>
</t>
<t t-else="">
.<br/>
@@ -94,7 +94,7 @@
</table>
</div>
</field>
<field name="lang">{{ object.rating_get_partner_id().lang }}</field>
<field name="lang">{{ object._rating_get_partner().lang }}</field>
<field name="auto_delete" eval="True"/>
</record>
+3 -3
View File
@@ -2273,8 +2273,8 @@ class Task(models.Model):
if rating_template:
task.rating_send_request(rating_template, lang=task.partner_id.lang, force_send=force_send)
def rating_get_partner_id(self):
res = super(Task, self).rating_get_partner_id()
def _rating_get_partner(self):
res = super(Task, self)._rating_get_partner()
if not res and self.project_id.partner_id:
return self.project_id.partner_id
return res
@@ -2292,7 +2292,7 @@ class Task(models.Model):
def _rating_get_parent_field_name(self):
return 'project_id'
def rating_get_rated_partner_id(self):
def _rating_get_operator(self):
""" Overwrite since we have user_ids and not user_id """
tasks_with_one_user = self.filtered(lambda task: len(task.user_ids) == 1 and task.user_ids.partner_id)
return tasks_with_one_user.user_ids.partner_id or self.env['res.partner']
+13 -5
View File
@@ -111,17 +111,25 @@ class RatingMixin(models.AbstractModel):
"""
return ['&', '&', ('res_model', '=', self._name), ('res_id', 'in', self.ids), ('consumed', '=', True)]
def rating_get_partner_id(self):
def _rating_get_partner(self):
""" Return the customer (partner) that performs the rating.
:return record: res.partner singleton
"""
if hasattr(self, 'partner_id') and self.partner_id:
return self.partner_id
return self.env['res.partner']
def rating_get_rated_partner_id(self):
def _rating_get_operator(self):
""" Return the operator (partner) that is the person who is rated.
:return record: res.partner singleton
"""
if hasattr(self, 'user_id') and self.user_id.partner_id:
return self.user_id.partner_id
return self.env['res.partner']
def rating_get_access_token(self, partner=None):
def _rating_get_access_token(self, partner=None):
""" Return access token linked to existing ratings, or create a new rating
that will create the asked token. An explicit call to access rights is
performed as sudo is used afterwards as this method could be used from
@@ -129,8 +137,8 @@ class RatingMixin(models.AbstractModel):
self.check_access_rights('read')
self.check_access_rule('read')
if not partner:
partner = self.rating_get_partner_id()
rated_partner = self.rating_get_rated_partner_id()
partner = self._rating_get_partner()
rated_partner = self._rating_get_operator()
ratings = self.rating_ids.sudo().filtered(lambda x: x.partner_id.id == partner.id and not x.consumed)
if not ratings:
rating = self.env['rating.rating'].sudo().create({
+2 -4
View File
@@ -550,11 +550,9 @@ class ProjectTask(models.Model):
}
return self.action_view_so()
def rating_get_partner_id(self):
def _rating_get_partner(self):
partner = self.partner_id or self.sale_line_id.order_id.partner_id
if partner:
return partner
return super().rating_get_partner_id()
return partner or super()._rating_get_partner()
@api.depends('sale_order_id.invoice_status', 'sale_order_id.order_line')
def _compute_task_to_invoice(self):
@@ -54,5 +54,5 @@ class MailTestRating(models.Model):
def _rating_apply_get_default_subtype_id(self):
return self.env['ir.model.data']._xmlid_to_res_id("test_mail_full.mt_mail_test_rating_rating_done")
def rating_get_partner_id(self):
def _rating_get_partner(self):
return self.customer_id
+2 -2
View File
@@ -32,7 +32,7 @@ class TestRatingFlow(TestMailFullCommon, TestMailFullRecipients):
record_rating = self.env['mail.test.rating'].browse(self.record_rating.ids)
# prepare rating token
access_token = record_rating.rating_get_access_token()
access_token = record_rating._rating_get_access_token()
record_rating.invalidate_cache(fnames=['rating_ids'])
# check rating creation
@@ -51,7 +51,7 @@ class TestRatingFlow(TestMailFullCommon, TestMailFullRecipients):
record_messages = record_rating.message_ids
# prepare rating token
access_token = record_rating.rating_get_access_token()
access_token = record_rating._rating_get_access_token()
record_rating.invalidate_cache(fnames=['rating_ids'])
# apply a rate as note (first click)