update code for timesheet block entry

This commit is contained in:
pawan.sharma 2022-08-29 14:37:24 +05:30
parent 793d2c75ad
commit ba92caa646
1 changed files with 45 additions and 70 deletions

View File

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