From a73244b92ea939d183477a0d163ecb7cd7812b3a Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Sat, 25 Jan 2014 18:24:55 +0100 Subject: [PATCH] [FIX] Misc fix + better CSS bzr revid: fp@tinyerp.com-20140125172455-wrndhqs5b30cbwxc --- addons/website_quotation/controllers/main.py | 6 ++- .../data/website_quotation_demo.xml | 7 +-- addons/website_quotation/models/order.py | 29 +++++++------ .../security/ir.model.access.csv | 1 + .../static/src/css/website_quotation.css | 17 -------- .../static/src/js/website_quotation.js | 9 ---- .../views/website_quotation.xml | 43 ++++++++++++------- .../views/website_quotation_backend.xml | 15 +++++-- 8 files changed, 65 insertions(+), 62 deletions(-) diff --git a/addons/website_quotation/controllers/main.py b/addons/website_quotation/controllers/main.py index c935064f47d..e63d43ee007 100644 --- a/addons/website_quotation/controllers/main.py +++ b/addons/website_quotation/controllers/main.py @@ -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, diff --git a/addons/website_quotation/data/website_quotation_demo.xml b/addons/website_quotation/data/website_quotation_demo.xml index 52ae77b8754..7d18280d276 100644 --- a/addons/website_quotation/data/website_quotation_demo.xml +++ b/addons/website_quotation/data/website_quotation_demo.xml @@ -291,10 +291,11 @@ - Fuctional Training + Functional Training 1 12950.00 + 10.00

Online Training + Certification

@@ -463,7 +464,7 @@ Advanced CRM Functional - 1 + 1 9000.00 10 @@ -569,7 +570,7 @@ Functional Webinar - 1 + 1 18000.00 diff --git a/addons/website_quotation/models/order.py b/addons/website_quotation/models/order.py index 8f6279deb85..5e752f46924 100644 --- a/addons/website_quotation/models/order.py +++ b/addons/website_quotation/models/order.py @@ -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 = { diff --git a/addons/website_quotation/security/ir.model.access.csv b/addons/website_quotation/security/ir.model.access.csv index af64bf72e5a..1dbe5afbe34 100644 --- a/addons/website_quotation/security/ir.model.access.csv +++ b/addons/website_quotation/security/ir.model.access.csv @@ -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 diff --git a/addons/website_quotation/static/src/css/website_quotation.css b/addons/website_quotation/static/src/css/website_quotation.css index e34215afeb7..ecf67140b40 100644 --- a/addons/website_quotation/static/src/css/website_quotation.css +++ b/addons/website_quotation/static/src/css/website_quotation.css @@ -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; -} diff --git a/addons/website_quotation/static/src/js/website_quotation.js b/addons/website_quotation/static/src/js/website_quotation.js index 6f671b5ff17..ed9453c043f 100644 --- a/addons/website_quotation/static/src/js/website_quotation.js +++ b/addons/website_quotation/static/src/js/website_quotation.js @@ -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(''+((days_left > 0) ? days_left : 0)+'Day(s)') -}, 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 f3f89230825..527d8185f3b 100644 --- a/addons/website_quotation/views/website_quotation.xml +++ b/addons/website_quotation/views/website_quotation.xml @@ -157,9 +157,10 @@ Accept Order - - This offer expired!. Contact us for new quote. - + + This offer expired!. +
Contact us for new quote. + diff --git a/addons/website_quotation/views/website_quotation_backend.xml b/addons/website_quotation/views/website_quotation_backend.xml index fbe8fd0700b..9d7ee79665a 100644 --- a/addons/website_quotation/views/website_quotation_backend.xml +++ b/addons/website_quotation/views/website_quotation_backend.xml @@ -20,7 +20,7 @@ - + @@ -41,7 +41,7 @@
-