From ba14bbe3399cf40ccaa4127bf2b046e6777a20b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 19 Nov 2013 11:29:21 +0100 Subject: [PATCH] [MOV] website_sale: move get_order and get_current_order code into Website class and into website specific file. bzr revid: tde@openerp.com-20131119102921-ie03umd2ozasp798 --- addons/website_sale/controllers/main.py | 110 +++++---------------- addons/website_sale/controllers/website.py | 55 ++++++++++- 2 files changed, 80 insertions(+), 85 deletions(-) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index b7f5fae83f5..31aacda8de8 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -1,67 +1,13 @@ # -*- coding: utf-8 -*- import random -import uuid import simplejson import urllib -import werkzeug.exceptions - from openerp import SUPERUSER_ID -from openerp.osv import osv from openerp.addons.web import http from openerp.addons.web.http import request from openerp.addons.website.models import website -def get_order(order_id=None): - order_obj = request.registry.get('sale.order') - # check if order allready exists and have access - if order_id: - try: - order = order_obj.browse(request.cr, request.uid, order_id, context=request.context) - order.pricelist_id - if order: - return order - except: - return False - - fields = [k for k, v in order_obj._columns.items()] - order_value = order_obj.default_get(request.cr, SUPERUSER_ID, fields, context=request.context) - if request.httprequest.session.get('ecommerce_pricelist'): - order_value['pricelist_id'] = request.httprequest.session['ecommerce_pricelist'] - order_value['partner_id'] = request.registry.get('res.users').browse(request.cr, SUPERUSER_ID, request.uid, context=request.context).partner_id.id - order_value.update(order_obj.onchange_partner_id(request.cr, SUPERUSER_ID, [], order_value['partner_id'], context=request.context)['value']) - - # add website_session_id key for access rules - if not request.httprequest.session.get('website_session_id'): - request.httprequest.session['website_session_id'] = str(uuid.uuid4()) - - order_value["website_session_id"] = request.httprequest.session['website_session_id'] - order_id = order_obj.create(request.cr, SUPERUSER_ID, order_value, context=request.context) - order = order_obj.browse(request.cr, SUPERUSER_ID, order_id, context=request.context) - request.httprequest.session['ecommerce_order_id'] = order.id - - return order_obj.browse(request.cr, request.uid, order_id, - context=dict(request.context, pricelist=order.pricelist_id.id)) - -def get_current_order(): - if request.httprequest.session.get('ecommerce_order_id'): - order = get_order(request.httprequest.session.get('ecommerce_order_id')) - if not order: - request.httprequest.session['ecommerce_order_id'] = False - return order - else: - return False - - -class Website(osv.osv): - _inherit = "website" - - def preprocess_request(self, cr, uid, ids, request, context=None): - request.context.update({ - 'website_sale_order': get_current_order(), - }) - return super(Website, self).preprocess_request(cr, uid, ids, request, context=None) - class CheckoutInfo: mandatory_billing_fields = ["name", "phone", "email", "street", "city", "country_id", "zip"] @@ -453,7 +399,7 @@ class Ecommerce(http.Controller): request.httprequest.session['ecommerce_pricelist'] = pricelist_id - order = get_current_order() + order = request.registry['website'].get_current_order(request.cr, request.uid, context=request.context) if order: values = {'pricelist_id': pricelist_id} values.update(order.onchange_pricelist_id(pricelist_id, None)['value']) @@ -465,9 +411,7 @@ class Ecommerce(http.Controller): order_line_obj = request.registry.get('sale.order.line') order_obj = request.registry.get('sale.order') - order = get_current_order() - if not order: - order = get_order() + order = request.registry.get('website').get_current_order(request.cr, request.uid, context=request.context) request.context = dict(request.context, pricelist=self.get_pricelist()) @@ -517,7 +461,7 @@ class Ecommerce(http.Controller): @website.route(['/shop/mycart/'], type='http', auth="public", multilang=True) def mycart(self, **post): - order = get_current_order() + order = request.registry['website'].get_current_order(request.cr, request.uid, context=request.context) prod_obj = request.registry.get('product.product') if 'promo' in post: @@ -554,7 +498,7 @@ class Ecommerce(http.Controller): @website.route(['/shop/add_cart_json/'], type='json', auth="public") def add_cart_json(self, product_id=None, order_line_id=None, remove=None): quantity = self.add_product_to_cart(product_id=product_id, order_line_id=order_line_id, number=(remove and -1 or 1)) - order = get_current_order() + order = self.registry['website'].get_current_order(request.cr, request.uid, context=request.context) return [quantity, order.get_total_quantity(), order.amount_total, request.website.render("website_sale.total", { 'website_sale_order': order }).strip()] @@ -567,7 +511,7 @@ class Ecommerce(http.Controller): def checkout(self, **post): cr, uid, context, registry = request.cr, request.uid, request.context, request.registry - order = get_current_order() + order = request.registry['website'].get_current_order(request.cr, request.uid, context=request.context) if not order or order.state != 'draft' or not order.order_line: return self.mycart(**post) @@ -618,7 +562,7 @@ class Ecommerce(http.Controller): def confirm_order(self, **post): cr, uid, context, registry = request.cr, request.uid, request.context, request.registry - order = get_current_order() + order = request.registry['website'].get_current_order(request.cr, request.uid, context=request.context) if not order or order.state != 'draft' or not order.order_line: return self.mycart(**post) @@ -661,7 +605,7 @@ class Ecommerce(http.Controller): company_id = (company_ids and company_ids[0]) or orm_parter.create(cr, SUPERUSER_ID, {'name': company_name, 'is_company': True}, context) billing_info = dict(checkout) - billing_info['parent_id'] = company_id; + billing_info['parent_id'] = company_id if not context['is_public_user']: partner_id = orm_user.browse(cr, uid, uid, context=context).partner_id.id @@ -708,7 +652,7 @@ class Ecommerce(http.Controller): def payment(self, payment_acquirer_id=None, **post): cr, uid, context = request.cr, request.uid, request.context payment_obj = request.registry.get('payment.acquirer') - order = get_current_order() + order = request.registry['website'].get_current_order(cr, uid, context=context) if not order or not order.order_line: return request.redirect("/shop/checkout/") @@ -723,14 +667,14 @@ class Ecommerce(http.Controller): 'payment_acquirer_id': payment_acquirer_id, 'order': order } - values.update( request.registry.get('sale.order')._get_website_data(request.cr, request.uid, order, request.context) ) + values.update(request.registry.get('sale.order')._get_website_data(cr, uid, order, context)) - if payment_acquirer_id: - values['validation'] = self.payment_validation(payment_acquirer_id) - if values['validation'][0] == "validated" or (values['validation'][0] == "pending" and values['validation'][1] == False): - return request.redirect("/shop/confirmation/") - elif values['validation'][0] == "refused": - values['payment_acquirer_id'] = None + # if payment_acquirer_id: + # values['validation'] = self.payment_validation(payment_acquirer_id) + # if values['validation'][0] == "validated" or (values['validation'][0] == "pending" and values['validation'][1] == False): + # return request.redirect("/shop/confirmation/") + # elif values['validation'][0] == "refused": + # values['payment_acquirer_id'] = None # fetch all registered payment means if not values['payment_acquirer_id']: @@ -765,7 +709,7 @@ class Ecommerce(http.Controller): cr, uid, context = request.cr, request.uid, request.context payment_obj = request.registry.get('payment.acquirer') transaction_obj = request.registry.get('payment.transaction') - order = get_current_order() + order = request.registry['website'].get_current_order(request.cr, request.uid, context=request.context) if not order or not order.order_line or not acquirer_id: return request.redirect("/shop/checkout/") @@ -788,20 +732,20 @@ class Ecommerce(http.Controller): acquirer_total_url = '%s?%s' % (acquirer_form_post_url, urllib.urlencode(post)) return request.redirect(acquirer_total_url) - @website.route(['/shop/payment_validation/'], type='json', auth="public", multilang=True) - def payment_validation(self, payment_acquirer_id=None, **post): - payment_obj = request.registry.get('payment.acquirer') - order = get_current_order() - return payment_obj.validate_payement(request.cr, request.uid, int(payment_acquirer_id), - object=order, - reference=order.name, - currency=order.pricelist_id.currency_id, - amount=order.amount_total, - context=request.context) + # @website.route(['/shop/payment_validation/'], type='json', auth="public", multilang=True) + # def payment_validation(self, payment_acquirer_id=None, **post): + # payment_obj = request.registry.get('payment.acquirer') + # order = request.registry['website'].get_current_order(request.cr, request.uid, context=request.context) + # return payment_obj.validate_payement(request.cr, request.uid, int(payment_acquirer_id), + # object=order, + # reference=order.name, + # currency=order.pricelist_id.currency_id, + # amount=order.amount_total, + # context=request.context) @website.route(['/shop/confirmation/'], type='http', auth="public", multilang=True) def payment_confirmation(self, **post): - order = get_current_order() + order = request.registry['website'].get_current_order(request.cr, request.uid, context=request.context) if not order or not order.order_line: return request.redirect("/shop/") diff --git a/addons/website_sale/controllers/website.py b/addons/website_sale/controllers/website.py index 7a2cb15c425..2a7cc24d303 100644 --- a/addons/website_sale/controllers/website.py +++ b/addons/website_sale/controllers/website.py @@ -1,7 +1,58 @@ # -*- coding: utf-8 -*- +import uuid + +from openerp import SUPERUSER_ID +from openerp.osv import osv +from openerp.addons.web.http import request -class Website(osv.osv): +class Website(osv.Model): _inherit = "website" - pass + def _get_order(self, cr, uid, order_id=None, context=None): + order_obj = request.registry.get('sale.order') + # check if order allready exists and have access + if order_id: + try: + order = order_obj.browse(cr, uid, order_id, context=context) + order.pricelist_id + if order: + return order + except: + return False + + fields = [k for k, v in order_obj._columns.items()] + order_value = order_obj.default_get(cr, SUPERUSER_ID, fields, context=context) + if request.httprequest.session.get('ecommerce_pricelist'): + order_value['pricelist_id'] = request.httprequest.session['ecommerce_pricelist'] + order_value['partner_id'] = request.registry.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context).partner_id.id + order_value.update(order_obj.onchange_partner_id(cr, SUPERUSER_ID, [], order_value['partner_id'], context=context)['value']) + + # add website_session_id key for access rules + if not request.httprequest.session.get('website_session_id'): + request.httprequest.session['website_session_id'] = str(uuid.uuid4()) + + order_value["website_session_id"] = request.httprequest.session['website_session_id'] + order_id = order_obj.create(cr, SUPERUSER_ID, order_value, context=context) + order = order_obj.browse(cr, SUPERUSER_ID, order_id, context=context) + request.httprequest.session['ecommerce_order_id'] = order.id + + return order_obj.browse(cr, uid, order_id, + context=dict(request.context, pricelist=order.pricelist_id.id)) + + def get_current_order(self, cr, uid, context=None): + if request.httprequest.session.get('ecommerce_order_id'): + order = self._get_order(cr, uid, order_id=request.httprequest.session['ecommerce_order_id'], context=context) + if not order: + request.httprequest.session['ecommerce_order_id'] = False + return order + return False + + def get_current_transaction(self, cr, uid, context=None): + pass + + def preprocess_request(self, cr, uid, ids, request, context=None): + request.context.update({ + 'website_sale_order': self.get_current_order(cr, uid, context=context), + }) + return super(Website, self).preprocess_request(cr, uid, ids, request, context=None)