summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJérome Maes <jem@openerp.com>2016-12-06 15:29:29 +0100
committerJérome Maes <jem@openerp.com>2017-01-09 16:33:21 +0100
commit8e10f6adf9ec8e3e3a4fcdbbca627f0dc4dcf742 (patch)
tree73297401cf773e480bd59cef698f1aeae4ed9307
parent567ae3137ff6d1ef035ed9fb7b502d99c1fc24d1 (diff)
[IMP] rating: delete rating when needed
Automatically deleting a rating was not implemented yet. We find 2 cases : - when uninstalling a module, the same mecanism as mail.follower is used, via a res_model_id field pointing on ir.model. When this model does not exist anymore, remove all related rating. - when deleting a record, its rating should be deleted too.
-rw-r--r--addons/rating/models/rating.py18
-rw-r--r--addons/rating_project/data/project_demo.xml10
-rw-r--r--addons/rating_project_issue/data/project_issue_demo.xml6
-rw-r--r--addons/website_sale/controllers/website_mail.py6
4 files changed, 28 insertions, 12 deletions
diff --git a/addons/rating/models/rating.py b/addons/rating/models/rating.py
index 20da96154a5..e751f28a597 100644
--- a/addons/rating/models/rating.py
+++ b/addons/rating/models/rating.py
@@ -29,7 +29,8 @@ class Rating(models.Model):
return uuid.uuid4().hex
res_name = fields.Char(string='Resource name', compute='_compute_res_name', store=True, help="The name of the rated resource.")
- res_model = fields.Char(string='Document Model', required=True, help="Model name of the rated object", index=True)
+ res_model_id = fields.Many2one('ir.model', 'Related Document Model', index=True, ondelete='cascade', help='Model of the followed resource')
+ res_model = fields.Char(string='Document Model', related='res_model_id.model', store=True, index=True, readonly=True)
res_id = fields.Integer(string='Document ID', required=True, help="Identifier of the rated object", index=True)
rated_partner_id = fields.Many2one('res.partner', string="Rated person", help="Owner of the rated resource")
partner_id = fields.Many2one('res.partner', string='Customer', help="Author of the rating")
@@ -106,6 +107,13 @@ class RatingMixin(models.AbstractModel):
self.rating_ids._compute_res_name()
return result
+ def unlink(self):
+ """ When removing a record, its rating should be deleted too. """
+ record_ids = self.ids
+ result = super(RatingMixin, self).unlink()
+ self.env['rating.rating'].sudo().search([('res_model', '=', self._name), ('res_id', 'in', record_ids)]).unlink()
+ return result
+
def rating_get_partner_id(self):
if hasattr(self, 'partner_id') and self.partner_id:
return self.partner_id
@@ -122,7 +130,13 @@ class RatingMixin(models.AbstractModel):
rated_partner = self.rating_get_rated_partner_id()
ratings = self.rating_ids.filtered(lambda x: x.partner_id.id == partner.id and not x.consumed)
if not ratings:
- rating = self.env['rating.rating'].create({'partner_id': partner.id, 'rated_partner_id': rated_partner.id, 'res_model': self._name, 'res_id': self.id})
+ record_model_id = self.env['ir.model'].sudo().search([('model', '=', self._name)], limit=1).id
+ rating = self.env['rating.rating'].create({
+ 'partner_id': partner.id,
+ 'rated_partner_id': rated_partner.id,
+ 'res_model_id': record_model_id,
+ 'res_id': self.id
+ })
else:
rating = ratings[0]
return rating.access_token
diff --git a/addons/rating_project/data/project_demo.xml b/addons/rating_project/data/project_demo.xml
index a923cd12c3e..7229f83d770 100644
--- a/addons/rating_project/data/project_demo.xml
+++ b/addons/rating_project/data/project_demo.xml
@@ -2,31 +2,31 @@
<odoo>
<data noupdate="1">
<record id="rating_task_1" model="rating.rating">
- <field name="res_model">project.task</field>
+ <field name="res_model_id" ref="project.model_project_task"/>
<field name="rated_partner_id" ref="base.partner_root"/>
<field name="partner_id" ref="portal.demo_user0_res_partner"/>
<field name="res_id" ref="project.project_task_3"/>
</record>
<record id="rating_task_2" model="rating.rating">
- <field name="res_model">project.task</field>
+ <field name="res_model_id" ref="project.model_project_task"/>
<field name="rated_partner_id" ref="base.partner_demo"/>
<field name="partner_id" ref="base.partner_demo"/>
<field name="res_id" ref="project.project_task_8"/>
</record>
<record id="rating_task_3" model="rating.rating">
- <field name="res_model">project.task</field>
+ <field name="res_model_id" ref="project.model_project_task"/>
<field name="rated_partner_id" ref="base.partner_root"/>
<field name="partner_id" ref="base.partner_root"/>
<field name="res_id" ref="project.project_task_15"/>
</record>
<record id="rating_task_4" model="rating.rating">
- <field name="res_model">project.task</field>
+ <field name="res_model_id" ref="project.model_project_task"/>
<field name="rated_partner_id" ref="base.partner_root"/>
<field name="partner_id" ref="base.partner_root"/>
<field name="res_id" ref="project.project_task_18"/>
</record>
<record id="rating_task_5" model="rating.rating">
- <field name="res_model">project.task</field>
+ <field name="res_model_id" ref="project.model_project_task"/>
<field name="rated_partner_id" ref="base.partner_root"/>
<field name="partner_id" ref="base.res_partner_4"/>
<field name="res_id" ref="project.project_task_24"/>
diff --git a/addons/rating_project_issue/data/project_issue_demo.xml b/addons/rating_project_issue/data/project_issue_demo.xml
index 7f98fa39ef4..de808c2a9e9 100644
--- a/addons/rating_project_issue/data/project_issue_demo.xml
+++ b/addons/rating_project_issue/data/project_issue_demo.xml
@@ -2,19 +2,19 @@
<odoo>
<data noupdate="1">
<record id="rating_issue_1" model="rating.rating">
- <field name="res_model">project.issue</field>
+ <field name="res_model_id" ref="project_issue.model_project_issue"/>
<field name="rated_partner_id" ref="base.partner_demo"/>
<field name="partner_id" ref="base.partner_demo"/>
<field name="res_id" ref="project_issue.crm_case_outputincorrect0"/>
</record>
<record id="rating_issue_2" model="rating.rating">
- <field name="res_model">project.issue</field>
+ <field name="res_model_id" ref="project_issue.model_project_issue"/>
<field name="rated_partner_id" ref="base.partner_demo"/>
<field name="partner_id" ref="base.res_partner_12"/>
<field name="res_id" ref="project_issue.crm_case_addmenustothemodule0"/>
</record>
<record id="rating_issue_3" model="rating.rating">
- <field name="res_model">project.issue</field>
+ <field name="res_model_id" ref="project_issue.model_project_issue"/>
<field name="rated_partner_id" ref="base.partner_root"/>
<field name="partner_id" ref="base.res_partner_3"/>
<field name="res_id" ref="project_issue.crm_case_improvereportsinhrms0"/>
diff --git a/addons/website_sale/controllers/website_mail.py b/addons/website_sale/controllers/website_mail.py
index 51a39b6050b..76c6d29ddda 100644
--- a/addons/website_sale/controllers/website_mail.py
+++ b/addons/website_sale/controllers/website_mail.py
@@ -16,9 +16,10 @@ class WebsiteMailController(WebsiteMail):
params.pop('rating', False)
message_data = super(WebsiteMailController, self).chatter_json(res_model=res_model, res_id=res_id, message=message, **params)
if message_data and kw.get('rating') and res_model == 'product.template': # restrict rating only for product template
+ res_model_id = request.env.ref('product.model_product_template').id
rating = request.env['rating.rating'].create({
'rating': float(kw.get('rating')),
- 'res_model': res_model,
+ 'res_model_id': res_model_id,
'res_id': res_id,
'message_id': message_data['id'],
'consumed': True,
@@ -38,9 +39,10 @@ class WebsiteMailController(WebsiteMail):
try:
fragment = urlparse.urlparse(response.location).fragment
message_id = int(fragment.replace('message-', ''))
+ res_model_id = request.env.ref('product.model_product_template').id
request.env['rating.rating'].create({
'rating': float(kw.get('rating')),
- 'res_model': res_model,
+ 'res_model_id': res_model_id,
'res_id': res_id,
'message_id': message_id,
'consumed': True,