diff --git a/addons/event_sale/models/event.py b/addons/event_sale/models/event.py index 5b66d895fe1..01f622c3727 100644 --- a/addons/event_sale/models/event.py +++ b/addons/event_sale/models/event.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from openerp import models, fields, api, _ +import openerp.addons.decimal_precision as dp from openerp.exceptions import Warning @@ -9,7 +10,7 @@ class event_event(models.Model): event_ticket_ids = fields.One2many( 'event.event.ticket', 'event_id', string='Event Ticket', - default=lambda rec: rec._default_tickets()) + default=lambda rec: rec._default_tickets(), copy=True) seats_max = fields.Integer( string='Maximum Available Seats', help="The maximum registration level is equal to the sum of the maximum registration of event ticket. " + @@ -49,7 +50,9 @@ class event_ticket(models.Model): required=True, domain=[("event_type_id", "!=", False)], default=lambda self: self._default_product_id()) registration_ids = fields.One2many('event.registration', 'event_ticket_id', 'Registrations') - price = fields.Float('Price') + price = fields.Float('Price', digits=dp.get_precision('Product Price')) + price_reduce = fields.Float("Price Reduce", compute="_get_price_compute", store=False, + digits=dp.get_precision('Product Price')) deadline = fields.Date("Sales End") is_expired = fields.Boolean('Is Expired', compute='_is_expired', store=True) @@ -71,6 +74,13 @@ class event_ticket(models.Model): current_date = fields.Date.context_today(self.with_context({'tz': self.event_id.date_tz})) self.is_expired = self.deadline < current_date + @api.one + @api.depends('price', 'product_id.lst_price', 'product_id.price') + def _get_price_compute(self): + product = self.product_id + discount = product.lst_price and (product.lst_price - product.price) / product.lst_price or 0.0 + self.price_reduce = (1.0 - discount) * self.price + seats_max = fields.Integer('Maximum Available Seats', help="You can for each event define a maximum registration level. If you have too much registrations you are not able to confirm your event. (put 0 to ignore this rule )") seats_reserved = fields.Integer(string='Reserved Seats', compute='_compute_seats', store=True) seats_available = fields.Integer(string='Available Seats', compute='_compute_seats', store=True) diff --git a/addons/event_sale/models/sale_order.py b/addons/event_sale/models/sale_order.py index e5d26b7d281..1b5f5ac03de 100644 --- a/addons/event_sale/models/sale_order.py +++ b/addons/event_sale/models/sale_order.py @@ -33,6 +33,13 @@ class sale_order_line(osv.osv): 'event_ok': fields.related('product_id', 'event_ok', string='event_ok', type='boolean'), } + def _prepare_order_line_invoice_line(self, cr, uid, line, account_id=False, context=None): + res = super(sale_order_line, self)._prepare_order_line_invoice_line(cr, uid, line, account_id=account_id, context=context) + if line.event_id: + event = self.pool['event.event'].read(cr, uid, line.event_id.id, ['name'], context=context) + res['name'] = '%s: %s' % (res.get('name', ''), event['name']) + return res + def product_id_change(self, cr, uid, ids, pricelist, product, qty=0, uom=False, qty_uos=0, uos=False, name='', partner_id=False, lang=False, update_tax=True, date_order=False, packaging=False, diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 04d31419158..bfe644796e2 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -880,7 +880,7 @@ openerp.mail = function (session) { self.parent_thread.message_fetch(this.domain, this.context, false, function (arg, data) { self.id = false; // insert the message on dom after this message - self.parent_thread.switch_new_message( data, self.$el.parent() ); + self.parent_thread.switch_new_message(data, self.$el); self.animated_destroy(200); }); diff --git a/addons/report/models/report.py b/addons/report/models/report.py index 16adc510dcd..fc2bb9ba89b 100644 --- a/addons/report/models/report.py +++ b/addons/report/models/report.py @@ -20,6 +20,7 @@ ############################################################################## from openerp import api +from openerp import SUPERUSER_ID from openerp.exceptions import AccessError from openerp.osv import osv from openerp.tools import config, which @@ -98,7 +99,7 @@ class Report(osv.Model): if context is None: context = {} - context.update(inherit_branding=True) # Tell QWeb to brand the generated html + context = dict(context, inherit_branding=True) # Tell QWeb to brand the generated html view_obj = self.pool['ir.ui.view'] @@ -199,7 +200,8 @@ class Report(osv.Model): headerhtml = [] contenthtml = [] footerhtml = [] - base_url = self.pool['ir.config_parameter'].get_param(cr, uid, 'web.base.url') + irconfig_obj = self.pool['ir.config_parameter'] + base_url = irconfig_obj.get_param(cr, SUPERUSER_ID, 'report.url') or irconfig_obj.get_param(cr, SUPERUSER_ID, 'web.base.url') # Minimal page renderer view_obj = self.pool['ir.ui.view'] diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 7fed56a294b..99fb5c96081 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -844,6 +844,11 @@ class sale_order_line(osv.osv): WHERE rel.invoice_id = ANY(%s)""", (list(ids),)) return [i[0] for i in cr.fetchall()] + def _get_price_reduce(self, cr, uid, ids, field_name, arg, context=None): + res = dict.fromkeys(ids, 0.0) + for line in self.browse(cr, uid, ids, context=context): + res[line.id] = line.price_subtotal / line.product_uom_qty + return res _name = 'sale.order.line' _description = 'Sales Order Line' @@ -860,6 +865,7 @@ class sale_order_line(osv.osv): }), 'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price'), readonly=True, states={'draft': [('readonly', False)]}), 'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute= dp.get_precision('Account')), + 'price_reduce': fields.function(_get_price_reduce, type='float', string='Price Reduce', digits_compute=dp.get_precision('Product Price')), 'tax_id': fields.many2many('account.tax', 'sale_order_tax', 'order_line_id', 'tax_id', 'Taxes', readonly=True, states={'draft': [('readonly', False)]}), 'address_allotment_id': fields.many2one('res.partner', 'Allotment Partner',help="A partner to whom the particular product needs to be allotted."), 'product_uom_qty': fields.float('Quantity', digits_compute= dp.get_precision('Product UoS'), required=True, readonly=True, states={'draft': [('readonly', False)]}), diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 332151ec56e..85219dd47b1 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -467,7 +467,6 @@ class Home(http.Controller): @http.route('/web', type='http', auth="none") def web_client(self, s_action=None, **kw): ensure_db() - if request.session.uid: if kw.get('redirect'): return werkzeug.utils.redirect(kw.get('redirect'), 303) @@ -479,6 +478,11 @@ class Home(http.Controller): else: return login_redirect() + @http.route('/web/dbredirect', type='http', auth="none") + def web_db_redirect(self, redirect='/', **kw): + ensure_db() + return werkzeug.utils.redirect(redirect, 303) + @http.route('/web/login', type='http', auth="none") def web_login(self, redirect=None, **kw): ensure_db() diff --git a/addons/website_event_sale/controllers/main.py b/addons/website_event_sale/controllers/main.py index c84d9df1dc3..022066436b0 100644 --- a/addons/website_event_sale/controllers/main.py +++ b/addons/website_event_sale/controllers/main.py @@ -23,11 +23,22 @@ from openerp import SUPERUSER_ID from openerp.addons.web import http from openerp.addons.web.http import request from openerp.addons.website_event.controllers.main import website_event +from openerp.addons.website_sale.controllers.main import get_pricelist from openerp.tools.translate import _ class website_event(website_event): + @http.route(['/event//register'], type='http', auth="public", website=True) + def event_register(self, event, **post): + pricelist_id = int(get_pricelist()) + values = { + 'event': event.with_context(pricelist=pricelist_id), + 'main_object': event.with_context(pricelist=pricelist_id), + 'range': range, + } + return request.website.render("website_event.event_description_full", values) + def _process_tickets_details(self, data): ticket_post = {} for key, value in data.iteritems(): diff --git a/addons/website_event_sale/models/sale_order.py b/addons/website_event_sale/models/sale_order.py index 450fcddf867..127efc949e3 100644 --- a/addons/website_event_sale/models/sale_order.py +++ b/addons/website_event_sale/models/sale_order.py @@ -2,6 +2,7 @@ from openerp import SUPERUSER_ID from openerp.osv import osv, fields from openerp.tools.translate import _ +import openerp.addons.decimal_precision as dp # defined for access rules class sale_order(osv.Model): diff --git a/addons/website_event_sale/views/website_event_sale.xml b/addons/website_event_sale/views/website_event_sale.xml index 7a763815d78..0660b87dcb9 100644 --- a/addons/website_event_sale/views/website_event_sale.xml +++ b/addons/website_event_sale/views/website_event_sale.xml @@ -19,12 +19,6 @@ - -