From a108da37f541a6c0e6e2c2bea8453e20cc156576 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sun, 14 May 2017 15:15:33 +0200 Subject: [PATCH] feeder: import boolean form's fields (fixes #13612) --- wcs_olap/feeder.py | 63 +++++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/wcs_olap/feeder.py b/wcs_olap/feeder.py index c39bf40..1931482 100644 --- a/wcs_olap/feeder.py +++ b/wcs_olap/feeder.py @@ -531,35 +531,37 @@ class WcsFormdefFeeder(object): if self.formdef.schema.workflow: fields += self.formdef.schema.workflow.fields for field in fields: - if not field.type == 'item': - continue if field.anonymise is True: continue if not field.varname: continue if field.varname in duplicated_varnames: continue - self.fields.append(field) - comment = (u'valeurs du champ « %s » du formulaire %s' - % (field.label, self.formdef.schema.name)) - table_name = self.hash_table_name('{formdata_table}_field_%s' % field.varname) - # create table and mapping - if field.items: - self.create_labeled_table(table_name, enumerate(field.items), - comment=comment) - self.items_mappings[field.varname] = dict( - (item, i) for i, item in enumerate(field.items)) - elif field.options: - options = enumerate(field.options) - self.create_labeled_table(table_name, [(i, o['label']) for i, o in options], - comment=comment) - self.items_mappings[field.varname] = dict((o['value'], i) for i, o in options) - else: - # open item field, from data sources... - self.create_labeled_table(table_name, [], serial=True, comment=comment) - at = 'field_%s' % field.varname - columns.append([at, 'smallint REFERENCES %s (id)' % table_name]) + if field.type == 'item': + comment = (u'valeurs du champ « %s » du formulaire %s' + % (field.label, self.formdef.schema.name)) + table_name = self.hash_table_name('{formdata_table}_field_%s' % field.varname) + # create table and mapping + if field.items: + self.create_labeled_table(table_name, enumerate(field.items), + comment=comment) + self.items_mappings[field.varname] = dict( + (item, i) for i, item in enumerate(field.items)) + elif field.options: + options = enumerate(field.options) + self.create_labeled_table(table_name, [(i, o['label']) for i, o in options], + comment=comment) + self.items_mappings[field.varname] = dict((o['value'], i) for i, o in options) + else: + # open item field, from data sources... + self.create_labeled_table(table_name, [], serial=True, comment=comment) + columns.append([at, 'smallint REFERENCES %s (id)' % table_name]) + elif field.type == 'bool': + columns.append([at, 'boolean']) + else: + continue + self.fields.append(field) comments[at] = field.label # add geolocation fields @@ -674,20 +676,23 @@ class WcsFormdefFeeder(object): for field in self.fields: v = None raw = None + if field.varname in data.fields: + raw = data.fields[field.varname] + elif field.varname in data.workflow.fields: + raw = data.workflow.fields[field.varname] + else: + raw = None if field.type == 'item': - if field.varname in data.fields: - raw = data.fields[field.varname] - elif field.varname in data.workflow.fields: - raw = data.workflow.fields[field.varname] - else: - raw = None # map items to sql id if field.items or field.options: v = self.items_mappings[field.varname].get(raw) else: v = raw and self.get_item_id(field, raw) + elif field.type == 'bool': + v = raw + # unstructured storage of field values - if field.varname and raw: + if field.varname and raw is not None: json_data[field.varname] = raw row['field_%s' % field.varname] = v -- 2.1.4