1 # -*- coding: utf-8 -*-
4 from openerp import SUPERUSER_ID
5 from openerp.osv import osv
6 from openerp.addons.web.http import request
9 class Website(osv.Model):
12 def _get_order(self, cr, uid, order_id=None, context=None):
13 order_obj = request.registry.get('sale.order')
14 # check if order allready exists and have access
16 if not order_id in order_obj.exists(cr, uid, [order_id], context=context):
19 order = order_obj.browse(cr, uid, order_id, context=context)
25 fields = [k for k, v in order_obj._columns.items()]
26 order_value = order_obj.default_get(cr, SUPERUSER_ID, fields, context=context)
27 if request.httprequest.session.get('ecommerce_pricelist'):
28 order_value['pricelist_id'] = request.httprequest.session['ecommerce_pricelist']
29 order_value['partner_id'] = request.registry.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context).partner_id.id
30 order_value.update(order_obj.onchange_partner_id(cr, SUPERUSER_ID, [], order_value['partner_id'], context=context)['value'])
32 # add website_session_id key for access rules
33 if not request.httprequest.session.get('website_session_id'):
34 request.httprequest.session['website_session_id'] = str(uuid.uuid4())
36 order_value["website_session_id"] = request.httprequest.session['website_session_id']
37 order_id = order_obj.create(cr, SUPERUSER_ID, order_value, context=context)
38 order = order_obj.browse(cr, SUPERUSER_ID, order_id, context=context)
39 request.httprequest.session['ecommerce_order_id'] = order.id
41 return order_obj.browse(cr, uid, order_id,
42 context=dict(request.context, pricelist=order.pricelist_id.id))
44 def get_current_order(self, cr, uid, context=None):
45 if request.httprequest.session.get('ecommerce_order_id'):
46 order = self._get_order(cr, uid, order_id=request.httprequest.session['ecommerce_order_id'], context=context)
48 request.httprequest.session['ecommerce_order_id'] = False
52 def _get_transaction(self, cr, uid, tx_id=None, context=None):
53 transaction_obj = request.registry['payment.transaction']
55 tx_ids = transaction_obj.search(cr, uid, [('id', '=', tx_id), ('state', 'not in', ['cancel'])], context=context)
57 return transaction_obj.browse(cr, uid, tx_ids[0], context=context)
60 def get_current_transaction(self, cr, uid, context=None):
61 if request.httprequest.session.get('website_sale_transaction_id'):
62 tx = self._get_transaction(cr, uid, tx_id=request.httprequest.session['website_sale_transaction_id'], context=context)
64 request.httprequest.session['website_sale_transaction_id'] = False
68 def sale_reset_order(self, cr, uid, context=None):
69 request.httprequest.session.update({
70 'ecommerce_order_id': False,
71 'ecommerce_pricelist': False,
72 'website_sale_transaction_id': False,
74 request.context.update({
75 'website_sale_order': False,
76 'website_sale_transaction': False,
79 def preprocess_request(self, cr, uid, ids, request, context=None):
80 request.context.update({
81 'website_sale_order': self.get_current_order(cr, uid, context=context),
82 'website_sale_transaction': self.get_current_transaction(cr, uid, context=context)
84 return super(Website, self).preprocess_request(cr, uid, ids, request, context=None)