changeset 2826:75bf4e4ad75a

task #14735: Upgrade to Tryton 4.6 Kernel. Migrate health_lab
author Luis Falcon <falcon@gnu.org>
date Fri, 15 Dec 2017 20:35:13 +0000
parents 101e97525bc2
children ba6372735921
files tryton/health_lab/__init__.py tryton/health_lab/data/health_lab_sequences.xml tryton/health_lab/data/lab_test_data.xml tryton/health_lab/health_lab.py
diffstat 4 files changed, 109 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/tryton/health_lab/__init__.py
+++ b/tryton/health_lab/__init__.py
@@ -30,6 +30,7 @@
 def register():
     Pool.register(
         GnuHealthSequences,
+        GnuHealthSequenceSetup,
         PatientData,
         TestType,
         Lab,
--- a/tryton/health_lab/data/health_lab_sequences.xml
+++ b/tryton/health_lab/data/health_lab_sequences.xml
@@ -14,12 +14,6 @@
             <field name="padding">3</field>
         </record>
 
-        <record model="ir.property" id="property_lab_sequence">
-            <field name="field"
-                search="[('model.model', '=', 'gnuhealth.sequences'), ('name', '=', 'lab_sequence')]"/>
-            <field name="value" eval="'ir.sequence,' + str(ref('seq_gnuhealth_lab_test'))"/>
-        </record>
-
         <!-- Sequences for lab request -->
         <record id="seq_type_gnuhealth_lab_request" model="ir.sequence.type">
             <field name="name">Lab Request</field>
@@ -30,12 +24,5 @@
             <field name="code">gnuhealth.patient.lab.test</field>
             <field name="padding">3</field>
         </record>
-
-        <record model="ir.property" id="property_lab_request_sequence">
-            <field name="field"
-                search="[('model.model', '=', 'gnuhealth.sequences'), ('name', '=', 'lab_request_sequence')]"/>
-            <field name="value" eval="'ir.sequence,' + str(ref('seq_gnuhealth_lab_request'))"/>
-        </record>
-
     </data>
 </tryton>
--- a/tryton/health_lab/data/lab_test_data.xml
+++ b/tryton/health_lab/data/lab_test_data.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1"?>
 <tryton>
     <data noupdate="0">
 
@@ -8,72 +8,72 @@
 
         <record id="product_template_semenanalysischarges0" model="product.template">
             <field name="name">Semen Analysis Charges</field>
-            <field eval="1.0" name="list_price"/>
-            <field eval="0.0" name="cost_price"/>
+            <field eval="1" name="list_price"/>
+            <field eval="0" name="cost_price"/>
             <field name="default_uom" ref="product.uom_unit"/>
             <field name="type">service</field>
         </record>
 
         <record id="product_template_bloodcounttestcharges0" model="product.template">
             <field name="name">Blood count test charges</field>
-            <field eval="1.0" name="list_price"/>
-            <field eval="0.0" name="cost_price"/>
+            <field eval="1" name="list_price"/>
+            <field eval="0" name="cost_price"/>
             <field name="default_uom" ref="product.uom_unit"/>
             <field name="type">service</field>
         </record>
 
         <record id="product_template_liverfunctiontestcharges0" model="product.template">
             <field name="name">Liver Function test charges</field>
-            <field eval="1.0" name="list_price"/>
-            <field eval="0.0" name="cost_price"/>
+            <field eval="1" name="list_price"/>
+            <field eval="0" name="cost_price"/>
             <field name="default_uom" ref="product.uom_unit"/>
             <field name="type">service</field>
         </record>
 
         <record id="product_template_stoolexaminationcharges0" model="product.template">
             <field name="name">Stool Examination Charges</field>
-            <field eval="1.0" name="list_price"/>
-            <field eval="0.0" name="cost_price"/>
+            <field eval="1" name="list_price"/>
+            <field eval="0" name="cost_price"/>
             <field name="default_uom" ref="product.uom_unit"/>
             <field name="type">service</field>
         </record>
 
         <record id="product_template_renalfunctiontestcharges0" model="product.template">
             <field name="name">Renal Function test charges</field>
-            <field eval="1.0" name="list_price"/>
-            <field eval="0.0" name="cost_price"/>
+            <field eval="1" name="list_price"/>
+            <field eval="0" name="cost_price"/>
             <field name="default_uom" ref="product.uom_unit"/>
             <field name="type">service</field>
         </record>
 
         <record id="product_template_haematologycharges0" model="product.template">
             <field name="name">Haematology Charges</field>
-            <field eval="1.0" name="list_price"/>
-            <field eval="0.0" name="cost_price"/>
+            <field eval="1" name="list_price"/>
+            <field eval="0" name="cost_price"/>
             <field name="default_uom" ref="product.uom_unit"/>
             <field name="type">service</field>
         </record>
 
         <record id="product_template_peripheralsmearexaminationcharges0" model="product.template">
             <field name="name">Peripheral Smear Examination Charges</field>
-            <field eval="1.0" name="list_price"/>
-            <field eval="0.0" name="cost_price"/>
+            <field eval="1" name="list_price"/>
+            <field eval="0" name="cost_price"/>
             <field name="default_uom" ref="product.uom_unit"/>
             <field name="type">service</field>
         </record>
 
         <record id="product_template_urineanalysischarges0" model="product.template">
             <field name="name">Urine Analysis charges</field>
-            <field eval="1.0" name="list_price"/>
-            <field eval="0.0" name="cost_price"/>
+            <field eval="1" name="list_price"/>
+            <field eval="0" name="cost_price"/>
             <field name="default_uom" ref="product.uom_unit"/>
             <field name="type">service</field>
         </record>
 
         <record id="product_template_endocrinology0" model="product.template">
             <field name="name">Endocrinology</field>
-            <field eval="1.0" name="list_price"/>
-            <field eval="0.0" name="cost_price"/>
+            <field eval="1" name="list_price"/>
+            <field eval="0" name="cost_price"/>
             <field name="default_uom" ref="product.uom_unit"/>
             <field name="type">service</field>
         </record>
@@ -322,9 +322,9 @@
             <field eval="&quot;&quot;&quot;Follicular Phase   : 3.0-12.0
 Midcycle              : 8.0-22.0
 Luteal phase        : 2.0-12.0
-Post menopausal : 35.0-151.0 &quot;&quot;&quot;" name="normal_range"/>
+Post menopausal : 35.0-151 &quot;&quot;&quot;" name="normal_range"/>
             <field eval="2.0" name="lower_limit"/>
-            <field eval="151.0" name="upper_limit"/>
+            <field eval="151" name="upper_limit"/>
             <field name="units" ref="gnuhealth_lab_test_units_iul0"/>
         </record>
 
@@ -374,7 +374,7 @@
             <field eval="&quot;&quot;&quot;HGB&quot;&quot;&quot;" name="name"/>
             <field eval="1" name="sequence"/>
             <field name="test_type_id" ref="gnuhealth_test_completebloodcount0"/>
-            <field eval="&quot;&quot;&quot;11.0-16.0&quot;&quot;&quot;" name="normal_range"/>
+            <field eval="&quot;&quot;&quot;11-16.0&quot;&quot;&quot;" name="normal_range"/>
             <field eval="11" name="lower_limit"/>
             <field eval="16" name="upper_limit"/>
             <field name="units" ref="gnuhealth_lab_test_units_gmdl0"/>
@@ -491,7 +491,7 @@
             <field eval="&quot;&quot;&quot;HCT&quot;&quot;&quot;" name="name"/>
             <field eval="3" name="sequence"/>
             <field name="test_type_id" ref="gnuhealth_test_completebloodcount0"/>
-            <field eval="&quot;&quot;&quot;37.0-50.0&quot;&quot;&quot;" name="normal_range"/>
+            <field eval="&quot;&quot;&quot;37.0-50&quot;&quot;&quot;" name="normal_range"/>
             <field eval="37" name="lower_limit"/>
             <field eval="50" name="upper_limit"/>
             <field name="units" ref="gnuhealth_lab_test_units_0"/>
@@ -626,9 +626,9 @@
             <field eval="&quot;&quot;&quot;Specific Gravity&quot;&quot;&quot;" name="name"/>
             <field eval="5" name="sequence"/>
             <field name="test_type_id" ref="gnuhealth_test_urineanalysis0"/>
-            <field eval="&quot;&quot;&quot;1.003-1.030&quot;&quot;&quot;" name="normal_range"/>
-            <field eval="1.003" name="lower_limit"/>
-            <field eval="1.030" name="upper_limit"/>
+            <field eval="&quot;&quot;&quot;103-130&quot;&quot;&quot;" name="normal_range"/>
+            <field eval="103" name="lower_limit"/>
+            <field eval="130" name="upper_limit"/>
         </record>
 
         <record id="gnuhealth_test_critearea_testosterone0" model="gnuhealth.lab.test.critearea">
@@ -1033,8 +1033,8 @@
             <field eval="&quot;&quot;&quot;BAS&quot;&quot;&quot;" name="name"/>
             <field eval="14" name="sequence"/>
             <field name="test_type_id" ref="gnuhealth_test_completebloodcount0"/>
-            <field eval="&quot;&quot;&quot;0.0-0.15&quot;&quot;&quot;" name="normal_range"/>
-            <field eval="0.0" name="lower_limit"/>
+            <field eval="&quot;&quot;&quot;0-0.15&quot;&quot;&quot;" name="normal_range"/>
+            <field eval="0" name="lower_limit"/>
             <field eval="0.15" name="upper_limit"/>
             <field name="units" ref="gnuhealth_lab_test_units_ul1"/>
         </record>
@@ -1043,8 +1043,8 @@
             <field eval="&quot;&quot;&quot;EO&quot;&quot;&quot;" name="name"/>
             <field eval="15" name="sequence"/>
             <field name="test_type_id" ref="gnuhealth_test_completebloodcount0"/>
-            <field eval="&quot;&quot;&quot;0.0-0.5&quot;&quot;&quot;" name="normal_range"/>
-            <field eval="0.0" name="lower_limit"/>
+            <field eval="&quot;&quot;&quot;0-0.5&quot;&quot;&quot;" name="normal_range"/>
+            <field eval="0" name="lower_limit"/>
             <field eval="0.5" name="upper_limit"/>
             <field name="units" ref="gnuhealth_lab_test_units_ul1"/>
         </record>
--- a/tryton/health_lab/health_lab.py
+++ b/tryton/health_lab/health_lab.py
@@ -21,27 +21,101 @@
 #
 ##############################################################################
 from datetime import datetime
-from trytond.model import ModelView, ModelSingleton, ModelSQL, fields, Unique
+from trytond.model import ModelView, ModelSingleton, ModelSQL, fields, \
+    Unique, ValueMixin
 from trytond.transaction import Transaction
 from trytond.pool import Pool
+from trytond import backend
+from trytond.tools.multivalue import migrate_property
 
 
-__all__ = ['GnuHealthSequences', 'PatientData', 'TestType', 'Lab',
+__all__ = ['GnuHealthSequences', 'GnuHealthSequenceSetup',
+    'PatientData', 'TestType', 'Lab',
     'GnuHealthLabTestUnits', 'GnuHealthTestCritearea',
     'GnuHealthPatientLabTest']
 
+sequences = ['lab_sequence', 'lab_request_sequence']
 
 class GnuHealthSequences(ModelSingleton, ModelSQL, ModelView):
     "Standard Sequences for GNU Health"
     __name__ = "gnuhealth.sequences"
 
-    lab_sequence = fields.Property(fields.Many2One('ir.sequence',
+    lab_sequence = fields.MultiValue(fields.Many2One('ir.sequence',
         'Lab Sequence', domain=[('code', '=', 'gnuhealth.lab')],
         required=True))
-    lab_request_sequence = fields.Property(fields.Many2One('ir.sequence',
+    lab_request_sequence = fields.MultiValue(fields.Many2One('ir.sequence',
         'Patient Lab Request Sequence', required=True,
         domain=[('code', '=', 'gnuhealth.patient.lab.test')]))
 
+    @classmethod
+    def multivalue_model(cls, field):
+        pool = Pool()
+
+        if field in sequences:
+            return pool.get('gnuhealth.sequence.setup')
+        return super(GnuHealthSequences, cls).multivalue_model(field)
+
+
+    @classmethod
+    def default_lab_request_sequence(cls):
+        return cls.multivalue_model(
+            'lab_request_sequence').default_lab_request_sequence()
+
+    @classmethod
+    def default_lab_sequence(cls):
+        return cls.multivalue_model(
+            'lab_sequence').default_lab_sequence()
+
+
+# SEQUENCE SETUP
+class GnuHealthSequenceSetup(ModelSQL, ValueMixin):
+    'GNU Health Sequences Setup'
+    __name__ = 'gnuhealth.sequence.setup'
+
+    lab_request_sequence = fields.Many2One('ir.sequence', 
+        'Lab Request Sequence', required=True,
+        domain=[('code', '=', 'gnuhealth.patient.lab.test')])
+
+
+    lab_sequence = fields.Many2One('ir.sequence', 
+        'Lab Result Sequence', required=True,
+        domain=[('code', '=', 'gnuhealth.lab')])
+  
+    @classmethod
+    def __register__(cls, module_name):
+        TableHandler = backend.get('TableHandler')
+        exist = TableHandler.table_exist(cls._table)
+
+        super(GnuHealthSequenceSetup, cls).__register__(module_name)
+
+        if not exist:
+            cls._migrate_MultiValue([], [], [])
+
+    @classmethod
+    def _migrate_property(cls, field_names, value_names, fields):
+        field_names.extend(sequences)
+        value_names.extend(sequences)
+        migrate_property(
+            'gnuhealth.sequences', field_names, cls, value_names,
+            fields=fields)
+
+    @classmethod
+    def default_lab_request_sequence(cls):
+        pool = Pool()
+        ModelData = pool.get('ir.model.data')
+        return ModelData.get_id(
+            'health_lab', 'seq_type_gnuhealth_lab_request')
+
+    @classmethod
+    def default_lab_sequence(cls):
+        pool = Pool()
+        ModelData = pool.get('ir.model.data')
+        return ModelData.get_id(
+            'health_lab', 'seq_type_gnuhealth_lab_test')
+    
+# END SEQUENCE SETUP , MIGRATION FROM FIELDS.MultiValue
+
+
 
 class PatientData(ModelSQL, ModelView):
     'Patient lab tests'