← Back to team overview

openerp-india team mailing list archive

[Bug 1132894] [NEW] Move elements in view architecture instead of delete and reinsert them

 

Public bug reported:

Sometimes we need to move an element to another position in the view.
Other installed modules may have touched them and added or changes some
attributes. If we first delete the field or group or whatever and then
reinsert at the new position (with copy and paste from the "original"
xml definition) we may loose those modifications.

There should be a way to simply move the element to the new position and
keeping its  attributes and content.

      <xpath expr="//field[@name='function']" position="move" before="//label[@for='street']"/>
      <xpath expr="//field[@name='title']" position="move" after="//field[@name='function']"/>

I figured out a way with small changes to
osv/orm.py/BaseModel::fields_view_get()::apply_inheritance_specs()

                     elif pos == 'attributes':
                         for child in spec.getiterator('attribute'):
                             attribute = (child.get('name'), child.text and child.text.encode('utf8') or None)
                             if attribute[1]:
                                 node.set(attribute[0], attribute[1])
                             else:
                                 del(node.attrib[attribute[0]])
+                    elif pos == 'move':
+                        expr2 = spec.get('before')
+                        if expr2:
+                            move_after = False
+                        else:
+                            move_after = True
+                            expr2 = spec.get('after')
+                        if expr2 is None:
+                            raise_view_error("New position to move to is missing.", inherit_id)
+                        node2 = source.xpath(expr2)
+                        node2 = node2[0] if node2 else None
+                        if node2 is None:
+                            raise_view_error("Invalid position to move to.", inherit_id)
+                        parent2 = node2.getparent()
+                        node2_index = parent2.index(node2)
+                        parent2.insert(node2_index + (1 if move_after else 0), node)
                     else:

** Affects: openobject-server
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of OpenERP
Indian Team, which is subscribed to OpenERP Server.
https://bugs.launchpad.net/bugs/1132894

Title:
  Move elements in view architecture instead of delete and reinsert them

Status in OpenERP Server:
  New

Bug description:
  Sometimes we need to move an element to another position in the view.
  Other installed modules may have touched them and added or changes
  some attributes. If we first delete the field or group or whatever and
  then reinsert at the new position (with copy and paste from the
  "original" xml definition) we may loose those modifications.

  There should be a way to simply move the element to the new position
  and keeping its  attributes and content.

        <xpath expr="//field[@name='function']" position="move" before="//label[@for='street']"/>
        <xpath expr="//field[@name='title']" position="move" after="//field[@name='function']"/>

  I figured out a way with small changes to
  osv/orm.py/BaseModel::fields_view_get()::apply_inheritance_specs()

                       elif pos == 'attributes':
                           for child in spec.getiterator('attribute'):
                               attribute = (child.get('name'), child.text and child.text.encode('utf8') or None)
                               if attribute[1]:
                                   node.set(attribute[0], attribute[1])
                               else:
                                   del(node.attrib[attribute[0]])
  +                    elif pos == 'move':
  +                        expr2 = spec.get('before')
  +                        if expr2:
  +                            move_after = False
  +                        else:
  +                            move_after = True
  +                            expr2 = spec.get('after')
  +                        if expr2 is None:
  +                            raise_view_error("New position to move to is missing.", inherit_id)
  +                        node2 = source.xpath(expr2)
  +                        node2 = node2[0] if node2 else None
  +                        if node2 is None:
  +                            raise_view_error("Invalid position to move to.", inherit_id)
  +                        parent2 = node2.getparent()
  +                        node2_index = parent2.index(node2)
  +                        parent2.insert(node2_index + (1 if move_after else 0), node)
                       else:

To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-server/+bug/1132894/+subscriptions


Follow ups

References