def domains_get(self, record): screen_domain = domain_inversion(record.group.domain4inversion, self.name, EvalEnvironment(record)) if isinstance(screen_domain, bool) and not screen_domain: screen_domain = [('id', '=', None)] elif isinstance(screen_domain, bool) and screen_domain: screen_domain = [] attr_domain = record.expr_eval(self.attrs.get('domain', [])) return screen_domain, attr_domain
def domains_get(self, record): screen_domain = domain_inversion(record.group.domain4inversion, self.name, EvalEnvironment(record)) if isinstance(screen_domain, bool) and not screen_domain: screen_domain = [('id', '=', False)] elif isinstance(screen_domain, bool) and screen_domain: screen_domain = [] attr_domain = record.expr_eval(self.attrs.get('domain', [])) return screen_domain, attr_domain
def display(self, force=False): self.treeview.display_counter += 1 current_record = self.record if (force or not self.treeview.get_model() or self.group != self.treeview.get_model().group): model = AdaptModelGroup(self.group, self.children_field, self.children_definitions) self.treeview.set_model(model) # __select_changed resets current_record to None self.record = current_record if current_record: selection = self.treeview.get_selection() path = current_record.get_index_path(model.group) # JCA : Check selection is not empty before updateing path if selection: selection.select_path(path) if not current_record: selection = self.treeview.get_selection() selection.unselect_all() self.treeview.queue_draw() if self.editable: self.set_state() self.update_arrow() self.update_sum() # Set column visibility depending on attributes and domain domain = [] if self.screen.domain: domain.append(self.screen.get_domain()) tab_domain = self.screen.screen_container.get_tab_domain() if tab_domain: domain.append(tab_domain) domain = simplify(domain) decoder = PYSONDecoder(self.screen.context) for column in self.treeview.get_columns(): name = column.name if not name: continue widget = self.get_column_widget(column) if current_record and widget.editable: widget.set_editable(current_record) if decoder.decode(widget.attrs.get('tree_invisible', '0')): column.set_visible(False) elif name == self.screen.exclude_field: column.set_visible(False) else: inv_domain = domain_inversion(domain, name) if not isinstance(inv_domain, bool): inv_domain = simplify(inv_domain) unique, _, _ = unique_value(inv_domain) column.set_visible(not unique or bool(self.children_field))
def display(self): self.treeview.display_counter += 1 current_record = self.screen.current_record if (self.reload or not self.treeview.get_model() or (self.screen.group != self.treeview.get_model().group)): model = AdaptModelGroup(self.screen.group, self.children_field) self.treeview.set_model(model) # __select_changed resets current_record to None self.screen.current_record = current_record if current_record: selection = self.treeview.get_selection() path = model.on_get_path(current_record) selection.select_path(path) self.reload = False if not current_record: selection = self.treeview.get_selection() selection.unselect_all() self.treeview.queue_draw() if self.editable: self.set_state() self.update_sum() # Set column visibility depending on attributes and domain domain = [] if self.screen.domain: domain.append(self.screen.domain) tab_domain = self.screen.screen_container.get_tab_domain() if tab_domain: domain.append(tab_domain) domain = simplify(domain) for column in self.treeview.get_columns(): name = column.name if not name: continue widget = self.get_column_widget(column) if widget.attrs.get('tree_invisible', False): column.set_visible(False) elif name == self.screen.exclude_field: column.set_visible(False) else: inv_domain = domain_inversion(domain, name) if not isinstance(inv_domain, bool): inv_domain = simplify(inv_domain) unique, _, _ = unique_value(inv_domain) column.set_visible(not unique or bool(self.children_field))
def validate(self, record, softvalidation=False, pre_validate=None): invalid = False ldomain = localize_domain( domain_inversion(record.group.clean4inversion(pre_validate or []), self.name, EvalEnvironment(record)), self.name) if isinstance(ldomain, bool): if ldomain: ldomain = [] else: ldomain = [('id', '=', None)] for record2 in record.value.get(self.name, []): if not record2.loaded and record2.id >= 0 and not pre_validate: continue if not record2.validate(softvalidation=softvalidation, pre_validate=ldomain): invalid = 'children' test = super(O2MField, self).validate(record, softvalidation, pre_validate) if test and invalid: self.get_state_attrs(record)['invalid'] = invalid return False return test
def validate(self, record, softvalidation=False, pre_validate=None): if self.attrs.get('readonly'): return True invalid = False ldomain = localize_domain(domain_inversion( record.group.clean4inversion(pre_validate or []), self.name, EvalEnvironment(record)), self.name) if isinstance(ldomain, bool): if ldomain: ldomain = [] else: ldomain = [('id', '=', None)] for record2 in record.value.get(self.name, []): if not record2.loaded and record2.id >= 0 and not pre_validate: continue if not record2.validate(softvalidation=softvalidation, pre_validate=ldomain): invalid = 'children' test = super(O2MField, self).validate(record, softvalidation, pre_validate) if test and invalid: self.get_state_attrs(record)['invalid'] = invalid return False return test
def display(self, force=False): self.treeview.display_counter += 1 current_record = self.record if (force or not self.treeview.get_model() or self.group != self.treeview.get_model().group): model = AdaptModelGroup(self.group, self.children_field) self.treeview.set_model(model) # __select_changed resets current_record to None self.record = current_record if current_record: selection = self.treeview.get_selection() path = current_record.get_index_path(model.group) selection.select_path(path) # The search column must be set each time the model is changed self.treeview.set_search_column(0) if not current_record: selection = self.treeview.get_selection() selection.unselect_all() self.treeview.queue_draw() if self.editable: self.set_state() self.update_arrow() self.update_sum() # Set column visibility depending on attributes and domain domain = [] if self.screen.domain: domain.append(self.screen.domain) tab_domain = self.screen.screen_container.get_tab_domain() if tab_domain: domain.append(tab_domain) domain = simplify(domain) decoder = PYSONDecoder(self.screen.context) tree_column_optional = self.screen.tree_column_optional.get( self.view_id, {}) for column in self.treeview.get_columns(): name = column.name if not name: continue widget = self.get_column_widget(column) widget.set_editable() if column.name in tree_column_optional: optional = tree_column_optional[column.name] else: optional = bool(int(widget.attrs.get('optional', '0'))) invisible = decoder.decode(widget.attrs.get('tree_invisible', '0')) if invisible or optional: column.set_visible(False) elif name == self.screen.exclude_field: column.set_visible(False) else: inv_domain = domain_inversion(domain, name) if not isinstance(inv_domain, bool): inv_domain = simplify(inv_domain) unique, _, _ = unique_value(inv_domain) column.set_visible(not unique or bool(self.children_field)) if self.children_field: for i, column in enumerate(self.treeview.get_columns()): if self.draggable and not i: continue if column.get_visible(): self.treeview.set_expander_column(column) break