From 64ec79520368a9fc73b37060685701730f4d0014 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Wed, 7 Aug 2013 11:47:34 +0200 Subject: [PATCH] [IMP] website_event: managment of tickets for an event to defined price and max number registration bzr revid: chm@openerp.com-20130807094734-4uwlezgr50m4lwwu --- addons/website_event/event.py | 49 ++++++++++--- .../security/ir.model.access.csv | 2 +- .../website_event/security/website_event.xml | 6 +- addons/website_event/views/website_event.xml | 72 ++++++++++--------- 4 files changed, 83 insertions(+), 46 deletions(-) diff --git a/addons/website_event/event.py b/addons/website_event/event.py index 65a8034951f..58741dfe9d5 100644 --- a/addons/website_event/event.py +++ b/addons/website_event/event.py @@ -2,35 +2,64 @@ from openerp.osv import osv, fields +# defined for access rules +class product(osv.osv): + _inherit = 'product.product' + _columns = { + 'event_ticket_ids': fields.one2many('event.event.ticket', 'product_id', 'Event Tickets'), + } + class event(osv.osv): _inherit = 'event.event' + + def _get_register_max(self, cr, uid, ids, field_name, arg, context=None): + result = dict.fromkeys(ids, 0) + for rec in self.browse(cr, uid, ids, context=context): + result[rec.id] = sum([ep.register_max for ep in rec.event_ticket_ids]) + return result + _columns = { 'website_published': fields.boolean('Available in the website'), 'description_website': fields.html('Description for the website'), - 'event_product_ids': fields.one2many('event.event.product', "event_id", "Event"), + 'event_ticket_ids': fields.one2many('event.event.ticket', "event_id", "Event Ticket"), 'organizer_id': fields.many2one('res.partner', "Orgonizer"), 'phone': fields.related('orgonizer_id', 'phone', type='char', string='Phone'), 'email': fields.related('orgonizer_id', 'email', type='char', string='Email'), + 'register_max': fields.function(_get_register_max, + string='Maximum Registrations', + help="The maximum registration level is equal to the sum of the maximum registration of event ticket." + + "If you have too much registrations you are not able to confirm your event. (0 to ignore this rule )", + type='integer', store=True) } -class event_product(osv.osv): - _name = 'event.event.product' +class event_ticket(osv.osv): + _name = 'event.event.ticket' + + def _get_register_current(self, cr, uid, ids, field_name, arg, context=None): + result = dict.fromkeys(ids, 0) + for rec in self.browse(cr, uid, ids, context=context): + result[rec.id] = sum([ep.nb_register for ep in rec.registration_ids]) + return result + _columns = { + 'event_id': fields.many2one('event.event', "Event", required=True), + 'product_id': fields.many2one('product.product', 'Product', required=True, domain=[("event_type_id", "!=", False)]), + 'registration_ids': fields.one2many('event.registration', 'event_ticket_id', 'Registrations'), 'deadline': fields.date("Sales End"), - 'event_id': fields.many2one('event.event', "Event"), - 'product_id': fields.many2one('product.product', 'Product', domain=[("event_type_id", "!=", False)]), 'price': fields.float('Price'), - 'qty': fields.integer('Current Registrations', readonly=True), - 'max_qty': fields.integer('Maximum Registrations'), + 'register_max': fields.integer('Maximum Registrations'), + 'register_current': fields.function(_get_register_current, string='Current Registrations', type='integer', store=True), } + def onchange_product_id(self, cr, uid, ids, product_id=False, context=None): return {'value': {'price': self.pool.get("product.product").browse(cr, uid, product_id).list_price or 0}} -class product(osv.osv): - _inherit = 'product.product' +class event_registration(osv.osv): + """Event Registration""" + _inherit= 'event.registration' _columns = { - 'event_product_ids': fields.one2many('event.event.product', 'product_id', 'Linked event product'), + 'event_ticket_id': fields.many2one('event.event.ticket', 'Event Ticket'), } diff --git a/addons/website_event/security/ir.model.access.csv b/addons/website_event/security/ir.model.access.csv index 430fced34b5..409ca162c66 100644 --- a/addons/website_event/security/ir.model.access.csv +++ b/addons/website_event/security/ir.model.access.csv @@ -1,4 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_event_event_public,event.event.public,event.model_event_event,base.group_public,1,0,0,0 -access_event_event_product_public,event.event.product.public,website_event.model_event_event_product,base.group_public,1,0,0,0 +access_event_event_ticket_public,event.event.ticket.public,website_event.model_event_event_ticket,base.group_public,1,0,0,0 access_event_product_product_public,event.product.product.public,product.model_product_product,base.group_public,1,0,0,0 \ No newline at end of file diff --git a/addons/website_event/security/website_event.xml b/addons/website_event/security/website_event.xml index 6c571eb4875..e1d3ea4ae6a 100644 --- a/addons/website_event/security/website_event.xml +++ b/addons/website_event/security/website_event.xml @@ -11,9 +11,9 @@ - - event product: Public - + + event ticket: Public + [('event_id.website_published', '=', True)] diff --git a/addons/website_event/views/website_event.xml b/addons/website_event/views/website_event.xml index 65ff07fa9dd..2b511e25c7e 100644 --- a/addons/website_event/views/website_event.xml +++ b/addons/website_event/views/website_event.xml @@ -10,12 +10,12 @@ - + - + @@ -93,9 +93,11 @@
  • - - No ticket available. - + No tickets needed. + + Tickets availables. + No ticket available. + Only tickets @@ -153,9 +155,11 @@
    - - No ticket available. - + No tickets needed. + + Tickets availables. + No ticket available. + Only tickets @@ -164,36 +168,40 @@

    + + Click to Unpublish + Click to Publish +


    - - Click to Unpublish - Click to Publish - -

    Ticket Information

    -
    +

    Ticket Information

    + - - - - - - - - - - - + + + + + + + + + + + + + + +
    Ticket typeSales EndPriceSeatsQuantity
    - - - / - -
    Ticket typeSales EndPriceSeatsQuantity
    + + + / + +