Projet

Général

Profil

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

Benjamin Dauvergne, 15 mai 2017 12:07

Télécharger (4,97 ko)

Voir les différences:

Subject: [PATCH] feeder: import boolean form's fields (fixes #13612)

 wcs_olap/feeder.py | 63 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 34 insertions(+), 29 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:
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
-