[FIX] ecommerce confirm order with create partner

bzr revid: chm@openerp.com-20130702132940-wu0wh4uf4hussjdl
This commit is contained in:
Christophe Matthieu 2013-07-02 15:29:40 +02:00
parent dbd6faed1c
commit 0049586074
2 changed files with 112 additions and 34 deletions

View File

@ -6,23 +6,19 @@ from openerp.addons.web import http
from openerp.addons.web.http import request
from werkzeug.exceptions import NotFound
import urllib
from openerp.addons.website.controllers.main import template_values
class Ecommerce(http.Controller):
def get_cr_uid(self):
cr = request.cr
try:
request.session.check_security()
uid = request.session._uid
except http.SessionExpiredException:
uid = openerp.SUPERUSER_ID
partner_id = request.session.variables.get('ecommerce_partner_id', False)
if not partner_id and uid != 1:
uid = request.session._uid or openerp.SUPERUSER_ID
partner_id = request.httprequest.session.get('ecommerce_partner_id', False)
if not partner_id:
partner_id = request.registry.get('res.users').browse(cr, uid, uid).partner_id.id
request.session.variables['ecommerce_partner_id'] = partner_id
if uid != 1:
request.httprequest.session['ecommerce_partner_id'] = partner_id
return (cr, uid, partner_id)
def get_values(self):
@ -31,7 +27,7 @@ class Ecommerce(http.Controller):
category_obj = request.registry.get('pos.category')
context = {}
order_id = request.session.variables.get('ecommerce')
order_id = request.httprequest.session.get('ecommerce_order')
# check if order allready exists
try:
order_obj.browse(cr, uid, order_id).pricelist_id
@ -44,19 +40,17 @@ class Ecommerce(http.Controller):
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=context)['value'])
order_id = order_obj.create(cr, uid, order_value, context=context)
request.session.variables['ecommerce'] = order_id
request.httprequest.session['ecommerce_order'] = order_id
category_ids = category_obj.search(cr, uid, [('parent_id', '=', False)])
values = {
values = template_values()
values.update({
'temp': 0,
'request': request,
'registry': request.registry,
'cr': cr,
'uid': uid,
'res_company': request.registry['res.company'].browse(request.cr, uid, 1, context=context),
'order': order_obj.browse(cr, uid, order_id),
'categories': category_obj.browse(cr, uid, category_ids),
}
})
return values
@http.route(['/shop', '/shop/category/<cat_id>'], type='http', auth="db")
@ -146,18 +140,51 @@ class Ecommerce(http.Controller):
def remove_cart(self, product_id=0):
return self.add_cart(product_id=product_id, remove=True)
@http.route(['/shop/confirm_cart'], type='http', auth="db")
def confirm_cart(self, *arg, **post):
@http.route(['/shop/customer'], type='http', auth="db")
def customer(self, *arg, **post):
cr, uid, partner_id = self.get_cr_uid()
values = self.get_values()
if post:
print post
partner_obj = request.registry.get('res.partner')
{'city': u'regfs', 'name': u'Demo User', 'zip': u'5432534', 'street2': u'', 'country_id': u'gfgfdg', 'phone': u'4523545', 'state': u'fgdgsfgdf', 'street': u'fdsfdsffdsfqsdf 54', 'email': u'demo@example.com'}
values['partner'] = partner_id and request.registry.get('res.users').browse(cr, uid, partner_id) or False
values['partner'] = False
partner_id = request.httprequest.session.get('ecommerce_partner_id')
if partner_id:
values['partner'] = partner_obj.browse(cr, uid, partner_id)
html = request.registry.get("ir.ui.view").render(cr, uid, "ecommerce.customer", values)
return html
@http.route(['/shop/confirm_cart'], type='http', auth="db")
def confirm_cart(self, *arg, **post):
cr, uid, partner_id = self.get_cr_uid()
values = self.get_values()
partner_obj = request.registry.get('res.partner')
values['partner'] = False
partner_id = request.httprequest.session.get('ecommerce_partner_id')
if post:
post['country_id'] = (request.registry.get('res.country').search(cr, uid, [('name', 'ilike', post.pop('country'))]) + [None])[0]
post['state_id'] = (request.registry.get('res.country.state').search(cr, uid, [('name', 'ilike', post.pop('state'))]) + [None])[0]
if partner_id:
partner_obj.write(cr, uid, [partner_id], post)
else:
partner_id = partner_obj.create(cr, uid, post)
values['order'].write({'partner_id': partner_id})
request.httprequest.session['ecommerce_partner_id'] = partner_id
values['partner'] = partner_obj.browse(cr, uid, partner_id)
html = request.registry.get("ir.ui.view").render(cr, uid, "ecommerce.order", values)
return html
@http.route(['/shop/confirm_order'], type='http', auth="db")
def confirm_order(self, *arg, **post):
cr, uid, partner_id = self.get_cr_uid()
values = self.get_values()
values['order'].write({'state': 'progress'})
values['partner'] = request.registry.get('res.partner').browse(cr, uid, partner_id)
html = request.registry.get("ir.ui.view").render(cr, uid, "ecommerce.thanks", values)
request.httprequest.session['ecommerce_order'] = None
return html
# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -127,6 +127,7 @@
<t t-call="ecommerce.products"/>
</t>
<t t-call="ecommerce.total"/>
<a t-if="order.order_line" href="/shop/customer"><button class="btn btn-success">Next stage</button></a>
</t>
</t>
</field>
@ -139,20 +140,18 @@
<field name="type">qweb</field>
<field name="arch" type="xml">
<div class="oe_total">
<div class="media well" t-if="order.order_line">
<a href="/shop/confirm_cart"><button class="btn btn-success">Next stage</button></a>
<table>
<div class="media well">
<table t-if="order.order_line">
<tr><td>Untaxed Amount</td><td><t t-esc="order.amount_untaxed"/></td></tr>
<tr><td>Taxes</td><td><t t-esc="order.amount_tax"/></td></tr>
<tr><td>Total</td><td><h3><t t-esc="order.amount_total"/></h3></td></tr>
</table>
</div>
<div class="media well" t-if="not order.order_line">
Your cart is empty
<span t-if="not order.order_line">Your cart is empty</span>
</div>
</div>
</field>
</record>
<!-- Page confirm my cart -->
<record id="customer" model="ir.ui.view">
@ -160,7 +159,7 @@
<field name="type">qweb</field>
<field name="arch" type="xml">
<t t-call="ecommerce.page">
<t t-set="title">Your information</t>
<t t-set="title">Your informations</t>
<t t-set="shop_content">
<form action="/shop/confirm_cart" method="post" enctype="x-www-form-urlencoded">
<div>Please enter your informations</div>
@ -173,14 +172,66 @@
<input name="street2" placeholder="Street..." t-att-value="partner and partner.street2 or ''"/><br/>
<input name="zip" required="True" placeholder="Zip-code..." t-att-value="partner and partner.zip or ''"/>
<input name="city" required="True" placeholder="City..." t-att-value="partner and partner.city or ''"/><br/>
<input name="country_id" required="True" placeholder="Country..." t-att-value="partner and partner.country_id and partner.country_id.name_get()[1] or ''"/>
<input name="state" required="True" placeholder="State..." t-att-value="partner and partner.state_id and partner.state_id.name_get()[1] or ''"/>
<input name="country" required="True" placeholder="Country..." t-att-value="partner and partner.country_id and partner.country_id.name_get()[0][1] or ''"/>
<input name="state" placeholder="State..." t-att-value="partner and partner.state_id and partner.state_id.name_get()[0][1] or ''"/>
</address>
<button class="btn btn-success">Next stage</button>
<t t-call="ecommerce.total"/>
</form>
</t>
</t>
</field>
</record>
<record id="order" model="ir.ui.view">
<field name="name">order</field>
<field name="type">qweb</field>
<field name="arch" type="xml">
<t t-call="ecommerce.page">
<t t-set="title">Order</t>
<t t-set="shop_content">
<t t-foreach="order.order_line or []" t-as="line">
<t t-set="product" t-value="line.product_id"/>
<t t-set="quantity" t-value="int(line.product_uom_qty)"/>
<div class="media oe_product">
<div class="pull-left" style="width:64px; height:64px;">
<img style="max-width:64px; max-height:64px; margin:auto;" class="media-object" t-att-src="'data:image/png;base64,' + product.image"/>
</div>
<div class="media-body">
<a t-att-href="'/shop/product/%%s' %% product.id"><h4 class="media-heading"><t t-esc="product.name"/></h4></a>
<t t-esc="product.description_sale"/>
<div><t t-esc="product.list_price"/></div>
</div>
</div>
</t>
<div class="media well">
<t t-esc="partner.name"/><br/>
<t t-esc="partner.phone"/><br/>
<t t-esc="partner.email"/><br/>
<address>
<t t-esc="partner.street"/><br/>
<t t-esc="partner.zip"/>,
<t t-esc="partner.city"/><br/>
<t t-esc="partner.country_id and partner.country_id.name_get()[0][1] or ''"/>,
<t t-esc="partner.state_id and partner.state_id.name_get()[0][1] or ''"/><br/>
</address>
</div>
<t t-call="ecommerce.total"/>
<a t-if="order.order_line" href="/shop/confirm_order"><button class="btn btn-success">Confirm order</button></a>
</t>
</t>
</field>
</record>
<record id="thanks" model="ir.ui.view">
<field name="name">thanks</field>
<field name="type">qweb</field>
<field name="arch" type="xml">
<t t-call="ecommerce.page">
<t t-set="title">Order</t>
<t t-set="shop_content">
Thanks for your sale order
</t>
</t>
</field>
</record>
</data>
</openerp>