[IMP] website_sale: default value in checkout

bzr revid: chm@openerp.com-20130723151607-w4blimvr7f40rlzg
This commit is contained in:
Christophe Matthieu 2013-07-23 17:16:07 +02:00
parent 38c30dc063
commit 2f97f8b5b7
7 changed files with 74 additions and 42 deletions

View File

@ -190,7 +190,7 @@ $(function(){
* If can't go back in history stack, will go back to home.
*/
instance.web.ActionGoBack = function(parent, action) {
window.history.back();
window.location.href = document.referrer;
};
instance.web.client_actions.add("goback", "instance.web.ActionGoBack");

View File

@ -70,6 +70,7 @@
<link rel='stylesheet' href='/website/static/src/css/snippets.css'/>
<script type="text/javascript" src="/website/static/src/js/website_bootstrap.js"></script>
</t>
<t t-raw="head"/>
</head>
<body class="oe_website oe_styling_v8">
<header class="oe_website_header">

View File

@ -194,6 +194,8 @@ class Ecommerce(http.Controller):
values = self.get_values()
partner_obj = request.registry.get('res.partner')
user_obj = request.registry.get('res.users')
country_obj = request.registry.get('res.country')
obj_data = request.registry.get('ir.model.data')
values['partner'] = False
@ -204,6 +206,13 @@ class Ecommerce(http.Controller):
if partner_id:
values['partner'] = partner_obj.browse(cr, uid, partner_id)
shipping_category_id = obj_data.get_object_reference(cr, uid, 'website_sale', 'shipping_address')[1]
shipping_ids = partner_obj.search(cr, uid, [("parent_id", "=", partner_id), ("category_id", "=", shipping_category_id)])
shipping_id = shipping_ids and shipping_ids[0] or None
values['shipping'] = partner_obj.browse(cr, uid, shipping_id)
values['countries'] = country_obj.browse(cr, uid, country_obj.search(cr, uid, [(1, "=", 1)]))
return request.registry.get("ir.ui.view").render(cr, uid, "website_sale.checkout", values)
@http.route(['/shop/confirm_order'], type='http', auth="admin")
@ -214,11 +223,11 @@ class Ecommerce(http.Controller):
# check values
json = {'error': []}
required_field = ['tel', 'zip', 'email', 'state', 'street', 'city', 'name']
required_field = ['phone', 'zip', 'email', 'street', 'city', 'name', 'country_id']
for key in required_field:
if not post[key]:
if not post.get(key):
json['error'].append(key)
if 'shipping_name' in post and key != 'email' and not post["shipping_%s" % key]:
if 'shipping_name' in post and key != 'email' and not post.get("shipping_%s" % key):
json['error'].append("shipping_%s" % key)
if json['error']:
return simplejson.dumps(json)
@ -226,18 +235,22 @@ class Ecommerce(http.Controller):
# search or create company
if post['company']:
pass
if 'shipping_company' in post and post['shipping_company']:
if 'shipping_name' in post and post['shipping_company']:
pass
if post['state']:
pass
if 'shipping_name' in post and post['shipping_state']:
pass
partner_value = {
'fax': post['fax'],
'tel': post['tel'],
'phone': post['phone'],
'zip': post['zip'],
'email': post['email'],
'state': post['state'],
'street': post['street'],
'city': post['city'],
'name': post['name'],
'country_id': post['country_id'],
}
if partner_id:
partner_obj.write(cr, uid, [partner_id], partner_value)
@ -245,18 +258,18 @@ class Ecommerce(http.Controller):
partner_id = partner_obj.create(cr, uid, partner_value)
if 'shipping_name' in post:
shipping_category_id = obj_data.get_object_reference(cr, uid, 'website_sale', 'shipping_address')[1]
shipping_value = {
'fax': post['shipping_fax'],
'tel': post['shipping_tel'],
'phone': post['shipping_phone'],
'zip': post['shipping_zip'],
'state': post['shipping_state'],
'street': post['shipping_street'],
'city': post['shipping_city'],
'name': post['shipping_name'],
'parent_id': partner_id,
'category_id': (4, shipping_category_id)
'category_id': [(4, shipping_category_id)],
'country_id': post['shipping_country_id'],
}
shipping_category_id = obj_data.get_object_reference(cr, uid, 'website_sale', 'shipping_address')[1]
shipping_ids = partner_obj.search(cr, uid, [("parent_id", "=", partner_id), ("category_id", "=", shipping_category_id)])
shipping_id = shipping_ids and shipping_ids[0] or None
if shipping_id:

View File

@ -147,7 +147,7 @@
max-width: 64px;
max-height: 64px;
}
.oe_ecommerce .oe_checkout .css_required input {
.oe_ecommerce .oe_checkout .css_required input, .oe_ecommerce .oe_checkout .css_required select {
background-color: #d2d2ff !important;
}
.oe_ecommerce .oe_checkout h4 {
@ -160,7 +160,7 @@
.oe_ecommerce .oe_checkout input[type="image"] {
height: 30px;
}
.oe_ecommerce .oe_checkout label > input:not([type="radio"]):not([type="checkbox"]), .oe_ecommerce .oe_checkout label > div {
.oe_ecommerce .oe_checkout label > input:not([type="radio"]):not([type="checkbox"]), .oe_ecommerce .oe_checkout label > div, .oe_ecommerce .oe_checkout label > select {
display: block;
margin-top: 3px;
}

View File

@ -111,7 +111,7 @@
max-height: 64px
.oe_checkout
.css_required
input
input, select
background-color: #d2d2ff !important
h4
border-bottom: 1px solid #ddd
@ -121,7 +121,7 @@
input[type="image"]
height: 30px
label
> input:not([type="radio"]):not([type="checkbox"]), > div
> input:not([type="radio"]):not([type="checkbox"]), > div, > select
display: block
margin-top: 3px
select

View File

@ -28,7 +28,7 @@ $(document).ready(function () {
});
$(".oe_ecommerce .js_error_payment").click(function(e) {
var values = {};
$checkout.find(".js_inputs:not(:hidden) input:not(:checkbox), .js_signin_modal input").each(function() {
$checkout.find(".js_inputs:not(:hidden) input:not(:checkbox), .js_inputs:not(:hidden) select, .js_signin_modal input").each(function() {
values[$(this).attr("name")] = $(this).val();
});
$checkout.find("input").css("border", "");

View File

@ -25,9 +25,13 @@
<template id="page">
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/ecommerce.js"></script>
<link rel='stylesheet' href='/website_sale/static/src/css/ecommerce.css'/>
<t t-raw="head"/>
</t>
<t t-set="title">Shop - <t t-raw="title">Categories</t></t>
<div class="container oe_ecommerce">
<script type="text/javascript" src="/website_sale/static/src/js/ecommerce.js"></script>
<div class="row">
<div class="span4">
<ul class="nav nav-list">
@ -66,7 +70,7 @@
<t t-set="shop_content">
<div class="oe_search">
<form action="/shop" method="get" class="navbar-search">
<input type="text" name="search" class="search-query span4" placeholder="Search" t-att-value="search or ''"/>
<input type="text" name="search" class="search-query span4" placeholder="Search" t-att-value="search or '' or ''"/>
<button type="submit" class="btn">Submit</button>
</form>
</div>
@ -174,9 +178,13 @@
<template id="checkout">
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/ecommerce.js"></script>
<link rel='stylesheet' href='/website_sale/static/src/css/ecommerce.css'/>
<t t-raw="head"/>
</t>
<t t-set="title">Shop - Checkout</t>
<div class="container oe_ecommerce">
<script type="text/javascript" src="/website_sale/static/src/js/ecommerce.js"></script>
<div class="row">
<div class="span4 oe_total">
<table class="table table-condensed" t-if="order.order_line">
@ -195,32 +203,42 @@
</table>
</div>
<div class="span8 oe_checkout">
<div class="js_inputs">
<a href="/admin#action=goback" class="btn btn-primary">Log me, I have an account</a>
<div class="js_inputs row">
<a t-if="not partner" href="/admin#action=goback" class="btn btn-primary">Log me, I have an account</a>
<h3 class="span8">Billing Information</h3>
<label class="span8 css_required">Name and firstname<input class="span7" type="text" name="name" placeholder="Name and firstname"/></label>
<label class="span4 css_required">Telephone<input type="tel" name="tel" placeholder="Telephone"/></label>
<label class="span4">Fax<input type="tel" name="fax" placeholder="Fax"/></label>
<label class="span4">Company<input type="text" name="company" placeholder="Company"/></label>
<label class="span4 css_required">Email address<input type="email" name="email" placeholder="Email address"/></label>
<label class="span8 css_required">Street<input class="span7" type="text" name="street" placeholder="Street address"/></label>
<label class="span4 css_required">City<input type="text" name="city" placeholder="City"/></label>
<label class="span4 css_required">State / Province<input type="text" name="state" placeholder="State/Province"/></label>
<label class="span4 css_required">Zip / Postal Code<input type="text" name="zip" placeholder="Zip/Postal Code"/></label>
<label class="span4 css_required">Country<input type="text" name="state" placeholder="Country"/></label>
<label class="checkbox">Ship to different address<input type="checkbox" name="shipping_different"/></label>
<label class="span8 css_required">Name and firstname<input class="span7" type="text" name="name" placeholder="Name and firstname" t-att-value="partner.name or ''"/></label>
<label class="span4 css_required">Telephone<input type="tel" name="phone" placeholder="Telephone" t-att-value="partner.phone or ''"/></label>
<label class="span4">Fax<input type="tel" name="fax" placeholder="Fax" t-att-value="partner.fax or ''"/></label>
<label class="span4">Company<input type="text" name="company" placeholder="Company" t-att-value="partner.parent_id and partner.parent_id.name or ''"/></label>
<label class="span4 css_required">Email address<input type="email" name="email" placeholder="Email address" t-att-value="partner.email or ''"/></label>
<label class="span8 css_required">Street<input class="span7" type="text" name="street" placeholder="Street address" t-att-value="partner.street or ''"/></label>
<label class="span4 css_required">City<input type="text" name="city" placeholder="City" t-att-value="partner.city or ''"/></label>
<label class="span4">State / Province<input type="text" name="state" placeholder="State/Province" t-att-value="partner.state or ''"/></label>
<label class="span4 css_required">Zip / Postal Code<input type="text" name="zip" placeholder="Zip/Postal Code" t-att-value="partner.zip or ''"/></label>
<label class="span4 css_required">Country <select name="country_id">
<option value="">Country...</option>
<t t-foreach="countries or []" t-as="country">
<option t-att-value="country.id" t-att-selected="partner and partner.country_id and country.id == partner.country_id.id or None"><t t-esc="country.name"/></option>
</t>
</select></label>
<label class="span8 checkbox">Ship to different address<input type="checkbox" name="shipping_different"/></label>
</div>
<div class="js_inputs js_shipping" style="display:none">
<div class="js_inputs js_shipping row" style="display:none">
<h3 class="span8 oe_shipping" style="display:none">Shipping Information</h3>
<label class="span8 css_required">Name and firstname<input class="span7" type="text" name="shipping_name" placeholder="Name and firstname"/></label>
<label class="span4 css_required">Telephone<input type="tel" name="shipping_tel" placeholder="Telephone"/></label>
<label class="span4">Fax<input type="tel" name="shipping_fax" placeholder="Fax"/></label>
<label class="span4">Company<input type="text" name="shipping_company" placeholder="Company"/></label>
<label class="span8 css_required">Street<input class="span7" type="text" name="shipping_street" placeholder="Street address"/></label>
<label class="span4 css_required">City<input type="text" name="shipping_city" placeholder="City"/></label>
<label class="span4 css_required">State / Province<input type="text" name="shipping_state" placeholder="State/Province"/></label>
<label class="span4 css_required">Zip / Postal Code<input type="text" name="shipping_zip" placeholder="Zip/Postal Code"/></label>
<label class="span4 css_required">Country<input type="text" name="shipping_state" placeholder="Country"/></label>
<label class="span8 css_required">Name and firstname<input class="span7" type="text" name="shipping_name" placeholder="Name and firstname" t-att-value="shipping.name or ''"/></label>
<label class="span4 css_required">Telephone<input type="tel" name="shipping_phone" placeholder="Telephone" t-att-value="shipping.phone or ''"/></label>
<label class="span4">Fax<input type="tel" name="shipping_fax" placeholder="Fax" t-att-value="shipping.phone or ''"/></label>
<label class="span4">Company<input type="text" name="shipping_company" placeholder="Company" t-att-value="shipping.parent_id and shipping.parent_id.name or ''"/></label>
<label class="span8 css_required">Street<input class="span7" type="text" name="shipping_street" placeholder="Street address" t-att-value="shipping.street or ''"/></label>
<label class="span4 css_required">City<input type="text" name="shipping_city" placeholder="City" t-att-value="shipping.city or ''"/></label>
<label class="span4">State / Province<input type="text" name="shipping_state" placeholder="State/Province" t-att-value="shipping.state or ''"/></label>
<label class="span4 css_required">Zip / Postal Code<input type="text" name="shipping_zip" placeholder="Zip/Postal Code" t-att-value="shipping.zip or ''"/></label>
<label class="span4 css_required">Country <select name="shipping_country_id">
<option value="">Country...</option>
<t t-foreach="countries or []" t-as="country">
<option t-att-value="country.id" t-att-selected="shipping and shipping.country_id and country.id == shipping.country_id.id or None"><t t-esc="country.name"/></option>
</t>
</select></label>
</div>
<div class="js_payments css_payments">
<div class="css_payment">