from datetime import datetime from odoo import models from odoo.exceptions import UserError from pytz import timezone class Import(models.TransientModel): _inherit = 'base_import.import' def _get_config(self, key, default = ''): return self.env['ir.config_parameter'].sudo().get_param('base_import.import.' + key, default) def _get_config_enable_import(self): return self._get_config('enable_import') def _get_config_allowed_model(self): return self._get_config('allowed_model') def _get_config_always_allowed_model(self): return self._get_config('always_allowed_model') def _check_time_range(self, config_string): current_time = datetime.now(tz=timezone('Asia/Jakarta')).time() ranges = config_string.split(' / ') for time_range in ranges: start_str, end_str = time_range.split(' - ') start_time = datetime.strptime(start_str, '%H:%M:%S').time() end_time = datetime.strptime(end_str, '%H:%M:%S').time() # If current time in range of start and end time if current_time >= start_time and current_time <= end_time: return True return False def _check_enable_import(self): enable_import = self._get_config_enable_import() allowed_model = self._get_config_allowed_model() always_allowed_model = self._get_config_always_allowed_model() if self.res_model in always_allowed_model or always_allowed_model == 'ALL': return True if self.res_model in allowed_model or allowed_model == 'ALL': return self._check_time_range(enable_import) return False def _unable_import_notif(self): enable_import_config = self._get_config_enable_import() message = 'Import tidak dapat dilakukan saat ini. Hubungi Tim IT.' if '-' in enable_import_config: message = f'Import tidak dapat dilakukan saat ini. Anda bisa melakukannya di rentang waktu berikut: {enable_import_config}.' raise UserError(message) def do(self, fields, columns, options, dryrun=False): model = self.res_model can_import = self.env.user.check_access(model, 'import') if not can_import: raise UserError('You are not allowed to import') return super(Import, self).do(fields, columns, options, dryrun)