From bd23b317219639a6a1eff79a595b9c23f4b3a927 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Thu, 1 Aug 2013 14:48:50 +0200 Subject: [PATCH] [IMP] website: add auth_method_public bzr revid: chm@openerp.com-20130801124850-9ycc9j77wphiiww6 --- addons/website/website.py | 46 ++---- addons/website_hr/controllers/main.py | 15 +- addons/website_mail/controllers/main.py | 67 ++++---- addons/website_mail/mail_message.py | 4 +- addons/website_sale/controllers/main.py | 205 ++++++++++-------------- 5 files changed, 149 insertions(+), 188 deletions(-) diff --git a/addons/website/website.py b/addons/website/website.py index c9cb2aab37d..f8d9a9592ce 100644 --- a/addons/website/website.py +++ b/addons/website/website.py @@ -6,45 +6,31 @@ from openerp.addons.web.controllers import main from openerp.addons.web.http import request -class website(http.Controller): - public_user_id = None +def auth_method_public(): + registry = openerp.modules.registry.RegistryManager.get(request.db) + with registry.cursor() as cr: + request.public_uid = request.registry['ir.model.data'].get_object_reference(cr, openerp.SUPERUSER_ID, 'website', 'public_user')[1] + if not request.session.uid: + request.uid = request.public_uid + else: + request.uid = request.session.uid +http.auth_methods['public'] = auth_method_public - def get_uid(self): - try: - request.session.check_security() - uid = request.session._uid - except http.SessionExpiredException: - if not website.public_user_id: - data_obj = request.registry['ir.model.data'] - website.public_user_id = data_obj.get_object_reference(request.cr, openerp.SUPERUSER_ID, 'website', 'public_user')[1] - uid = website.public_user_id - return uid - - def isloggued(self): - return website.public_user_id != self.get_uid() - - def render(self, cr, uid, template, add_values={}): +class website(object): + def render(self, template, add_values={}): script = "\n".join(['' % i for i in main.manifest_list('js', db=request.db)]) css = "\n".join('' % i for i in main.manifest_list('css', db=request.db)) _values = { - 'editable': self.isloggued(), + 'editable': request.uid != request.public_uid, 'request': request, 'registry': request.registry, - 'cr': cr, - 'uid': uid, + 'cr': request.cr, + 'uid': request.uid, 'script': script, 'css': css, 'host_url': request.httprequest.host_url, } _values.update(add_values) - return request.registry.get("ir.ui.view").render(cr, uid, template, _values) - - @staticmethod - def route(*args, **kwargs): - def wrap(_funct): - @http.route(*args, **kwargs) - def wrapper(self, *a, **k): - return _funct(self, request.cr, self.get_uid(), *a, **k) - return wrapper - return wrap + return request.registry.get("ir.ui.view").render(request.cr, request.uid, template, _values) +website = website() \ No newline at end of file diff --git a/addons/website_hr/controllers/main.py b/addons/website_hr/controllers/main.py index 4b5321f929c..3cffe6d9388 100644 --- a/addons/website_hr/controllers/main.py +++ b/addons/website_hr/controllers/main.py @@ -1,19 +1,20 @@ # -*- coding: utf-8 -*- +from openerp.addons.web import http from openerp.addons.web.http import request from openerp.addons.website import website -class website_hr(website): +class website_hr(http.Controller): - @website.route(['/team'], type='http', auth="admin") - def blog(self, cr, uid, **post): + @http.route(['/team'], type='http', auth="public") + def blog(self, **post): hr_obj = request.registry['hr.employee'] - employee_ids = hr_obj.search(cr, uid, [(1, "=", 1)]) + employee_ids = hr_obj.search(request.cr, request.uid, [(1, "=", 1)]) values = { - 'res_company': request.registry['res.company'].browse(cr, uid, 1), - 'employee_ids': hr_obj.browse(cr, uid, employee_ids), + 'res_company': request.registry['res.company'].browse(request.cr, request.uid, 1), + 'employee_ids': hr_obj.browse(request.cr, request.uid, employee_ids), } - html = self.render(cr, uid, "website_hr.index", values) + html = website.render(request.cr, request.uid, "website_hr.index", values) return html diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py index b1351cee682..b8ae9981be6 100644 --- a/addons/website_mail/controllers/main.py +++ b/addons/website_mail/controllers/main.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from openerp.addons.web import http from openerp.addons.web.http import request from openerp.addons.website import website import werkzeug @@ -10,15 +11,15 @@ import simplejson _months = {1:_("January"), 2:_("February"), 3:_("March"), 4:_("April"), 5:_("May"), 6:_("June"), 7:_("July"), 8:_("August"), 9:_("September"), 10:_("October"), 11:_("November"), 12:_("December")} -class website_mail(website): +class website_mail(http.Controller): - @website.route(['/blog', '/blog/', '/blog//'], type='http', auth="admin") - def blog(self, cr, uid, mail_group_id=None, blog_id=None, **post): + @http.route(['/blog', '/blog/', '/blog//'], type='http', auth="public") + def blog(self, mail_group_id=None, blog_id=None, **post): group_obj = request.registry['mail.group'] message_obj = request.registry['mail.message'] values = { - 'res_company': request.registry['res.company'].browse(cr, uid, 1), + 'res_company': request.registry['res.company'].browse(request.cr, request.uid, 1), 'blog_ids': None, 'blog_id': None, 'nav_list': dict(), @@ -27,8 +28,8 @@ class website_mail(website): 'mail_group_id': mail_group_id, } domain = mail_group_id and [("res_id", "=", mail_group_id)] or [] - - for group in message_obj.read_group(cr, uid, domain + group_obj.get_public_domain(cr, uid), ['subject', 'date'], groupby="date", orderby="create_date asc"): + + for group in message_obj.read_group(request.cr, request.uid, domain + group_obj.get_public_blog(request.cr, request.uid), ['subject', 'date'], groupby="date", orderby="create_date asc"): year = group['date'].split(" ")[1] if not values['nav_list'].get(year): values['nav_list'][year] = {'name': year, 'date_count': 0, 'months': []} @@ -36,57 +37,60 @@ class website_mail(website): values['nav_list'][year]['months'].append(group) if post.get('date'): - ids = group_obj.get_public_message_ids(cr, uid, domain=domain + [("date", ">", post.get('date'))], order="create_date asc", limit=10) + ids = group_obj.get_public_message_ids(request.cr, request.uid, domain=domain + [("date", ">", post.get('date'))], order="create_date asc", limit=10) if ids: - values['prev_date'] = message_obj.browse(cr, uid, ids.pop()).date + values['prev_date'] = message_obj.browse(request.cr, request.uid, ids.pop()).date domain += [("date", "<=", post.get('date'))] - message_ids = group_obj.get_public_message_ids(cr, uid, domain=domain, order="create_date desc", limit=11) + message_ids = group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc", limit=11) if message_ids: - values['blog_ids'] = message_obj.browse(cr, uid, message_ids) + values['blog_ids'] = message_obj.browse(request.cr, request.uid, message_ids) if len(message_ids) > 10: values['next_date'] = values['blog_ids'].pop().date if blog_id: - values['blog_id'] = message_obj.browse(cr, uid, blog_id) + values['blog_id'] = message_obj.browse(request.cr, request.uid, blog_id) comment_ids = [child_id.id for child_id in values['blog_id'].child_ids] - values['comments'] = message_obj.read(cr, uid, comment_ids, ['website_published', 'author_id', 'date', 'body']) + values['comments'] = message_obj.read(request.cr, request.uid, comment_ids, ['website_published', 'author_id', 'date', 'body']) - html = self.render(cr, uid, "website_mail.index", values) + html = website.render("website_mail.index", values) return html - @website.route(['/blog/nav'], type='http', auth="admin") - def nav(self, cr, uid, **post): - comment_ids = request.registry['mail.group'].get_public_message_ids(cr, uid, domain=safe_eval(post.get('domain')), order="create_date asc", limit=None) - return simplejson.dumps(request.registry['mail.message'].read(cr, uid, comment_ids, ['website_published', 'subject', 'res_id'])) + @http.route(['/blog/nav'], type='http', auth="public") + def nav(self, **post): + request.uid = website.get_request.uid() + comment_ids = request.registry['mail.group'].get_public_message_ids(request.cr, request.uid, domain=safe_eval(post.get('domain')), order="create_date asc", limit=None) + return simplejson.dumps(request.registry['mail.message'].read(request.cr, request.uid, comment_ids, ['website_published', 'subject', 'res_id'])) - @website.route(['/blog/publish'], type='http', auth="admin") - def publish(self, cr, uid, **post): + @http.route(['/blog/publish'], type='http', auth="public") + def publish(self, **post): + request.uid = website.get_request.uid() message_id = int(post['message_id']) message_obj = request.registry['mail.message'] - blog = message_obj.browse(cr, uid, message_id) - message_obj.write(cr, uid, [message_id], {'website_published': not blog.website_published}) - blog = message_obj.browse(cr, uid, message_id) + blog = message_obj.browse(request.cr, request.uid, message_id) + message_obj.write(request.cr, request.uid, [message_id], {'website_published': not blog.website_published}) + blog = message_obj.browse(request.cr, request.uid, message_id) return blog.website_published and "1" or "0" - @website.route(['/blog///post'], type='http', auth="admin") - def blog_post(self, cr, uid, mail_group_id=None, blog_id=None, **post): + @http.route(['/blog///post'], type='http', auth="public") + def blog_post(self, mail_group_id=None, blog_id=None, **post): + request.uid = website.get_request.uid() url = request.httprequest.host_url if post.get('body'): request.session.body = post.get('body') - if not self.isloggued(): + if not request.uid != request.public_uid: return '%s/admin#action=redirect&url=%s/blog/%s/%s/post' % (url, url, mail_group_id, blog_id) if 'body' in request.session and request.session.body: - request.registry['mail.group'].message_post(cr, uid, mail_group_id, + request.registry['mail.group'].message_post(request.cr, request.uid, mail_group_id, body=request.session.body, parent_id=blog_id, website_published=blog_id and True or False, type='comment', subtype='mt_comment', - context={'mail_create_nosubscribe': True}, + context={'mail_create_nosubsrequest.cribe': True}, ) request.session.body = False @@ -95,14 +99,15 @@ class website_mail(website): else: return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id)) - @website.route(['/blog//new'], type='http', auth="admin") - def new_blog_post(self, cr, uid, mail_group_id=None, **post): - blog_id = request.registry['mail.group'].message_post(cr, uid, mail_group_id, + @http.route(['/blog//new'], type='http', auth="public") + def new_blog_post(self, mail_group_id=None, **post): + request.uid = website.get_request.uid() + blog_id = request.registry['mail.group'].message_post(request.cr, request.uid, mail_group_id, body=_("Blog content.
Please edit this content then you can publish this blog."), subject=_("Blog title"), website_published=False, type='comment', subtype='mt_comment', - context={'mail_create_nosubscribe': True}, + context={'mail_create_nosubsrequest.cribe': True}, ) return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id)) diff --git a/addons/website_mail/mail_message.py b/addons/website_mail/mail_message.py index c3133f06f7e..b939a258ba0 100644 --- a/addons/website_mail/mail_message.py +++ b/addons/website_mail/mail_message.py @@ -32,12 +32,12 @@ class mail_message(osv.osv): class mail_group(osv.Model): _inherit = 'mail.group' - def get_public_domain(self, cr, uid, context=None): + def get_public_blog(self, cr, uid, context=None): mail_group_ids = self.search(cr, uid, [('public', '=', 'public')], context=context) return [ ("type", "in", ['comment']), ("parent_id", "=", False), ("model", "=", 'mail.group'), ("res_id", "in", mail_group_ids)] def get_public_message_ids(self, cr, uid, domain=[], order="create_date desc", limit=10, offset=0, context=None): - domain += self.get_public_domain(cr, uid, context=context) + domain += self.get_public_blog(cr, uid, context=context) return self.pool.get('mail.message').search(cr, uid, domain, order=order, limit=limit, offset=offset, context=context) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 9067dc50a4a..ecafe3d67b0 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -2,67 +2,51 @@ import simplejson from openerp.addons.web import http +from openerp.addons.website import website from openerp.addons.web.http import request -from openerp.addons.website.controllers.main import template_values class Ecommerce(http.Controller): - def get_cr_uid(self): - cr = request.cr - uid = request.uid - - if request.session._uid: - request.httprequest.session['ecommerce_partner_id'] = False - partner_id = request.registry.get('res.users').browse(cr, uid, request.session._uid).partner_id.id - else: - partner_id = request.httprequest.session.get('ecommerce_partner_id', False) - if partner_id and not request.registry.get('res.partner').search(cr, uid, [('id', '=', partner_id)]): - partner_id = None - return (cr, uid, partner_id) - def get_categories(self): - cr, uid, partner_id = self.get_cr_uid() category_obj = request.registry.get('pos.category') - category_ids = category_obj.search(cr, uid, [('parent_id', '=', False)]) - return category_obj.browse(cr, uid, category_ids) + category_ids = category_obj.search(request.cr, request.uid, [('parent_id', '=', False)]) + return category_obj.browse(request.cr, request.uid, category_ids) + + def get_current_order(self): + order = self.get_order(request.httprequest.session.get('ecommerce_order')) + request.httprequest.session['ecommerce_order'] = order.id + return order def get_order(self, order_id=None): - cr, uid, partner_id = self.get_cr_uid() + order_obj = request.registry.get('sale.order') # check if order allready exists if order_id: try: - order_obj.browse(cr, uid, order_id).pricelist_id + order_obj.browse(request.cr, request.uid, order_id).pricelist_id except: order_id = None if not order_id: fields = [k for k, v in order_obj._columns.items()] - order_value = order_obj.default_get(cr, uid, fields) - order_value['partner_id'] = partner_id or request.registry.get('res.users').browse(cr, uid, uid).partner_id.id - order_value.update(order_obj.onchange_partner_id(cr, uid, [], uid, context={})['value']) - order_id = order_obj.create(cr, uid, order_value) - return order_obj.browse(cr, uid, order_id) + order_value = order_obj.default_get(request.cr, request.uid, fields) + order_value['partner_id'] = partner_id or request.registry.get('res.users').browse(request.cr, request.uid, request.uid).partner_id.id + order_value.update(order_obj.onchange_partner_id(request.cr, request.uid, [], request.uid, context={})['value']) + order_id = order_obj.create(request.cr, request.uid, order_value) + return order_obj.browse(request.cr, request.uid, order_id) - def get_values(self): - cr, uid, partner_id = self.get_cr_uid() - - order = self.get_order(request.httprequest.session.get('ecommerce_order')) - request.httprequest.session['ecommerce_order'] = order.id - - values = template_values() - values.update({ - 'temp': 0, - 'res_company': request.registry['res.company'].browse(request.cr, 1, 1), - 'order': order, + def render(self, template, values={}): + _values = { + 'order': self.get_current_order(), 'categories': self.get_categories(), - }) - return values + } + _values.update(values) + return website.render(template, _values) def recommended_product(self, my_pids): if not my_pids: return [] - cr, uid, partner_id = self.get_cr_uid() + my_pids = str(my_pids)[1:-1] product_ids = [] query = """ @@ -76,99 +60,91 @@ class Ecommerce(http.Controller): ORDER BY COUNT(sol.order_id) DESC LIMIT 8 """ % (my_pids, my_pids) - cr.execute(query) - for p in cr.fetchall(): + request.cr.execute(query) + for p in request.cr.fetchall(): product_ids.append(p[0]) - return request.registry.get('product.product').browse(cr, uid, product_ids) + return request.registry.get('product.product').browse(request.cr, request.uid, product_ids) @http.route(['/shop', '/shop/category/'], type='http', auth="admin") def category(self, cat_id=0, offset=0, **post): - values = self.get_values() - cr, uid, partner_id = self.get_cr_uid() domain = [] if post.get("search"): - domain += ['|', '|', ('name', 'ilike', "%%%s%%" % post.get("search")), ('description', 'ilike', "%%%s%%" % post.get("search")), ('pos_categ_id.name', 'ilike', "%%%s%%" % post.get("search"))] + domain += ['|', '|', ('name', 'ilike', "%%%s%%" % post.get("search")), ('desrequest.cription', 'ilike', "%%%s%%" % post.get("search")), ('pos_categ_id.name', 'ilike', "%%%s%%" % post.get("search"))] if cat_id: cat_id = cat_id and int(cat_id) or 0 domain = [('pos_categ_id.id', 'child_of', cat_id)] + domain - category_obj = request.registry.get('pos.category') product_obj = request.registry.get('product.product') - category_ids = category_obj.search(cr, uid, [('parent_id', '=', False)]) - product_ids = product_obj.search(cr, uid, domain or [(1, '=', 1)], limit=20, offset=offset) + product_ids = product_obj.search(request.cr, request.uid, domain or [(1, '=', 1)], limit=20, offset=offset) - values.update({ + values = { 'current_category': cat_id, - 'categories': category_obj.browse(cr, uid, category_ids), - 'products': product_obj.browse(cr, uid, product_ids), + 'products': product_obj.browse(request.cr, request.uid, product_ids), 'search': post.get("search"), - }) - html = request.registry.get("ir.ui.view").render(cr, uid, "website_sale.products", values) + } + html = self.render("website_sale.products", values) return html @http.route(['/shop/product/'], type='http', auth="admin") def product(self, cat_id=0, product_id=0): - values = self.get_values() - cr, uid, partner_id = self.get_cr_uid() + order = self.get_current_order() product_id = product_id and int(product_id) or 0 product_obj = request.registry.get('product.product') - line = [line for line in values['order'].order_line if line.product_id.id == product_id] + line = [line for line in order.order_line if line.product_id.id == product_id] quantity = line and int(line[0].product_uom_qty) or 0 - values.update({ - 'product': product_obj.browse(cr, uid, product_id), + values = { + 'product': product_obj.browse(request.cr, request.uid, product_id), 'quantity': quantity, 'recommended_products': self.recommended_product([product_id]), - }) - html = request.registry.get("ir.ui.view").render(cr, uid, "website_sale.product", values) + } + html = self.render("website_sale.product", values) return html @http.route(['/shop/mycart'], type='http', auth="admin") def mycart(self, **post): - cr, uid, partner_id = self.get_cr_uid() - values = self.get_values() + order = self.get_current_order() if post.get('code'): pricelist_obj = request.registry.get('product.pricelist') - order_obj = request.registry.get('sale.order') - pricelist_ids = pricelist_obj.search(cr, uid, [('code', '=', post.get('code'))]) + pricelist_ids = pricelist_obj.search(request.cr, request.uid, [('code', '=', post.get('code'))]) if pricelist_ids: - values["order"].write({'pricelist_id': pricelist_ids[0]}) + order.write({'pricelist_id': pricelist_ids[0]}) - my_pids = [line.product_id.id for line in values['order'].order_line] - values["recommended_products"] = self.recommended_product(my_pids) + my_pids = [line.product_id.id for line in order.order_line] + values= {"recommended_products": self.recommended_product(my_pids)} - html = request.registry.get("ir.ui.view").render(cr, uid, "website_sale.mycart", values) + html = self.render("website_sale.mycart", values) return html @http.route(['/shop/add_cart'], type='http', auth="admin") def add_cart(self, product_id=0, remove=False): - cr, uid, partner_id = self.get_cr_uid() - values = self.get_values() + context = {} order_obj = request.registry.get('sale.order') order_line_obj = request.registry.get('sale.order.line') + user_obj = request.registry.get('res.users') product_id = product_id and int(product_id) or 0 - order = values['order'] + order = self.get_current_order() quantity = 0 # values initialisation - order_line_ids = order_line_obj.search(cr, uid, [('order_id', '=', order.id), ('product_id', '=', product_id)], context=context) + order_line_ids = order_line_obj.search(request.cr, request.uid, [('order_id', '=', order.id), ('product_id', '=', product_id)], context=context) values = {} if order_line_ids: - order_line = order_line_obj.read(cr, uid, order_line_ids, [], context=context)[0] + order_line = order_line_obj.read(request.cr, request.uid, order_line_ids, [], context=context)[0] quantity = order_line['product_uom_qty'] + (remove and -1 or 1) if quantity <= 0: - order_line_obj.unlink(cr, uid, order_line_ids, context=context) + order_line_obj.unlink(request.cr, request.uid, order_line_ids, context=context) else: fields = [k for k, v in order_line_obj._columns.items()] - values = order_line_obj.default_get(cr, uid, fields, context=context) + values = order_line_obj.default_get(request.cr, request.uid, fields, context=context) quantity = 1 values['product_uom_qty'] = quantity values['product_id'] = product_id @@ -177,16 +153,16 @@ class Ecommerce(http.Controller): # change and record value if quantity: pricelist_id = order.pricelist_id and order.pricelist_id.id or False - values.update(order_line_obj.product_id_change(cr, uid, [], pricelist_id, product_id, - partner_id=partner_id or request.registry.get('res.users').browse(cr, uid, uid).partner_id.id, + values.update(order_line_obj.product_id_change(request.cr, request.uid, [], pricelist_id, product_id, + partner_id=user_obj.browse(request.cr, request.uid, request.uid).partner_id.id, context=context)['value']) if order_line_ids: - order_line_obj.write(cr, uid, order_line_ids, values, context=context) + order_line_obj.write(request.cr, request.uid, order_line_ids, values, context=context) else: - order_line_id = order_line_obj.create(cr, uid, values, context=context) + order_line_id = order_line_obj.create(request.cr, request.uid, values, context=context) order.write({'order_line': [(4, order_line_id)]}, context=context) - html = request.registry.get("ir.ui.view").render(cr, uid, "website_sale.total", self.get_values()) + html = self.render("website_sale.total", self.get_values()) return simplejson.dumps({"quantity": quantity, "totalHTML": html}) @@ -196,9 +172,7 @@ class Ecommerce(http.Controller): @http.route(['/shop/checkout'], type='http', auth="admin") def checkout(self, **post): - cr, uid, partner_id = self.get_cr_uid() - values = self.get_values() - order = values['order'] + order = self.get_current_order() if order.state != 'draft': return self.confirmed(**post) @@ -211,41 +185,38 @@ class Ecommerce(http.Controller): country_state_obj = request.registry.get('res.country.state') payment_obj = request.registry.get('portal.payment.acquirer') - values['partner'] = False + values = {'partner': False} - if post.get("login"): - user_id = user_obj.login(cr, post.get("login"), post.get("password")) - partner_id = user_obj.browse(cr, uid, user_id).partner_id.id - - if partner_id: - values['partner'] = partner_obj.browse(cr, uid, partner_id) - shipping_ids = partner_obj.search(cr, uid, [("parent_id", "=", partner_id), ('type', "=", 'delivery')]) + if request.uid != request.public_uid: + values['partner'] = partner_obj.browse(request.cr, request.uid, partner_id) + shipping_ids = partner_obj.search(request.cr, request.uid, [("parent_id", "=", partner_id), ('type', "=", 'delivery')]) values['shipping'] = None if shipping_ids: - values['shipping'] = partner_obj.browse(cr, uid, shipping_ids[0]) + values['shipping'] = partner_obj.browse(request.cr, request.uid, shipping_ids[0]) - values['countries'] = country_obj.browse(cr, uid, country_obj.search(cr, uid, [(1, "=", 1)])) - values['states'] = country_state_obj.browse(cr, uid, country_state_obj.search(cr, uid, [(1, "=", 1)])) + values['countries'] = country_obj.browse(request.cr, request.uid, country_obj.search(request.cr, request.uid, [(1, "=", 1)])) + values['states'] = country_state_obj.browse(request.cr, request.uid, country_state_obj.search(request.cr, request.uid, [(1, "=", 1)])) - payment_ids = payment_obj.search(cr, uid, [('visible', '=', True)]) - values['payments'] = payment_obj.browse(cr, uid, payment_ids) + payment_ids = payment_obj.search(request.cr, request.uid, [('visible', '=', True)]) + values['payments'] = payment_obj.browse(request.cr, request.uid, payment_ids) for payment in values['payments']: - content = payment_obj.render(cr, uid, payment.id, order, order.name, order.pricelist_id.currency_id, order.amount_total) + content = payment_obj.render(request.cr, request.uid, payment.id, order, order.name, order.pricelist_id.currency_id, order.amount_total) payment._content = content - return request.registry.get("ir.ui.view").render(cr, uid, "website_sale.checkout", values) + return self.render("website_sale.checkout", values) @http.route(['/shop/confirm_order'], type='http', auth="admin") def confirm_order(self, **post): - cr, uid, partner_id = self.get_cr_uid() - values = self.get_values() + order = self.get_current_order() + json = {'error': [], 'validation': False} partner_obj = request.registry.get('res.partner') + user_obj = request.registry.get('res.users') - if values['order'].state != 'draft': + if order.state != 'draft': json['validation'] = True return json - if not values['order'].order_line: + if not order.order_line: json['error'].append("empty_cart") return json @@ -262,10 +233,10 @@ class Ecommerce(http.Controller): # search or create company company_id = None if post['company']: - company_ids = partner_obj.search(cr, uid, [("name", "ilike", post['company']), ('is_company', '=', True)]) + company_ids = partner_obj.search(request.cr, request.uid, [("name", "ilike", post['company']), ('is_company', '=', True)]) company_id = company_ids and company_ids[0] or None if not company_id: - company_id = partner_obj.create(cr, uid, {'name': post['company'], 'is_company': True}) + company_id = partner_obj.create(request.cr, request.uid, {'name': post['company'], 'is_company': True}) partner_value = { 'fax': post['fax'], @@ -279,10 +250,11 @@ class Ecommerce(http.Controller): 'country_id': post['country_id'], 'state_id': post['state_id'], } - if partner_id: - partner_obj.write(cr, uid, [partner_id], partner_value) + if request.uid != request.public_uid: + partner_id = user_obj.browse(request.cr, request.uid, request.uid).partner_id.id + partner_obj.write(request.cr, request.uid, [partner_id], partner_value) else: - partner_id = partner_obj.create(cr, uid, partner_value) + partner_id = partner_obj.create(request.cr, 1, partner_value) shipping_id = None if 'shipping_name' in post: @@ -300,12 +272,12 @@ class Ecommerce(http.Controller): } domain = [(key, '_id' in key and '=' or 'ilike', '_id' in key and int(value) or value) for key, value in shipping_value.items() if key in required_field + ["type", "parent_id"]] - shipping_ids = partner_obj.search(cr, uid, domain) + shipping_ids = partner_obj.search(request.cr, request.uid, domain) if shipping_ids: shipping_id = shipping_ids[0] - partner_obj.write(cr, uid, [shipping_id], shipping_value) + partner_obj.write(request.cr, request.uid, [shipping_id], shipping_value) else: - shipping_id = partner_obj.create(cr, uid, shipping_value) + shipping_id = partner_obj.create(request.cr, request.uid, shipping_value) order_value = { 'state': 'progress', @@ -313,18 +285,17 @@ class Ecommerce(http.Controller): 'partner_invoice_id': partner_id, 'partner_shipping_id': shipping_id or partner_id } - order_value.update(request.registry.get('sale.order').onchange_partner_id(cr, uid, [], uid, context={})['value']) - values['order'].write(order_value) + order_value.update(request.registry.get('sale.order').onchange_partner_id(request.cr, request.uid, [], request.uid, context={})['value']) + order.write(order_value) json['validation'] = True return simplejson.dumps(json) @http.route(['/shop/confirmed'], type='http', auth="admin") def confirmed(self, **post): - cr, uid, partner_id = self.get_cr_uid() if request.httprequest.session.get('ecommerce_order'): - order = self.get_order(request.httprequest.session.get('ecommerce_order')) + order = self.get_current_order() if order.state != 'draft': request.httprequest.session['ecommerce_order_old'] = order.id request.httprequest.session['ecommerce_order'] = None @@ -333,13 +304,11 @@ class Ecommerce(http.Controller): if not order_old.order_line: return self.mycart(**post) - values = template_values() - values.update({ + values = { 'temp': 0, - 'res_company': request.registry['res.company'].browse(request.cr, 1, 1), 'order': order_old, 'categories': self.get_categories(), - }) - return request.registry.get("ir.ui.view").render(cr, uid, "website_sale.confirmed", values) + } + return self.render("website_sale.confirmed", values) # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: