You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

103 lines
4.6 KiB

# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Ammu (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
import binascii
import tempfile
import xlrd
from odoo import fields, models, _
from odoo.exceptions import ValidationError
class UserImport(models.TransientModel):
"""Import User with access right"""
_name = 'user.import'
_description = 'User Import'
file = fields.Binary(string="Upload File", help='Upload the file here')
def import_file(self):
""" function to import user from xlsx file """
if self:
try:
file_string = tempfile.NamedTemporaryFile(suffix=".xlsx")
file_string.write(binascii.a2b_base64(self.file))
book = xlrd.open_workbook(file_string.name)
sheet = book.sheet_by_index(0)
except:
raise ValidationError(_("Please choose the correct file"))
startline = True
for i in range(sheet.nrows):
if startline:
startline = False
else:
line = list(sheet.row_values(i))
res_lang = self.env['res.lang']
res_groups = self.env['res.groups']
res_company = self.env['res.company']
user_type = [line[4]]
invalid_language = [lang for lang in [line[2]] if
not res_lang.search(
[('code', '=', lang), ('active', '=', True)])]
if invalid_language:
raise ValidationError(_("Language %s is not active") % (
" ".join(invalid_language)))
invalid_company = [res for res in [line[3]] if
not res_company.search(
[('name', '=', res)])]
if invalid_company:
raise ValidationError(_("Company %s not exists") % (
" ".join(invalid_company)))
invalid_user = [rec for rec in user_type if
not res_groups.search(
[('full_name', '=', rec)])]
if invalid_user:
raise ValidationError(_("Invalid User Type %s") % (
" ".join(invalid_user)))
if line[5]:
groups = line[5].split(",")
invalid_groups = [rec for rec in groups if
not res_groups.search(
[('full_name', '=', rec)])]
if invalid_groups:
raise ValidationError(_("Invalid groups %s") % (
" ".join(invalid_groups)))
else:
groups = []
access_right = res_groups.search(
[('full_name', 'in', groups)]).ids
tech_settings = line[6].split(',')
tech_settings += user_type
total_rights = res_groups.search(
[('name', '=', tech_settings)]).ids
group_ids = access_right + total_rights
if line[0]:
self.env['res.users'].create({
'name': line[0],
'login': line[1],
'lang': line[2],
'company_id': self.env['res.company'].search(
[('name', '=', line[3])]).id if line[3] else '',
'groups_id': group_ids,
})
else:
raise ValidationError(_('Please Enter the User Name.'))