forked from Mapan/odoo17e
85 lines
3.3 KiB
Python
85 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
import logging
|
|
|
|
from odoo import models, fields
|
|
from odoo.tools import populate
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
class SaleOrderlog(models.Model):
|
|
_inherit = 'sale.order.log'
|
|
_populate_dependencies = ['sale.order']
|
|
|
|
_populate_sizes = {
|
|
'small': 1_000,
|
|
'medium': 100_000,
|
|
'large': 1_000_000,
|
|
}
|
|
|
|
def _populate_factories(self):
|
|
order_ids = self.env.registry.populated_models['sale.order']
|
|
|
|
def generate_random_timedelta(random):
|
|
return relativedelta(days=random.randint(-1000, 0))
|
|
|
|
def generate_event_date(iterator, field_name, model_name):
|
|
random = populate.Random('event_date')
|
|
today = fields.Date.today()
|
|
for values in iterator:
|
|
order_id = self.env['sale.order'].browse(values['order_id'])
|
|
if not order_id.recurrence_id:
|
|
continue
|
|
values[field_name] = today + generate_random_timedelta(random)
|
|
yield values
|
|
|
|
def generate_event_type(iterator, field_name, model_name):
|
|
random = populate.Random('event_type')
|
|
for values in iterator:
|
|
order_id = self.env['sale.order'].browse(values['order_id'])
|
|
if not order_id.recurrence_id:
|
|
continue
|
|
r = random.random()
|
|
if r < 0.1:
|
|
# creation
|
|
values['amount_signed'] = values['recurring_monthly']
|
|
values[field_name] = '0_creation'
|
|
elif r < 0.2:
|
|
# sometimes we churn
|
|
values['amount_signed'] = - values['recurring_monthly']
|
|
values['recurring_monthly'] = 0
|
|
values[field_name] = '2_churn'
|
|
elif values['amount_signed'] > 0:
|
|
values[field_name] = '1_expansion'
|
|
else:
|
|
values[field_name] = '15_contraction'
|
|
|
|
yield values
|
|
|
|
def generate_currency_id(iterator, field_name, model_name):
|
|
for values in iterator:
|
|
order_id = self.env['sale.order'].browse(values['order_id'])
|
|
if not order_id.recurrence_id:
|
|
continue
|
|
values['currency_id'] = order_id.currency_id.id
|
|
yield values
|
|
|
|
def generate_subscription_state(iterator, field_name, model_name):
|
|
for values in iterator:
|
|
order_id = self.env['sale.order'].browse(values['order_id'])
|
|
if not order_id.recurrence_id:
|
|
continue
|
|
values['subscription_state'] = order_id.subscription_state
|
|
yield values
|
|
|
|
return super()._populate_factories() + [
|
|
('order_id', populate.randomize(order_ids)),
|
|
('amount_signed', populate.randfloat(-1000, 1000)),
|
|
('recurring_monthly', populate.randfloat(0, 10000)),
|
|
('event_date', generate_event_date),
|
|
('event_type', generate_event_type),
|
|
('currency_id', generate_currency_id),
|
|
('subscription_state', generate_subscription_state)
|
|
]
|