[FIX] Misc fix + better CSS
bzr revid: fp@tinyerp.com-20140125172455-wrndhqs5b30cbwxc
This commit is contained in:
parent
b1f131c9c6
commit
a73244b92e
|
@ -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,
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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,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;
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
});
|
||||
|
|
|
@ -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 > 1">
|
||||
days
|
||||
</t>
|
||||
<t t-if="days_valid <= 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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue