[IMP] improves the add/remove actions and preview buttons in email template form...
[odoo/odoo.git] / addons / event / event.py
index d624a38..497d75f 100644 (file)
@@ -115,7 +115,7 @@ class event_event(osv.osv):
         res = {}
         for event_id in ids:
             res[event_id] = {key:0 for key in keys.values()}
-        query = "SELECT state,sum(nb_register) FROM event_registration WHERE event_id = %s AND state IN ('draft','open','done') GROUP BY state"
+        query = "SELECT state, sum(nb_register) FROM event_registration WHERE event_id = %s AND state IN ('draft','open','done') GROUP BY state"
         for event in self.pool.get('event.event').browse(cr, uid, ids, context=context):
             cr.execute(query, (event.id,))
             reg_states = cr.fetchall()
@@ -149,6 +149,17 @@ class event_event(osv.osv):
                         res[event.id]= True
                         continue
         return res
+    
+    def _count_all(self, cr, uid, ids, field_name, arg, context=None):
+        res = dict(map(lambda x: (x,{'count_regitrations': 0, 'count_tracks': 0,}), ids))
+        try:
+            for data in self.browse(cr, uid, ids, context=context):
+                res[data.id] = {'count_regitrations': len(data.registration_ids),
+                'count_tracks': len(data.track_ids),
+               }
+        except:
+            pass
+        return res
 
     _columns = {
         'name': fields.char('Event Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}),
@@ -156,15 +167,20 @@ class event_event(osv.osv):
         'type': fields.many2one('event.type', 'Type of Event', readonly=False, states={'done': [('readonly', True)]}),
         'seats_max': fields.integer('Maximum Avalaible 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 )", readonly=True, states={'draft': [('readonly', False)]}),
         'seats_min': fields.integer('Minimum Reserved Seats', oldname='register_min', help="You can for each event define a minimum registration level. If you do not enough registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
-        'seats_reserved': fields.function(_get_seats, oldname='register_current', string='Reserved Seats', type='integer', multi='seats_reserved', store={'event.registration': (_get_events_from_registrations, ['state'], 10),
-                                                                                                                                                          'event.event': (lambda  self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
-        'seats_available': fields.function(_get_seats, oldname='register_avail', string='Available Seats', type='integer', multi='seats_reserved', store={'event.registration': (_get_events_from_registrations, ['state'], 10),
-                                                                                                                                                          'event.event': (lambda  self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
-        'seats_unconfirmed': fields.function(_get_seats, oldname='register_prospect', string='Unconfirmed Seat Reservations', type='integer', multi='seats_reserved', store={'event.registration': (_get_events_from_registrations, ['state'], 10),
-                                                                                                                                                                             'event.event': (lambda  self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
-        'seats_used': fields.function(_get_seats, oldname='register_attended', string='Number of Participations', type='integer', multi='seats_reserved', store={'event.registration': (_get_events_from_registrations, ['state'], 10),
-                                                                                                                                                                 'event.event': (lambda  self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
+        'seats_reserved': fields.function(_get_seats, oldname='register_current', string='Reserved Seats', type='integer', multi='seats_reserved',
+            store={'event.registration': (_get_events_from_registrations, ['state'], 10),
+                   'event.event': (lambda  self, cr, uid, ids, c = {}: ids, ['seats_max', 'registration_ids'], 20)}),
+        'seats_available': fields.function(_get_seats, oldname='register_avail', string='Available Seats', type='integer', multi='seats_reserved',
+            store={'event.registration': (_get_events_from_registrations, ['state'], 10),
+                   'event.event': (lambda  self, cr, uid, ids, c = {}: ids, ['seats_max', 'registration_ids'], 20)}),
+        'seats_unconfirmed': fields.function(_get_seats, oldname='register_prospect', string='Unconfirmed Seat Reservations', type='integer', multi='seats_reserved',
+            store={'event.registration': (_get_events_from_registrations, ['state'], 10),
+                   'event.event': (lambda  self, cr, uid, ids, c = {}: ids, ['seats_max', 'registration_ids'], 20)}),
+        'seats_used': fields.function(_get_seats, oldname='register_attended', string='Number of Participations', type='integer', multi='seats_reserved',
+            store={'event.registration': (_get_events_from_registrations, ['state'], 10),
+                   'event.event': (lambda  self, cr, uid, ids, c = {}: ids, ['seats_max', 'registration_ids'], 20)}),
         'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}),
+        'track_ids': fields.one2many('event.track', 'event_id', 'Tracks', readonly=False),
         '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)]}),
         'state': fields.selection([
@@ -187,6 +203,8 @@ class event_event(osv.osv):
         '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'),
         'organizer_id': fields.many2one('res.partner', "Organizer"),
+        'count_regitrations': fields.function(_count_all, type="integer", string="Registrations", multi=True),
+        'count_tracks': fields.function(_count_all, type='integer', string='Tracks', multi=True),
     }
     _defaults = {
         'state': 'draft',
@@ -197,7 +215,6 @@ class event_event(osv.osv):
     }
 
     def _check_seats_limit(self, cr, uid, ids, context=None):
-        print "event _check_seats_limit"
         for event in self.browse(cr, uid, ids, context=context):
             if event.seats_max and event.seats_available < 0:
                 return False