~vauxoo/addons-vauxoo/trunk-upforward70-2-dev-moylop260

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# -*- encoding: utf-8 -*-
from osv import osv
from osv import fields
from tools.translate import _
import time

class Course(osv.osv):
    """
    OpenERP Model : openacademy
    """ 
    _name = 'openacademy.course'
    _description = 'Courses'  


    _columns = {
        'name':fields.char('Name', 64, required=True, translate=True),
        'description':fields.text('Description'),
        'responsible_id':fields.many2one('res.users', 'Responsible', required=False, ondelete='set null',select=True),
        'session_ids':fields.one2many('openacademy.session', 'course_id', 'Sessions', required=False),

    }


    def _check_description(self, cr, user, ids):
        for s in self.browse(cr,user,ids):
            if s.description==s.name:
                return False
        return True
    
    _constraints = [
        (_check_description, _('Error: Please try another different description and Name different between them'), ['name','description']),
    ]
    
    _sql_constraints = [
        ('name_uniq', 'unique(name)', _('The Name of the Courses must be unique !')),
    ]


    #Allow to make a duplicate Course
    def copy(self,cr,uid,id,defaults,context=None):
        previous_name = self.browse(cr,uid,id,context=context).name
        new_name= 'Copy of %s' % previous_name
        list=self.search(cr, uid, [('name','like',new_name)],context=context)
        if len(list)>0:
            new_name='%s (%s)' % (new_name,len(list)+1)
        defaults['name']=new_name
        return super(Course,self).copy(cr,uid,id,defaults,context=context)
Course()

class Session(osv.osv):
    """
    OpenERP Model : Session
    """
    
    _name = 'openacademy.session'
    _description = 'Sessions For Courses'


    def _get_remaining_seats_percent(self,seats,attendee_list):
        return seats and ((100.0 * (seats - len(attendee_list)))/ seats) or 0

    def _get_attendee_count(self, cr, uid, ids, name, args, context=None):
        res = {}
        for session in self.browse(cr, uid, ids, context=context):
            res[session.id] = len(session.attendee_ids)
        return res
        
    def _remaining_seats_percent(self, cr, uid, ids, field_name, arg, context):
        result = {}
        sessions=self.browse(cr,uid,ids,context)
        for s in sessions:
           result[s.id]=self._get_remaining_seats_percent(s.seats,s.attendee_ids)
        return result
        
    def onchange_remaining_seats(self, cr, user, ids, seats,attendee_ids):
        res={}
        if seats>=0:
            res['value'] ={ 'remaining_seats_percent': self._get_remaining_seats_percent(seats,attendee_ids),
                    }
        else:
            res['warning']={
                'title': 'Warning',
                'message': _('You cannot have negative seats'),
                }
        return res
            
    _columns = {
        'name':fields.char('Name', 64, required=True, readonly=False),
        'start_date': fields.date('Start Date'),
        'duration': fields.float('Duration', digits=(6,2), help="Duration in days"),
        'seats': fields.integer('Seats'),
        'course_id':fields.many2one('openacademy.course', 'Course', required=True),
        'instructor_id':fields.many2one('res.partner', 'Instructor', required=False, 
        domain=['|',('is_instructor','=',True),
        ('category_id.name','in',('Teacher Level 1','Teacher Level 2'))]
        ),
        'attendee_ids': fields.one2many('openacademy.attendee',
                                        'session_id', 'Attendees', ),
        'remaining_seats_percent':fields.function(_remaining_seats_percent,
                                method=True,type='float',
                                string='Remaining seats'),
        'active':fields.boolean('Active', required=False),
        'attendee_count': fields.function(_get_attendee_count,
                    type='integer', string='Attendee Count',
                    method=True),
        'state':fields.selection([
            ('draft','Draft'),
            ('confirmed','Confirmed'),
            ('done','Done'),
        ],'State', select=True, readonly=True),
    }
   
    def action_draft(self,cr,uid,ids,context=None):
        return self.write(cr,uid,ids,{'state':'draft'},context=context)
    
    def action_confirm(self,cr,uid,ids,context=None):
        return self.write(cr,uid,ids,{'state':'confirmed'},context=context)
    
    def action_done(self,cr,uid,ids,context=None):
        return self.write(cr,uid,ids,{'state':'done'},context=context)


    _defaults = {
    'start_date': lambda *a : time.strftime('%Y-%m-%d'),
    'active':True,
    'state':'draft',
    }
    
    def compara(self, cr, uid, context=None):
        #Business Object Compare
        return True
    
Session()

class Attendee(osv.osv):
    _name = 'openacademy.attendee'
    _rec_name = 'partner_id'
    _columns = {
            'partner_id': fields.many2one('res.partner','Partner',required=True,
            ondelete="cascade"),
            'session_id': fields.many2one('openacademy.session','Session',
            required=True,
            ondelete="cascade"),
    }
Attendee()