def postprocess(self, model, node, view_id, in_tree_view, model_fields): """Rajout des champs par défaut à la fields_view""" fields = super(IrUIView, self).postprocess(model, node, view_id, in_tree_view, model_fields) if node.tag == 'planning': modifiers = {} # Tous ces champs peuvent être définis comme attributs de la balise <planning> # et n'ont pas besoin d'être rajoutés dans l'architecture de la vue for additional_field in ('date_start', 'date_delay', 'date_stop', 'all_day', 'resource', 'color_bg', 'color_ft'): if node.get(additional_field): fields[node.get(additional_field)] = {} if not self._apply_group(model, node, modifiers, fields): # node must be removed, no need to proceed further with its children return fields # The view architeture overrides the python model. # Get the attrs before they are (possibly) deleted by check_group below orm.transfer_node_to_modifiers(node, modifiers, self._context, in_tree_view) for f in node: # useless here? if children or (node.tag == 'field' and f.tag in ('filter', 'separator')): fields.update( self.postprocess(model, f, view_id, in_tree_view, model_fields)) orm.transfer_modifiers_to_node(modifiers, node) return fields
def set_node_modifiers(self, nodes, node_modifiers): for node in nodes: #tomar los atributos actuales y solo modificar los nuevos modifiers_curr = node.get('modifiers', {}) try: modifiers_curr = json.loads(modifiers_curr) except: modifiers_curr = {} modifiers_curr.update(node_modifiers) transfer_modifiers_to_node(modifiers_curr, node) return nodes
def postprocess(self, model, node, view_id, in_tree_view, model_fields): fields = super(IrUiView, self).postprocess(model, node, view_id, in_tree_view, model_fields) if node.tag == 'field': remove = self._check_hidden_field(model, node.get('name')) if remove: modifiers = json.loads(node.get('modifiers')) if 'required' in modifiers and modifiers['required']: modifiers['invisible'] = True orm.transfer_modifiers_to_node(modifiers, node) else: node.getparent().remove(node) fields.pop(node.get('name'), None) return fields
def postprocess(self, model, node, view_id, in_tree_view, model_fields): fields = super(IrUiView, self).postprocess(model, node, view_id, in_tree_view, model_fields) if node.tag == 'field': if self._check_hidden_field(model, node.get('name')): modifiers = json.loads(node.get('modifiers')) if self._check_safe_mode(node): modifiers['invisible'] = True node.set('force_save', '1') orm.transfer_modifiers_to_node(modifiers, node) else: node.getparent().remove(node) fields.pop(node.get('name'), None) elif self._check_readonly_field(model, node.get('name')): modifiers = json.loads(node.get('modifiers')) modifiers['readonly'] = True node.set('force_save', '1') orm.transfer_modifiers_to_node(modifiers, node) return fields
def postprocess(self, model, node, view_id, in_tree_view, model_fields): """Return the description of the fields in the node. In a normal call to this method, node is a complete view architecture but it is actually possible to give some sub-node (this is used so that the method can call itself recursively). Originally, the field descriptions are drawn from the node itself. But there is now some code calling fields_get() in order to merge some of those information in the architecture. """ result = False fields = {} children = True modifiers = {} if model not in self.env: self.raise_view_error( _('Model not found: %(model)s') % dict(model=model), view_id) Model = self.env[model] if node.tag in ('field', 'node', 'arrow'): if node.get('object'): attrs = {} views = {} xml_form = E.form(*(f for f in node if f.tag == 'field')) xarch, xfields = self.with_context( base_model_name=model).postprocess_and_fields( node.get('object'), xml_form, view_id) views['form'] = { 'arch': xarch, 'fields': xfields, } attrs = {'views': views} fields = xfields if node.get('name'): attrs = {} field = Model._fields.get(node.get('name')) if field: children = False views = {} for f in node: if f.tag in ('form', 'tree', 'graph', 'kanban', 'calendar'): node.remove(f) xarch, xfields = self.with_context( base_model_name=model).postprocess_and_fields( field.comodel_name, f, view_id) views[str(f.tag)] = { 'arch': xarch, 'fields': xfields, } attrs = {'views': views} if field.comodel_name in self.env and field.type in ( 'many2one', 'many2many'): Comodel = self.env[field.comodel_name] node.set( 'can_create', 'true' if Comodel.check_access_rights( 'create', raise_exception=False) else 'false') node.set( 'can_write', 'true' if Comodel.check_access_rights( 'write', raise_exception=False) else 'false') fields[node.get('name')] = attrs field = model_fields.get(node.get('name')) if field: orm.transfer_field_to_modifiers(field, modifiers) elif node.tag in ('form', 'tree'): result = Model.view_header_get(False, node.tag) if result: node.set('string', result) in_tree_view = node.tag == 'tree' elif node.tag == 'calendar': for additional_field in ('date_start', 'date_delay', 'date_stop', 'color', 'all_day', 'attendee'): if node.get(additional_field): fields[node.get(additional_field)] = {} if not self._apply_group(model, node, modifiers, fields): # node must be removed, no need to proceed further with its children return fields # The view architeture overrides the python model. # Get the attrs before they are (possibly) deleted by check_group below extended_funct.transfer_node_to_modifiers(node, modifiers, self._context, in_tree_view) for f in node: if children or (node.tag == 'field' and f.tag in ('filter', 'separator')): fields.update( self.postprocess(model, f, view_id, in_tree_view, model_fields)) orm.transfer_modifiers_to_node(modifiers, node) return fields
def _set_page_attrs(self, tab_page): tab_page.set("string", self.tab_record.name) attrs = {"invisible": [(self.get_visible_fieldname(), "=", False)]} tab_page.set("attrs", repr(attrs)) transfer_modifiers_to_node(attrs, tab_page)
def _set_page_attrs(self, tab_page): tab_page.set('string', self.tab_record.name) attrs = {'invisible': [(self.get_visible_fieldname(), '=', False)]} tab_page.set('attrs', repr(attrs)) transfer_modifiers_to_node(attrs, tab_page)