summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorchm@openerp.com <>2014-03-14 17:23:46 +0100
committerchm@openerp.com <>2014-03-14 17:23:46 +0100
commit353bbdc2c3d0e019561eb60aacb36b68b4ed935a (patch)
tree3edf0d86cb82f1579552b30c54cc5ed2dd0bc22c /addons
parent9bc57fdc08660ae426e0d5910af58ae3cbe432cb (diff)
[FIX] website: route and redirect: remove all backslash from url
bzr revid: chm@openerp.com-20140314162346-25vohj6ayp65tgiy
Diffstat (limited to 'addons')
-rw-r--r--addons/website/controllers/main.py2
-rw-r--r--addons/website/models/website.py2
-rw-r--r--addons/website/static/src/js/website.editor.newpage.js2
-rw-r--r--addons/website/static/src/js/website.js2
-rw-r--r--addons/website/static/src/js/website.mobile.js4
-rw-r--r--addons/website_blog/controllers/main.py28
-rw-r--r--addons/website_blog/views/website_blog_templates.xml2
-rw-r--r--addons/website_crm_partner_assign/controllers/main.py20
-rw-r--r--addons/website_crm_partner_assign/views/website_crm_partner_assign.xml10
-rw-r--r--addons/website_customer/controllers/main.py12
-rw-r--r--addons/website_customer/views/website_customer.xml16
-rw-r--r--addons/website_event/controllers/main.py4
-rw-r--r--addons/website_event/views/website_event.xml4
-rw-r--r--addons/website_event_sale/controllers/main.py2
-rw-r--r--addons/website_event_sale/static/src/js/website.tour.event_sale.js2
-rw-r--r--addons/website_event_track/controllers/event.py6
-rw-r--r--addons/website_event_track/models/event.py8
-rw-r--r--addons/website_event_track/views/website_event.xml2
-rw-r--r--addons/website_google_map/controllers/main.py4
-rw-r--r--addons/website_google_map/static/src/js/google_map.js2
-rw-r--r--addons/website_hr_recruitment/models/hr_job.py2
-rw-r--r--addons/website_hr_recruitment/views/templates.xml4
-rw-r--r--addons/website_mail/controllers/email_designer.py2
-rw-r--r--addons/website_mail/controllers/main.py4
-rw-r--r--addons/website_mail/static/src/js/website_mail.js2
-rw-r--r--addons/website_membership/controllers/main.py20
-rw-r--r--addons/website_membership/views/website_membership.xml14
-rw-r--r--addons/website_partner/controllers/main.py2
-rw-r--r--addons/website_project/controllers/main.py2
-rw-r--r--addons/website_project/views/website_project.xml2
-rw-r--r--addons/website_quote/static/src/js/website_quotation.js4
-rw-r--r--addons/website_sale/controllers/main.py64
-rw-r--r--addons/website_sale/models/product.py4
-rw-r--r--addons/website_sale/static/src/js/website.tour.sale.js12
-rw-r--r--addons/website_sale/static/src/js/website_sale.editor.js6
-rw-r--r--addons/website_sale/static/src/js/website_sale.js4
-rw-r--r--addons/website_sale/static/src/js/website_sale_validate.js2
-rw-r--r--addons/website_sale/views/website_sale.xml40
-rw-r--r--addons/website_sale_delivery/controllers/main.py4
39 files changed, 164 insertions, 164 deletions
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index eff28b61fcd..abc64fee6e0 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -296,7 +296,7 @@ class Website(openerp.addons.web.controllers.main.Home):
#------------------------------------------------------
# Helpers
#------------------------------------------------------
- @http.route(['/website/kanban/'], type='http', auth="public", methods=['POST'], website=True)
+ @http.route(['/website/kanban'], type='http', auth="public", methods=['POST'], website=True)
def kanban(self, **post):
return request.website.kanban_col(**post)
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 966810297ea..d4af418309c 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -248,7 +248,7 @@ class website(osv.osv):
pmin = pmax - scope if pmax - scope > 0 else 1
def get_url(page):
- _url = "%spage/%s/" % (url, page) if page > 1 else url
+ _url = "%s/page/%s" % (url, page) if page > 1 else url
if url_args:
_url = "%s?%s" % (_url, werkzeug.url_encode(url_args))
return _url
diff --git a/addons/website/static/src/js/website.editor.newpage.js b/addons/website/static/src/js/website.editor.newpage.js
index b475223ecd9..77a086790fa 100644
--- a/addons/website/static/src/js/website.editor.newpage.js
+++ b/addons/website/static/src/js/website.editor.newpage.js
@@ -48,7 +48,7 @@
}
}).then(function (val, field, $dialog) {
if (val) {
- var url = '/website/add/' + encodeURI(val);
+ var url = '/website/add' + encodeURI(val);
if ($dialog.find('input[type="checkbox"]').is(':checked')) url +="?add_menu=1";
document.location = url;
}
diff --git a/addons/website/static/src/js/website.js b/addons/website/static/src/js/website.js
index 249058d91fb..eec815ed8c7 100644
--- a/addons/website/static/src/js/website.js
+++ b/addons/website/static/src/js/website.js
@@ -103,7 +103,7 @@
var page = +$a.attr("href").split(",").pop().split('-')[1];
data['page'] = page;
- $.post('/website/kanban/', data, function (col) {
+ $.post('/website/kanban', data, function (col) {
$col.find("> .thumbnail").remove();
$pagination.last().before(col);
});
diff --git a/addons/website/static/src/js/website.mobile.js b/addons/website/static/src/js/website.mobile.js
index 59c2328e09b..88a558f5094 100644
--- a/addons/website/static/src/js/website.mobile.js
+++ b/addons/website/static/src/js/website.mobile.js
@@ -18,9 +18,9 @@
},
start: function () {
if (!window.location.origin) { // fix for ie9
- window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '') + '/';
+ window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}
- document.getElementById("mobile-viewport").src = window.location.origin + window.location.pathname + "#mobile-preview";
+ document.getElementById("mobile-viewport").src = window.location.origin + (window.location.pathname.length ? '/' : '') + window.location.pathname + "#mobile-preview";
this.$el.modal();
},
destroy: function () {
diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py
index 2e1477e8f2d..10a43be1bef 100644
--- a/addons/website_blog/controllers/main.py
+++ b/addons/website_blog/controllers/main.py
@@ -42,7 +42,7 @@ class WebsiteBlog(http.Controller):
@http.route([
'/blog',
- '/blog/page/<int:page>/',
+ '/blog/page/<int:page>',
], type='http', auth="public", website=True, multilang=True)
def blogs(self, page=1):
BYPAGE = 60
@@ -50,7 +50,7 @@ class WebsiteBlog(http.Controller):
blog_obj = request.registry['blog.post']
total = blog_obj.search(cr, uid, [], count=True, context=context)
pager = request.website.pager(
- url='/blog/',
+ url='/blog',
total=total,
page=page,
step=BYPAGE,
@@ -63,14 +63,14 @@ class WebsiteBlog(http.Controller):
})
@http.route([
- '/blog/<model("blog.blog"):blog>/',
- '/blog/<model("blog.blog"):blog>/page/<int:page>/',
- '/blog/<model("blog.blog"):blog>/tag/<model("blog.tag"):tag>/',
- '/blog/<model("blog.blog"):blog>/tag/<model("blog.tag"):tag>/page/<int:page>/',
- '/blog/<model("blog.blog"):blog>/date/<string(length=21):date>/',
- '/blog/<model("blog.blog"):blog>/date/<string(length=21):date>/page/<int:page>/',
- '/blog/<model("blog.blog"):blog>/tag/<model("blog.tag"):tag>/date/<string(length=21):date>/',
- '/blog/<model("blog.blog"):blog>/tag/<model("blog.tag"):tag>/date/<string(length=21):date>/page/<int:page>/',
+ '/blog/<model("blog.blog"):blog>',
+ '/blog/<model("blog.blog"):blog>/page/<int:page>',
+ '/blog/<model("blog.blog"):blog>/tag/<model("blog.tag"):tag>',
+ '/blog/<model("blog.blog"):blog>/tag/<model("blog.tag"):tag>/page/<int:page>',
+ '/blog/<model("blog.blog"):blog>/date/<string(length=21):date>',
+ '/blog/<model("blog.blog"):blog>/date/<string(length=21):date>/page/<int:page>',
+ '/blog/<model("blog.blog"):blog>/tag/<model("blog.tag"):tag>/date/<string(length=21):date>',
+ '/blog/<model("blog.blog"):blog>/tag/<model("blog.tag"):tag>/date/<string(length=21):date>/page/<int:page>',
], type='http', auth="public", website=True, multilang=True)
def blog(self, blog=None, tag=None, date=None, page=1, **opt):
""" Prepare all values to display the blog.
@@ -106,13 +106,13 @@ class WebsiteBlog(http.Controller):
domain = []
if blog:
- path_filter += "%s/" % blog.id
+ path_filter += "%s" % blog.id
domain += [("id", "in", [post.id for post in blog.blog_post_ids])]
if tag:
- path_filter += 'tag/%s/' % tag.id
+ path_filter += 'tag/%s' % tag.id
domain += [("id", "in", [post.id for post in tag.blog_post_ids])]
if date:
- path_filter += "date/%s/" % date
+ path_filter += "date/%s" % date
domain += [("create_date", ">=", date.split("_")[0]), ("create_date", "<=", date.split("_")[1])]
blog_post_ids = blog_post_obj.search(cr, uid, domain, context=context)
@@ -147,7 +147,7 @@ class WebsiteBlog(http.Controller):
return request.website.render("website_blog.blog_post_short", values)
@http.route([
- '/blogpost/<model("blog.post"):blog_post>/',
+ '/blogpost/<model("blog.post"):blog_post>',
], type='http', auth="public", website=True, multilang=True)
def blog_post(self, blog_post, tag=None, date=None, page=1, enable_editor=None, **post):
""" Prepare all values to display the blog.
diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml
index 203dcc3bb71..4ca762456f1 100644
--- a/addons/website_blog/views/website_blog_templates.xml
+++ b/addons/website_blog/views/website_blog_templates.xml
@@ -12,7 +12,7 @@
<!-- Layout add nav and footer -->
<template id="header_footer_custom" inherit_id="website.layout" name="Footer News Blog Link">
<xpath expr="//footer//div[@name='info']/ul" position="inside">
- <li><a t-attf-href="/blog/%(website_blog.blog_blog_1)d/">News</a></li>
+ <li><a t-attf-href="/blog/%(website_blog.blog_blog_1)d">News</a></li>
</xpath>
</template>
diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py
index fbfb1908a14..6d6dda59a99 100644
--- a/addons/website_crm_partner_assign/controllers/main.py
+++ b/addons/website_crm_partner_assign/controllers/main.py
@@ -13,21 +13,21 @@ class WebsiteCrmPartnerAssign(http.Controller):
_references_per_page = 20
@http.route([
- '/partners/',
- '/partners/page/<int:page>/',
+ '/partners',
+ '/partners/page/<int:page>',
'/partners/grade/<int:grade_id>',
- '/partners/grade/<int:grade_id>/page/<int:page>/',
+ '/partners/grade/<int:grade_id>/page/<int:page>',
'/partners/country/<int:country_id>',
'/partners/country/<country_name>-<int:country_id>',
- '/partners/country/<int:country_id>/page/<int:page>/',
- '/partners/country/<country_name>-<int:country_id>/page/<int:page>/',
+ '/partners/country/<int:country_id>/page/<int:page>',
+ '/partners/country/<country_name>-<int:country_id>/page/<int:page>',
- '/partners/grade/<int:grade_id>/country/<int:country_id>/',
+ '/partners/grade/<int:grade_id>/country/<int:country_id>',
'/partners/grade/<int:grade_id>/country/<country_name>-<int:country_id>',
- '/partners/grade/<int:grade_id>/country/<int:country_id>/page/<int:page>/',
- '/partners/grade/<int:grade_id>/country/<country_name>-<int:country_id>/page/<int:page>/',
+ '/partners/grade/<int:grade_id>/country/<int:country_id>/page/<int:page>',
+ '/partners/grade/<int:grade_id>/country/<country_name>-<int:country_id>/page/<int:page>',
], type='http', auth="public", website=True, multilang=True)
def partners(self, country_id=0, grade_id=0, page=0, **post):
@@ -72,7 +72,7 @@ class WebsiteCrmPartnerAssign(http.Controller):
partner_ids = partner_obj.search(
request.cr, openerp.SUPERUSER_ID, partner_domain,
context=request.context)
- pager = request.website.pager(url="/partners/", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post)
+ pager = request.website.pager(url="/partners", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post)
# search for partners to display
partners_data = partner_obj.search_read(request.cr, openerp.SUPERUSER_ID,
@@ -110,7 +110,7 @@ class WebsiteCrmPartnerAssign(http.Controller):
}
return request.website.render("website_crm_partner_assign.index", values)
- @http.route(['/partners/<int:partner_id>/', '/partners/<partner_name>-<int:partner_id>/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/partners/<int:partner_id>', '/partners/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
def partners_ref(self, partner_id, **post):
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
values = website_partner.get_partner_template_value(partner)
diff --git a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml
index cd2e3cb58bd..56ac22d1eee 100644
--- a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml
+++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml
@@ -5,7 +5,7 @@
<!-- Layout add nav and footer -->
<template id="footer_custom" inherit_id="website.layout" name="Footer Partners Link">
<xpath expr="//footer//div[@name='info']/ul" position="inside">
- <li><a href="/partners/">Resellers</a></li>
+ <li><a href="/partners">Resellers</a></li>
</xpath>
</template>
@@ -55,7 +55,7 @@
<t t-foreach="countries" t-as="country_dict">
<t t-if="country_dict['country_id']">
<li t-att-class="country_dict['country_id'][0] == current_country_id and 'active' or ''">
- <a t-attf-href="#{ country_dict['country_id'][0] and ('/partners/country/%s' % slug(country_dict['country_id'])) or '/partners/' }#{ search_path }">
+ <a t-attf-href="#{ country_dict['country_id'][0] and ('/partners/country/%s' % slug(country_dict['country_id'])) or '/partners' }#{ search_path }">
<span class="badge pull-right" t-esc="country_dict['country_id_count'] or ''"/>
<t t-esc="country_dict['country_id'][1]"/>
</a>
@@ -93,11 +93,11 @@
<t t-set="internal_gid" t-value="partner_data['grade_id'][1]"/>
</t>
<div class="media">
- <a class="pull-left" t-attf-href="/partners/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/">
+ <a class="pull-left" t-attf-href="/partners/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data['image_small']}"/>
</a>
<div class="media-body" style="min-height: 64px;">
- <a class="media-heading" t-attf-href="/partners/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/"><t t-if="partner_data['parent_id']"><span t-esc="partner_data['parent_id'][1]"/></t> <span t-esc="partner_data['name']"/></a> - <span t-esc="partner_data['grade_id'][1]"/>
+ <a class="media-heading" t-attf-href="/partners/#{ slug([partner_data.get('id'), partner_data.get('name')]) }"><t t-if="partner_data['parent_id']"><span t-esc="partner_data['parent_id'][1]"/></t> <span t-esc="partner_data['name']"/></a> - <span t-esc="partner_data['grade_id'][1]"/>
<div t-esc="partner_data['website_short_description']"/>
</div>
</div>
@@ -112,7 +112,7 @@
<xpath expr="//ul[@id='reseller_countries']" position="after">
<h3>World Map</h3>
<ul class="nav">
- <iframe t-attf-src="/google_map/?width=320&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/partners/"
+ <iframe t-attf-src="/google_map/?width=320&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/partners"
style="width:320px; height:260px; border:0; padding:0; margin:0;"></iframe>
</ul>
</xpath>
diff --git a/addons/website_customer/controllers/main.py b/addons/website_customer/controllers/main.py
index 173b0871dbe..5f0825e132c 100644
--- a/addons/website_customer/controllers/main.py
+++ b/addons/website_customer/controllers/main.py
@@ -12,12 +12,12 @@ class WebsiteCustomer(http.Controller):
_references_per_page = 20
@http.route([
- '/customers/',
- '/customers/page/<int:page>/',
+ '/customers',
+ '/customers/page/<int:page>',
'/customers/country/<int:country_id>',
'/customers/country/<country_name>-<int:country_id>',
- '/customers/country/<int:country_id>/page/<int:page>/',
- '/customers/country/<country_name>-<int:country_id>/page/<int:page>/',
+ '/customers/country/<int:country_id>/page/<int:page>',
+ '/customers/country/<country_name>-<int:country_id>/page/<int:page>',
], type='http', auth="public", website=True, multilang=True)
def customers(self, country_id=0, page=0, **post):
cr, uid, context = request.cr, request.uid, request.context
@@ -62,7 +62,7 @@ class WebsiteCustomer(http.Controller):
# pager
pager = request.website.pager(
- url="/customers/", total=len(partner_ids), page=page, step=self._references_per_page,
+ url="/customers", total=len(partner_ids), page=page, step=self._references_per_page,
scope=7, url_args=post
)
@@ -83,7 +83,7 @@ class WebsiteCustomer(http.Controller):
}
return request.website.render("website_customer.index", values)
- @http.route(['/customers/<int:partner_id>/', '/customers/<partner_name>-<int:partner_id>/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/customers/<int:partner_id>', '/customers/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
def customer(self, partner_id, **post):
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
values = website_partner.get_partner_template_value(partner)
diff --git a/addons/website_customer/views/website_customer.xml b/addons/website_customer/views/website_customer.xml
index ad924cba55d..ba89f456e23 100644
--- a/addons/website_customer/views/website_customer.xml
+++ b/addons/website_customer/views/website_customer.xml
@@ -5,7 +5,7 @@
<!-- Layout add nav and footer -->
<template id="footer_custom" inherit_id="website.layout" name="Footer Customer References Link">
<xpath expr="//footer//div[@name='info']/ul" position="inside">
- <li><a href="/customers/">Our References</a></li>
+ <li><a href="/customers">Our References</a></li>
</xpath>
</template>
@@ -44,11 +44,11 @@
</t>
<t t-foreach="partners_data" t-as="partner_data" class="media">
<div class="media">
- <a class="pull-left" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/">
+ <a class="pull-left" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data.get('image_small')}"/>
</a>
<div class="media-body" style="min-height: 64px;">
- <a t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/" t-esc="partner_data.get('name')"/>
+ <a t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }" t-esc="partner_data.get('name')"/>
<div t-raw="partner_data.get('website_short_description') or ''"/>
</div>
</div>
@@ -68,7 +68,7 @@
<template id="opt_country" inherit_option_id="website_customer.index" name="Show Map">
<xpath expr="//div[@id='ref_left_column']" position="inside">
- <iframe t-attf-src="/google_map/?partner_ids=#{ google_map_partner_ids }&amp;partner_url=/customers/&amp;output=embed/"
+ <iframe t-attf-src="/google_map/?partner_ids=#{ google_map_partner_ids }&amp;partner_url=/customers/&amp;output=embed"
style="width:100%; border:0; padding:0; margin:0;"></iframe>
</xpath>
</template>
@@ -80,7 +80,7 @@
<t t-foreach="countries" t-as="country_dict">
<t t-if="country_dict['country_id']">
<li t-att-class="country_dict['country_id'][0] == current_country_id and 'active' or ''">
- <a t-attf-href="/customers/#{ country_dict['country_id'][0] and 'country/%s/' % slug(country_dict['country_id']) or '' }#{ search_path }">
+ <a t-attf-href="/customers/#{ country_dict['country_id'][0] and 'country/%s' % slug(country_dict['country_id']) or '' }#{ search_path }">
<span class="badge pull-right" t-esc="country_dict['country_id_count'] or '0'"/>
<t t-esc="country_dict['country_id'][1]"/>
</a>
@@ -143,7 +143,7 @@
</div>
</address>
<div>
- <a t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/#references/" t-if="implemented_partner_ids">
+ <a t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/#references" t-if="implemented_partner_ids">
<t t-esc="len(implemented_partner_ids)"/> references
</a>
</div>
@@ -158,11 +158,11 @@
<t t-if="implemented_partners_data">
<h3 id="references">References</h3>
<div t-foreach="implemented_partners_data" t-as="partner_data" class="media">
- <a class="pull-left" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/">
+ <a class="pull-left" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data.get('image_small')}"/>
</a>
<div class="media-body" style="min-height: 64px;">
- <a class="media-heading" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/">
+ <a class="media-heading" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
<t t-if="partner_data.get('parent_id')"><span t-esc="partner_data.get('parent_id')[1]"/></t> <span t-esc="partner_data.get('name')"/>
</a>
<div t-if="partner_data.get('website_short_description')" t-raw="partner_data.get('website_short_description')"/>
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py
index eb38e2dbe55..c410536a0b5 100644
--- a/addons/website_event/controllers/main.py
+++ b/addons/website_event/controllers/main.py
@@ -33,7 +33,7 @@ from openerp import tools
import werkzeug.urls
class website_event(http.Controller):
- @http.route(['/event/', '/event/page/<int:page>'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/event', '/event/page/<int:page>'], type='http', auth="public", website=True, multilang=True)
def events(self, page=1, **searches):
cr, uid, context = request.cr, request.uid, request.context
event_obj = request.registry['event.event']
@@ -134,7 +134,7 @@ class website_event(http.Controller):
event_count = event_obj.search(
request.cr, request.uid, dom_without("none"), count=True,
context=request.context)
- pager = request.website.pager(url="/event/", total=event_count, page=page, step=step, scope=5)
+ pager = request.website.pager(url="/event", total=event_count, page=page, step=step, scope=5)
order = 'website_published desc, date_begin'
if searches.get('date','all') == 'old':
diff --git a/addons/website_event/views/website_event.xml b/addons/website_event/views/website_event.xml
index e490b1a0687..1096287bb3b 100644
--- a/addons/website_event/views/website_event.xml
+++ b/addons/website_event/views/website_event.xml
@@ -50,7 +50,7 @@
<li t-foreach="event_ids" t-as="event" class="media">
<div itemscope="itemscope" itemtype="http://schema.org/Event" class="media-body">
<h4 class="media-heading">
- <a itemprop="url" t-att-class="event.state == 'done' and 'text-success'" t-attf-href="/event/#{ slug(event) }/#{(not event.menu_id) and 'register/' or ''}"><span itemprop="name" t-field="event.name"> </span></a>
+ <a itemprop="url" t-att-class="event.state == 'done' and 'text-success'" t-attf-href="/event/#{ slug(event) }/#{(not event.menu_id) and 'register' or ''}"><span itemprop="name" t-field="event.name"> </span></a>
<small t-if="not event.website_published" class="label label-danger">not published</small>
</h4>
<div>
@@ -243,7 +243,7 @@
<div class="container">
<h1 class="mt32">Event not found!</h1>
<p>Sorry, the requested event is not available anymore.</p>
- <p><a t-attf-href="/event/">Return to the event list.</a></p>
+ <p><a t-attf-href="/event">Return to the event list.</a></p>
</div>
</div>
</div>
diff --git a/addons/website_event_sale/controllers/main.py b/addons/website_event_sale/controllers/main.py
index cc9ddc0ad56..2db874cf5b7 100644
--- a/addons/website_event_sale/controllers/main.py
+++ b/addons/website_event_sale/controllers/main.py
@@ -78,7 +78,7 @@ class website_event(website_event):
order_obj.write(request.cr, SUPERUSER_ID, [order.id], {'order_line': [(4, order_line_id)]}, context=request.context)
if not _values:
- return request.redirect("/event/%s/" % event_id)
+ return request.redirect("/event/%s" % event_id)
return request.redirect("/shop/checkout")
def _add_event(self, event_name="New Event", context={}, **kwargs):
diff --git a/addons/website_event_sale/static/src/js/website.tour.event_sale.js b/addons/website_event_sale/static/src/js/website.tour.event_sale.js
index 3c74cc2317e..c67c412d7d2 100644
--- a/addons/website_event_sale/static/src/js/website.tour.event_sale.js
+++ b/addons/website_event_sale/static/src/js/website.tour.event_sale.js
@@ -44,7 +44,7 @@
{
title: "Complete checkout",
waitFor: '#top_menu .my_cart_quantity:contains(5)',
- element: 'form[action="/shop/confirm_order/"] .btn:contains("Confirm")',
+ element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")',
onload: function (tour) {
if ($("input[name='name']").val() === "")
$("input[name='name']").val("website_sale-test-shoptest");
diff --git a/addons/website_event_track/controllers/event.py b/addons/website_event_track/controllers/event.py
index d4b7177814d..466e3d37a40 100644
--- a/addons/website_event_track/controllers/event.py
+++ b/addons/website_event_track/controllers/event.py
@@ -38,7 +38,7 @@ class website_event(http.Controller):
return request.website.render("website_event_track.track_view", values)
# TODO: not implemented
- @http.route(['/event/<model("event.event"):event>/agenda/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/event/<model("event.event"):event>/agenda'], type='http', auth="public", website=True, multilang=True)
def event_agenda(self, event, tag=None, **post):
values = {
'event': event,
@@ -47,7 +47,7 @@ class website_event(http.Controller):
return request.website.render("website_event_track.agenda", values)
@http.route([
- '/event/<model("event.event"):event>/track/',
+ '/event/<model("event.event"):event>/track',
'/event/<model("event.event"):event>/track/tag/<model("event.track.tag"):tag>'
], type='http', auth="public", website=True, multilang=True)
def event_tracks(self, event, tag=None, **post):
@@ -74,7 +74,7 @@ class website_event(http.Controller):
}
return request.website.render("website_event_track.tracks", values)
- @http.route(['/event/<model("event.event"):event>/track_proposal/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/event/<model("event.event"):event>/track_proposal'], type='http', auth="public", website=True, multilang=True)
def event_track_proposal(self, event, **post):
values = { 'event': event }
return request.website.render("website_event_track.event_track_proposal", values)
diff --git a/addons/website_event_track/models/event.py b/addons/website_event_track/models/event.py
index cfba63cfc6b..1c098232a2e 100644
--- a/addons/website_event_track/models/event.py
+++ b/addons/website_event_track/models/event.py
@@ -142,12 +142,12 @@ class event_event(osv.osv):
context = context or {}
result = super(event_event, self)._get_new_menu_pages(cr, uid, event, context=context)
if event.show_tracks:
- result.append( (_('Talks'), '/event/%s/track/' % slug(event)))
- result.append( (_('Agenda'), '/event/%s/agenda/' % slug(event)))
+ result.append( (_('Talks'), '/event/%s/track' % slug(event)))
+ result.append( (_('Agenda'), '/event/%s/agenda' % slug(event)))
if event.blog_id:
- result.append( (_('News'), '/blogpost/'+slug(event.blog_ig)))
+ result.append( (_('News'), '/blogpost'+slug(event.blog_ig)))
if event.show_track_proposal:
- result.append( (_('Talk Proposals'), '/event/%s/track_proposal/' % slug(event)))
+ result.append( (_('Talk Proposals'), '/event/%s/track_proposal' % slug(event)))
return result
#
diff --git a/addons/website_event_track/views/website_event.xml b/addons/website_event_track/views/website_event.xml
index 03f6f750b6f..3eb2a4bbbde 100644
--- a/addons/website_event_track/views/website_event.xml
+++ b/addons/website_event_track/views/website_event.xml
@@ -174,7 +174,7 @@
<template id="tracks_filter" inherit_id="website_event_track.tracks" inherit_option_id="website_event_track.tracks" name="Filter on Tags">
<xpath expr="//div[@id='left_column']" position="inside">
<ul class="nav nav-pills nav-stacked">
- <li t-att-class="'' if searches.get('tag') else 'active'"><a t-attf-href="/event/#{ slug(event) }/track/">All Tags</a></li>
+ <li t-att-class="'' if searches.get('tag') else 'active'"><a t-attf-href="/event/#{ slug(event) }/track">All Tags</a></li>
<t t-foreach="tags" t-as="tag">
<li t-att-class="searches.get('tag') == tag.id and 'active' or ''">
<a t-attf-href="/event/#{ slug(event) }/track/tag/#{ slug(tag) }">
diff --git a/addons/website_google_map/controllers/main.py b/addons/website_google_map/controllers/main.py
index 98a86230d7e..01a0cc3b85e 100644
--- a/addons/website_google_map/controllers/main.py
+++ b/addons/website_google_map/controllers/main.py
@@ -7,7 +7,7 @@ from datetime import datetime
class google_map(http.Controller):
- @http.route(['/google_map/'], type='http', auth="public", website=True)
+ @http.route(['/google_map'], type='http', auth="public", website=True)
def google_map(self, *arg, **post):
values = {
'partner_ids': post.get('partner_ids', ""),
@@ -28,7 +28,7 @@ class google_map(http.Controller):
return partner_obj.google_map_json(request.cr, openerp.SUPERUSER_ID,
partner_ids, request.context)
- @http.route(['/google_map/set_partner_position/'], type='http', auth="public", website=True)
+ @http.route(['/google_map/set_partner_position'], type='http', auth="public", website=True)
def google_map_set_partner_position(self, *arg, **post):
partner_obj = request.registry['res.partner']
diff --git a/addons/website_google_map/static/src/js/google_map.js b/addons/website_google_map/static/src/js/google_map.js
index df5b7011ed7..19f4a5e6423 100644
--- a/addons/website_google_map/static/src/js/google_map.js
+++ b/addons/website_google_map/static/src/js/google_map.js
@@ -38,7 +38,7 @@ function initialize(pt) {
if (status == google.maps.GeocoderStatus.OK) {
var location = results[0].geometry.location;
- $.post("/google_map/set_partner_position/", {
+ $.post("/google_map/set_partner_position", {
'partner_id': partner.id,
'latitude': location.ob,
'longitude': location.pb
diff --git a/addons/website_hr_recruitment/models/hr_job.py b/addons/website_hr_recruitment/models/hr_job.py
index 26036350004..26aad8ae1b8 100644
--- a/addons/website_hr_recruitment/models/hr_job.py
+++ b/addons/website_hr_recruitment/models/hr_job.py
@@ -9,7 +9,7 @@ class hr_job(osv.osv):
def _website_url(self, cr, uid, ids, field_name, arg, context=None):
res = dict.fromkeys(ids, '')
for job in self.browse(cr, uid, ids, context=context):
- res[job.id] = "/jobs/detail/%s/" % job.id
+ res[job.id] = "/jobs/detail/%s" % job.id
return res
def job_open(self, cr, uid, ids, context=None):
diff --git a/addons/website_hr_recruitment/views/templates.xml b/addons/website_hr_recruitment/views/templates.xml
index 9dab6c6accc..3246eb19931 100644
--- a/addons/website_hr_recruitment/views/templates.xml
+++ b/addons/website_hr_recruitment/views/templates.xml
@@ -236,7 +236,7 @@
<li t-att-class=" '' if department_id else 'active' "><a href="/jobs">All Departments</a></li>
<t t-foreach="departments" t-as="department">
<li t-att-class="'active' if department_id == department.id else ''">
- <a t-attf-href="/jobs/department/#{ slug(department) }/" ><span t-field="department.name"/></a>
+ <a t-attf-href="/jobs/department/#{ slug(department) }" ><span t-field="department.name"/></a>
</li>
</t>
</ul>
@@ -255,7 +255,7 @@
<li t-att-class=" '' if office_id else 'active' "><a href="/jobs">All Offices</a></li>
<t t-foreach="offices" t-as="thisoffice">
<li t-att-class=" 'active' if office_id == thisoffice.id else '' ">
- <a t-attf-href="/jobs/office/#{ slug(thisoffice) }/" >
+ <a t-attf-href="/jobs/office/#{ slug(thisoffice) }" >
<span t-field="thisoffice.city"/><t t-if="thisoffice.country_id">,
<span t-field="thisoffice.country_id.name"/>
</t>
diff --git a/addons/website_mail/controllers/email_designer.py b/addons/website_mail/controllers/email_designer.py
index 3eb3c32ac96..fc10abccf2a 100644
--- a/addons/website_mail/controllers/email_designer.py
+++ b/addons/website_mail/controllers/email_designer.py
@@ -7,7 +7,7 @@ from openerp.addons.web.http import request
class WebsiteEmailDesigner(http.Controller):
- @http.route('/website_mail/email_designer/<model("email.template"):template>/', type='http', auth="user", website=True, multilang=True)
+ @http.route('/website_mail/email_designer/<model("email.template"):template>', type='http', auth="user", website=True, multilang=True)
def index(self, template, **kw):
values = {
'template': template,
diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py
index 601e1387f0a..f6d35078b22 100644
--- a/addons/website_mail/controllers/main.py
+++ b/addons/website_mail/controllers/main.py
@@ -39,7 +39,7 @@ class WebsiteMail(http.Controller):
partner_ids = [user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id]
return partner_ids
- @http.route(['/website_mail/follow/'], type='json', auth="public", website=True)
+ @http.route(['/website_mail/follow'], type='json', auth="public", website=True)
def website_message_subscribe(self, id=0, object=None, message_is_follower="on", email=False, **post):
_id = int(id)
_message_is_follower = message_is_follower == 'on'
@@ -57,7 +57,7 @@ class WebsiteMail(http.Controller):
return partner_ids[0] in follower_ids and 1 or 0
- @http.route(['/website_mail/is_follower/'], type='json', auth="public", website=True)
+ @http.route(['/website_mail/is_follower'], type='json', auth="public", website=True)
def call(self, model, id, **post):
email = request.registry['res.users'].browse(request.cr, request.uid, request.uid, request.context).partner_id.email
value = request.registry.get(model).read(request.cr, request.uid, [id], ['message_is_follower'], request.context)
diff --git a/addons/website_mail/static/src/js/website_mail.js b/addons/website_mail/static/src/js/website_mail.js
index 672a21324a8..99a2f6df2c5 100644
--- a/addons/website_mail/static/src/js/website_mail.js
+++ b/addons/website_mail/static/src/js/website_mail.js
@@ -9,7 +9,7 @@
var self = this;
// set value and display button
- openerp.jsonRpc('/website_mail/is_follower/', 'call', {
+ openerp.jsonRpc('/website_mail/is_follower', 'call', {
model: this.$target.data('object'),
id: +this.$target.data('id'),
}).always(function (data) {
diff --git a/addons/website_membership/controllers/main.py b/addons/website_membership/controllers/main.py
index a4932c1b46c..11e764f0eac 100644
--- a/addons/website_membership/controllers/main.py
+++ b/addons/website_membership/controllers/main.py
@@ -14,20 +14,20 @@ class WebsiteMembership(http.Controller):
_references_per_page = 20
@http.route([
- '/members/',
- '/members/page/<int:page>/',
- '/members/association/<int:membership_id>/',
- '/members/association/<int:membership_id>/page/<int:page>/',
+ '/members',
+ '/members/page/<int:page>',
+ '/members/association/<int:membership_id>',
+ '/members/association/<int:membership_id>/page/<int:page>',
'/members/country/<int:country_id>',
'/members/country/<country_name>-<int:country_id>',
- '/members/country/<int:country_id>/page/<int:page>/',
- '/members/country/<country_name>-<int:country_id>/page/<int:page>/',
+ '/members/country/<int:country_id>/page/<int:page>',
+ '/members/country/<country_name>-<int:country_id>/page/<int:page>',
'/members/association/<int:membership_id>/country/<country_name>-<int:country_id>',
'/members/association/<int:membership_id>/country/<int:country_id>',
- '/members/association/<int:membership_id>/country/<country_name>-<int:country_id>/page/<int:page>/',
- '/members/association/<int:membership_id>/country/<int:country_id>/page/<int:page>/',
+ '/members/association/<int:membership_id>/country/<country_name>-<int:country_id>/page/<int:page>',
+ '/members/association/<int:membership_id>/country/<int:country_id>/page/<int:page>',
], type='http', auth="public", website=True, multilang=True)
def members(self, membership_id=None, country_name=None, country_id=0, page=0, **post):
cr, uid, context = request.cr, request.uid, request.context
@@ -88,7 +88,7 @@ class WebsiteMembership(http.Controller):
memberships = product_obj.browse(cr, uid, membership_ids, context=context)
# request pager for lines
- pager = request.website.pager(url="/members/", total=len(membership_line_ids), page=page, step=self._references_per_page, scope=7, url_args=post)
+ pager = request.website.pager(url="/members", total=len(membership_line_ids), page=page, step=self._references_per_page, scope=7, url_args=post)
values = {
'partners_data': partners_data,
@@ -105,7 +105,7 @@ class WebsiteMembership(http.Controller):
}
return request.website.render("website_membership.index", values)
- @http.route(['/members/<int:partner_id>/', '/members/<partner_name>-<int:partner_id>/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/members/<int:partner_id>', '/members/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
def partners_ref(self, partner_id, **post):
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
values = website_partner.get_partner_template_value(partner)
diff --git a/addons/website_membership/views/website_membership.xml b/addons/website_membership/views/website_membership.xml
index 94a7c95fb5d..afd7181a062 100644
--- a/addons/website_membership/views/website_membership.xml
+++ b/addons/website_membership/views/website_membership.xml
@@ -5,7 +5,7 @@
<!-- Layout add nav and footer -->
<template id="footer_custom" inherit_id="website.layout" name="Footer Associations Link">
<xpath expr="//footer//div[@name='info']/ul" position="inside">
- <li><a href="/members/">Members</a></li>
+ <li><a href="/members">Members</a></li>
</xpath>
</template>
@@ -31,10 +31,10 @@
<div class="col-md-4 mb32" id="left_column">
<ul class="nav nav-pills nav-stacked mt16">
<li class="nav-header"><h3>Associations</h3></li>
- <li t-att-class="'' if membership else 'active'"><a href="/members/">All</a></li>
+ <li t-att-class="'' if membership else 'active'"><a href="/members">All</a></li>
<t t-foreach="memberships" t-as="membership_id">
<li t-att-class="membership and membership_id.id == membership.id and 'active' or ''">
- <a t-attf-href="/members/association/#{ membership_id.id }/#{current_country and 'country/%s/' % slug(current_country) or ''}#{ search }"><t t-esc="membership_id.name"/></a>
+ <a t-attf-href="/members/association/#{ membership_id.id }/#{current_country and 'country/%s' % slug(current_country) or ''}#{ search }"><t t-esc="membership_id.name"/></a>
</li>
</t>
</ul>
@@ -61,11 +61,11 @@
</t>
<t t-set="partner_data" t-value="partners_data[membership_line_id.partner.id]"/>
<div class="media">
- <a class="pull-left" t-attf-href="/members/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/">
+ <a class="pull-left" t-attf-href="/members/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data.get('image_small')}"/>
</a>
<div class="media-body" style="min-height: 64px;">
- <a class="media-heading" t-attf-href="/members/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/"><t t-if="partner_data.get('parent_id')"><span t-esc="partner_data.get('parent_id')[1]"/></t> <span t-esc="partner_data.get('name')"/></a>
+ <a class="media-heading" t-attf-href="/members/#{ slug([partner_data.get('id'), partner_data.get('name')]) }"><t t-if="partner_data.get('parent_id')"><span t-esc="partner_data.get('parent_id')[1]"/></t> <span t-esc="partner_data.get('name')"/></a>
<div t-raw="partner_data.get('website_short_description')"/>
</div>
</div>
@@ -87,7 +87,7 @@
<li class="nav-header"><h3>Location</h3></li>
<t t-foreach="countries">
<li t-if="country_id" t-att-class="country_id[0] == current_country_id and 'active' or ''">
- <a t-attf-href="/members/#{ membership and 'association/%s/' % membership.id or '' }#{ country_id[0] and 'country/%s/' % slug(country_id) or '' }#{ search }"><t t-esc="country_id[1]"/>
+ <a t-attf-href="/members/#{ membership and 'association/%s' % membership.id or '' }#{ country_id[0] and 'country/%s' % slug(country_id) or '' }#{ search }"><t t-esc="country_id[1]"/>
<span class="badge pull-right"><t t-esc="country_id_count or '0'"/></span>
</a>
</li>
@@ -103,7 +103,7 @@
<ul class="nav nav-pills nav-stacked mt16">
<li class="nav-header"><h3>World Map</h3></li>
<ul class="nav">
- <iframe t-attf-src="/google_map/?width=320&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/members/"
+ <iframe t-attf-src="/google_map/?width=320&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/members"
style="width:320px; height:260px; border:0; padding:0; margin:0;"></iframe>
</ul>
</ul>
diff --git a/addons/website_partner/controllers/main.py b/addons/website_partner/controllers/main.py
index 6b0dc18a1f8..1e6cb9afb61 100644
--- a/addons/website_partner/controllers/main.py
+++ b/addons/website_partner/controllers/main.py
@@ -33,7 +33,7 @@ def get_partner_template_value(partner):
return values
class WebsitePartner(http.Controller):
- @http.route(['/partners/<int:partner_id>/', '/partners/<partner_name>-<int:partner_id>/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/partners/<int:partner_id>', '/partners/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
def partner(self, partner_id, **post):
""" Route for displaying a single partner / customer. """
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
diff --git a/addons/website_project/controllers/main.py b/addons/website_project/controllers/main.py
index 4940a521072..e487a981996 100644
--- a/addons/website_project/controllers/main.py
+++ b/addons/website_project/controllers/main.py
@@ -40,7 +40,7 @@ class Website(osv.Model):
class website_project(http.Controller):
- @http.route(['/project/<model("project.project"):project>/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/project/<model("project.project"):project>'], type='http', auth="public", website=True, multilang=True)
def project(self, project=None, **post):
cr, uid, context = request.cr, request.uid, request.context
render_values = {
diff --git a/addons/website_project/views/website_project.xml b/addons/website_project/views/website_project.xml
index 514194083f2..1d511ba3ef1 100644
--- a/addons/website_project/views/website_project.xml
+++ b/addons/website_project/views/website_project.xml
@@ -6,7 +6,7 @@
<template id="footer_custom" inherit_id="website.layout" name="Footer Project's Links">
<xpath expr="//footer//ul[@name='products']" position="inside">
<li t-foreach="website_project_ids" t-as="project">
- <a t-attf-href="/project/#{ project.id }/"><span t-field="project.name"/></a>
+ <a t-attf-href="/project/#{ project.id }"><span t-field="project.name"/></a>
</li>
</xpath>
</template>
diff --git a/addons/website_quote/static/src/js/website_quotation.js b/addons/website_quote/static/src/js/website_quotation.js
index b24ab58a3fb..646cbe25375 100644
--- a/addons/website_quote/static/src/js/website_quotation.js
+++ b/addons/website_quote/static/src/js/website_quotation.js
@@ -6,7 +6,7 @@ $(document).ready(function () {
var order_id = href.match(/order_id=([0-9]+)/);
var line_id = href.match(/update_line\/([0-9]+)/);
var token = href.match(/token=(.*)/);
- openerp.jsonRpc("/quote/update_line/", 'call', {
+ openerp.jsonRpc("/quote/update_line", 'call', {
'line_id': line_id[1],
'order_id': parseInt(order_id[1]),
'token': token[1],
@@ -52,7 +52,7 @@ $(document).ready(function () {
if (is_empty || ! signer_name)
return false;
- openerp.jsonRpc("/quote/accept/", 'call', {
+ openerp.jsonRpc("/quote/accept", 'call', {
'order_id': parseInt(order_id[1]),
'token': token,
'signer': signer_name,
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index d8a314ad609..66422767af4 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -151,7 +151,7 @@ class Ecommerce(http.Controller):
return key_val
return False
- @http.route(['/shop/filters/'], type='http', auth="public", methods=['POST'], website=True, multilang=True)
+ @http.route(['/shop/filters'], type='http', auth="public", methods=['POST'], website=True, multilang=True)
def filters(self, category=None, **post):
index = []
filters = []
@@ -177,10 +177,10 @@ class Ecommerce(http.Controller):
filters[index.index(cat_id)].append( cat[2] )
post.pop(key)
- url = "/shop/"
+ url = "/shop"
if category:
category_obj = request.registry.get('product.public.category')
- url = "%scategory/%s/" % (url, slug(category_obj.browse(request.cr, request.uid, int(category), context=request.context)))
+ url = "%scategory/%s" % (url, slug(category_obj.browse(request.cr, request.uid, int(category), context=request.context)))
if filters:
url = "%s?filters=%s" % (url, simplejson.dumps(filters))
if post.get("search"):
@@ -215,13 +215,13 @@ class Ecommerce(http.Controller):
@http.route(['/shop/pricelist'], type='http', auth="public", website=True, multilang=True)
def shop_promo(self, promo=None, **post):
request.registry['website']._ecommerce_change_pricelist(request.cr, request.uid, code=promo, context=request.context)
- return request.redirect("/shop/mycart/")
+ return request.redirect("/shop/mycart")
@http.route([
- '/shop/',
- '/shop/page/<int:page>/',
- '/shop/category/<model("product.public.category"):category>/',
- '/shop/category/<model("product.public.category"):category>/page/<int:page>/'
+ '/shop',
+ '/shop/page/<int:page>',
+ '/shop/category/<model("product.public.category"):category>',
+ '/shop/category/<model("product.public.category"):category>/page/<int:page>'
], type='http', auth="public", website=True, multilang=True)
def shop(self, category=None, page=0, filters='', search='', **post):
cr, uid, context = request.cr, request.uid, request.context
@@ -241,14 +241,14 @@ class Ecommerce(http.Controller):
ids = self.attributes_to_ids(cr, uid, filters)
domain.append(('id', 'in', ids or [0]))
- url = "/shop/"
+ url = "/shop"
product_count = product_obj.search_count(cr, uid, domain, context=context)
if search:
post["search"] = search
if filters:
post["filters"] = filters
if category:
- url = "/shop/category/%s/" % slug(category)
+ url = "/shop/category/%s" % slug(category)
pager = request.website.pager(url=url, total=product_count, page=page, step=PPG, scope=7, url_args=post)
request.context['pricelist'] = self.get_pricelist()
@@ -288,7 +288,7 @@ class Ecommerce(http.Controller):
}
return request.website.render("website_sale.products", values)
- @http.route(['/shop/product/<model("product.template"):product>/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/shop/product/<model("product.template"):product>'], type='http', auth="public", website=True, multilang=True)
def product(self, product, search='', category='', filters='', **kwargs):
if category:
category_obj = request.registry.get('product.public.category')
@@ -333,7 +333,7 @@ class Ecommerce(http.Controller):
return request.redirect("/shop/product/%s/?enable_editor=1" % product.product_tmpl_id.id)
- @http.route(['/shop/mycart/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/shop/mycart'], type='http', auth="public", website=True, multilang=True)
def mycart(self, **post):
cr, uid, context = request.cr, request.uid, request.context
prod_obj = request.registry.get('product.product')
@@ -342,7 +342,7 @@ class Ecommerce(http.Controller):
order = self.get_order()
if order and order.state != 'draft':
request.registry['website'].ecommerce_reset(cr, uid, context=context)
- return request.redirect('/shop/')
+ return request.redirect('/shop')
self.get_pricelist()
@@ -370,21 +370,21 @@ class Ecommerce(http.Controller):
}
return request.website.render("website_sale.mycart", values)
- @http.route(['/shop/add_cart/'], type='http', auth="public", methods=['POST'], website=True, multilang=True)
+ @http.route(['/shop/add_cart'], type='http', auth="public", methods=['POST'], website=True, multilang=True)
def add_cart(self, product_id, remove=None, **kw):
request.registry['website']._ecommerce_add_product_to_cart(request.cr, request.uid,
product_id=int(product_id),
context=request.context)
- return request.redirect("/shop/mycart/")
+ return request.redirect("/shop/mycart")
- @http.route(['/shop/change_cart/<int:order_line_id>/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/shop/change_cart/<int:order_line_id>'], type='http', auth="public", website=True, multilang=True)
def add_cart_order_line(self, order_line_id=None, remove=None, **kw):
request.registry['website']._ecommerce_add_product_to_cart(request.cr, request.uid,
order_line_id=order_line_id, number=(remove and -1 or 1),
context=request.context)
- return request.redirect("/shop/mycart/")
+ return request.redirect("/shop/mycart")
- @http.route(['/shop/add_cart_json/'], type='json', auth="public", website=True, multilang=True)
+ @http.route(['/shop/add_cart_json'], type='json', auth="public", website=True, multilang=True)
def add_cart_json(self, product_id=None, order_line_id=None, remove=None):
quantity = request.registry['website']._ecommerce_add_product_to_cart(request.cr, request.uid,
product_id=product_id, order_line_id=order_line_id, number=(remove and -1 or 1),
@@ -395,14 +395,14 @@ class Ecommerce(http.Controller):
order.amount_total,
request.website._render("website_sale.total", {'website_sale_order': order})]
- @http.route(['/shop/set_cart_json/'], type='json', auth="public")
+ @http.route(['/shop/set_cart_json'], type='json', auth="public")
def set_cart_json(self, path=None, product_id=None, order_line_id=None, set_number=0, json=None):
quantity = request.registry['website']._ecommerce_add_product_to_cart(request.cr, request.uid,
product_id=product_id, order_line_id=order_line_id, set_number=set_number,
context=request.context)
return quantity
- @http.route(['/shop/checkout/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/shop/checkout'], type='http', auth="public", website=True, multilang=True)
def checkout(self, **post):
cr, uid, context, registry = request.cr, request.uid, request.context, request.registry
@@ -410,7 +410,7 @@ class Ecommerce(http.Controller):
order = self.get_order()
if not order or order.state != 'draft' or not order.order_line:
request.registry['website'].ecommerce_reset(cr, uid, context=context)
- return request.redirect('/shop/')
+ return request.redirect('/shop')
# if transaction pending / done: redirect to confirmation
tx = context.get('website_sale_transaction')
if tx and tx.state != 'draft':
@@ -457,7 +457,7 @@ class Ecommerce(http.Controller):
return request.website.render("website_sale.checkout", values)
- @http.route(['/shop/confirm_order/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/shop/confirm_order'], type='http', auth="public", website=True, multilang=True)
def confirm_order(self, **post):
cr, uid, context, registry = request.cr, request.uid, request.context, request.registry
order_line_obj = request.registry.get('sale.order')
@@ -466,7 +466,7 @@ class Ecommerce(http.Controller):
order = self.get_order()
if not order or order.state != 'draft' or not order.order_line:
request.registry['website'].ecommerce_reset(cr, uid, context=context)
- return request.redirect('/shop/')
+ return request.redirect('/shop')
# if transaction pending / done: redirect to confirmation
tx = context.get('website_sale_transaction')
if tx and tx.state != 'draft':
@@ -561,9 +561,9 @@ class Ecommerce(http.Controller):
order_line_obj.write(cr, SUPERUSER_ID, [order.id], order_info, context=context)
- return request.redirect("/shop/payment/")
+ return request.redirect("/shop/payment")
- @http.route(['/shop/payment/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/shop/payment'], type='http', auth="public", website=True, multilang=True)
def payment(self, **post):
""" Payment step. This page proposes several payment means based on available
payment.acquirer. State at this point :
@@ -581,7 +581,7 @@ class Ecommerce(http.Controller):
order = self.get_order()
if not order or order.state != 'draft' or not order.order_line:
request.registry['website'].ecommerce_reset(cr, uid, context=context)
- return request.redirect("/shop/")
+ return request.redirect("/shop")
# alread a transaction: forward to confirmation
tx = context.get('website_sale_transaction')
if tx and tx.state != 'draft':
@@ -640,7 +640,7 @@ class Ecommerce(http.Controller):
order = self.get_order()
if not order or not order.order_line or acquirer_id is None:
- return request.redirect("/shop/checkout/")
+ return request.redirect("/shop/checkout")
# find an already existing transaction
tx = context.get('website_sale_transaction')
@@ -712,7 +712,7 @@ class Ecommerce(http.Controller):
'validation': validation
}
- @http.route('/shop/payment/validate/', type='http', auth="public", website=True, multilang=True)
+ @http.route('/shop/payment/validate', type='http', auth="public", website=True, multilang=True)
def payment_validate(self, transaction_id=None, sale_order_id=None, **post):
""" Method that should be called by the server when receiving an update
for a transaction. State at this point :
@@ -735,7 +735,7 @@ class Ecommerce(http.Controller):
assert order.website_session_id == request.session['website_session_id']
if not order:
- return request.redirect('/shop/')
+ return request.redirect('/shop')
elif order.amount_total and not tx:
return request.redirect('/shop/mycart')
@@ -784,7 +784,7 @@ class Ecommerce(http.Controller):
return request.website.render("website_sale.confirmation", {'order': order})
- @http.route(['/shop/change_sequence/'], type='json', auth="public")
+ @http.route(['/shop/change_sequence'], type='json', auth="public")
def change_sequence(self, id, sequence):
product_obj = request.registry.get('product.template')
if sequence == "top":
@@ -796,7 +796,7 @@ class Ecommerce(http.Controller):
elif sequence == "down":
product_obj.set_sequence_down(request.cr, request.uid, [id], context=request.context)
- @http.route(['/shop/change_styles/'], type='json', auth="public")
+ @http.route(['/shop/change_styles'], type='json', auth="public")
def change_styles(self, id, style_id):
product_obj = request.registry.get('product.template')
product = product_obj.browse(request.cr, request.uid, id, context=request.context)
@@ -818,7 +818,7 @@ class Ecommerce(http.Controller):
return not active
- @http.route(['/shop/change_size/'], type='json', auth="public")
+ @http.route(['/shop/change_size'], type='json', auth="public")
def change_size(self, id, x, y):
product_obj = request.registry.get('product.template')
product = product_obj.browse(request.cr, request.uid, id, context=request.context)
diff --git a/addons/website_sale/models/product.py b/addons/website_sale/models/product.py
index 1cdc206c4af..bfb3c142ca1 100644
--- a/addons/website_sale/models/product.py
+++ b/addons/website_sale/models/product.py
@@ -38,7 +38,7 @@ class product_template(osv.Model):
res = dict.fromkeys(ids, '')
base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
for product in self.browse(cr, uid, ids, context=context):
- res[product.id] = "%s/shop/product/%s/" % (base_url, product.id)
+ res[product.id] = "%s/shop/product/%s" % (base_url, product.id)
return res
_columns = {
@@ -139,7 +139,7 @@ class product_product(osv.Model):
res = {}
base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
for product in self.browse(cr, uid, ids, context=context):
- res[product.id] = "%s/shop/product/%s/" % (base_url, product.product_tmpl_id.id)
+ res[product.id] = "%s/shop/product/%s" % (base_url, product.product_tmpl_id.id)
return res
_columns = {
diff --git a/addons/website_sale/static/src/js/website.tour.sale.js b/addons/website_sale/static/src/js/website.tour.sale.js
index f85a8b22ad7..0ffc6f6e966 100644
--- a/addons/website_sale/static/src/js/website.tour.sale.js
+++ b/addons/website_sale/static/src/js/website.tour.sale.js
@@ -22,11 +22,11 @@
{
title: "click on add to cart",
waitFor: 'input[name="product_id"]:eq(1)[checked]',
- element: 'form[action="/shop/add_cart/"] .btn',
+ element: 'form[action="/shop/add_cart"] .btn',
},
{
title: "add suggested",
- element: 'form[action="/shop/add_cart/"] .btn-link:contains("Add to Cart")',
+ element: 'form[action="/shop/add_cart"] .btn-link:contains("Add to Cart")',
},
{
title: "add one more iPod",
@@ -47,19 +47,19 @@
{
title: "go to checkout",
waitFor: '#mycart_products input.js_quantity[value=1]',
- element: 'a[href="/shop/checkout/"]',
+ element: 'a[href="/shop/checkout"]',
},
{
title: "test with input error",
- element: 'form[action="/shop/confirm_order/"] .btn:contains("Confirm")',
+ element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")',
onload: function (tour) {
$("input[name='phone']").val("");
},
},
{
title: "test without input error",
- waitFor: 'form[action="/shop/confirm_order/"] .has-error',
- element: 'form[action="/shop/confirm_order/"] .btn:contains("Confirm")',
+ waitFor: 'form[action="/shop/confirm_order"] .has-error',
+ element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")',
onload: function (tour) {
if ($("input[name='name']").val() === "")
$("input[name='name']").val("website_sale-test-shoptest");
diff --git a/addons/website_sale/static/src/js/website_sale.editor.js b/addons/website_sale/static/src/js/website_sale.editor.js
index bb21c300fca..fc1fb4e1165 100644
--- a/addons/website_sale/static/src/js/website_sale.editor.js
+++ b/addons/website_sale/static/src/js/website_sale.editor.js
@@ -44,7 +44,7 @@
sequence = "up";
else if ($a.hasClass('js_go_down'))
sequence = "down";
- openerp.jsonRpc('/shop/change_sequence/', 'call', {'id': $data.data('id'), 'sequence': sequence})
+ openerp.jsonRpc('/shop/change_sequence', 'call', {'id': $data.data('id'), 'sequence': sequence})
.then(reload_enable_editor);
});
@@ -55,7 +55,7 @@
var $product = $a.parents(".oe_product:first");
$li.parent().removeClass("active");
- openerp.jsonRpc('/shop/change_styles/', 'call', {'id': $data.data('id'), 'style_id': $a.data("id")})
+ openerp.jsonRpc('/shop/change_styles', 'call', {'id': $data.data('id'), 'style_id': $a.data("id")})
.then(function (result) {
$product.toggleClass($a.data("class"));
$li.toggleClass("active", result);
@@ -89,7 +89,7 @@
var $data = $td.parents(".js_options:first");
var x = $td.index()+1;
var y = $td.parent().index()+1;
- openerp.jsonRpc('/shop/change_size/', 'call', {'id': $data.data('id'), 'x': x, 'y': y})
+ openerp.jsonRpc('/shop/change_size', 'call', {'id': $data.data('id'), 'x': x, 'y': y})
.then(reload_enable_editor);
});
diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js
index 8298f6b22c0..21113326c7d 100644
--- a/addons/website_sale/static/src/js/website_sale.js
+++ b/addons/website_sale/static/src/js/website_sale.js
@@ -24,7 +24,7 @@ $(document).ready(function () {
var $input = $(this);
var value = parseInt($input.val(), 10);
if (isNaN(value)) value = 0;
- openerp.jsonRpc("/shop/set_cart_json/", 'call', {'order_line_id': $input.data('id'), 'set_number': value})
+ openerp.jsonRpc("/shop/set_cart_json", 'call', {'order_line_id': $input.data('id'), 'set_number': value})
.then(function (data) {
if (!data) {
location.reload();
@@ -46,7 +46,7 @@ $(document).ready(function () {
var change_cart = href.match(/change_cart\/([0-9]+)/);
var order_line_id = change_cart && +change_cart[1] || false;
- openerp.jsonRpc("/shop/add_cart_json/", 'call', {
+ openerp.jsonRpc("/shop/add_cart_json", 'call', {
'product_id': product_id,
'order_line_id': order_line_id,
'remove': $link.is('[href*="remove"]')})
diff --git a/addons/website_sale/static/src/js/website_sale_validate.js b/addons/website_sale/static/src/js/website_sale_validate.js
index da917eb1298..6e139468cbc 100644
--- a/addons/website_sale/static/src/js/website_sale_validate.js
+++ b/addons/website_sale/static/src/js/website_sale_validate.js
@@ -8,7 +8,7 @@ $(document).ready(function () {
return;
}
var order_id = order_node.data('orderId');
- return openerp.jsonRpc('/shop/payment/get_status/' + order_id, 'call', {
+ return openerp.jsonRpc('/shop/payment/get_status' + order_id, 'call', {
}).then(function (result) {
var tx_node = $('div.oe_website_sale_tx_status');
_poll_nbr += 1;
diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml
index 31517b8bfbb..0d7c41706e5 100644
--- a/addons/website_sale/views/website_sale.xml
+++ b/addons/website_sale/views/website_sale.xml
@@ -20,7 +20,7 @@
<template id="header" inherit_id="website.layout" name="Header Shop My Cart Link">
<xpath expr="//header//ul[@id='top_menu']/li" position="before">
<li t-att-class="(not website_sale_order or not website_sale_order.get_number_of_products()) and 'hidden' or ''">
- <a href="/shop/mycart/">
+ <a href="/shop/mycart">
<i class="fa fa-shopping-cart"></i>
My cart <sup t-attf-class="my_cart_quantity label label-primary"
t-esc="website_sale_order and website_sale_order.get_number_of_products() or ''"/>
@@ -33,7 +33,7 @@
<template id="categories_recursive" name="Category list">
<li t-att-class="int(categ) == int(category or 0) and 'active' or ''">
- <a t-attf-href="/shop/category/#{ slug(categ) }/" t-field="categ.name"></a>
+ <a t-attf-href="/shop/category/#{ slug(categ) }" t-field="categ.name"></a>
<ul t-if="categ.child_id" class="nav nav-pills nav-stacked nav-hierarchy">
<t t-foreach="categ.child_id" t-as="categ">
<t t-call="website_sale.categories_recursive"/>
@@ -45,7 +45,7 @@
<!-- Product list -->
<template id="search" name="Search hidden fields">
- <form t-attf-action="/shop/{{'category/%s/' % slug(category) if category else ''}}" method="get" t-att-class="search_class">
+ <form t-attf-action="/shop/{{'category/%s' % slug(category) if category else ''}}" method="get" t-att-class="search_class">
<input t-if="search.get('filters')" type="hidden" name="filters" t-att-value="search.get('filters')"/>
<div class="input-group">
<input type="text" name="search" class="search-query form-control" placeholder="Search..." t-att-value="search.get('search') or ''"/>
@@ -231,7 +231,7 @@
<template id="add_to_basket" inherit_option_id="website_sale.products_cart" name="Add to Cart">
<xpath expr="//div[@class='product_price']" position="inside">
- <form action="/shop/add_cart/" method="post" style="display: inline-block;">
+ <form action="/shop/add_cart" method="post" style="display: inline-block;">
<input name="product_id" t-att-value="product.product_variant_ids[0].id" type="hidden"/>
<a class="btn btn-default btn-xs fa fa-shopping-cart a-submit"/>
</form>
@@ -259,7 +259,7 @@
<div class="container">
<h1 class="mt32">Product not found!</h1>
<p>Sorry, this product is not available anymore.</p>
- <p><a t-attf-href="/shop/">Return to the product list.</a></p>
+ <p><a t-attf-href="/shop">Return to the product list.</a></p>
</div>
</div>
</div>
@@ -305,7 +305,7 @@
</div><div class="col-sm-5 col-md-5 col-lg-4 col-lg-offset-1">
<h1 itemprop="name" t-field="product.name">Product Name</h1>
<span itemprop="url" style="display:none;" t-esc="'/shop/product/%s' % slug(product)"/>
- <form action="/shop/add_cart/" class="js_add_cart_json" method="POST">
+ <form action="/shop/add_cart" class="js_add_cart_json" method="POST">
<input type="hidden" t-if="len(product.product_variant_ids) == 1" name="product_id" t-att-value="product.product_variant_ids[0].id"/>
<t t-if="len(product.product_variant_ids) &gt; 1">
<label label-default="label-default" class="radio" t-foreach="product.product_variant_ids" t-as="variant_id">
@@ -369,7 +369,7 @@
<div class='mt16 text-center'>
<span t-field="product.image_small" t-field-options='{"widget": "image", "class": "img-rounded shadow" }'/>
<h5>
- <a t-attf-href="/shop/product/#{ slug(product) }/"
+ <a t-attf-href="/shop/product/#{ slug(product) }"
style="display: block">
<span t-field='product.name'
style="display: block"/>
@@ -428,7 +428,7 @@
class='oe_attachment_embedded'></img>
</t>
<t t-if="attachment.file_type_icon != 'webimage'">
- <img t-att-src="'/mail/static/src/img/mimetypes/' + attachment.file_type + '.png'"
+ <img t-att-src="'/mail/static/src/img/mimetypes' + attachment.file_type + '.png'"
class='oe_attachment_webimage'></img>
</t>
<div class='oe_attachment_name'><t t-raw='attachment.name' /></div>
@@ -495,7 +495,7 @@
</td>
<td t-if="line.product_id.product_tmpl_id">
<div>
- <a t-attf-href="/shop/product/#{ slug(line.product_id.product_tmpl_id) }/">
+ <a t-attf-href="/shop/product/#{ slug(line.product_id.product_tmpl_id) }">
<strong t-field="line.name"/>
</a>
</div>
@@ -524,7 +524,7 @@
<input type="text" class="js_quantity form-control"
t-att-data-id="line.id" t-att-value="int(line.product_uom_qty)"/>
<span class="input-group-addon">
- <a t-attf-href="../change_cart/#{ line.id }/" class="mb8 float_left js_add_cart_json">
+ <a t-attf-href="../change_cart/#{ line.id }" class="mb8 float_left js_add_cart_json">
<i class="fa fa-plus"></i>
</a>
</span>
@@ -536,7 +536,7 @@
</table>
<t t-call="website_sale.total"/>
<div class="clearfix"/>
- <a t-if="website_sale_order and website_sale_order.website_order_line" href="/shop/checkout/" class="btn btn-primary pull-right mb32">Process Checkout <span class="fa fa-long-arrow-right"/></a>
+ <a t-if="website_sale_order and website_sale_order.website_order_line" href="/shop/checkout" class="btn btn-primary pull-right mb32">Process Checkout <span class="fa fa-long-arrow-right"/></a>
<div class="oe_structure"/>
</div>
<div class="col-lg-3 col-lg-offset-1 col-sm-3 col-md-3 text-muted" id="right_column">
@@ -561,7 +561,7 @@
<template id="continue_shopping" inherit_id="website_sale.mycart" inherit_option_id="website_sale.mycart" name="Continue Shopping Button">
- <xpath expr="//a[@href='/shop/checkout/']" position="before">
+ <xpath expr="//a[@href='/shop/checkout']" position="before">
<a href="/shop" class="btn btn-default mb32"><span class="fa fa-long-arrow-left"/> Continue Shopping</a>
</xpath>
</template>
@@ -572,7 +572,7 @@
<template id="products_categories" inherit_option_id="website_sale.products" name="Product Categories">
<xpath expr="//div[@id='products_grid_before']" position="inside">
<ul class="nav nav-pills nav-stacked mt16">
- <li t-att-class=" '' if category else 'active' "><a href="/shop/">All Products</a></li>
+ <li t-att-class=" '' if category else 'active' "><a href="/shop">All Products</a></li>
<t t-foreach="categories" t-as="categ">
<t t-call="website_sale.categories_recursive"/>
</t>
@@ -648,14 +648,14 @@
<tr t-foreach="suggested_products" t-as="product">
<td>
- <a t-attf-href="/shop/product/#{ slug(product.product_tmpl_id) }/">
+ <a t-attf-href="/shop/product/#{ slug(product.product_tmpl_id) }">
<span t-field="product.image_small"
t-field-options='{"widget": "image", "class": "img-rounded"}'/>
</a>
</td>
<td>
<div>
- <a t-attf-href="/shop/product/#{ slug(product.product_tmpl_id) }/">
+ <a t-attf-href="/shop/product/#{ slug(product.product_tmpl_id) }">
<strong t-field="product.name"/>
</a>
</div>
@@ -675,7 +675,7 @@
}'/>
</td>
<td class="text-center">
- <form action="/shop/add_cart/" method="post">
+ <form action="/shop/add_cart" method="post">
<input name="product_id" t-att-value="product.product_variant_ids[0].id" type="hidden"/>
<a class="btn btn-link a-submit"><strong>Add to Cart</strong></a>
</form>
@@ -692,7 +692,7 @@
<p>
Have a coupon code? Fill in this field and apply.
</p>
- <form t-if="website_sale_order and website_sale_order.website_order_line" action="/shop/pricelist/" method="post" class="mb32">
+ <form t-if="website_sale_order and website_sale_order.website_order_line" action="/shop/pricelist" method="post" class="mb32">
<div class="input-group">
<input name="promo" class='form-control' type="text" placeholder="code..." t-att-value="website_sale_order.pricelist_id.code or ''"/>
<div class="input-group-btn">
@@ -723,7 +723,7 @@
<li class="text-muted">Confirmation<span class="chevron"></span></li>
</ul>
<h1>Your Address</h1>
- <form action="/shop/confirm_order/" method="post">
+ <form action="/shop/confirm_order" method="post">
<div class="row">
<div class="col-md-8 oe_mycart">
@@ -897,7 +897,7 @@
<tr t-foreach="website_sale_order.website_order_line" t-as="line">
<td colspan="2" t-if="not line.product_id.product_tmpl_id"></td>
<td t-if="line.product_id.product_tmpl_id">
- <a t-attf-href="/shop/product/#{ slug(line.product_id.product_tmpl_id) }/">
+ <a t-attf-href="/shop/product/#{ slug(line.product_id.product_tmpl_id) }">
<span t-field="line.product_id.image_small"
t-field-options='{"widget": "image", "class": "img-rounded"}'/>
</a>
@@ -972,7 +972,7 @@
</div>
<div class="js_payment mb64 row" t-if="not website_sale_order.amount_total" id="payment_method">
<div class="col-lg-8 col-sm-8">
- <form target="_self" action="/shop/payment/validate/" method="post" class="pull-right">
+ <form target="_self" action="/shop/payment/validate" method="post" class="pull-right">
<a style="width:100px;" class="btn btn-primary a-submit">
<span>Pay Now <span class="fa fa-long-arrow-right"></span></span>
</a>
diff --git a/addons/website_sale_delivery/controllers/main.py b/addons/website_sale_delivery/controllers/main.py
index 73da87b549d..b5402c3e285 100644
--- a/addons/website_sale_delivery/controllers/main.py
+++ b/addons/website_sale_delivery/controllers/main.py
@@ -7,7 +7,7 @@ from openerp import SUPERUSER_ID
class Ecommerce(Ecommerce):
- @http.route(['/shop/payment/'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/shop/payment'], type='http', auth="public", website=True, multilang=True)
def payment(self, **post):
cr, uid, context = request.cr, request.uid, request.context
order = self.get_order()
@@ -16,7 +16,7 @@ class Ecommerce(Ecommerce):
if order and carrier_id:
# recompute delivery costs
request.registry['website']._check_carrier_quotation(cr,uid,order,carrier_id,context=context)
- return request.redirect("/shop/payment/")
+ return request.redirect("/shop/payment")
res = super(Ecommerce, self).payment(**post)
return res