# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. import logging from datetime import datetime, timedelta from itertools import groupby from odoo import models from odoo.tools import populate _logger = logging.getLogger(__name__) class LunchProductCategory(models.Model): _inherit = 'lunch.product.category' _populate_sizes = {'small': 5, 'medium': 150, 'large': 400} _populate_dependencies = ['res.company'] def _populate_factories(self): # TODO topping_ids_{1,2,3}, toppping_label_{1,2,3}, topping_quantity{1,2,3} company_ids = self.env.registry.populated_models['res.company'] return [ ('name', populate.constant('lunch_product_category_{counter}')), ('company_id', populate.iterate( [False, self.env.ref('base.main_company').id] + company_ids, [1, 1] + [2/(len(company_ids) or 1)]*len(company_ids))), ] class LunchProduct(models.Model): _inherit = 'lunch.product' _populate_sizes = {'small': 10, 'medium': 150, 'large': 10000} _populate_dependencies = ['lunch.product.category', 'lunch.supplier'] def _populate_factories(self): def get_price(random=None, **kwargs): return random.randint(1, 500) / 10 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.compute(get_price)), ('supplier_id', populate.randomize(supplier_ids)), ('category_id', populate.compute(get_category)), ] class LunchLocation(models.Model): _inherit = 'lunch.location' _populate_sizes = {'small': 3, 'medium': 50, 'large': 500} _populate_dependencies = ['res.company'] def _populate_factories(self): company_ids = self.env.registry.populated_models['res.company'] return [ ('name', populate.constant('lunch_location_{counter}')), ('address', populate.constant('lunch_address_location_{counter}')), ('company_id', populate.randomize(company_ids)) ] class LunchSupplier(models.Model): _inherit = 'lunch.supplier' _populate_sizes = {'small': 3, 'medium': 50, 'large': 1500} _populate_dependencies = ['lunch.location', 'res.partner', 'res.users'] 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_email_time(random=None, **kwargs): return random.randint(0, 120) / 10 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'])), ('recurrency_monday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_tuesday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_wednesday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_thursday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_friday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_saturday', populate.iterate([False, True], [0.9, 0.1])), ('recurrency_sunday', 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.compute(get_email_time)), ] class LunchOrder(models.Model): _inherit = 'lunch.order' _populate_sizes = {'small': 20, 'medium': 3000, 'large': 15000} _populate_dependencies = ['lunch.product', 'res.users', 'res.company'] def _populate_factories(self): # TODO topping_ids_{1,2,3}, topping_label_{1,3}, topping_quantity_{1,3} user_ids = self.env.registry.populated_models['res.users'] product_ids = self.env.registry.populated_models['lunch.product'] company_ids = self.env.registry.populated_models['res.company'] return [ ('active', populate.cartesian([True, False])), ('state', populate.cartesian(['new', 'confirmed', 'ordered', 'cancelled'])), ('product_id', populate.randomize(product_ids)), ('user_id', populate.randomize(user_ids)), ('note', populate.constant('lunch_note_{counter}')), ('company_id', populate.randomize(company_ids)), ('quantity', populate.randint(0, 10)), ] class LunchAlert(models.Model): _inherit = 'lunch.alert' _populate_sizes = {'small': 10, 'medium': 40, 'large': 150} _populate_dependencies = ['lunch.location'] def _populate_factories(self): location_ids = self.env.registry.populated_models['lunch.location'] def get_notification_time(random=None, **kwargs): return random.randint(0, 120) / 10 def get_until_date(random=None, **kwargs): delta = random.randint(-731, 731) return datetime(2020, 1, 1) + timedelta(days=delta) 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'])), ('recurrency_monday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_tuesday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_wednesday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_thursday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_friday', populate.iterate([True, False], [0.9, 0.1])), ('recurrency_saturday', populate.iterate([False, True], [0.9, 0.1])), ('recurrency_sunday', populate.iterate([False, True], [0.9, 0.1])), ('name', populate.constant('alert_{counter}')), ('message', populate.constant('alert message {counter}')), ('notification_time', populate.compute(get_notification_time)), ('notification_moment', populate.iterate(['am', 'pm'])), ('until', populate.compute(get_until_date)), ('location_ids', populate.compute(get_location_ids)) ]