[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:
committed by
Benoit Socias
parent
6aa8e7b51d
commit
550d2935bd
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user