changeset 1518:8f1e55df2c2a stable

Fix bugs #43085 Institution Specialty should be available on existing records only; #43083 Operational Sectors and Specialties for each institution must be unique and #43059 Error creating specialties on institutions
author Luis Falcon <falcon@gnu.org>
date Tue, 26 Aug 2014 19:06:22 +0100
parents 1878825c3caa
children 31e1d35784e2
files tryton/health/health.py
diffstat 1 files changed, 29 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/tryton/health/health.py
+++ b/tryton/health/health.py
@@ -797,21 +797,40 @@
     'Health Institution Specialties'
     __name__ = 'gnuhealth.institution.specialties'
 
-    name = fields.Many2One('gnuhealth.institution', 'Institution')
-    specialty = fields.Many2One('gnuhealth.specialty', 'Specialty')
+    name = fields.Many2One('gnuhealth.institution', 'Institution',
+        required=True)
+    specialty = fields.Many2One('gnuhealth.specialty', 'Specialty',
+        required=True)
 
     
     def get_rec_name(self, name):
-        if self.name:
+        if self.specialty:
             return self.specialty.name
 
+    @classmethod
+    def __setup__(cls):
+        super(HealthInstitutionSpecialties, cls).__setup__()
+        cls._sql_constraints = [
+            ('name_sp_uniq', 'UNIQUE(name, specialty)',
+                'The Specialty already exists for this institution'),
+        ]
 
 class HealthInstitutionOperationalSector(ModelSQL, ModelView):
     'Operational Sectors covered by Institution'
     __name__ = 'gnuhealth.institution.operationalsector'
 
-    name = fields.Many2One('gnuhealth.institution', 'Institution')
-    operational_sector = fields.Many2One('gnuhealth.operational_sector', 'Operational Sector')
+    name = fields.Many2One('gnuhealth.institution', 'Institution',
+        required=True)
+    operational_sector = fields.Many2One('gnuhealth.operational_sector',
+        'Operational Sector', required=True)
+
+    @classmethod
+    def __setup__(cls):
+        super(HealthInstitutionOperationalSector, cls).__setup__()
+        cls._sql_constraints = [
+            ('name_os_uniq', 'UNIQUE(name, operational_sector)',
+                'The Operational Sector already exists for this institution'),
+        ]
 
 class HealthInstitutionO2M(ModelSQL, ModelView):
     'Health Institution'
@@ -827,10 +846,11 @@
         domain=[('name', '=', Eval('active_id'))], depends=['specialties'], 
         help="Choose the speciality in the case of Specialized Hospitals" \
             " or where this center excels", 
-        states={'required': And(Eval('institution_type') == 'specialized',
-            Bool(Eval('specialties'))),
-            'readonly': Not(Bool(Eval('name'))),
-            'invisible':Not(Eval('institution_type') == 'specialized')})
+        
+        # Allow to select the institution specialty only if the record already
+        # exists
+        states={'required': Eval('institution_type') == 'specialized',
+            'readonly': Eval('id', 0) < 0})
 
     # Add Specialties to the Health Institution
     operational_sectors = fields.One2Many('gnuhealth.institution.operationalsector',