diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py index 5a829f63f43..c491dd06138 100644 --- a/addons/event/__openerp__.py +++ b/addons/event/__openerp__.py @@ -1,3 +1,4 @@ + # -*- coding: utf-8 -*- ############################################################################## # @@ -52,6 +53,7 @@ Note that: ], 'demo_xml': ['event_demo.xml'], 'test': ['test/process/event_draft2done.yml'], + 'js': ['static/src/js/google_map.js'], 'css': ['static/src/css/event.css'], 'installable': True, 'application': True, diff --git a/addons/event/event.py b/addons/event/event.py index 72669c8b080..bebddb34d17 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -103,6 +103,14 @@ class event_event(osv.osv): if total_confirmed < self.event.register_min or total_confirmed > self.event.register_max and self.event.register_max!=0: raise osv.except_osv(_('Error!'),_("The total of confirmed registration for the event '%s' does not meet the expected minimum/maximum. You should maybe reconsider those limits before going further") % (self.event.name)) + def check_registration_limits_before(self, cr, uid, ids, no_of_registration, context=None): + for event in self.browse(cr, uid, ids, context=context): + available_seats = event.register_avail + if available_seats and no_of_registration > available_seats: + raise osv.except_osv(_('Warning!'),_("Only %d Seats are Available!") % (available_seats)) + elif available_seats == 0: + raise osv.except_osv(_('Warning!'),_("No Tickets Available!")) + def confirm_event(self, cr, uid, ids, context=None): register_pool = self.pool.get('event.registration') if self.event.email_confirmation_id: @@ -179,7 +187,7 @@ class event_event(osv.osv): 'register_current': fields.function(_get_register, string='Confirmed Registrations', multi='register_numbers'), 'register_avail': fields.function(_get_register, string='Available Registrations', multi='register_numbers',type='integer'), 'register_prospect': fields.function(_get_register, string='Unconfirmed Registrations', multi='register_numbers'), - 'register_attended': fields.function(_get_register, string='Attended Registrations', multi='register_numbers'), + 'register_attended': fields.function(_get_register, string='# of Participations', multi='register_numbers'), 'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}), 'date_begin': fields.datetime('Start Date', required=True, readonly=True, states={'draft': [('readonly', False)]}), 'date_end': fields.datetime('End Date', required=True, readonly=True, states={'draft': [('readonly', False)]}), @@ -195,7 +203,6 @@ class event_event(osv.osv): 'full_name' : fields.function(_name_get_fnc, type="char", string='Name'), 'reply_to': fields.char('Reply-To Email', size=64, readonly=False, states={'done': [('readonly', True)]}, help="The email address of the organizer is likely to be put here, with the effect to be in the 'Reply-To' of the mails sent automatically at event or registrations confirmation. You can also put the email address of your mail gateway if you use one."), 'main_speaker_id': fields.many2one('res.partner','Main Speaker', readonly=False, states={'done': [('readonly', True)]}, help="Speaker who will be giving speech at the event."), - 'speaker_ids': fields.many2many('res.partner', 'event_speaker_rel', 'speaker_id', 'partner_id', 'Other Speakers', readonly=False, states={'done': [('readonly', True)]}), 'address_id': fields.many2one('res.partner','Location Address', readonly=False, states={'done': [('readonly', True)]}), 'speaker_confirmed': fields.boolean('Speaker Confirmed', readonly=False, states={'done': [('readonly', True)]}), 'country_id': fields.related('address_id', 'country_id', @@ -203,22 +210,30 @@ class event_event(osv.osv): 'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}), 'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}), 'is_subscribed' : fields.function(_subscribe_fnc, type="boolean", string='Subscribed'), + 'city': fields.related('address_id', 'city', type='char', string='City'), + 'street': fields.related('address_id', 'street', type='char', string='Street'), + 'country_id': fields.related('address_id', 'country_id', relation='res.country', type='many2one', string='Country'), + 'state_id': fields.related('address_id', 'state_id', relation="res.country.state", type="many2one", string='Fed. State'), + 'zip': fields.related('address_id','zip', type="char", string="Zip"), + } - _defaults = { 'state': 'draft', 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'event.event', context=c), 'user_id': lambda obj, cr, uid, context: uid, } - def subscribe_to_event(self, cr, uid, ids, context=None): register_pool = self.pool.get('event.registration') user_pool = self.pool.get('res.users') + num_of_seats = int(context.get('ticket', 1)) + self.check_registration_limits_before(cr, uid, ids, num_of_seats, context=context) user = user_pool.browse(cr, uid, uid, context=context) curr_reg_ids = register_pool.search(cr, uid, [('user_id', '=', user.id), ('event_id', '=' , ids[0])]) #the subscription is done with UID = 1 because in case we share the kanban view, we want anyone to be able to subscribe if not curr_reg_ids: - curr_reg_ids = [register_pool.create(cr, 1, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id,})] + curr_reg_ids = [register_pool.create(cr, 1, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id, 'nb_register': num_of_seats})] + else: + register_pool.write(cr, uid, curr_reg_ids, {'nb_register': num_of_seats}, context=context) return register_pool.confirm_registration(cr, 1, curr_reg_ids, context=context) def unsubscribe_to_event(self, cr, uid, ids, context=None): @@ -236,7 +251,6 @@ class event_event(osv.osv): _constraints = [ (_check_closing_date, 'Error ! Closing Date cannot be set before Beginning Date.', ['date_end']), ] - def onchange_event_type(self, cr, uid, ids, type_event, context=None): if type_event: type_info = self.pool.get('event.type').browse(cr,uid,type_event,context) @@ -295,6 +309,11 @@ class event_registration(osv.osv): def registration_open(self, cr, uid, ids, context=None): """ Open Registration """ + event_obj = self.pool.get('event.event') + for register in self.browse(cr, uid, ids, context=context): + event_id = register.event_id.id + no_of_registration = register.nb_register + event_obj.check_registration_limits_before(cr, uid, [event_id], no_of_registration, context=context) res = self.confirm_registration(cr, uid, ids, context=context) self.mail_user(cr, uid, ids, context=context) return res @@ -384,5 +403,4 @@ class event_registration(osv.osv): event_registration() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event/event_demo.xml b/addons/event/event_demo.xml index 96bc64e12aa..81dad07b5e4 100644 --- a/addons/event/event_demo.xml +++ b/addons/event/event_demo.xml @@ -38,16 +38,16 @@ Opera of Verdi - - + + 50 350 Conference on ERP Business - - + + 200 diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 78d5f8f421a..b4932254d86 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -50,10 +50,10 @@ event.event form -
+
@@ -488,7 +487,7 @@ tree,form,calendar,graph {} - + view_ available_seats: + assert available_seats, "seats available." + elif available_seats == 0: + assert available_seats, "No Tickets Available." self.registration_open(cr, uid, [ref("event_registration1")],context=context) - I check that registration is "confirmed" diff --git a/addons/event_sale/event_sale.py b/addons/event_sale/event_sale.py index df115c0eef4..0d6497c45f2 100644 --- a/addons/event_sale/event_sale.py +++ b/addons/event_sale/event_sale.py @@ -70,7 +70,6 @@ class sale_order_line(osv.osv): def button_confirm(self, cr, uid, ids, context=None): ''' create registration with sale order - ''' registration_obj = self.pool.get('event.registration') sale_obj = self.pool.get('sale.order') @@ -92,4 +91,3 @@ class sale_order_line(osv.osv): message = _("The registration %s has been created from the Sale Order %s.") % (registration_id, order_line.order_id.name) registration_obj.log(cr, uid, registration_id, message) return super(sale_order_line, self).button_confirm(cr, uid, ids, context=context) - diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css index 895ca575f08..554f8085fb5 100644 --- a/addons/mail/static/src/css/mail.css +++ b/addons/mail/static/src/css/mail.css @@ -1,3 +1,4 @@ + /* ------------------------------ */ /* Wall */ /* ------------------------------ */ diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index dbd1cc16a6b..36c061645e7 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -132,7 +132,7 @@ - +