[PYTHON] ~fix bikecoop partner form: studies fields didn't appear when a studie occup...
[burette/eturecup.git] / eturecup.py
index b0cc60f..0b934ed 100644 (file)
@@ -2,7 +2,7 @@
 ##############################################################################
 #
 #    eturecup module for OpenERP, Custom module for Étu'Récup
-#    Copyright (C) 2014-2015 Étu'Récup (<http://www.eturecup.org/>)
+#    Copyright (C) 2014-2017 Étu'Récup (<http://www.eturecup.org/>)
 #
 #    This file is a part of eturecup
 #
@@ -21,7 +21,6 @@
 #
 ##############################################################################
 
-from openerp.osv import osv
 from openerp.osv import orm
 from openerp.osv import fields
 
@@ -29,19 +28,69 @@ from openerp.osv import fields
 class Partner(orm.Model):
     _inherit = 'res.partner'
 
+    def _get_bikecoop_theme_type(self, cr, uid, ids, name, args, context=None):
+        """Return themes type for selected partners"""
+        res = {}
+        partners = self.browse(cr, uid, ids, context=context)
+        for partner in partners:
+            res[partner.id] = False
+            if partner.occupation_id.type == 'studies':
+                res[partner.id] = True
+        return res
+
+    def onchange_occupation_id(self, cr, uid, ids, occupation_id):
+        """Define if a partner is a student based on his/her occupation type"""
+        v = {}
+        partners = self.browse(cr, uid, ids)
+        occupations = self.pool.get('bikecoop.partner.theme')
+        occupation = occupations.browse(cr, uid, occupation_id)
+        if occupation.type == 'studies':
+                v['is_student'] = True
+        else:
+            v['is_student'] = False
+            v['is_scholarship'] = False
+
+        return {'value': v}
+
     _columns = {
-        'newsletter': fields.boolean('Do you want to receive our monthly newsletter?'),
+        'newsletter': fields.boolean(
+            'Do you want to receive our monthly newsletter?'),
+        'is_student': fields.function(_get_bikecoop_theme_type,
+                                      method=True,
+                                      string='Student?',
+                                      type='boolean',
+                                      store=True),
+        'is_scholarship': fields.boolean('Scholarship',
+                                         help='Is this student a scholarship?'),
         'want_to_be_volunteer': fields.boolean(
-            'Do you want to receive some informations about volunteer activities?',
+            'Do you want to receive some informations about volunteer \
+            activities?',
             help='… in company and its activities: bikecoop, events, …'),
     }
 
+    def _check_occupation_is_not_studies(self, cr, uid, ids, context=None):
+        """Check if partners are students. If not, they can't be
+        scholarships."""
+        partners = self.browse(cr, uid, ids, context=context)
+        for partner in partners:
+            if partner.occupation_id.type != 'studies':
+                if partner.is_scholarship:
+                    return False
+        return True
+
+    _constraints = [
+        (_check_occupation_is_not_studies, 'Error: This partner can\'t be a\
+         scholarship because s·he isn\'t a student.', ['is_scholarship']),
+    ]
+
 
 class Theme(orm.Model):
     _inherit = 'bikecoop.partner.theme'
 
     _columns = {
-        'type': fields.selection([('studies','Studies')], 'Type', help='An extra field to categorize themes.'),
+        'type': fields.selection([('studies', 'Studies')],
+                                 'Type',
+                                 help='An extra field to categorize themes.'),
     }