[ADD] : counter with remaining time
bzr revid: aja@tinyerp.com-20140122121856-li5wzu0j8grlts3d
This commit is contained in:
parent
b50a5bd40c
commit
78247bf308
|
@ -24,7 +24,7 @@ from openerp.addons.web import http
|
|||
from openerp.addons.web.http import request
|
||||
from openerp.addons.website.models import website
|
||||
import werkzeug
|
||||
|
||||
import datetime
|
||||
|
||||
class sale_quote(http.Controller):
|
||||
|
||||
|
@ -39,6 +39,7 @@ class sale_quote(http.Controller):
|
|||
'message': message,
|
||||
'new_post' : request.httprequest.session.get('new_post',False),
|
||||
'option': self._check_option_len(order),
|
||||
'date_diff': (datetime.datetime.now() > datetime.datetime.strptime(order.validity_date , '%Y-%m-%d'))
|
||||
}
|
||||
return request.website.render('website_quotation.so_quotation', values)
|
||||
|
||||
|
@ -47,6 +48,7 @@ class sale_quote(http.Controller):
|
|||
if not option.line_id:
|
||||
return True
|
||||
return False
|
||||
|
||||
@http.route(['/quote/accept'], type='json', auth="public", website=True)
|
||||
def accept(self, order_id=None, token=None, signer=None, sign=None, **post):
|
||||
order_obj = request.registry.get('sale.order')
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
from openerp.osv import osv, fields
|
||||
import uuid
|
||||
import time
|
||||
|
||||
import datetime
|
||||
|
||||
class sale_quote_template(osv.osv):
|
||||
_name = "sale.quote.template"
|
||||
|
@ -33,6 +33,7 @@ class sale_quote_template(osv.osv):
|
|||
'quote_line': fields.one2many('sale.quote.line', 'quote_id', 'Quote Template Lines'),
|
||||
'note': fields.text('Terms and conditions'),
|
||||
'options': fields.one2many('sale.option.line', 'temp_option_id', 'Optional Products Lines'),
|
||||
'number_of_days': fields.integer('Number of Days'),
|
||||
}
|
||||
|
||||
def open_template(self, cr, uid, quote_id, context=None):
|
||||
|
@ -85,16 +86,29 @@ class sale_order_line(osv.osv):
|
|||
|
||||
class sale_order(osv.osv):
|
||||
_inherit = 'sale.order'
|
||||
|
||||
def _get_total(self, cr, uid, ids, name, arg, context=None):
|
||||
res = {}
|
||||
for order in self.browse(cr, uid, ids, context=context):
|
||||
total = 0.0
|
||||
for line in order.order_line:
|
||||
total += (line.product_uom_qty * line.price_unit)
|
||||
res[order.id] = total
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'access_token': fields.char('Security Token', size=256, required=True),
|
||||
'template_id': fields.many2one('sale.quote.template', 'Quote Template'),
|
||||
'website_description': fields.html('Description'),
|
||||
'options' : fields.one2many('sale.option.line', 'option_id', 'Optional Products Lines'),
|
||||
'signer_name': fields.char('Signer Name', size=256),
|
||||
'validity_date': fields.date('Validity Date'),
|
||||
'before_discount': fields.function(_get_total, string='Amount Before Discount', type="float")
|
||||
}
|
||||
_defaults = {
|
||||
'access_token': lambda self, cr, uid, ctx={}: str(uuid.uuid4())
|
||||
}
|
||||
|
||||
def open_quotation(self, cr, uid, quote_id, context=None):
|
||||
quote = self.browse(cr, uid, quote_id[0], context=context)
|
||||
return {
|
||||
|
@ -103,9 +117,6 @@ class sale_order(osv.osv):
|
|||
'url': '/quote/%s/%s' % (quote.id, quote.access_token)
|
||||
}
|
||||
|
||||
def _get_sale_order_line(self, cr, uid, template_id, context=None):
|
||||
"""create order line from selected quote template line."""
|
||||
|
||||
def onchange_template_id(self, cr, uid, ids, template_id, context=None):
|
||||
lines = []
|
||||
quote_template = self.pool.get('sale.quote.template').browse(cr, uid, template_id, context=context)
|
||||
|
@ -130,7 +141,10 @@ class sale_order(osv.osv):
|
|||
'discount': option.discount,
|
||||
'website_description': option.website_description,
|
||||
}))
|
||||
data = {'order_line': lines, 'website_description': quote_template.website_description, 'note': quote_template.note, 'options': options}
|
||||
date = False
|
||||
if quote_template.number_of_days > 0:
|
||||
date = (datetime.datetime.now() + datetime.timedelta(quote_template.number_of_days)).strftime("%Y-%m-%d")
|
||||
data = {'order_line': lines, 'website_description': quote_template.website_description, 'note': quote_template.note, 'options': options, 'validity_date': date}
|
||||
return {'value': data}
|
||||
|
||||
def recommended_products(self, cr, uid, ids, context=None):
|
||||
|
|
|
@ -51,3 +51,18 @@
|
|||
}
|
||||
}
|
||||
|
||||
#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;
|
||||
}
|
||||
|
|
|
@ -89,5 +89,13 @@ $(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">Days</small></span>')
|
||||
}, 1000);
|
||||
|
||||
//vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
|
||||
});
|
||||
|
|
|
@ -154,9 +154,12 @@
|
|||
<div class="col-md-3">
|
||||
<div class="bs-sidebar">
|
||||
<div class="text-center hidden-print" t-if="quotation.state in ('draft', 'sent', 'waiting_date')" style="padding: 10px">
|
||||
<a class="btn btn-primary btn-block fa fa-check" data-toggle="modal" data-target="#modelaccept">
|
||||
<a t-if="not date_diff" class="btn btn-primary btn-block fa fa-check" data-toggle="modal" data-target="#modelaccept">
|
||||
Accept Order
|
||||
</a>
|
||||
<a t-if="date_diff">
|
||||
<strong>This offer expired!.</strong> <a href="#discussion">Contact us</a> for new quote.
|
||||
</a>
|
||||
<div class="mt8">
|
||||
<a type="submit" href="#discussion">
|
||||
Ask Changes
|
||||
|
@ -168,6 +171,23 @@
|
|||
</div>
|
||||
<hr class="mt0 mb0"/>
|
||||
<t t-call="website_quotation.navigation_menu"/>
|
||||
<hr class="mt0 mb0"/>
|
||||
<div 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>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
</xpath>
|
||||
<xpath expr="//field[@name='client_order_ref']" position="after">
|
||||
<field name="template_id" on_change="onchange_template_id(template_id)"/>
|
||||
<field name="validity_date"/>
|
||||
<field name="website_description" invisible="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
|
@ -49,6 +50,11 @@
|
|||
<field name="name"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="number_of_days"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Lines">
|
||||
<field name="quote_line">
|
||||
|
|
Loading…
Reference in New Issue