Beispiel #1
0
    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
Beispiel #2
0
 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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
    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
Beispiel #6
0
 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)
Beispiel #7
0
 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)