Browse Source

[FIX] mass_editing: Fixing error when removing value for fields being translatable, as their translations were not removed. (#12)

pull/29/head
Raúl Martín 7 years ago
committed by Aitor Bouzas
parent
commit
3969db1ec8
  1. 1
      mass_editing/README.rst
  2. 74
      mass_editing/tests/test_mass_editing.py
  3. 19
      mass_editing/wizard/mass_editing_wizard.py

1
mass_editing/README.rst

@ -84,6 +84,7 @@ Contributors
* Jay Vora <jay.vora@serpentcs.com>
* Jairo Llopis <jairo.llopis@tecnativa.com>
* Juan Negrete <jnegrete@casasalce.com>
* Raul Martin <raul.martin@braintec-group.com>
Maintainer
----------

74
mass_editing/tests/test_mass_editing.py

@ -5,17 +5,21 @@ import ast
from odoo.tests import common
from odoo.modules import registry
from odoo.addons.mass_editing.hooks import uninstall_hook
from ..hooks import uninstall_hook
class TestMassEditing(common.TransactionCase):
def setUp(self):
super(TestMassEditing, self).setUp()
# Model connections
model_obj = self.env['ir.model']
self.mass_wiz_obj = self.env['mass.editing.wizard']
self.mass_object_model = self.env['mass.object']
self.res_partner_model = self.env['res.partner']
self.ir_translation_model = self.env['ir.translation']
self.lang_model = self.env['res.lang']
# Shared data for test methods
self.partner = self._create_partner()
self.partner_model = model_obj.\
search([('model', '=', 'res.partner')])
@ -26,9 +30,21 @@ class TestMassEditing(common.TransactionCase):
'country_id', 'customer', 'child_ids',
'title'])])
self.mass = self._create_mass_editing(self.partner_model,
self.fields_model)
self.fields_model,
'Partner')
self.copy_mass = self.mass.copy()
self.user = self._create_user()
self.res_partner_title_model = self.env['res.partner.title']
self.partner_title = self._create_partner_title()
self.partner_title_model = model_obj.search(
[('model', '=', 'res.partner.title')])
self.fields_partner_title_model = self.env['ir.model.fields'].search(
[('model_id', '=', self.partner_title_model.id),
('name', 'in', ['abbreviation'])])
self.mass_partner_title = self._create_mass_editing(
self.partner_title_model,
self.fields_partner_title_model,
'Partner Title')
def _create_partner(self):
"""Create a Partner."""
@ -38,8 +54,25 @@ class TestMassEditing(common.TransactionCase):
'email': 'example@yourcompany.com',
'phone': 123456,
'category_id': [(6, 0, categ_ids)],
'notify_email': 'always'
})
def _create_partner_title(self):
"""Create a Partner Title."""
# Loads German to work with translations
self.lang_model.load_lang('de_DE')
# Creating the title in English
partner_title = self.res_partner_title_model.create({
'name': 'Ambassador',
'shortcut': 'Amb.',
})
# Adding translated terms
ctx = {'lang': 'de_DE'}
partner_title.with_context(ctx).write({
'name': 'Botschafter',
'shortcut': 'Bots.'})
return partner_title
def _create_user(self):
return self.env['res.users'].create({
'name': 'Test User',
@ -47,24 +80,24 @@ class TestMassEditing(common.TransactionCase):
'email': 'test@test.com',
})
def _create_mass_editing(self, model, fields):
def _create_mass_editing(self, model, fields, model_name):
"""Create a Mass Editing with Partner as model and
email field of partner."""
mass = self.mass_object_model.create({
'name': 'Mass Editing for Partner',
'name': 'Mass Editing for {0}'.format(model_name),
'model_id': model.id,
'field_ids': [(6, 0, fields.ids)]
})
mass.create_action()
return mass
def _apply_action(self, partner, vals):
def _apply_action(self, obj, vals):
"""Create Wizard object to perform mass editing to
REMOVE field's value."""
ctx = {
'active_id': partner.id,
'active_ids': partner.ids,
'active_model': 'res.partner',
'active_id': obj.id,
'active_ids': obj.ids,
'active_model': obj._name,
}
return self.mass_wiz_obj.with_context(ctx).create(vals)
@ -109,6 +142,31 @@ class TestMassEditing(common.TransactionCase):
self.assertTrue(all([field in result for field in fields]),
'Read must return all fields.')
def test_mass_edit_partner_title(self):
"""Test Case for MASS EDITING which will check if translation
was loaded for new partner title, and if they are removed
as well as the value for the abbreviation for the partner title."""
search_domain = [('res_id', '=', self.partner_title.id),
('type', '=', 'model'),
('name', '=', 'res.partner.title,shortcut'),
('lang', '=', 'de_DE')]
translation_ids = self.ir_translation_model.search(search_domain)
self.assertEqual(len(translation_ids), 1,
'Translation for Partner Title\'s Abbreviation '
'was not loaded properly.')
# Removing partner title with mass edit action
vals = {
'selection__shortcut': 'remove',
}
self._apply_action(self.partner_title, vals)
self.assertEqual(self.partner_title.shortcut, False,
'Partner Title\'s Abbreviation should be removed.')
# Checking if translations were also removed
translation_ids = self.ir_translation_model.search(search_domain)
self.assertEqual(len(translation_ids), 0,
'Translation for Partner Title\'s Abbreviation '
'was not removed properly.')
def test_mass_edit_email(self):
"""Test Case for MASS EDITING which will remove and after add
Partner's email and will assert the same."""

19
mass_editing/wizard/mass_editing_wizard.py

@ -237,6 +237,9 @@ class MassEditingWizard(models.TransientModel):
if (self._context.get('active_model') and
self._context.get('active_ids')):
model_obj = self.env[self._context.get('active_model')]
model_field_obj = self.env['ir.model.fields']
translation_obj = self.env['ir.translation']
values = {}
for key, val in vals.items():
if key.startswith('selection_'):
@ -245,6 +248,22 @@ class MassEditingWizard(models.TransientModel):
values.update({split_key: vals.get(split_key, False)})
elif val == 'remove':
values.update({split_key: False})
# If field to remove is translatable,
# its translations have to be removed
model_field = model_field_obj.search([
('model', '=', self._context.get('active_model')),
('name', '=', split_key)])
if model_field and model_field.translate:
translation_ids = translation_obj.search([
('res_id', 'in', self._context.get(
'active_ids')),
('type', '=', 'model'),
('name', '=', u"{0},{1}".format(
self._context.get('active_model'),
split_key))])
translation_ids.unlink()
elif val == 'remove_m2m':
m2m_list = []
if vals.get(split_key):

Loading…
Cancel
Save