Skip to content

Commit 6f44251

Browse files
committed
[ADD] kicker: signup flow
Force users to have an @odoo.com email address and a trigram Add a screen with list of players to validate Remove email once validated for privacy stuff
1 parent 12ad48c commit 6f44251

5 files changed

Lines changed: 86 additions & 3 deletions

File tree

kicker/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
'sequence': 6,
77
'summary': 'Kicker in the Lunch Room',
88
'website': 'https://kicker.odoo.com',
9-
'depends': ['http_routing', 'bus', 'web_editor'],
9+
'depends': ['http_routing', 'bus', 'web_editor', 'auth_signup'],
1010
'data': [
1111
'security/kicker_security.xml',
1212
'security/ir.model.access.csv',

kicker/controllers/kicker.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,18 @@
33
import jinja2
44
import logging
55
import random
6+
import re
67
import datetime
78
from functools import reduce
89
import werkzeug
910

1011
from odoo import SUPERUSER_ID
11-
from odoo import api, http
12+
from odoo import api, http, _
1213
from odoo.exceptions import UserError
1314
from odoo.http import request
1415
from odoo.modules import get_module_resource
1516
from odoo.addons.web.controllers.main import binary_content, Home
17+
from odoo.addons.auth_signup.controllers.main import AuthSignupHome
1618

1719
_logger = logging.getLogger(__name__)
1820

@@ -183,4 +185,14 @@ def web_login(self, redirect=None, *args, **kw):
183185
else:
184186
redirect = '/app'
185187
return http.redirect_with_hash(redirect)
186-
return response
188+
return response
189+
190+
class KickerSignupController(AuthSignupHome):
191+
192+
def do_signup(self, qcontext):
193+
email = qcontext.get('login')
194+
if email:
195+
if not re.match(r"^\w{3}@odoo.com$", email):
196+
raise UserError(_("Please use an email in the format <trigram>@odoo.com"))
197+
198+
return super().do_signup(qcontext)

kicker/models/res_partner.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from odoo import models, fields, api, _
2+
from odoo.exceptions import UserError
23

34
import datetime
45
from dateutil import relativedelta
@@ -155,3 +156,13 @@ def _get_rankings(self, period='month', metric='all'):
155156
'matches': wins + losses,
156157
})
157158
return res
159+
160+
def write(self, vals):
161+
if 'kicker_player' in vals:
162+
if not self.user_has_groups('kicker.group_kicker_manager'):
163+
raise UserError(_("Only kicker managers can modify a player status"))
164+
if vals['kicker_player']:
165+
# erase email address upon validation
166+
vals['email'] = False
167+
168+
return super().write(vals)

kicker/views/kicker_templates.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,16 @@ Login Restyling
8282
</xpath>
8383
</template>
8484

85+
<template id="signup_kicker" name="Signup" inherit_id="auth_signup.fields">
86+
<xpath expr="//label[@for='login']" position="replace">
87+
<label for="login">Your @odoo.com Email</label>
88+
</xpath>
89+
90+
<xpath expr="//label[@for='name']" position="replace">
91+
<label for="name">Your Player Name (login)</label>
92+
</xpath>
93+
</template>
94+
8595
<!-- Reveal password field (button to see the password). The only param is name (the nname attribute of the field)-->
8696
<template id="password_field_reveal" name="Password Field Reveal (can show and hide the password)">
8797
<div class="odoo-password-reveal input-group">

kicker/views/kicker_views.xml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,34 @@
156156
</field>
157157
</record>
158158

159+
<record id="view_kicker_players_validate_tree" model="ir.ui.view">
160+
<field name="name">res.partner.validate.tree</field>
161+
<field name="model">res.partner</field>
162+
<field name="priority">100</field>
163+
<field name="arch" type="xml">
164+
<tree string="Players">
165+
<field name="name"/>
166+
<field name="email"/>
167+
<field name="create_date"/>
168+
<field name="kicker_player" widget="boolean_toggle" />
169+
</tree>
170+
</field>
171+
</record>
172+
173+
<record model="ir.ui.view" id="view_partners_search_inherit_kicker">
174+
<field name="name">res.partner.search.inherit.kicker</field>
175+
<field name="model">res.partner</field>
176+
<field name="inherit_id" ref="base.view_res_partner_filter"/>
177+
<field name="arch" type="xml">
178+
<search position="inside">
179+
<filter string="Players To Validate"
180+
name="players_to_activate"
181+
domain="[('kicker_player', '=', False)]"/>
182+
</search>
183+
</field>
184+
</record>
185+
186+
159187
<!--
160188
Actions
161189
-->
@@ -197,6 +225,19 @@
197225
<field name="context">{'default_kicker_player': True}</field>
198226
</record>
199227

228+
<record id="kicker_player_action_to_validate_list" model="ir.actions.act_window">
229+
<field name="name">Players to Validate</field>
230+
<field name="type">ir.actions.act_window</field>
231+
<field name="res_model">res.partner</field>
232+
<field name="view_type">form</field>
233+
<field name="view_mode">tree,form</field>
234+
<field name="view_ids" eval="[(5, 0, 0),
235+
(0, 0, {'view_mode': 'tree', 'view_id': ref('view_kicker_players_validate_tree')}),
236+
]"/>
237+
<field name="domain">['|', ('email', '=like', '%@odoo.com'), ('kicker_player', '=', True)]</field>
238+
<field name="context">{'search_default_players_to_activate': 1}</field>
239+
</record>
240+
200241
<!--
201242
Menus
202243
-->
@@ -242,4 +283,13 @@
242283
parent="kicker_menu_root"
243284
action="kicker_player_action_list"
244285
sequence="25"/>
286+
287+
<menuitem
288+
id="kicker_menu_partner_list_validate"
289+
name="Players to Validate"
290+
parent="kicker_menu_root"
291+
action="kicker_player_action_to_validate_list"
292+
groups="kicker.group_kicker_manager"
293+
sequence="30"/>
294+
245295
</odoo>

0 commit comments

Comments
 (0)