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