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.
 
 
 
 
 

109 lines
5.1 KiB

# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Manasa T P (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
from openpyxl.reader.excel import load_workbook
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:
with tempfile.NamedTemporaryFile(suffix=".xlsx",
delete=False) as temp_file:
# Write the base64-decoded content to the temporary file
temp_file.write(binascii.a2b_base64(self.file))
temp_file.flush() # Ensure all data is written
# Open the workbook using the temporary file
book = load_workbook(temp_file.name)
sheet = book.active # Access the active sheet
except Exception as e:
raise ValidationError(
_(f"Please choose the correct file: {str(e)}"))
startline = True
for i in range(1, sheet.max_row+1):
if startline:
startline = False
else:
line = [cell.value for cell in sheet[i]] # Get values in the row
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', 'in', 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 False,
'groups_id': group_ids,
}])
else:
raise ValidationError(_('Please Enter the User Name.'))