def _populate_factories(self): location_ids = self.env.registry.populated_models['lunch.location'] partner_ids = self.env.registry.populated_models['res.partner'] user_ids = self.env.registry.populated_models['res.users'] def get_location_ids(random=None, **kwargs): nb_locations = random.randint(0, len(location_ids)) return [(6, 0, random.choices(location_ids, k=nb_locations))] return [ ('active', populate.cartesian([True, False])), ('send_by', populate.cartesian(['phone', 'mail'])), ('delivery', populate.cartesian(['delivery', 'no_delivery'])), ('mon', populate.iterate([True, False], [0.9, 0.1])), ('tue', populate.iterate([True, False], [0.9, 0.1])), ('wed', populate.iterate([True, False], [0.9, 0.1])), ('thu', populate.iterate([True, False], [0.9, 0.1])), ('fri', populate.iterate([True, False], [0.9, 0.1])), ('sat', populate.iterate([False, True], [0.9, 0.1])), ('sun', populate.iterate([False, True], [0.9, 0.1])), ('available_location_ids', populate.iterate([[], [(6, 0, location_ids)]], then=populate.compute(get_location_ids))), ('partner_id', populate.randomize(partner_ids)), ('responsible_id', populate.randomize(user_ids)), ('moment', populate.iterate(['am', 'pm'])), ('automatic_email_time', populate.randfloat(0, 12)), ]
def _populate_factories(self): location_ids = self.env.registry.populated_models['lunch.location'] def get_location_ids(random=None, **kwargs): nb_max = len(location_ids) start = random.randint(0, nb_max) end = random.randint(start, nb_max) return location_ids[start:end] return [ ('active', populate.cartesian([True, False])), ('recipients', populate.cartesian( ['everyone', 'last_week', 'last_month', 'last_year'])), ('mode', populate.iterate(['alert', 'chat'])), ('mon', populate.iterate([True, False], [0.9, 0.1])), ('tue', populate.iterate([True, False], [0.9, 0.1])), ('wed', populate.iterate([True, False], [0.9, 0.1])), ('thu', populate.iterate([True, False], [0.9, 0.1])), ('fri', populate.iterate([True, False], [0.9, 0.1])), ('sat', populate.iterate([False, True], [0.9, 0.1])), ('sun', populate.iterate([False, True], [0.9, 0.1])), ('name', populate.constant('alert_{counter}')), ('message', populate.constant('<strong>alert message {counter}</strong>')), ('notification_time', populate.randfloat(0, 12)), ('notification_moment', populate.iterate(['am', 'pm'])), ('until', populate.randdatetime(relative_before=relativedelta(years=-2), relative_after=relativedelta(years=2))), ('location_ids', populate.compute(get_location_ids)) ]
def _populate_factories(self): category_ids = self.env.registry.populated_models[ 'lunch.product.category'] category_records = self.env['lunch.product.category'].browse( category_ids) category_by_company = { k: list(v) for k, v in groupby(category_records, key=lambda rec: rec['company_id'].id) } supplier_ids = self.env.registry.populated_models['lunch.supplier'] company_by_supplier = { rec.id: rec.company_id.id for rec in self.env['lunch.supplier'].browse(supplier_ids) } def get_category(random=None, values=None, **kwargs): company_id = company_by_supplier[values['supplier_id']] return random.choice(category_by_company[company_id]).id return [ ('active', populate.iterate([True, False], [0.9, 0.1])), ('name', populate.constant('lunch_product_{counter}')), ('price', populate.randfloat(0.1, 50)), ('supplier_id', populate.randomize(supplier_ids)), ('category_id', populate.compute(get_category)), ]
def _populate_factories(self): @lru_cache() def search_partner_ids(company_id): """Search all the partners that a company has access to. This method is cached, only one search is done per company_id. :param company_id (int): the company to search partners for. :return (list<int>): the ids of partner the company has access to. """ return self.env['res.partner'].search([ '|', ('company_id', '=', company_id), ('company_id', '=', False), ('id', 'in', self.env.registry.populated_models['res.partner']), ]).ids @lru_cache() def search_journal_ids(company_id): """Search all the journal of a certain type for a company. This method is cached, only one search is done per company_id. :param company_id (int): the company to search journals for. :return (list<int>): the ids of the bank and cash journals of a company """ return self.env['account.journal'].search([ ('company_id', '=', company_id), ('type', 'in', ('cash', 'bank')), ]).ids @lru_cache() def search_payment_method_ids(type): """Search all the payment methods of a certain type. This method is cached, only one search is done per type. :param type (str): the type of payment method. Valid values are customer and supplier. :return list<int>: list of ids of payment methods of the selected type """ need_bank_account = self._get_method_codes_needing_bank_account() other_blacklist = ['sdd'] return self.env['account.payment.method'].search([ ('payment_type', '=', type), ('code', 'not in', need_bank_account + other_blacklist), ]).ids def get_partner(random, values, **kwargs): """Get a random partner depending on the company and the partner_type. The first 3/5 of the available partners are used as customer The last 3/5 of the available partners are used as suppliers It means 1/5 is both customer/supplier -> Same proportions as in account.move :param random: seeded random number generator. :param values (dict): the values already selected for the record. :return (int): the id of the partner randomly selected. """ partner_type = values['partner_type'] company_id = values['company_id'] partner_ids = search_partner_ids(company_id) if partner_type == 'customer': return random.choice( partner_ids[:math.ceil(len(partner_ids) / 5 * 2)]) else: return random.choice( partner_ids[math.floor(len(partner_ids) / 5 * 2):]) def get_journal(random, values, **kwargs): """Get a random bank or cash journal depending on the company. :param random: seeded random number generator. :param values (dict): the values already selected for the record. :return (int): the id of the journal randomly selected """ return random.choice(search_journal_ids(values['company_id'])) def get_payment_method(random, values, **kwargs): """Get the payment method depending on the payment type. :param random: seeded random number generator. :param values (dict): the values already selected for the record. """ return random.choice( search_payment_method_ids(values['payment_type'])) company_ids = self.env['res.company'].search([ ('chart_template_id', '!=', False), ('id', 'in', self.env.registry.populated_models['res.company']), ]) return [ ('company_id', populate.cartesian(company_ids.ids)), ('payment_type', populate.cartesian(['inbound', 'outbound'])), ('partner_type', populate.cartesian(['customer', 'supplier'])), ('payment_method_id', populate.compute(get_payment_method)), ('partner_id', populate.compute(get_partner)), ('journal_id', populate.compute(get_journal)), ('amount', populate.randfloat(0, 1000)), ('date', populate.randdatetime(relative_before=relativedelta(years=-4))), ]