[FIX] website: route and redirect: remove all backslash from url

bzr revid: chm@openerp.com-20140314162346-25vohj6ayp65tgiy
This commit is contained in:
chm@openerp.com 2014-03-14 17:23:46 +01:00
parent 9bc57fdc08
commit 353bbdc2c3
39 changed files with 164 additions and 164 deletions

View File

@ -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)

View File

@ -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

View File

@ -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;
}

View File

@ -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);
});

View File

@ -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 () {

View File

@ -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.

View File

@ -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>

View File

@ -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)

View File

@ -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>

View File

@ -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)

View File

@ -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')"/>

View File

@ -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':

View File

@ -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>

View File

@ -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):

View File

@ -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");

View File

@ -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)

View File

@ -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
#

View File

@ -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) }">

View File

@ -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']

View File

@ -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

View File

@ -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):

View File

@ -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>

View File

@ -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,

View File

@ -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)

View File

@ -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) {

View File

@ -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)

View File

@ -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>

View File

@ -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)

View File

@ -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 = {

View File

@ -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>

View File

@ -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,

View File

@ -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)

View File

@ -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 = {

View File

@ -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");

View File

@ -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);
});

View File

@ -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"]')})

View File

@ -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;

View File

@ -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>

View File

@ -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