Просмотр исходного кода

Merge pull request #34 from Trivedi-Vacha-SerpentCS/11.0

[FIX]mass_editing:Fixed the Remove option for O2m fields.
Serpent Consulting Services Pvt. Ltd 6 лет назад
Родитель
Сommit
42b23b9595
2 измененных файлов с 33 добавлено и 10 удалено
  1. 1 1
      mass_editing/views/mass_editing_view.xml
  2. 32 9
      mass_editing/wizard/mass_editing_wizard.py

+ 1 - 1
mass_editing/views/mass_editing_view.xml

@@ -42,7 +42,7 @@
                     <notebook colspan="4">
                         <page string="Fields">
                             <field name="field_ids" context="{'mass_edit':True}" colspan="4" nolabel="1"
-                            domain="[('ttype', 'not in', ['refenrence', 'function', 'monetary']), ('model_id', 'in', model_list)]"/>
+                            domain="[('ttype', 'not in', ['reference', 'function', 'monetary']), ('model_id', 'in', model_list)]"/>
                         </page>
                         <page string="Advanced" attrs="{'invisible':[('ref_ir_act_window_id','=',False)]}">
                             <group colspan="2" col="2">

+ 32 - 9
mass_editing/wizard/mass_editing_wizard.py

@@ -14,7 +14,7 @@ class MassEditingWizard(models.TransientModel):
     @api.model
     def fields_view_get(self, view_id=None, view_type='form', toolbar=False,
                         submenu=False):
-        result =\
+        result = \
             super(MassEditingWizard, self).fields_view_get(
                 view_id=view_id,
                 view_type=view_type,
@@ -420,6 +420,8 @@ class MassEditingWizard(models.TransientModel):
             fields_obj = self.env['ir.model.fields']
             model_obj = self.env[self._context.get('active_model')]
             model_rec = model_obj.browse(self._context.get('active_ids'))
+            model_id = self.env['ir.model'].search([
+                ('model', '=', self._context.get('active_model'))])
             values = {}
             for key, val in vals.items():
                 if key.startswith('selection_'):
@@ -429,14 +431,35 @@ class MassEditingWizard(models.TransientModel):
                         values.update({split_key: vals.get(split_key, False)})
                     elif val == 'remove':
                         values.update({split_key: False})
-                    elif val == 'remove_m2m':
+                    elif val in ['remove_m2m', 'remove_m2m_all']:
+                        m2m_list = []
                         if vals.get(split_key):
-                            m2m_list = []
                             for m2m_id in vals.get(split_key)[0][2]:
                                 m2m_list.append((3, m2m_id))
+                        if m2m_list:
                             values.update({split_key: m2m_list})
-                    elif val in ['remove_o2m', 'remove_m2m_all']:
-                        values.update({split_key: [(5, 0, [])]})
+                        else:
+                            values.update({split_key: [(5, 0, [])]})
+                    elif val == 'remove_o2m':
+                        # model_fieds will return the particular model
+                        # in order to get the field of the model
+                        # and its relation.
+                        model_fields = self.env['ir.model.fields'].search(
+                            [('name', '=', split_key),
+                             ('model_id', '=', model_id and model_id.id)])
+                        # field_model is relation of Object Relation
+                        field_model = tools.ustr(model_fields and
+                                                 model_fields.relation)
+                        # field relation is relation field of O2m
+                        field_relation = tools.ustr(
+                            model_fields and
+                            model_fields.relation_field)
+                        # remove_ids is return O2m field particular ids
+                        remove_ids = self.env[field_model].search(
+                            [(field_relation, 'in',
+                              self._context.get('active_ids'))])
+                        o2m_list = [(2, rmv_id.id) for rmv_id in remove_ids]
+                        values.update({split_key: o2m_list})
                     elif val == 'add':
                         if vals.get(split_key, False):
                             m2m_list = []
@@ -463,28 +486,28 @@ class MassEditingWizard(models.TransientModel):
                                 if set_val == 'set_fix':
                                     tot_val = split_key_data + split_val
                                 elif set_val == 'set_per':
-                                    tot_val = split_key_data +\
+                                    tot_val = split_key_data + \
                                         (split_key_data * split_val) / 100.0
                             # Subtraction
                             elif val == 'val_sub':
                                 if set_val == 'set_fix':
                                     tot_val = split_key_data - split_val
                                 elif set_val == 'set_per':
-                                    tot_val = split_key_data -\
+                                    tot_val = split_key_data - \
                                         (split_key_data * split_val) / 100.0
                             # Multiplication
                             elif val == 'val_mul':
                                 if set_val == 'set_fix':
                                     tot_val = split_key_data * split_val
                                 elif set_val == 'set_per':
-                                    tot_val = split_key_data *\
+                                    tot_val = split_key_data * \
                                         (split_key_data * split_val) / 100
                             # Division
                             elif val == 'val_div':
                                 if set_val == 'set_fix':
                                     tot_val = split_key_data / split_val
                                 elif set_val == 'set_per':
-                                    tot_val = split_key_data /\
+                                    tot_val = split_key_data / \
                                         (split_key_data * split_val) / 100
                             data.write({split_key: tot_val})
             if values: