diff --git a/addons/event_sale/event_sale.py b/addons/event_sale/event_sale.py index 2d947be63e0..f4549e96d7b 100644 --- a/addons/event_sale/event_sale.py +++ b/addons/event_sale/event_sale.py @@ -23,6 +23,7 @@ from openerp import api from openerp.fields import Integer, One2many, Html from openerp.osv import fields, osv from openerp.tools.translate import _ +import openerp.addons.decimal_precision as dp class product_template(osv.osv): _inherit = 'product.template' @@ -180,7 +181,14 @@ class event_ticket(osv.osv): current_date = fields.date.context_today(self, cr, uid, context=context) return {ticket.id: ticket.deadline and ticket.deadline < current_date for ticket in self.browse(cr, uid, ids, context=context)} - + + def _get_price_reduce(self, cr, uid, ids, field_name, arg, context=None): + res = dict.fromkeys(ids, 0.0) + for ticket in self.browse(cr, uid, ids, context=context): + product = ticket.product_id + discount = product.lst_price and (product.lst_price - product.price) / product.lst_price or 0.0 + res[ticket.id] = (1.0-discount) * ticket.price + return res _columns = { 'name': fields.char('Name', required=True, translate=True), @@ -189,7 +197,8 @@ class event_ticket(osv.osv): 'registration_ids': fields.one2many('event.registration', 'event_ticket_id', 'Registrations'), 'deadline': fields.date("Sales End"), 'is_expired': fields.function(_is_expired, type='boolean', string='Is Expired'), - 'price': fields.float('Price'), + 'price': fields.float('Price', digits_compute=dp.get_precision('Product Price')), + 'price_reduce': fields.function(_get_price_reduce, type='float', string='Price Reduce', digits_compute=dp.get_precision('Product Price')), 'seats_max': fields.integer('Maximum Available Seats', oldname='register_max', 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.function(_get_seats, string='Reserved Seats', type='integer', multi='seats_reserved'), 'seats_available': fields.function(_get_seats, string='Available Seats', type='integer', multi='seats_reserved'), diff --git a/addons/sale/sale.py b/addons/sale/sale.py index e50346eda2a..2273a889aaf 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -843,6 +843,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' @@ -859,6 +864,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/website_event_sale/controllers/main.py b/addons/website_event_sale/controllers/main.py index 063e60c7df6..f57f0c8e175 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) + @http.route(['/event/cart/update'], type='http', auth="public", methods=['POST'], website=True) def cart_update(self, event_id, **post): cr, uid, context = request.cr, request.uid, request.context 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 cf68e99146d..667b7783ae2 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 @@ - -