summaryrefslogtreecommitdiff
path: root/addons/website_crm_partner_assign/controllers/main.py
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2017-09-27 19:23:05 +0200
committerJeremy Kersten <jke@odoo.com>2017-09-27 21:33:49 +0200
commit1b52b00d2aa96b9360d50a0f0960f1febb5e607e (patch)
tree2e098cf6268b0c2fe6d2844e94b45cc801ce4093 /addons/website_crm_partner_assign/controllers/main.py
parent3d0d8b89d1e7a32a5ef8aa0f40d41a4fb5260c1c (diff)
[IMP] website*: clean sitemap + add method to declare sitemap function.
Don't add useless routes or route that will return 404. Improve generate function from ModelConverter to have a better management of query_string. Now we have an helper sitemap_qs2dom that will analyse the current route and check if query string is plausible and if yes, generate a domain, when the query_string don't seems to match the route, we return a Falsy domain. Before this commit, if qs was /product/ipad, enumerate_page check for each modelconverter of the route a name ilike '/product/ipad'. Now we check all routes that contains product and one converter that match ipad or routes that contains ipad and one converter that match product. This commit a new way to declare the sitemap for a route. def sitemap_xx(env, rule, query_string): yield {'loc': '/my_url'} @http.route(..., sitemap=sitemap_xx) In this case, only the loc returned by this function will be in the sitemap for all rules. You can pass sitempa=False, if you don't want that route are into the sitemap
Diffstat (limited to 'addons/website_crm_partner_assign/controllers/main.py')
-rw-r--r--addons/website_crm_partner_assign/controllers/main.py23
1 files changed, 22 insertions, 1 deletions
diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py
index 63d4926d185..9166b37fa31 100644
--- a/addons/website_crm_partner_assign/controllers/main.py
+++ b/addons/website_crm_partner_assign/controllers/main.py
@@ -11,6 +11,7 @@ from odoo import fields
from odoo import http
from odoo.http import request
from odoo.addons.http_routing.models.ir_http import slug, unslug
+from odoo.addons.website.models.ir_http import sitemap_qs2dom
from odoo.addons.portal.controllers.portal import CustomerPortal
from odoo.addons.website_partner.controllers.main import WebsitePartnerPage
@@ -179,6 +180,26 @@ class WebsiteAccount(CustomerPortal):
class WebsiteCrmPartnerAssign(WebsitePartnerPage):
_references_per_page = 40
+ def sitemap_partners(env, rule, qs):
+ if not qs or qs.lower() in '/partners':
+ yield {'loc': '/partners'}
+
+ Grade = env['res.partner.grade']
+ dom = [('website_published', '=', True)]
+ dom += sitemap_qs2dom(qs=qs, route='/partners/grade/', field=Grade._rec_name)
+ for grade in env['res.partner.grade'].search(dom):
+ loc = '/partners/grade/%s' % slug(grade)
+ if not qs or qs.lower() in loc:
+ yield {'loc': loc}
+
+ partners_dom = [('is_company', '=', True), ('grade_id', '!=', False), ('website_published', '=', True), ('grade_id.website_published', '=', True)]
+ dom += sitemap_qs2dom(qs=qs, route='/partners/country/')
+ countries = env['res.partner'].sudo().read_group(partners_dom, fields=['id', 'country_id'], groupby='country_id')
+ for country in countries:
+ loc = '/partners/country/%s' % slug(country['country_id'])
+ if not qs or qs.lower() in loc:
+ yield {'loc': loc}
+
@http.route([
'/partners',
'/partners/page/<int:page>',
@@ -191,7 +212,7 @@ class WebsiteCrmPartnerAssign(WebsitePartnerPage):
'/partners/grade/<model("res.partner.grade"):grade>/country/<model("res.country"):country>',
'/partners/grade/<model("res.partner.grade"):grade>/country/<model("res.country"):country>/page/<int:page>',
- ], type='http', auth="public", website=True)
+ ], type='http', auth="public", website=True, sitemap=sitemap_partners)
def partners(self, country=None, grade=None, page=0, **post):
country_all = post.pop('country_all', False)
partner_obj = request.env['res.partner']