[IMP] website: support generic website for dynamic snippet filters

Made the website_id non mandatory on website snippet filters and adapted
the fetching route so that it interprets an unspecified website_id as
the filter being available on any website.

Before this commit website snippet filters had to be limited to one
single website.

After this commit website snippet filters can be made available on all
websites by setting their website_id to no value (this is the new
default of the pre-defined filters).

https://github.com/odoo/odoo/pull/59831
task-2355369

closes odoo/odoo#59831

Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
This commit is contained in:
Jeremy Kersten
2020-10-13 13:09:45 +00:00
committed by Benoit Socias
parent 6aa8e7b51d
commit 550d2935bd
5 changed files with 10 additions and 12 deletions
+7
View File
@@ -276,6 +276,13 @@ class Website(Home):
)
return dynamic_filter and dynamic_filter.render(template_key, limit, search_domain) or ''
@http.route('/website/snippet/options_filters', type='json', auth='user', website=True)
def get_dynamic_snippet_filters(self):
dynamic_filter = request.env['website.snippet.filter'].sudo().search_read(
request.website.website_domain(), ['id', 'name', 'limit']
)
return dynamic_filter
@http.route('/website/snippet/filter_templates', type='json', auth='public', website=True)
def get_dynamic_snippet_templates(self, filter_id=False):
# todo: if filter_id.model -> filter template
-1
View File
@@ -769,7 +769,6 @@
<field name="filter_id" ref="website.dynamic_snippet_country_filter"/>
<field name="limit" eval="16"/>
<field name="name">Countries</field>
<field name="website_id" ref="website.default_website"/>
</record>
<record id="group_multi_website" model="res.groups">
<field name="name">Multi-website</field>
@@ -20,7 +20,7 @@ class WebsiteSnippetFilter(models.Model):
field_names = fields.Char(help="A list of comma-separated field names", required=True)
filter_id = fields.Many2one('ir.filters', 'Filter', ondelete='cascade')
limit = fields.Integer(help='The limit is the maximum number of records retrieved', required=True)
website_id = fields.Many2one('website', string='Website', ondelete='cascade', required=True)
website_id = fields.Many2one('website', string='Website', ondelete='cascade')
@api.model
def escape_falsy_as_empty(self, s):
@@ -51,7 +51,7 @@ class WebsiteSnippetFilter(models.Model):
self.ensure_one()
assert '.dynamic_filter_template_' in template_key, _("You can only use template prefixed by dynamic_filter_template_ ")
if self.env['website'].get_current_website() != self.website_id:
if self.website_id and self.env['website'].get_current_website() != self.website_id:
return ''
records = self._prepare_values(limit, search_domain)
@@ -47,14 +47,7 @@ const dynamicSnippetOptions = options.Class.extend({
* @returns {Promise}
*/
_fetchDynamicFilters: function () {
return this._rpc({
model: 'website.snippet.filter',
method: 'search_read',
kwargs: {
domain: [],
fields: ['id', 'name', 'limit'],
}
});
return this._rpc({route: '/website/snippet/options_filters'});
},
/**
* Fetch dynamic filters templates.
-1
View File
@@ -102,7 +102,6 @@ response = res_products
<field name="field_names">display_name,description_sale,image_512,list_price</field>
<field name="limit" eval="16"/>
<field name="name">Products</field>
<field name="website_id" ref="website.default_website"/>
</record>
<function model="ir.model.fields" name="formbuilder_whitelist">
<value>sale.order</value>