~andorrax/school-base-openerp-module/xavi

« back to all changes in this revision

Viewing changes to school_extension/school_extension.py

  • Committer: Pere Erro
  • Date: 2012-03-09 08:16:43 UTC
  • Revision ID: pereerro@terra.es-20120309081643-19vvz68ss3p60s3n
[IMP] Communications state wizard could send SMS
[IMP] Partner functions on contacts are now temporized by date interval

Show diffs side-by-side

added added

removed removed

Lines of Context:
105
105
        cal_ids = self.pool.get('school.holidays_calendar').search(cr, uid, [('holiday_interval_ids','in',ids)])
106
106
        return self.pool.get('school.classe').search(cr, uid, [('holidays_calendar_id','in',cal_ids)])
107
107
 
 
108
    def _get_seance_teachers(self, cr, uid, ids, field_name, arg, context = None):
 
109
        ret = {}
 
110
        for lid in ids:
 
111
            ret[lid] = []
 
112
        query = """
 
113
        SELECT DISTINCT s.classe_id, ts.teacher_id
 
114
        FROM school_seance AS s INNER JOIN school_teacher_seance AS ts ON s.id=ts.seance_id
 
115
        WHERE s.classe_id IN %s
 
116
        """
 
117
        cr.execute(query, (tuple(ids),) )
 
118
        for (classe_id,teacher_id) in cr.fetchall():
 
119
            ret[classe_id].append(teacher_id)
 
120
        return ret
 
121
    
 
122
    def _search_seance_teachers(self, cr, uid, obj, name, args, context = None):
 
123
        args2 = []
 
124
        for my_arg in args:
 
125
            if type(my_arg) in (list,tuple):
 
126
                if type(my_arg[2]) in (int,long):
 
127
                    args2 += [('id',my_arg[1],my_arg[2])]
 
128
                else:
 
129
                    args2 += [('teacher_name',my_arg[1],my_arg[2])]
 
130
            else:
 
131
                args2 += my_arg
 
132
        teacher_ids = self.pool.get('school.teacher').search(cr, uid, args2, context = context)
 
133
        if not teacher_ids:
 
134
            return [('id','<',0)]
 
135
        query = """
 
136
        SELECT DISTINCT s.classe_id
 
137
        FROM school_seance AS s INNER JOIN school_teacher_seance AS ts ON s.id=ts.seance_id
 
138
        WHERE ts.teacher_id IN %s
 
139
        """
 
140
        cr.execute(query, (tuple(teacher_ids),) )
 
141
        return [('id','in',[x for (x,) in cr.fetchall()])]
 
142
        
108
143
    _columns = {
109
144
        'name' : fields.char('Name',size=200,select=1,help="The course's name",),
110
145
        'course_id' : fields.many2one('school.course','Course',required=True,readonly=False,help="The course",),
111
 
        'seance_ids' : fields.one2many('school.seance','classe_id',select=True,help='List of the seances for a class.',),
 
146
        'seance_ids' : fields.one2many('school.seance','classe_id',string='Seances',help='List of the seances for a class.',),
112
147
        'date_from': fields.date('Date From',required=True,),
113
148
        'date_to': fields.date('Date To',required=True,),
114
149
        'group_id': fields.many2one('groups.group','Group',select=1,help='A group linked',readonly=False,ondelete='restrict',),
115
150
        'wrong_seances' : fields.boolean('Wrong Seances',select=1),
116
151
        'holidays_calendar_id' : fields.many2one('school.holidays_calendar',string="Holidays Calendar",ondelete="set null",),
117
152
        'teachers' : fields.one2many('school.teacher_classe','classe_id',string='Teachers',help="Teachers for assign on the seance creation",),
 
153
        'seance_teachers' : fields.function(_get_seance_teachers, type='one2many', obj='school.teacher', method=True, string='Seance Teachers',),
 
154
        'one_teacher' : fields.function(lambda self,cr,uid,ids,field_name,arg,context={}: dict.fromkeys(ids), fnct_search = _search_seance_teachers, type='many2one', obj='school.teacher', method=True, string='Seance Teacher',),
118
155
        'days_no_work' : fields.function(_get_days_no_work, method = True, type = 'text', store = {
119
156
                            'school.classe': (lambda self,cr,uid,ids,context={}: ids,['holidays_calendar_id'], 10),
120
157
                            'holidays_calendar': (lambda self,cr,uid,ids,context={}: self.pool.get('school.classe').search(cr,uid,[('holidays_calendar_id','in',ids)]),['classe_ids','holiday_interval_ids'], 15),
186
223
        
187
224
school_teacher_seance()
188
225
 
 
226
class school_teacher(osv.osv):
 
227
    _name = 'school.teacher'
 
228
    _inherit = 'school.teacher'
 
229
    
 
230
    _columns = {
 
231
        'teacher_seance_ids' : fields.one2many('school.teacher_seance','teacher_id',string='Seances',),
 
232
    }
 
233
 
 
234
school_teacher()
189
235
 
190
236
class school_seance(osv.osv):
191
237
    _name = 'school.seance'
297
343
        date_min = None
298
344
        for (field,op,value) in args:
299
345
            trossos=field.split('.', 1)
300
 
            if trossos[0]=='contact_ids':
 
346
            if trossos[0]=='one_contact':
301
347
                if len(trossos)==1:
302
 
                    contact_args+=['|',('name',op,value),('first_name',op,value)]
 
348
                    if type(value) in (int,long):
 
349
                        contact_args+=[('id',op,value)]
 
350
                    else:
 
351
                        contact_args+=['|',('name',op,value),('first_name',op,value)]
303
352
                else:
304
353
                    contact_args+=[(trossos[1],op,value)]
305
354
            elif trossos[0] == 'date_to' and op == '<':
335
384
            trossos=field.split('.', 1)
336
385
            if trossos[0]=='one_teacher':
337
386
                if len(trossos)==1:
338
 
                    teacher_args+=[('teacher_name',op,value)]
 
387
                    if type(value) in (int,long):
 
388
                        teacher_args+=[('id',op,value)]
 
389
                    else:
 
390
                        teacher_args+=[('teacher_name',op,value)]
339
391
                else:
340
392
                    teacher_args+=[(trossos[1],op,value)]
341
393
            else:
352
404
 
353
405
    _columns = {
354
406
        'room_id' : fields.many2one('school.room','Room', required=False, select=1, help="The seance's room"),
355
 
        'teacher_id': fields.function(_main_teacher,type='many2one',obj='school.teacher',method=True,string="Main teacher",),
356
 
        'one_teacher' : fields.function(lambda self,cr,uid,ids,*a: dict.fromkeys(ids,False),type='many2one',obj='school.teacher',method=True,string="Search Teacher",fnct_search=_seance_for_teacher_search,select=1,help='For search seances by teacher'),
357
 
        'teachers' : fields.one2many('school.teacher_seance','seance_id',),
 
407
        'classe_id' : fields.many2one('school.classe', 'Class', required=True, help="The class", ondelete="cascade", readonly=True, select=1),
358
408
        'date' : fields.datetime('Date', required=True, select=1),
359
409
        'date_to' : fields.datetime('Date to', required=True, select=1,),
360
 
        'classe_id' : fields.many2one('school.classe', 'Class', required=True, help="The class", ondelete="cascade", readonly=True, select=1),
361
 
        'course_id': fields.related('classe_id','course_id',type='many2one',related='school.course'),
 
410
        'state' : fields.selection([('created', 'Created'),('ready','Ready'),('suspended','Suspended'),('wrong','Wrong'),
 
411
                                    ('opened', 'Editing'),
 
412
                                    ('closed', 'Closed')],
 
413
                                   'State',
 
414
                                   readonly=False,
 
415
                                   help="The state of the seance",select=True
 
416
                                  ),
 
417
        'change_state_log' : fields.text('Change State Log'),
 
418
 
 
419
        'teachers' : fields.one2many('school.teacher_seance','seance_id',),
362
420
        'group_id' : fields.function(_get_group, method=True, string="Group",
363
421
            type="many2one", obj='groups.group', select=1, store={
364
422
                'school.classe': ( lambda self, cr, uid, ids, context: self.pool.get('school.seance').search(cr, uid, [('classe_id','in',ids)]), ['group_id'], 10),
365
423
                'school.seance': ( lambda self, cr, uid, ids, context: ids, ['classe_id'],10),
366
424
                },
367
425
            ),
 
426
 
 
427
        'course_id': fields.related('classe_id','course_id',type='many2one',relation='school.course',string='Course'),
 
428
        'teacher_id': fields.function(_main_teacher,type='many2one',obj='school.teacher',method=True,string="Main teacher",),
368
429
        'contact_ids' : fields.function(_get_partinotes, type="one2many", obj='res.partner.contact', fnct_search=_seance_for_contact_search, string = "Students", method=True,multi='partinotes'),
369
430
        'annotation_ids' : fields.function( _get_partinotes, type='one2many', obj='contact.annotation', method=True,multi='partinotes'),
370
 
        'state' : fields.selection([('created', 'Created'),('ready','Ready'),('suspended','Suspended'),('wrong','Wrong'),
371
 
                                    ('opened', 'Editing'),
372
 
                                    ('closed', 'Closed')],
373
 
                                   'State',
374
 
                                   readonly=False,
375
 
                                   help="The state of the seance",select=True
376
 
                                  ),
377
 
        'change_state_log' : fields.text('Change State Log'),
 
431
        
 
432
        'one_teacher' : fields.function(lambda self,cr,uid,ids,*a: dict.fromkeys(ids,False),type='many2one',obj='school.teacher',method=True,string="Search Teacher",fnct_search=_seance_for_teacher_search,select=1,help='For search seances by teacher'),
 
433
        'one_contact' : fields.function(lambda self,cr,uid,ids,*a: dict.fromkeys(ids,False), type="many2one", obj='res.partner.contact', fnct_search=_seance_for_contact_search, string = "Search Student", method=True,),
 
434
        
 
435
        'seance_key' : fields.function(lambda self,cr,uid,ids,name,arg,context={}:
 
436
                                       dict([(x.id,
 
437
                                                '%s-%s-%s' % (x.course_id.code,x.room_id.name,x.group_id.name)) for x in self.browse(cr,uid,ids,context=context)]),
 
438
                                        type='char', size=200, string='Seance key',
 
439
                                        method=True,), 
378
440
    }
379
441
 
380
442
    _order = 'date'