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
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							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.'))
							 | 
						|
								
							 |