diff --git a/addons/website_quotation/controllers/main.py b/addons/website_quotation/controllers/main.py index e012fabf385..66de8241cc2 100644 --- a/addons/website_quotation/controllers/main.py +++ b/addons/website_quotation/controllers/main.py @@ -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') diff --git a/addons/website_quotation/models/order.py b/addons/website_quotation/models/order.py index 0709a6b57ce..c8ce70fa12b 100644 --- a/addons/website_quotation/models/order.py +++ b/addons/website_quotation/models/order.py @@ -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): diff --git a/addons/website_quotation/static/src/css/website_quotation.css b/addons/website_quotation/static/src/css/website_quotation.css index 35320f66501..6dfb793fb44 100644 --- a/addons/website_quotation/static/src/css/website_quotation.css +++ b/addons/website_quotation/static/src/css/website_quotation.css @@ -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; +} diff --git a/addons/website_quotation/static/src/js/website_quotation.js b/addons/website_quotation/static/src/js/website_quotation.js index 825d655eabd..3aa587785b8 100644 --- a/addons/website_quotation/static/src/js/website_quotation.js +++ b/addons/website_quotation/static/src/js/website_quotation.js @@ -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(''+((days_left > 0) ? days_left : 0)+'Days') +}, 1000); + //vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: }); diff --git a/addons/website_quotation/views/website_quotation.xml b/addons/website_quotation/views/website_quotation.xml index 756b19bf824..b70341565f2 100644 --- a/addons/website_quotation/views/website_quotation.xml +++ b/addons/website_quotation/views/website_quotation.xml @@ -154,9 +154,12 @@