[FIX] Misc fix + better CSS

bzr revid: fp@tinyerp.com-20140125172455-wrndhqs5b30cbwxc
This commit is contained in:
Fabien Pinckaers 2014-01-25 18:24:55 +01:00
parent b1f131c9c6
commit a73244b92e
8 changed files with 65 additions and 62 deletions

View File

@ -41,11 +41,15 @@ class sale_quote(http.Controller):
assert token == order.access_token, 'Access denied!'
body=_('Quotation viewed by customer')
self.__message_post(body, order_id, type='comment')
days = 0
if order.validity_date:
days = (datetime.datetime.strptime(order.validity_date, '%Y-%m-%d') - datetime.datetime.now()).days
values = {
'quotation': order,
'message': message,
'option': bool(filter(lambda x: not x.line_id, order.options)),
'order_valid': (not order.validity_date) or (datetime.datetime.now().strftime('%Y-%m-%d') <= order.validity_date),
'days_valid': max(days, 0)
}
return request.website.render('website_quotation.so_quotation', values)
@ -129,7 +133,7 @@ class sale_quote(http.Controller):
vals = {}
order = request.registry.get('sale.order').browse(request.cr, SUPERUSER_ID, order_id)
assert token == order.access_token, 'Access denied, wrong token!'
option_obj = request.registry.get('sale.option.line')
option_obj = request.registry.get('sale.order.option')
option = option_obj.browse(request.cr, SUPERUSER_ID, option_id)
vals.update({
'price_unit': option.price_unit,

View File

@ -291,10 +291,11 @@
<record id="website_sale_order_line_1" model="sale.quote.line">
<field name="quote_id" ref="website_quote_template_1"/>
<field name="name">Fuctional Training</field>
<field name="name">Functional Training</field>
<field name="product_id" ref="product_product_quote_1"/>
<field name="product_uom_qty">1</field>
<field name="price_unit">12950.00</field>
<field name="discount">10.00</field>
<field name="website_description" type="html">
<section data-snippet-id="title">
<h1>Online Training + Certification</h1>
@ -463,7 +464,7 @@
<field name="template_id" ref="website_quote_template_1"/>
<field name="name">Advanced CRM Functional</field>
<field name="product_id" ref="product_product_quote_3"/>
<field name="product_uom_qty">1</field>
<field name="quantity">1</field>
<field name="uom_id" ref="product.product_uom_unit"/>
<field name="price_unit">9000.00</field>
<field name="discount">10</field>
@ -569,7 +570,7 @@
<field name="template_id" ref="website_quote_template_1"/>
<field name="name">Functional Webinar</field>
<field name="product_id" ref="product_product_quote_4"/>
<field name="product_uom_qty">1</field>
<field name="quantity">1</field>
<field name="uom_id" ref="product.product_uom_unit"/>
<field name="price_unit">18000.00</field>
<field name="website_description" type="html">

View File

@ -24,6 +24,8 @@ import uuid
import time
import datetime
import openerp.addons.decimal_precision as dp
class sale_quote_template(osv.osv):
_name = "sale.quote.template"
_description = "Sale Quotation Template"
@ -32,10 +34,9 @@ class sale_quote_template(osv.osv):
'website_description': fields.html('Description'),
'quote_line': fields.one2many('sale.quote.line', 'quote_id', 'Quote Template Lines'),
'note': fields.text('Terms and conditions'),
'options': fields.one2many('sale.option.line', 'template_id', 'Optional Products Lines'),
'number_of_days': fields.integer('Quotation Period Validity'),
'options': fields.one2many('sale.quote.option', 'template_id', 'Optional Products Lines'),
'number_of_days': fields.integer('Quote Duration', help='Number of days for the validaty date computation of the quotation'),
}
def open_template(self, cr, uid, quote_id, context=None):
return {
'type': 'ir.actions.act_url',
@ -51,11 +52,13 @@ class sale_quote_line(osv.osv):
'name': fields.text('Description', required=True),
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True),
'website_description': fields.html('Line Description'),
'price_unit': fields.float('Unit Price', required=True),
'product_uom_qty': fields.float('Quantity', required=True),
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),
'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Discount')),
'product_uom_qty': fields.float('Quantity', required=True, digits_compute= dp.get_precision('Product UoS')),
}
_defaults = {
'product_uom_qty': 1,
'discount': 0.0,
}
def on_change_product_id(self, cr, uid, ids, product, context=None):
vals = {}
@ -122,6 +125,7 @@ class sale_order(osv.osv):
lines.append((0, 0, {
'name': line.name,
'price_unit': line.price_unit,
'discount': line.discount,
'product_uom_qty': line.product_uom_qty,
'product_id': line.product_id.id,
'product_uom_id': line.product_id.uom_id.id,
@ -163,10 +167,10 @@ class sale_quote_option(osv.osv):
'name': fields.text('Description', required=True, translate=True),
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)]),
'website_description': fields.html('Option Description', translate=True),
'price_unit': fields.float('Unit Price', required=True),
'discount': fields.float('Discount (%)'),
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),
'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Discount')),
'uom_id': fields.many2one('product.uom', 'Unit of Measure ', required=True),
'quantity': fields.float('Quantity', required=True),
'quantity': fields.float('Quantity', required=True, digits_compute= dp.get_precision('Product UoS')),
}
_defaults = {
'quantity': 1,
@ -182,7 +186,7 @@ class sale_quote_option(osv.osv):
})
return {'value': vals}
class sale_option_line(osv.osv):
class sale_order_option(osv.osv):
_name = "sale.order.option"
_description = "Sale Options"
_columns = {
@ -191,10 +195,11 @@ class sale_option_line(osv.osv):
'name': fields.text('Description', required=True),
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)]),
'website_description': fields.html('Line Description'),
'price_unit': fields.float('Unit Price', required=True),
'discount': fields.float('Discount (%)'),
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),
'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Discount')),
'uom_id': fields.many2one('product.uom', 'Unit of Measure ', required=True),
'quantity': fields.float('Quantity', required=True),
'quantity': fields.float('Quantity', required=True,
digits_compute= dp.get_precision('Product UoS')),
}
_defaults = {

View File

@ -5,3 +5,4 @@ access_sale_quote_line,sale.quote.line,model_sale_quote_line,base.group_sale_sal
access_sale_quote_line_manager,sale.quote.line,model_sale_quote_line,base.group_sale_manager,1,1,1,1
access_sale_quote_option,sale.quote.option,model_sale_quote_option,base.group_sale_salesman,1,0,0,0
access_sale_quote_option_manager,sale.quote.option,model_sale_quote_option,base.group_sale_manager,1,1,1,1
access_sale_order_option,sale.order.option,model_sale_order_option,base.group_sale_salesman,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
5 access_sale_quote_line_manager sale.quote.line model_sale_quote_line base.group_sale_manager 1 1 1 1
6 access_sale_quote_option sale.quote.option model_sale_quote_option base.group_sale_salesman 1 0 0 0
7 access_sale_quote_option_manager sale.quote.option model_sale_quote_option base.group_sale_manager 1 1 1 1
8 access_sale_order_option sale.order.option model_sale_order_option base.group_sale_salesman 1 1 1 1

View File

@ -1,6 +1,5 @@
.bs-sidebar {
position: fixed;
top: 110px;
z-index : 1;
background-color: #f7f5fa;
border-radius: 5px;
@ -55,19 +54,3 @@
padding : 0 !important;
}
}
#countdown {
padding-left : 10px;
padding-top: 10px;
padding-bottom: 5px;
font-size: 1.4em;
}
.day_counter{
font-size: 2.4em;
padding-left : 5px;
}
.days_left {
font-size: 1.4em;
text-align: center;
padding-left : 3px;
}

View File

@ -90,13 +90,4 @@ $(document).ready(function () {
}
});
var target_date = new Date($('#validity_date').val());
setInterval(function () {
var current_date = new Date();
var days_left = Math.floor((target_date - current_date)/86400000);
$('#countdown').html('<span><i class="fa fa-clock-o fa-2x"/><span class="day_counter">'+((days_left > 0) ? days_left : 0)+'</span><small class="days_left">Day(s)</small></span>')
}, 1000);
//vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
});

View File

@ -157,9 +157,10 @@
<a t-if="order_valid" class="btn btn-primary btn-block fa fa-check" data-toggle="modal" data-target="#modelaccept">
Accept Order
</a>
<a t-if="not order_valid">
<strong>This offer expired!.</strong> <a href="#discussion">Contact us</a> for new quote.
</a>
<a t-if="not order_valid">
<strong>This offer expired!.</strong>
<br/><a href="#discussion">Contact us</a> for new quote.
</a>
<div class="mt8">
<a type="submit" href="#discussion">
Ask Changes
@ -174,19 +175,29 @@
<hr class="mt0 mb0"/>
<div t-if="order_valid" class="text-center hidden-print">
<input type="hidden" t-att-value="quotation.validity_date" id="validity_date"/>
<div class="mt8" t-if="(quotation.before_discount - quotation.amount_total) > 0.0">
<strong>This offer at </strong>
<em t-field="quotation.amount_total"
t-field-options='{"widget": "monetary", "display_currency": "quotation.pricelist_id.currency_id"}'></em>
<em t-field="quotation.before_discount"
t-field-options='{"widget": "monetary", "display_currency": "quotation.pricelist_id.currency_id"}'
style="text-decoration: line-through"
class="text-danger"></em>
</div>
<strong class="text-center" t-if="(quotation.before_discount - quotation.amount_total) > 0.0">Expire in :</strong>
<strong class="text-center" t-if="not((quotation.before_discount - quotation.amount_total) > 0.0)">This offer Expire in:</strong>
<div id="countdown"/>
<strong t-if="(quotation.before_discount - quotation.amount_total) > 0.0" class="text-center">(<t t-esc="(quotation.before_discount - quotation.amount_total)"/> Discount)</strong>
<div class="mt8">
<strong>This offer expires in</strong>
<div class="fa fa-clock-o fa-2x day_counter mt8 mb16">
<t t-esc="days_valid"/>
<t t-if="days_valid &gt; 1">
days
</t>
<t t-if="days_valid &lt;= 1">
day
</t>
</div>
</div>
<div class="text-center mb16" t-if="quotation.before_discount > quotation.amount_total">
<p class="text-muted mb8">Your advantage:</p>
<strong t-field="quotation.amount_total"
t-field-options='{"widget": "monetary", "display_currency": "quotation.pricelist_id.currency_id"}'/>
<strong t-field="quotation.before_discount"
t-field-options='{"widget": "monetary", "display_currency": "quotation.pricelist_id.currency_id"}'
style="text-decoration: line-through"
class="text-danger"/>
</div>
</div>
</div>
</div>

View File

@ -20,7 +20,7 @@
<field name="quantity"/>
<field name="uom_id"/>
<field name="price_unit"/>
<field name="discount"/>
<field name="discount" groups="sale.group_discount_per_so_line"/>
<field name="website_description" invisible="1"/>
</tree>
</field>
@ -41,7 +41,7 @@
<field name="arch" type="xml">
<form string="Sale Quotation Template" version="7.0">
<sheet>
<button string="Edit Template" type="object" name="open_template" class="oe_link oe_right"/>
<button string="Edit Template" type="object" name="open_template" class="oe_link oe_right"/>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1>
@ -50,7 +50,10 @@
</div>
<group>
<group>
<field name="number_of_days"/>
<label for="number_of_days"/>
<div id="number_of_days">
<field name="number_of_days" class="oe_inline"/> days
</div>
</group>
</group>
<notebook>
@ -66,6 +69,10 @@
name="product_uom_qty" class="oe_inline"/>
</div>
<field name="price_unit"/>
<label for="discount" groups="sale.group_discount_per_so_line"/>
<div groups="sale.group_discount_per_so_line">
<field name="discount" class="oe_inline"/> %%
</div>
</group>
</group>
<notebook colspan="4">
@ -94,7 +101,7 @@
<field name="quantity"/>
<field name="uom_id"/>
<field name="price_unit"/>
<field name="discount"/>
<field name="discount" groups="sale.group_discount_per_so_line"/>
<field name="website_description" invisible="1"/>
</tree>
</field>