Browse Source

Merge pull request #24 from sudhir-serpentcs/9.0

[IMP] Improved the code to fix the issue #20 and feature to remove Specific or Remove All records from m2m field and also fixed the issue of modifiers.
Serpent Consulting Services Pvt. Ltd 7 years ago
parent
commit
ed174ed843
1 changed files with 37 additions and 7 deletions
  1. 37 7
      mass_editing/wizard/mass_editing_wizard.py

+ 37 - 7
mass_editing/wizard/mass_editing_wizard.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 # © 2016 Serpent Consulting Services Pvt. Ltd. (support@serpentcs.com)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
+import json
 from lxml import etree
 
 import openerp.tools as tools
@@ -49,6 +49,7 @@ class MassEditingWizard(models.TransientModel):
                         'string': field_info[field.name]['string'],
                         'selection': [('set', 'Set'),
                                       ('remove_m2m', 'Remove'),
+                                      ('remove_m2m_all', 'Remove All'),
                                       ('add', 'Add')]
                     }
                     xml_group = etree.SubElement(xml_group, 'group', {
@@ -75,16 +76,26 @@ class MassEditingWizard(models.TransientModel):
                     all_fields["selection__" + field.name] = {
                         'type': 'selection',
                         'string': field_info[field.name]['string'],
-                        'selection': [('set', 'Set'), ('remove', 'Remove')],
+                        'selection': [('set', 'Set'),
+                                      ('remove_o2m', 'Remove')],
                     }
                     all_fields[field.name] = {
                         'type': field.ttype,
                         'string': field.field_description,
                         'relation': field.relation,
                     }
+                    xml_group = etree.SubElement(xml_group, 'group', {
+                        'colspan': '6',
+                        'col': '6',
+                    })
+                    etree.SubElement(xml_group, 'separator', {
+                        'string': field_info[field.name]['string'],
+                        'colspan': '6',
+                    })
                     etree.SubElement(xml_group, 'field', {
                         'name': "selection__" + field.name,
-                        'colspan': '4',
+                        'colspan': '6',
+                        'nolabel': '1',
                     })
                     etree.SubElement(xml_group, 'field', {
                         'name': field.name,
@@ -227,13 +238,26 @@ class MassEditingWizard(models.TransientModel):
             root = xml_form.getroottree()
             result['arch'] = etree.tostring(root)
             result['fields'] = all_fields
+            doc = etree.XML(result['arch'])
+            for field in editing_data.field_ids:
+                field_name = "selection__" + field.name
+                for node in doc.xpath("//field[@name='" + field.name + "']"):
+                    modifiers = json.loads(node.get("modifiers", '{}'))
+                    domain = [(field_name, '=', 'remove')]
+                    if field.ttype == "many2many":
+                        domain = [(field_name, '=', 'remove_m2m_all')]
+                    elif field.ttype == "one2many":
+                        domain = [(field_name, '=', 'remove_o2m')]
+                    modifiers.update({'invisible': domain})
+                    node.set("modifiers", json.dumps(modifiers))
+            result['arch'] = etree.tostring(doc)
         return result
 
     @api.model
     def create(self, vals):
-        if (self._context.get('active_model') and
-                self._context.get('active_ids')):
-            model_obj = self.env[self._context.get('active_model')]
+        model_name = self._context.get('active_model')
+        active_ids = self._context.get('active_ids')
+        if model_name and active_ids:
             values = {}
             for key, val in vals.items():
                 if key.startswith('selection_'):
@@ -243,6 +267,12 @@ class MassEditingWizard(models.TransientModel):
                     elif val == 'remove':
                         values.update({split_key: False})
                     elif val == 'remove_m2m':
+                        if vals.get(split_key):
+                            m2m_list = []
+                            for m2m_id in vals.get(split_key)[0][2]:
+                                m2m_list.append((3, m2m_id))
+                            values.update({split_key: m2m_list})
+                    elif val in ['remove_o2m', 'remove_m2m_all']:
                         values.update({split_key: [(5, 0, [])]})
                     elif val == 'add':
                         m2m_list = []
@@ -250,7 +280,7 @@ class MassEditingWizard(models.TransientModel):
                             m2m_list.append((4, m2m_id))
                         values.update({split_key: m2m_list})
             if values:
-                model_obj.browse(self._context.get('active_ids')).write(values)
+                self.env[model_name].browse(active_ids).write(values)
         return super(MassEditingWizard, self).create({})
 
     @api.multi