531 |
531 |
if self.formdef.schema.workflow:
|
532 |
532 |
fields += self.formdef.schema.workflow.fields
|
533 |
533 |
for field in fields:
|
534 |
|
if not field.type == 'item':
|
535 |
|
continue
|
536 |
534 |
if field.anonymise is True:
|
537 |
535 |
continue
|
538 |
536 |
if not field.varname:
|
539 |
537 |
continue
|
540 |
538 |
if field.varname in duplicated_varnames:
|
541 |
539 |
continue
|
542 |
|
self.fields.append(field)
|
543 |
|
comment = (u'valeurs du champ « %s » du formulaire %s'
|
544 |
|
% (field.label, self.formdef.schema.name))
|
545 |
|
table_name = self.hash_table_name('{formdata_table}_field_%s' % field.varname)
|
546 |
|
# create table and mapping
|
547 |
|
if field.items:
|
548 |
|
self.create_labeled_table(table_name, enumerate(field.items),
|
549 |
|
comment=comment)
|
550 |
|
self.items_mappings[field.varname] = dict(
|
551 |
|
(item, i) for i, item in enumerate(field.items))
|
552 |
|
elif field.options:
|
553 |
|
options = enumerate(field.options)
|
554 |
|
self.create_labeled_table(table_name, [(i, o['label']) for i, o in options],
|
555 |
|
comment=comment)
|
556 |
|
self.items_mappings[field.varname] = dict((o['value'], i) for i, o in options)
|
557 |
|
else:
|
558 |
|
# open item field, from data sources...
|
559 |
|
self.create_labeled_table(table_name, [], serial=True, comment=comment)
|
560 |
|
|
561 |
540 |
at = 'field_%s' % field.varname
|
562 |
|
columns.append([at, 'smallint REFERENCES %s (id)' % table_name])
|
|
541 |
if field.type == 'item':
|
|
542 |
comment = (u'valeurs du champ « %s » du formulaire %s'
|
|
543 |
% (field.label, self.formdef.schema.name))
|
|
544 |
table_name = self.hash_table_name('{formdata_table}_field_%s' % field.varname)
|
|
545 |
# create table and mapping
|
|
546 |
if field.items:
|
|
547 |
self.create_labeled_table(table_name, enumerate(field.items),
|
|
548 |
comment=comment)
|
|
549 |
self.items_mappings[field.varname] = dict(
|
|
550 |
(item, i) for i, item in enumerate(field.items))
|
|
551 |
elif field.options:
|
|
552 |
options = enumerate(field.options)
|
|
553 |
self.create_labeled_table(table_name, [(i, o['label']) for i, o in options],
|
|
554 |
comment=comment)
|
|
555 |
self.items_mappings[field.varname] = dict((o['value'], i) for i, o in options)
|
|
556 |
else:
|
|
557 |
# open item field, from data sources...
|
|
558 |
self.create_labeled_table(table_name, [], serial=True, comment=comment)
|
|
559 |
columns.append([at, 'smallint REFERENCES %s (id)' % table_name])
|
|
560 |
elif field.type == 'bool':
|
|
561 |
columns.append([at, 'boolean'])
|
|
562 |
else:
|
|
563 |
continue
|
|
564 |
self.fields.append(field)
|
563 |
565 |
comments[at] = field.label
|
564 |
566 |
|
565 |
567 |
# add geolocation fields
|
... | ... | |
674 |
676 |
for field in self.fields:
|
675 |
677 |
v = None
|
676 |
678 |
raw = None
|
|
679 |
if field.varname in data.fields:
|
|
680 |
raw = data.fields[field.varname]
|
|
681 |
elif field.varname in data.workflow.fields:
|
|
682 |
raw = data.workflow.fields[field.varname]
|
|
683 |
else:
|
|
684 |
raw = None
|
677 |
685 |
if field.type == 'item':
|
678 |
|
if field.varname in data.fields:
|
679 |
|
raw = data.fields[field.varname]
|
680 |
|
elif field.varname in data.workflow.fields:
|
681 |
|
raw = data.workflow.fields[field.varname]
|
682 |
|
else:
|
683 |
|
raw = None
|
684 |
686 |
# map items to sql id
|
685 |
687 |
if field.items or field.options:
|
686 |
688 |
v = self.items_mappings[field.varname].get(raw)
|
687 |
689 |
else:
|
688 |
690 |
v = raw and self.get_item_id(field, raw)
|
|
691 |
elif field.type == 'bool':
|
|
692 |
v = raw
|
|
693 |
|
689 |
694 |
# unstructured storage of field values
|
690 |
|
if field.varname and raw:
|
|
695 |
if field.varname and raw is not None:
|
691 |
696 |
json_data[field.varname] = raw
|
692 |
697 |
|
693 |
698 |
row['field_%s' % field.varname] = v
|
694 |
|
-
|