summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorRomain Derie <rde@odoo.com>2020-11-19 17:36:48 +0000
committerRomain Derie <rde@odoo.com>2020-11-27 16:54:00 +0000
commit01fafecf98aba5886c5fe836e2a81f2551155f35 (patch)
tree8540dfd9bce73b95bb525df731fd106693632023 /addons
parent759ddc180a7fa186d9ad36583ebd1f4857f584e7 (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.py12
-rw-r--r--addons/website_sale/controllers/main.py15
-rw-r--r--addons/website_sale/models/website.py12
-rw-r--r--addons/website_sale/static/src/snippets/s_dynamic_snippet_products/options.js13
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;
}
});
},