diff options
| author | Jérome Maes <jem@openerp.com> | 2016-12-06 15:29:29 +0100 |
|---|---|---|
| committer | Jérome Maes <jem@openerp.com> | 2017-01-09 16:33:21 +0100 |
| commit | 8e10f6adf9ec8e3e3a4fcdbbca627f0dc4dcf742 (patch) | |
| tree | 73297401cf773e480bd59cef698f1aeae4ed9307 | |
| parent | 567ae3137ff6d1ef035ed9fb7b502d99c1fc24d1 (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.py | 18 | ||||
| -rw-r--r-- | addons/rating_project/data/project_demo.xml | 10 | ||||
| -rw-r--r-- | addons/rating_project_issue/data/project_issue_demo.xml | 6 | ||||
| -rw-r--r-- | addons/website_sale/controllers/website_mail.py | 6 |
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, |
