From ba92caa6467cf6cfb3e2f6a53f8f4c71fc94e114 Mon Sep 17 00:00:00 2001 From: "pawan.sharma" Date: Mon, 29 Aug 2022 14:37:24 +0530 Subject: [PATCH] update code for timesheet block entry --- timesheet_block/models/timesheet.py | 115 +++++++++++----------------- 1 file changed, 45 insertions(+), 70 deletions(-) diff --git a/timesheet_block/models/timesheet.py b/timesheet_block/models/timesheet.py index 0e3289a..4104c42 100755 --- a/timesheet_block/models/timesheet.py +++ b/timesheet_block/models/timesheet.py @@ -11,6 +11,7 @@ class EmployeeInherit(models.Model): allow_to_create = fields.Selection(selection=[('always', 'Always'), ('specific', 'Specific')] ) permission_history = fields.One2many(comodel_name="timesheet.block.history", inverse_name="employee_id", string="History", required=False ) + class EmployeePublicInherit(models.Model): _inherit = 'hr.employee.public' @@ -37,84 +38,58 @@ class TimehseetBlock(models.Model): @api.model def create(self, values): current_date = datetime.today().date() + config = self.env['ir.config_parameter'].sudo() + config_days_limit = float(config.get_param('timesheet_block.timesheet_edit_create_limit')) entry_date = datetime.strptime(values['start_datetime'],"%Y-%m-%d %H:%M:%S").date() - months_diff = current_date.month - entry_date.month - employee_object = self.env['hr.employee'].sudo().search([('user_id', '=', self.env.uid)]) + days = (current_date - entry_date).days + employee_object = self.env['hr.employee'].search([('user_id', '=', self.env.uid)]) project_manager_group = self.env.ref('hr_timesheet.group_timesheet_manager') - config = self.env['ir.config_parameter'].sudo() - config_days_limit = float(config.get_param('timesheet_block.timesheet_edit_create_limit')) - if entry_date <= current_date: - if self.env.uid not in project_manager_group.users.ids: - if employee_object.allow_to_create == False: - if months_diff == 0: - res = super(TimehseetBlock, self).create(values) - return res + if self.env.uid not in project_manager_group.users.ids: + if days >= config_days_limit: + permission_list = [] + if employee_object.allow_to_create != 'always' or employee_object.allow_to_create == False: + permission_object = employee_object.permission_history.search([('permission_type', '=', 'create'),('employee_id', '=', employee_object.id)]) + for permission in permission_object: + permission_list.append(permission.date) + permission_untill = False + if len(permission_list) != 0: + permission_untill = datetime.strptime(str(max(permission_list)), "%Y-%m-%d").date() + # permission_untill = datetime.strptime(max(permission_list), "%Y-%m-%d").date() + if permission_untill: + if permission_untill < entry_date: + raise AccessError('You can not create the backdate entry please contact to HR') else: - raise AccessError('You can not create your backdate entry') - elif employee_object.allow_to_create == 'always': - res = super(TimehseetBlock, self).create(values) - return res - else: - if months_diff == 0: - res = super(TimehseetBlock, self).create(values) - return res - if months_diff == 1: - if current_date.day <= config_days_limit: - res = super(TimehseetBlock, self).create(values) - return res - else: - raise AccessError('You can not create your backdate entry ') - else: - raise AccessError('You can not create your backdate entry ') - else: - res = super(TimehseetBlock, self).create(values) - return res - else: - raise AccessError('You can not create future entry') + raise AccessError('You can not create the backdate entry please contact to HR') + return super(TimehseetBlock, self).create(values) - - - def write(self, values): + def write(self, record): current_date = datetime.today().date() - if 'date' in values: - entry_date = datetime.strptime(values['start_datetime'],"%Y-%m-%d %H:%M:%S").date() + if 'start_datetime' in record: + entry_date = datetime.strptime(record['start_datetime'],"%Y-%m-%d %H:%M:%S").date() else: - res_date = str(self.date).split('.', 1)[0] - entry_date = datetime.strptime(str(res_date), '%Y-%m-%d').date() - months_diff = current_date.month - entry_date.month - employee_object = self.env['hr.employee'].sudo().search([('user_id', '=', self.env.uid)]) - project_manager_group = self.env.ref('hr_timesheet.group_timesheet_manager') - config = self.env['ir.config_parameter'].sudo() - config_days_limit = float(config.get_param('timesheet_block.timesheet_edit_create_limit')) - if entry_date <= current_date: - if self.env.uid not in project_manager_group.users.ids: - if employee_object.allow_to_edit == False: - if months_diff == 0: - res = super(TimehseetBlock, self).write(values) - return res - else: - raise AccessError('You can not edit your backdate entry ') - elif employee_object.allow_to_edit == 'always': - res = super(TimehseetBlock, self).write(values) - return res - else: - if months_diff == 0: - res = super(TimehseetBlock, self).write(values) - return res - if months_diff == 1: - if current_date.day <= config_days_limit: - res = super(TimehseetBlock, self).write(values) - return res - else: + res_date = str(self.start_datetime).split('.', 1)[0] + entry_date = datetime.strptime(str(res_date), '%Y-%m-%d %H:%M:%S').date() + + if current_date != entry_date: + employee_object = self.env['hr.employee'].search([('user_id', '=', self.env.uid)]) + if employee_object.allow_to_edit != 'always' or employee_object.allow_to_edit == False: + permission_list = [] + permission_object = employee_object.permission_history.search([('permission_type', '=', 'edit'),('employee_id', '=', employee_object.id)]) + for permission in permission_object: + permission_list.append(permission.date) + permission_untill =False + if len(permission_list) != 0: + permission_untill = datetime.strptime(str(max(permission_list)), "%Y-%m-%d").date() + # project = False + if self.user_id.id == self.env.uid: + if permission_untill: + if permission_untill < entry_date: raise AccessError( - 'You can not edit your backdate entry ') + 'You can not edit your backdate entry please connect to HR/Department Head/Project Manager') else: - raise AccessError('You can not edit your backdate entry ') - else: - res = super(TimehseetBlock, self).write(values) - return res - else: - raise AccessError('You can not create future entry') + raise AccessError( + 'You can not edit your backdate entry please connect to HR/Department Head/Project Manager') + return super(TimehseetBlock, self).write(record) @api.onchange('end_datetime')