diff options
| author | Romain Derie <rde@odoo.com> | 2020-11-19 17:36:48 +0000 |
|---|---|---|
| committer | Romain Derie <rde@odoo.com> | 2020-11-27 16:54:00 +0000 |
| commit | 01fafecf98aba5886c5fe836e2a81f2551155f35 (patch) | |
| tree | 8540dfd9bce73b95bb525df731fd106693632023 /addons | |
| parent | 759ddc180a7fa186d9ad36583ebd1f4857f584e7 (diff) | |
[FIX] website: ensure websites have snippet filters
Since the feature was implemented with the default snippets having a website_id
set to the default website, it means that every other websites won't have
snippet filters.
This commit bootstrap filters for every new created website.
Note that in master, multi-website and generic filters are handled with
550d2935bd.
opw-2381423
Closes #62041
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/website/models/website.py | 12 | ||||
| -rw-r--r-- | addons/website_sale/controllers/main.py | 15 | ||||
| -rw-r--r-- | addons/website_sale/models/website.py | 12 | ||||
| -rw-r--r-- | addons/website_sale/static/src/snippets/s_dynamic_snippet_products/options.js | 13 |
4 files changed, 43 insertions, 9 deletions
diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 44e782e9ac5..1b300b5199f 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -160,6 +160,17 @@ class Website(models.Model): def _get_menu_ids(self): return self.env['website.menu'].search([('website_id', '=', self.id)]).ids + def _bootstrap_snippet_filters(self): + ir_filter = self.env.ref('website.dynamic_snippet_country_filter', raise_if_not_found=False) + if ir_filter: + self.env['website.snippet.filter'].create({ + 'field_names': 'name,code,image_url:image,phone_code:char', + 'filter_id': ir_filter.id, + 'limit': 16, + 'name': _('Countries'), + 'website_id': self.id, + }) + @api.model def create(self, vals): self._handle_favicon(vals) @@ -170,6 +181,7 @@ class Website(models.Model): res = super(Website, self).create(vals) res._bootstrap_homepage() + res._bootstrap_snippet_filters() if not self.env.user.has_group('website.group_multi_website') and self.search_count([]) > 1: all_user_groups = 'base.group_portal,base.group_user,base.group_public' diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 9def3846bbc..e9cae034c15 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -1257,3 +1257,18 @@ class WebsiteSale(http.Controller): if visitor_sudo: request.env['website.track'].sudo().search([('visitor_id', '=', visitor_sudo.id), ('product_id', '=', product_id)]).unlink() return self._get_products_recently_viewed() + + # -------------------------------------------------------------------------- + # Website Snippet Filters + # -------------------------------------------------------------------------- + + @http.route('/website_sale/snippet/options_filters', type='json', auth='user', website=True) + def get_dynamic_snippet_filters(self): + domain = expression.AND([ + request.website.website_domain(), + ['|', ('filter_id.model_id', '=', 'product.product'), ('action_server_id.model_id.model', '=', 'product.product')] + ]) + filters = request.env['website.snippet.filter'].sudo().search_read( + domain, ['id'] + ) + return filters diff --git a/addons/website_sale/models/website.py b/addons/website_sale/models/website.py index c924bbb886e..482a2a472c0 100644 --- a/addons/website_sale/models/website.py +++ b/addons/website_sale/models/website.py @@ -384,6 +384,18 @@ class Website(models.Model): suggested_controllers.append((_('eCommerce'), url_for('/shop'), 'website_sale')) return suggested_controllers + def _bootstrap_snippet_filters(self): + super(Website, self)._bootstrap_snippet_filters() + action = self.env.ref('website_sale.dynamic_snippet_products_action', raise_if_not_found=False) + if action: + self.env['website.snippet.filter'].create({ + 'action_server_id': action.id, + 'field_names': 'display_name,description_sale,image_512,list_price', + 'limit': 16, + 'name': _('Products'), + 'website_id': self.id, + }) + class WebsiteSaleExtraField(models.Model): _name = 'website.sale.extra.field' diff --git a/addons/website_sale/static/src/snippets/s_dynamic_snippet_products/options.js b/addons/website_sale/static/src/snippets/s_dynamic_snippet_products/options.js index 5a92baed823..f059e78a861 100644 --- a/addons/website_sale/static/src/snippets/s_dynamic_snippet_products/options.js +++ b/addons/website_sale/static/src/snippets/s_dynamic_snippet_products/options.js @@ -21,16 +21,11 @@ const dynamicSnippetProductsOptions = s_dynamic_snippet_carousel_options.extend( onBuilt: function () { this._super.apply(this, arguments); this._rpc({ - model: 'ir.model.data', - method: 'search_read', - kwargs: { - domain: [['module', '=', 'website_sale'], ['model', '=', 'website.snippet.filter']], - fields: ['id', 'res_id'], - } + route: '/website_sale/snippet/options_filters' }).then((data) => { - if (data) { - this.$target.get(0).dataset.filterId = data[0].res_id; - this.$target.get(0).dataset.numberOfRecords = this.dynamicFilters[data[0].res_id].limit; + if (data.length) { + this.$target.get(0).dataset.filterId = data[0].id; + this.$target.get(0).dataset.numberOfRecords = this.dynamicFilters[data[0].id].limit; } }); }, |
