Exemple #1
0
 def set(self, record, value):
     from group import Group
     group = record.value.get(self.name)
     fields = {}
     if group is not None:
         fields = group.fields.copy()
         # Unconnect to prevent infinite loop
         group.signal_unconnect(group)
         group.destroy()
     elif record.model_name == self.attrs['relation']:
         fields = record.group.fields
     parent_name = self.attrs.get('relation_field', '')
     group = Group(self.attrs['relation'], {},
             parent=record, parent_name=parent_name,
             child_name=self.name,
             context=self.context,
             parent_datetime_field=self.attrs.get('datetime_field'))
     if record.value.get(self.name):
         group.record_removed.extend(record.value[self.name])
         group.record_deleted.extend(record.value[self.name].record_deleted)
         group.record_removed.extend(record.value[self.name].record_removed)
     record.value[self.name] = group
     group.fields = fields
     group.load(value)
     group.signal_connect(group, 'group-changed', self._group_changed)
     group.signal_connect(group, 'group-list-changed',
         self._group_list_changed)
     group.signal_connect(group, 'group-cleared', self._group_cleared)
     group.signal_connect(group, 'record-modified', self._record_modified)
Exemple #2
0
    def _set_value(self, record, value, default=False):
        from group import Group

        if not value or (len(value) and isinstance(value[0], (int, long))):
            mode = 'list ids'
        else:
            mode = 'list values'

        group = record.value.get(self.name)
        fields = {}
        if group is not None:
            fields = group.fields.copy()
            # Unconnect to prevent infinite loop
            group.signal_unconnect(group)
            group.destroy()
        elif record.model_name == self.attrs['relation']:
            fields = record.group.fields
        if fields:
            fields = dict((fname, field.attrs)
                for fname, field in fields.iteritems())
        if mode == 'list values' and len(value):
            context = self.context_get(record)
            field_names = set(f for v in value for f in v if f not in fields)
            if field_names:
                try:
                    fields.update(RPCExecute('model', self.attrs['relation'],
                            'fields_get', list(field_names),
                            main_iteration=False, context=context))
                except RPCException:
                    return

        parent_name = self.attrs.get('relation_field', '')
        group = Group(self.attrs['relation'], fields,
            parent=record, parent_name=parent_name,
            child_name=self.name,
            context=self.context,
            parent_datetime_field=self.attrs.get('datetime_field'))
        record.value[self.name] = group
        if mode == 'list ids':
            group.load(value)
        else:
            for vals in value:
                new_record = record.value[self.name].new(default=False)
                if default:
                    new_record.set_default(vals)
                    group.add(new_record)
                else:
                    new_record.id *= -1  # Don't consider record as unsaved
                    new_record.set(vals)
                    group.append(new_record)
        group.signal_connect(group, 'group-changed', self._group_changed)
        group.signal_connect(group, 'group-list-changed',
            self._group_list_changed)
        group.signal_connect(group, 'group-cleared', self._group_cleared)
        group.signal_connect(group, 'record-modified', self._record_modified)
        return group
    def set_default(self, record, value, modified=False):
        from group import Group

        # value is a list of id
        if value and len(value) and isinstance(value[0], (int, long)):
            return self.set(record, value, modified=modified)

        group = record.value.get(self.name)
        fields = {}
        if group is not None:
            fields = group.fields.copy()
            # Unconnect to prevent infinite loop
            group.signal_unconnect(group)
            group.destroy()
        elif record.model_name == self.attrs['relation']:
            fields = record.group.fields
        if fields:
            fields = dict((fname, field.attrs)
                for fname, field in fields.iteritems())
        if value and len(value):
            context = self.context_get(record)
            field_names = []
            for val in value:
                for fieldname in val.keys():
                    if (fieldname not in field_names
                            and fieldname not in fields):
                        field_names.append(fieldname)
            if field_names:
                try:
                    fields.update(RPCExecute('model', self.attrs['relation'],
                            'fields_get', field_names, context=context))
                except RPCException:
                    return False

        parent_name = self.attrs.get('relation_field', '')
        group = Group(self.attrs['relation'], fields,
                parent=record, parent_name=parent_name, child_name=self.name,
                context=self.context,
                parent_datetime_field=self.attrs.get('datetime_field'))
        if record.value.get(self.name):
            group.record_deleted.extend(x for x in record.value[self.name]
                if x.id >= 0)
            group.record_deleted.extend(record.value[self.name].record_deleted)
            group.record_removed.extend(record.value[self.name].record_removed)
        record.value[self.name] = group
        for vals in (value or []):
            new_record = record.value[self.name].new(default=False)
            new_record.set_default(vals, modified=modified)
            group.add(new_record)
        group.signal_connect(group, 'group-changed', self._group_changed)
        group.signal_connect(group, 'group-list-changed',
            self._group_list_changed)
        group.signal_connect(group, 'group-cleared', self._group_cleared)
        group.signal_connect(group, 'record-modified', self._record_modified)
        return True
Exemple #4
0
 def _set_default_value(self, record):
     if record.value.get(self.name) is not None:
         return
     from group import Group
     parent_name = self.attrs.get('relation_field', '')
     group = Group(self.attrs['relation'], {},
             parent=record,
             parent_name=parent_name,
             child_name=self.name,
             context=self.context,
             parent_datetime_field=self.attrs.get('datetime_field'))
     if record.model_name == self.attrs['relation']:
         group.fields = record.group.fields
     group.signal_connect(group, 'group-changed', self._group_changed)
     group.signal_connect(group, 'group-list-changed',
         self._group_list_changed)
     group.signal_connect(group, 'group-cleared', self._group_cleared)
     group.signal_connect(group, 'record-modified', self._record_modified)
     record.value[self.name] = group