[IMP] base: allow creation of record linked to an x2many
Use a command to add the created record, otherwise it simply does not work. closes odoo/odoo#30148
This commit is contained in:
@@ -498,7 +498,10 @@ class IrActionsServer(models.Model):
|
||||
|
||||
if action.link_field_id:
|
||||
record = self.env[action.model_id.model].browse(self._context.get('active_id'))
|
||||
record.write({action.link_field_id.name: res.id})
|
||||
if action.link_field_id.ttype in ['one2many', 'many2many']:
|
||||
record.write({action.link_field_id.name: [(4, res.id)]})
|
||||
else:
|
||||
record.write({action.link_field_id.name: res.id})
|
||||
|
||||
@api.model
|
||||
def _get_eval_context(self, action=None):
|
||||
|
||||
@@ -38,9 +38,13 @@ class TestServerActionsBase(common.TransactionCase):
|
||||
self.res_partner_city_field = Fields.search([('model', '=', 'res.partner'), ('name', '=', 'city')])
|
||||
self.res_partner_country_field = Fields.search([('model', '=', 'res.partner'), ('name', '=', 'country_id')])
|
||||
self.res_partner_parent_field = Fields.search([('model', '=', 'res.partner'), ('name', '=', 'parent_id')])
|
||||
self.res_partner_children_field = Fields.search([('model', '=', 'res.partner'), ('name', '=', 'child_ids')])
|
||||
self.res_partner_category_field = Fields.search([('model', '=', 'res.partner'), ('name', '=', 'category_id')])
|
||||
self.res_country_model = Model.search([('model', '=', 'res.country')])
|
||||
self.res_country_name_field = Fields.search([('model', '=', 'res.country'), ('name', '=', 'name')])
|
||||
self.res_country_code_field = Fields.search([('model', '=', 'res.country'), ('name', '=', 'code')])
|
||||
self.res_partner_category_model = Model.search([('model', '=', 'res.partner.category')])
|
||||
self.res_partner_category_name_field = Fields.search([('model', '=', 'res.partner.category'), ('name', '=', 'name')])
|
||||
|
||||
# create server action to
|
||||
self.action = self.env['ir.actions.server'].create({
|
||||
@@ -79,10 +83,27 @@ class TestServerActions(TestServerActionsBase):
|
||||
self.assertEqual(len(partners), 1, 'ir_actions_server: 1 new partner should have been created')
|
||||
|
||||
def test_20_crud_create(self):
|
||||
# Do: create a new record in another model
|
||||
self.action.write({
|
||||
'state': 'object_create',
|
||||
'crud_model_id': self.res_country_model.id,
|
||||
'link_field_id': False,
|
||||
'fields_lines': [(5,),
|
||||
(0, 0, {'col1': self.res_country_name_field.id, 'value': 'record.name', 'evaluation_type': 'equation'}),
|
||||
(0, 0, {'col1': self.res_country_code_field.id, 'value': 'record.name[0:2]', 'evaluation_type': 'equation'})],
|
||||
})
|
||||
run_res = self.action.with_context(self.context).run()
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new country created
|
||||
country = self.test_country.search([('name', 'ilike', 'TestingPartner')])
|
||||
self.assertEqual(len(country), 1, 'ir_actions_server: TODO')
|
||||
self.assertEqual(country.code, 'TE', 'ir_actions_server: TODO')
|
||||
|
||||
def test_20_crud_create_link_many2one(self):
|
||||
_city = 'TestCity'
|
||||
_name = 'TestNew'
|
||||
|
||||
# Do: create a new record in the same model and link it
|
||||
# Do: create a new record in the same model and link it with a many2one
|
||||
self.action.write({
|
||||
'state': 'object_create',
|
||||
'crud_model_id': self.action.model_id.id,
|
||||
@@ -99,21 +120,39 @@ class TestServerActions(TestServerActionsBase):
|
||||
# Test: new partner linked
|
||||
self.assertEqual(self.test_partner.parent_id, partner, 'ir_actions_server: TODO')
|
||||
|
||||
# Do: create a new record in another model
|
||||
def test_20_crud_create_link_one2many(self):
|
||||
_name = 'TestNew'
|
||||
|
||||
# Do: create a new record in the same model and link it with a one2many
|
||||
self.action.write({
|
||||
'state': 'object_create',
|
||||
'crud_model_id': self.res_country_model.id,
|
||||
'link_field_id': False,
|
||||
'fields_lines': [(5,),
|
||||
(0, 0, {'col1': self.res_country_name_field.id, 'value': 'record.name', 'evaluation_type': 'equation'}),
|
||||
(0, 0, {'col1': self.res_country_code_field.id, 'value': 'record.name[0:2]', 'evaluation_type': 'equation'})],
|
||||
'crud_model_id': self.action.model_id.id,
|
||||
'link_field_id': self.res_partner_children_field.id,
|
||||
'fields_lines': [(0, 0, {'col1': self.res_partner_name_field.id, 'value': _name})],
|
||||
})
|
||||
run_res = self.action.with_context(self.context).run()
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new country created
|
||||
country = self.test_country.search([('name', 'ilike', 'TestingPartner')])
|
||||
self.assertEqual(len(country), 1, 'ir_actions_server: TODO')
|
||||
self.assertEqual(country.code, 'TE', 'ir_actions_server: TODO')
|
||||
# Test: new partner created
|
||||
partner = self.test_partner.search([('name', 'ilike', _name)])
|
||||
self.assertEqual(len(partner), 1, 'ir_actions_server: TODO')
|
||||
self.assertEqual(partner.name, _name, 'ir_actions_server: TODO')
|
||||
# Test: new partner linked
|
||||
self.assertIn(partner, self.test_partner.child_ids, 'ir_actions_server: TODO')
|
||||
|
||||
def test_20_crud_create_link_many2many(self):
|
||||
# Do: create a new record in another model
|
||||
self.action.write({
|
||||
'state': 'object_create',
|
||||
'crud_model_id': self.res_partner_category_model.id,
|
||||
'link_field_id': self.res_partner_category_field.id,
|
||||
'fields_lines': [(0, 0, {'col1': self.res_partner_category_name_field.id, 'value': 'record.name', 'evaluation_type': 'equation'})],
|
||||
})
|
||||
run_res = self.action.with_context(self.context).run()
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new category created
|
||||
category = self.env['res.partner.category'].search([('name', 'ilike', 'TestingPartner')])
|
||||
self.assertEqual(len(category), 1, 'ir_actions_server: TODO')
|
||||
self.assertIn(category, self.test_partner.category_id)
|
||||
|
||||
def test_30_crud_write(self):
|
||||
_name = 'TestNew'
|
||||
|
||||
Reference in New Issue
Block a user