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 or '-' in 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)
|
|
540 |
if field.type == 'item':
|
|
541 |
comment = (u'valeurs du champ « %s » du formulaire %s'
|
|
542 |
% (field.label, self.formdef.schema.name))
|
|
543 |
table_name = self.hash_table_name('{formdata_table}_field_%s' % field.varname)
|
|
544 |
# create table and mapping
|
|
545 |
if field.items:
|
|
546 |
self.create_labeled_table(table_name, enumerate(field.items),
|
|
547 |
comment=comment)
|
|
548 |
self.items_mappings[field.varname] = dict(
|
|
549 |
(item, i) for i, item in enumerate(field.items))
|
|
550 |
elif field.options:
|
|
551 |
options = enumerate(field.options)
|
|
552 |
self.create_labeled_table(table_name, [(i, o['label']) for i, o in options],
|
|
553 |
comment=comment)
|
|
554 |
self.items_mappings[field.varname] = dict((o['value'], i) for i, o in options)
|
|
555 |
else:
|
|
556 |
# open item field, from data sources...
|
|
557 |
self.create_labeled_table(table_name, [], serial=True, comment=comment)
|
|
558 |
field_def = 'smallint REFERENCES %s (id)' % table_name
|
|
559 |
elif field.type == 'bool':
|
|
560 |
field_def = 'boolean'
|
557 |
561 |
else:
|
558 |
|
# open item field, from data sources...
|
559 |
|
self.create_labeled_table(table_name, [], serial=True, comment=comment)
|
560 |
|
|
|
562 |
continue
|
|
563 |
self.fields.append(field)
|
561 |
564 |
at = 'field_%s' % field.varname
|
562 |
|
columns.append([at, 'smallint REFERENCES %s (id)' % table_name])
|
|
565 |
columns.append([at, field_def])
|
563 |
566 |
comments[at] = field.label
|
564 |
567 |
|
565 |
568 |
# add geolocation fields
|
... | ... | |
680 |
683 |
for field in self.fields:
|
681 |
684 |
v = None
|
682 |
685 |
raw = None
|
|
686 |
if field.varname in data.fields:
|
|
687 |
raw = data.fields[field.varname]
|
|
688 |
elif field.varname in data.workflow.fields:
|
|
689 |
raw = data.workflow.fields[field.varname]
|
|
690 |
else:
|
|
691 |
raw = None
|
683 |
692 |
if field.type == 'item':
|
684 |
|
if field.varname in data.fields:
|
685 |
|
raw = data.fields[field.varname]
|
686 |
|
elif field.varname in data.workflow.fields:
|
687 |
|
raw = data.workflow.fields[field.varname]
|
688 |
|
else:
|
689 |
|
raw = None
|
690 |
693 |
# map items to sql id
|
691 |
694 |
if field.items or field.options:
|
692 |
695 |
v = self.items_mappings[field.varname].get(raw)
|
693 |
696 |
else:
|
694 |
697 |
v = raw and self.get_item_id(field, raw)
|
|
698 |
elif field.type == 'bool':
|
|
699 |
v = raw
|
|
700 |
|
695 |
701 |
# unstructured storage of field values
|
696 |
|
if field.varname and raw:
|
|
702 |
if field.varname and raw is not None:
|
697 |
703 |
json_data[field.varname] = raw
|
698 |
704 |
|
699 |
705 |
row['field_%s' % field.varname] = v
|
... | ... | |
847 |
853 |
if self.formdef.schema.workflow:
|
848 |
854 |
fields += self.formdef.schema.workflow.fields
|
849 |
855 |
for field in fields:
|
850 |
|
if not field.type == 'item':
|
851 |
|
continue
|
852 |
856 |
if field.anonymise is True:
|
853 |
857 |
continue
|
854 |
858 |
if not field.varname:
|
855 |
859 |
continue
|
856 |
860 |
if '-' in field.varname:
|
857 |
861 |
continue
|
858 |
|
table_name = self.hash_table_name('{formdata_table}_field_%s' % field.varname)
|
859 |
|
cube['joins'].append({
|
860 |
|
'name': field.varname,
|
861 |
|
'table': table_name,
|
862 |
|
'master': 'field_%s' % field.varname,
|
863 |
|
'detail': 'id',
|
864 |
|
})
|
865 |
|
if not field.required:
|
866 |
|
cube['joins'][-1]['kind'] = 'full'
|
867 |
|
cube['dimensions'].append({
|
868 |
|
'name': field.varname,
|
869 |
|
'label': field.label.lower(),
|
870 |
|
'join': [field.varname],
|
871 |
|
'type': 'integer',
|
872 |
|
'value': '"%s".id' % field.varname,
|
873 |
|
'value_label': '"%s".label' % field.varname,
|
874 |
|
'filter': True,
|
875 |
|
})
|
|
862 |
join = None
|
|
863 |
|
|
864 |
if field.type == 'item':
|
|
865 |
table_name = self.hash_table_name('{formdata_table}_field_%s' % field.varname)
|
|
866 |
join = {
|
|
867 |
'name': field.varname,
|
|
868 |
'table': table_name,
|
|
869 |
'master': 'field_%s' % field.varname,
|
|
870 |
'detail': 'id',
|
|
871 |
}
|
|
872 |
if not field.required:
|
|
873 |
join['kind'] = 'full'
|
|
874 |
dimension = {
|
|
875 |
'name': field.varname,
|
|
876 |
'label': field.label.lower(),
|
|
877 |
'join': [field.varname],
|
|
878 |
'type': 'integer',
|
|
879 |
'value': '"%s".id' % field.varname,
|
|
880 |
'value_label': '"%s".label' % field.varname,
|
|
881 |
'filter': True,
|
|
882 |
}
|
|
883 |
elif field.type == 'bool':
|
|
884 |
dimension = {
|
|
885 |
'name': field.varname,
|
|
886 |
'label': field.label.lower(),
|
|
887 |
'type': 'bool',
|
|
888 |
'value': '"%s"' % field.varname,
|
|
889 |
'value_label': '(case when "%s" IS NOT NULL then \'Oui\' else \'Non\' end)' % field.varname,
|
|
890 |
'filter': True,
|
|
891 |
}
|
|
892 |
else:
|
|
893 |
continue
|
|
894 |
if join:
|
|
895 |
cube['joins'].append(join)
|
|
896 |
cube['dimensions'].append(dimension)
|
876 |
897 |
|
877 |
898 |
self.model['cubes'].append(cube)
|
878 |
899 |
if self.do_feed:
|
879 |
|
-
|