6
6
import random
7
7
8
8
from dateutil .relativedelta import relativedelta
9
- from faker import Faker
10
9
11
10
from odoo import api , fields , models
12
11
13
12
from odoo .addons .queue_job .delay import group
13
+ from odoo .addons .spp_base_demo .locale_providers import create_faker
14
14
15
15
_logger = logging .getLogger (__name__ )
16
16
17
17
18
18
class OpenG2PGenerateData (models .Model ):
19
19
_name = "g2p.generate.data"
20
20
21
+ LOCALE_SELECTION = [
22
+ ("en_US" , "United States (English)" ),
23
+ ("en_KE" , "Kenya (English)" ),
24
+ ("sw_KE" , "Kenya (Swahili)" ),
25
+ ("si_LK" , "Sri Lanka (Sinhala)" ),
26
+ ("ta_LK" , "Sri Lanka (Tamil)" ),
27
+ ("lo_LA" , "Laos (Lao)" ),
28
+ ]
29
+
21
30
name = fields .Char ()
22
31
num_groups = fields .Integer ("Number of Groups" , default = 1 )
23
32
state = fields .Selection (
@@ -27,6 +36,11 @@ class OpenG2PGenerateData(models.Model):
27
36
],
28
37
default = "draft" ,
29
38
)
39
+ locale = fields .Selection (
40
+ LOCALE_SELECTION ,
41
+ default = "en_KE" ,
42
+ required = True ,
43
+ )
30
44
31
45
def generate_sample_data (self ):
32
46
batches = math .ceil (self .num_groups / 1000 )
@@ -45,28 +59,11 @@ def _generate_sample_data(self, **kwargs):
45
59
"""
46
60
res_id = kwargs .get ("res_id" )
47
61
res = self .browse (res_id )
48
- locales = [
49
- # "cs_CZ",
50
- # "en_US",
51
- "id_ID" ,
52
- # "de_CH",
53
- # "ar_AA",
54
- # "de_DE",
55
- # "en_GB",
56
- # "en_IE",
57
- # "en_TH",
58
- # "es_ES",
59
- # "es_MX",
60
- # "fr_FR",
61
- # "hi_IN",
62
- # "hr_HR",
63
- # "it_IT",
64
- # "zh_CN",
65
- ]
66
- fake = Faker (locales )
62
+ fake = create_faker (res .locale )
67
63
68
64
# sex_choice_range = ["Female", "Male"] * 50 + ["Other"]
69
- sex_choice_range = ["Female" , "Male" ] * 50
65
+ sex_choices = self .env ["gender.type" ].search ([]).mapped ("value" )
66
+ sex_choice_range = sex_choices * 50
70
67
age_group_range = ["A" , "C" , "N" ] * 2 + ["E" ]
71
68
group_size_range = list (range (1 , 2 )) * 2 + list (range (3 , 5 )) * 4 + list (range (6 , 8 ))
72
69
@@ -89,21 +86,16 @@ def _generate_sample_data(self, **kwargs):
89
86
center_area_ids = center_areas .mapped ("id" )
90
87
91
88
for i in range (0 , num_groups ):
92
- locale = random .choice (locales )
93
89
group_size = random .choice (group_size_range )
94
- last_name = fake [ locale ] .last_name ()
90
+ last_name = fake .last_name ()
95
91
96
- registration_date = (
97
- fake [locale ]
98
- .date_between_dates (
99
- date_start = datetime .datetime .now () - relativedelta (weeks = 4 ),
100
- date_end = datetime .datetime .now (),
101
- )
102
- .isoformat ()
103
- )
92
+ registration_date = fake .date_between_dates (
93
+ date_start = datetime .datetime .now () - relativedelta (weeks = 4 ),
94
+ date_end = datetime .datetime .now (),
95
+ ).isoformat ()
104
96
105
97
head = res ._generate_individual_data (
106
- fake [ locale ] ,
98
+ fake ,
107
99
last_name ,
108
100
sex_choice_range ,
109
101
["A" , "E" ],
@@ -137,10 +129,10 @@ def _generate_sample_data(self, **kwargs):
137
129
"is_registrant" : True ,
138
130
"registration_date" : registration_date ,
139
131
"kind" : group_kind ,
140
- "street" : fake [ locale ] .street_address (),
141
- "street2" : fake [ locale ] .street_name (),
142
- "city" : fake [ locale ] .city (),
143
- "zip" : fake [ locale ] .postcode (),
132
+ "street" : fake .street_address (),
133
+ "street2" : fake .street_name (),
134
+ "city" : fake .city (),
135
+ "zip" : fake .postcode (),
144
136
"area_id" : random .choice (center_area_ids ),
145
137
"bank_ids" : bank_ids ,
146
138
}
@@ -152,7 +144,7 @@ def _generate_sample_data(self, **kwargs):
152
144
153
145
for i in range (group_size - 1 ):
154
146
data = res ._generate_individual_data (
155
- fake [ locale ] ,
147
+ fake ,
156
148
last_name ,
157
149
sex_choice_range ,
158
150
age_group_range ,
@@ -272,7 +264,9 @@ def _generate_individual_data(
272
264
if random .randint (0 , 3 ) == 1 :
273
265
lost_primary_source_income = True
274
266
275
- dob = fake .date_between_dates (date_start = date_start , date_end = date_end ).isoformat ()
267
+ dob = fake .date_between_dates (date_start = date_start , date_end = date_end )
268
+ registration_date = fake .date_between_dates (date_start = dob , date_end = datetime .datetime .now ()).isoformat ()
269
+ dob = dob .isoformat ()
276
270
277
271
fullname = f"{ first_name } { last_name } "
278
272
bank_ids = []
0 commit comments