Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions login_serial/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
import res_partner
import res_users
import controllers
12 changes: 5 additions & 7 deletions login_serial/__openerp__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,23 @@
'name': 'Login Serial',
'category': 'Login Serial',
'summary': 'Login Serial',
'version': '8.0.1.0.0',
'description': '''
'version': '8.0.2.0.0',
'description': """
Adds a Serial Id field to the users that can be used to login in without a
password.

A new URL is provided "http://domain/login_serial/" to login with the specified
Serial Id.''',
Serial Id""",
'author': 'ADHOC SA',
'website': 'www.adhoc.com.ar',
'license': 'AGPL-3',
'depends': ['website'],
'external_dependencies':
{
},
'data':
[
'views/res_users_view.xml',
'views/res_partner_view.xml',
'views/webclient_templates.xml',
],
'installable': False,
'installable': True,
# TODO fix, it gives an error on runbot
}
4 changes: 2 additions & 2 deletions login_serial/controllers/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ def web_login(self, redirect=None, **kw):
old_uid = request.uid

serial_id = request.params['serial_id']
users_obj = request.registry.get('res.users')
user_vals = users_obj.search_read(
partner_obj = request.registry.get('res.partner')
user_vals = partner_obj.search_read(
request.cr, openerp.SUPERUSER_ID,
[('serial_id', '=', serial_id)],
['id', 'login']
Expand Down
80 changes: 80 additions & 0 deletions login_serial/res_partner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
from openerp.addons.product.product import check_ean, sanitize_ean13
from openerp import api, exceptions, fields, _
from openerp.models import Model
import random


MAX_RETRY_FOR_GENERATE_SERIAL_ID = 10000


def generate_serial_id():
serial_id = ''
for x in range(12):
serial_id += str(int(random.random() * 10))
return sanitize_ean13(serial_id)


class res_partner(Model):
_name = 'res.partner'
_inherit = 'res.partner'

serial_id = fields.Char(string=_('Serial Id'), readonly=True)

_sql_constraints = [
(
'serial_id_unique',
'unique(serial_id)',
_('There is another user with this Serial Id.')
)
]

@api.model
def check_credentials(self, password):
users = self.sudo().search(
[('id', '=', self.env.uid), ('serial_id', '=', password)]
)
if users:
return users
super(res_partner, self).check_credentials(password)

@api.multi
def _validate_serial_id(self, vals):
if 'serial_id' in vals and not check_ean(vals['serial_id']):
raise exceptions.Warning(
_('Serial Id invalid format'),
_('The Serial Id field has not the EAN-13 format standard.')
)

@api.model
def _get_fresh_serial_id(self):
for x in range(MAX_RETRY_FOR_GENERATE_SERIAL_ID):
serial_id = generate_serial_id()
if not self.search([('serial_id', '=', serial_id)]):
return serial_id
raise exceptions.Warning(
_('Cannot generate Serial Id'),
_(
'Odoo was unable to generate a fresh random Serial Id.' +
' It may be that there are a big amount of Serial Id' +
' already generated. You can try again.'
)
)

@api.model
def create(self, vals):
if 'serial_id' in vals:
self._validate_serial_id(vals)
else:
serial_id = self._get_fresh_serial_id()
vals['serial_id'] = serial_id
return super(res_partner, self).create(vals)

@api.multi
def write(self, vals):
self._validate_serial_id(vals)
return super(res_partner, self).write(vals)

@api.multi
def generate_fresh_serial_id(self):
for record in self:
record.serial_id = record._get_fresh_serial_id()
45 changes: 2 additions & 43 deletions login_serial/res_users.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from openerp.addons.product.product import check_ean, sanitize_ean13
from openerp import api, exceptions, fields, _
from openerp.addons.product.product import sanitize_ean13
from openerp import api, exceptions, _
from openerp.models import Model
import random

Expand All @@ -18,33 +18,6 @@ class res_users(Model):
_name = 'res.users'
_inherit = 'res.users'

serial_id = fields.Char(string=_('Serial Id'), readonly=True)

_sql_constraints = [
(
'serial_id_unique',
'unique(serial_id)',
_('There is another user with this Serial Id.')
)
]

@api.model
def check_credentials(self, password):
users = self.sudo().search(
[('id', '=', self.env.uid), ('serial_id', '=', password)]
)
if users:
return users
super(res_users, self).check_credentials(password)

@api.multi
def _validate_serial_id(self, vals):
if 'serial_id' in vals and not check_ean(vals['serial_id']):
raise exceptions.Warning(
_('Serial Id invalid format'),
_('The Serial Id field has not the EAN-13 format standard.')
)

@api.model
def _get_fresh_serial_id(self):
for x in range(MAX_RETRY_FOR_GENERATE_SERIAL_ID):
Expand All @@ -60,20 +33,6 @@ def _get_fresh_serial_id(self):
)
)

@api.model
def create(self, vals):
if 'serial_id' in vals:
self._validate_serial_id(vals)
else:
serial_id = self._get_fresh_serial_id()
vals['serial_id'] = serial_id
return super(res_users, self).create(vals)

@api.multi
def write(self, vals):
self._validate_serial_id(vals)
return super(res_users, self).write(vals)

@api.multi
def generate_fresh_serial_id(self):
for record in self:
Expand Down
8 changes: 4 additions & 4 deletions login_serial/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from . import test_serial_login
# from . import test_serial_login

checks = [
test_serial_login,
]
# checks = [
# test_serial_login,
# ]
22 changes: 22 additions & 0 deletions login_serial/views/res_partner_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0"?>
<openerp>
<data>

<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.form.login_serial</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="company_id" position="after">
<label for="serial_id"/>
<div>
<field name="serial_id" class="oe_inline"/>
<button string="⇒ Generate new Serial Id" name="generate_fresh_serial_id" type="object" class="oe_link"/>
</div>
</field>
</field>
</record>

</data>
</openerp>

2 changes: 0 additions & 2 deletions login_serial/views/res_users_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<data>
<field name="company_id" position="before">
<label for="serial_id" class="oe_edit_only" string="Serial Id"/>
<field name="serial_id"/>
<button name="generate_fresh_serial_id" string="Generate new Serial Id" type="object"/>
</field>
</data>
</field>
</record>

Expand Down