Projet

Général

Profil

0001-feeder-import-boolean-form-s-fields-fixes-13612.patch

Benjamin Dauvergne, 14 janvier 2019 10:57

Télécharger (5,14 ko)

Voir les différences:

Subject: [PATCH] =?UTF-8?q?feeder:=C2=B7import=C2=B7boolean=C2=B7form's?=
 =?UTF-8?q?=C2=B7fields=C2=B7(fixes=C2=B7#13612)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

 wcs_olap/feeder.py | 62 +++++++++++++++++++++++++---------------------
 1 file changed, 34 insertions(+), 28 deletions(-)
wcs_olap/feeder.py
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
                self.fields.append(field)
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
                field_def = 'smallint REFERENCES %s (id)' % table_name
560
            elif field.type == 'bool':
561
                field_def = 'boolean'
557 562
            else:
558
                # open item field, from data sources...
559
                self.create_labeled_table(table_name, [], serial=True, comment=comment)
560

  
563
                continue
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
700
-