diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/lunch/populate | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/lunch/populate')
| -rw-r--r-- | addons/lunch/populate/__init__.py | 1 | ||||
| -rw-r--r-- | addons/lunch/populate/lunch.py | 180 |
2 files changed, 181 insertions, 0 deletions
diff --git a/addons/lunch/populate/__init__.py b/addons/lunch/populate/__init__.py new file mode 100644 index 00000000..eb31f44d --- /dev/null +++ b/addons/lunch/populate/__init__.py @@ -0,0 +1 @@ +from . import lunch diff --git a/addons/lunch/populate/lunch.py b/addons/lunch/populate/lunch.py new file mode 100644 index 00000000..dedbf6ea --- /dev/null +++ b/addons/lunch/populate/lunch.py @@ -0,0 +1,180 @@ +# -*- 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('<strong>alert message {counter}</strong>')), + ('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)) + ] |
