changeset 5063:ffc27c3ecc25

Fix bug #62021, DU: 5e not possible [x] update from int to varchar street number to meet openstreetmap requirements [x] Include the Unit parameter to be use in the form and in the OSM queries as a valid address subunit [x] Use "Unit" label for address_street_bis field [x] Use f-string in the address representation [x] Fix parent subdivsion
author Luis Falcon <falcon@gnuhealth.org>
date Wed, 16 Feb 2022 17:43:12 +0000
parents 5c5c827c0305
children c84902693efd
files tryton/health/health.py tryton/health/view/gnuhealth_du.xml tryton/scripts/upgrade/4.0/before.sql
diffstat 3 files changed, 28 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/tryton/health/health.py
+++ b/tryton/health/health.py
@@ -110,37 +110,40 @@
         du_addr = ''
         # Street
         if (self.address_street):
-            du_addr = str(self.address_street) + ' ' + \
-                str(self.address_street_number) + "\n"
+            du_addr = f"{self.address_street} {self.address_street_number} " \
+                f"{self.address_street_bis}\n"
+
+        if (self.address_city):
+            du_addr = f"{du_addr}{self.address_city}\n"
 
         # Grab the parent subdivisions
         if (self.address_subdivision):
-            du_addr = du_addr + \
-                str(self.get_parent(subdivision=self.address_subdivision))
+            du_addr = f"{du_addr}\n" \
+                f"{self.get_parent(subdivision=self.address_subdivision)}"
 
         # Zip Code
         if (self.address_zip):
-            du_addr = du_addr + " - " + self.address_zip
+            du_addr = f"{du_addr} - {self.address_zip}"
 
         # Country
         if (self.address_country):
-            du_addr = du_addr + "\n" + self.address_country.rec_name
+            du_addr = f"{du_addr}\n {self.address_country.rec_name}"
 
         return du_addr
 
     name = fields.Char('Code', required=True)
     desc = fields.Char('Desc')
     address_street = fields.Char('Street')
-    address_street_number = fields.Integer('Number')
-    address_street_bis = fields.Char('Apartment')
+    address_street_number = fields.Char('Number')
+    address_street_bis = fields.Char('Unit')
 
     address_district = fields.Char(
         'District', help="Neighborhood, Village, Barrio....")
 
     address_municipality = fields.Char(
         'Municipality', help="Municipality, Township, county ..")
-    address_city = fields.Char('City')
-    address_zip = fields.Char('Zip Code')
+    address_city = fields.Char('City', help="City / Municipality")
+    address_zip = fields.Char('Zip')
     address_country = fields.Many2One(
         'country.country', 'Country', help='Country')
 
@@ -223,8 +226,8 @@
     members = fields.One2Many('party.party', 'du', 'Members', readonly=True)
 
     @fields.depends('latitude', 'longitude', 'address_street',
-                    'address_street_number', 'address_district',
-                    'address_municipality', 'address_city',
+                    'address_street_bis', 'address_street_number',
+                    'address_district', 'address_municipality', 'address_city',
                     'address_zip', 'address_subdivision', 'address_country')
     def on_change_with_urladdr(self):
         # Generates the URL to be used in OpenStreetMap
@@ -247,11 +250,13 @@
 
         else:
             state = country = postalcode = city = municipality = \
-                street = number = ''
+                street = number = unit = ''
             if self.address_street_number is not None:
-                number = str(self.address_street_number)
+                number = self.address_street_number
             if self.address_street:
                 street = self.address_street
+            if self.address_street_bis:
+                unit = self.address_street_bis
             if self.address_municipality:
                 municipality = self.address_municipality
             if self.address_city:
@@ -266,7 +271,9 @@
             parts['netloc'] = 'nominatim.openstreetmap.org'
             parts['path'] = 'search'
             parts['query'] = urlencode(
-                {'street': ' '.join([number, street]).strip(),
+                {'street': ' '.join(
+                    [number, street]).strip(),
+                 'unit': unit,
                  'county': municipality,
                  'city': city,
                  'state': state,
--- a/tryton/health/view/gnuhealth_du.xml
+++ b/tryton/health/view/gnuhealth_du.xml
@@ -13,6 +13,9 @@
             <field name="address_street_number"/>
             <label name="address_street_bis"/>
             <field name="address_street_bis"/>
+            <newline/>
+            <label name="address_city"/>
+            <field name="address_city"/>
             <label name="address_zip"/>
             <field name="address_zip"/>
             <label name="address_country"/>
--- a/tryton/scripts/upgrade/4.0/before.sql
+++ b/tryton/scripts/upgrade/4.0/before.sql
@@ -45,5 +45,7 @@
 UPDATE account_invoice_line SET party = (SELECT party FROM account_invoice WHERE id = account_invoice_line.invoice) WHERE party IS NOT NULL;
 
 -- [SQL] before update, add access on field
-ALTER TABLE ir_model_field ADD COLUMN "access" BOOLEAN
+ALTER TABLE ir_model_field ADD COLUMN "access" BOOLEAN;
 
+-- Update / cast Domiciliary Unit field from INT to VARCHAR to meet openstreetmap requirements
+alter table gnuhealth_du alter column "address_street_number" SET DATA type varchar using address_street_number::varchar;