[FIX] base: populate company_id and user do not consume partner
* When setting company_id on the res.partner, the parent might have had a different company_id * We should not consume res.partner's when creating res.user's but creating new ones instead.
This commit is contained in:
@@ -131,21 +131,23 @@ class Partner(models.Model):
|
||||
|
||||
def _populate_set_companies(self, records):
|
||||
_logger.info('Setting companies')
|
||||
r_company = populate.Random('res.partner+company_has_partners') # 50% change to have partners
|
||||
companies = records.filtered(lambda p: p.is_company and r_company.getrandbits(1))
|
||||
partners = records - companies
|
||||
r_company = populate.Random('res.partner+company_has_partners')
|
||||
r_partner = populate.Random('res.partner+partner_has_company')
|
||||
r_company_pick = populate.Random('res.partner+partner_company_pick=')
|
||||
|
||||
companies = records.filtered(lambda p: p.is_company and r_company.getrandbits(1)) # 50% change to have partners
|
||||
partners = records.filtered(lambda p: not p.is_company and r_partner.getrandbits(1)) # 50% change to have a company
|
||||
|
||||
companies_partners = collections.defaultdict(lambda: self.env['res.partner'])
|
||||
for count, partner in enumerate(partners):
|
||||
if bool(r_partner.getrandbits(1)): # 50% change to have a company
|
||||
companies_partners[r_company_pick.choice(companies)] |= partner
|
||||
for partner in partners:
|
||||
companies_partners[r_company_pick.choice(companies)] |= partner
|
||||
|
||||
# batching company write improves performances a lot (~40% faster for total partner creation).
|
||||
for count, (company, partners) in enumerate(companies_partners.items()):
|
||||
if (count + 1) % 100 == 0:
|
||||
_logger.info('Setting company: %s/%s', count + 1, len(companies))
|
||||
for count, (company, partners) in enumerate(companies_partners.items(), start=1):
|
||||
if count % 100 == 0:
|
||||
_logger.info('Setting company: %s/%s', count, len(companies))
|
||||
partners.write({'parent_id': company.id})
|
||||
partners._onchange_company_id()
|
||||
|
||||
class ResPartnerIndustry(models.Model):
|
||||
_inherit = "res.partner.industry"
|
||||
|
||||
@@ -11,24 +11,34 @@ _logger = logging.getLogger(__name__)
|
||||
class Users(models.Model):
|
||||
_inherit = "res.users"
|
||||
|
||||
_populate_sizes = {"small": 10, "medium": 1000, "large": 10000}
|
||||
_populate_sizes = {
|
||||
'small': 10,
|
||||
'medium': 1000,
|
||||
'large': 10000,
|
||||
}
|
||||
|
||||
_populate_dependencies = ["res.partner"]
|
||||
|
||||
def _populate_factories(self):
|
||||
partner_ids = list(self.env.registry.populated_models["res.partner"])
|
||||
def generate_partner_id(iterator, *args):
|
||||
partner_factories = self.env['res.partner']._populate_factories()
|
||||
partner_generator = populate.chain_factories(partner_factories, self._name)
|
||||
for dependant_values in partner_generator:
|
||||
values = next(iterator)
|
||||
yield {**dependant_values, **values, '__complete': values['__complete']}
|
||||
|
||||
def get_partner_id(random=None, **kwargs):
|
||||
partner_id = random.choice(partner_ids)
|
||||
partner_ids.remove(partner_id)
|
||||
return partner_id
|
||||
def get_company_ids(values, **kwargs):
|
||||
return [(6, 0, [values['company_id']])]
|
||||
|
||||
return [
|
||||
("active", populate.cartesian([True, False], [0.9, 0.1])),
|
||||
("partner_id", populate.compute(get_partner_id)),
|
||||
("login", populate.constant("user_login_{counter}")),
|
||||
('active', populate.cartesian([True, False], [0.9, 0.1])),
|
||||
('partner_id', generate_partner_id),
|
||||
('company_id', populate.randomize(self.env.registry.populated_models['res.company'])),
|
||||
('company_ids', populate.compute(get_company_ids)),
|
||||
('login', populate.constant('user_login_{counter}')),
|
||||
('name', populate.constant('user_{counter}')),
|
||||
]
|
||||
|
||||
def _populate(self, scale):
|
||||
def _populate(self, size):
|
||||
self = self.with_context(no_reset_password=True) # avoid sending reset password email
|
||||
return super(Users, self)._populate(scale)
|
||||
return super(Users, self)._populate(size)
|
||||
|
||||
@@ -36,9 +36,9 @@ class TestPopulateModel(models.Model):
|
||||
]
|
||||
def generate_dependant(iterator, *args):
|
||||
dependants_generator = populate.chain_factories(dependant_factories, self._name)
|
||||
for values in dependants_generator:
|
||||
dependant_values = next(iterator)
|
||||
yield {**values, **dependant_values, '__complete': values['__complete'] and dependant_values['__complete']}
|
||||
for dependant_values in dependants_generator:
|
||||
values = next(iterator)
|
||||
yield {**dependant_values, **values, '__complete': values['__complete'] and dependant_values['__complete']}
|
||||
|
||||
def get_name(values=None, counter=0, **kwargs):
|
||||
active = 'active' if values['active'] else 'inactive'
|
||||
|
||||
Reference in New Issue
Block a user