add date duration permission in timesheet

This commit is contained in:
pawan.sharma 2022-08-30 22:13:48 +05:30
parent 4ca38c471e
commit 0741dcd989
4 changed files with 33 additions and 31 deletions

View File

@ -24,7 +24,8 @@ class EmployeePublicInherit(models.Model):
class TimesheetBlock(models.Model):
_name = 'timesheet.block.history'
date = fields.Date('Date')
start_date = fields.Date('Start Date')
end_date = fields.Date('End Date')
permission_type = fields.Selection(string="Permission Type", selection=[('edit', 'Edit'), ('create', 'Create')],
required=False)
reason = fields.Text('Reason')
@ -40,22 +41,18 @@ class TimehseetBlock(models.Model):
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()
days = (current_date - entry_date).days
entry_start_date = datetime.strptime(values['start_datetime'],"%Y-%m-%d %H:%M:%S").date()
# entry_end_date = datetime.strptime(values['end_datetime'],"%Y-%m-%d %H:%M:%S").date()
days = (current_date - entry_start_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')
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()
if permission_untill:
if permission_untill < entry_date:
permission_object = employee_object.permission_history.search([('permission_type', '=', 'create'),('employee_id', '=', employee_object.id)] , order='create_date desc' , limit = 1)
if permission_object:
# if not (permission_object.start_date <= entry_start_date and permission_object.end_date >= entry_start_date) or not (permission_object.start_date <= entry_end_date and permission_object.end_date >= entry_end_date):
if not (permission_object.start_date <= entry_start_date and permission_object.end_date >= entry_start_date):
raise AccessError('You can not create the backdate entry please contact to HR')
else:
raise AccessError('You can not create the backdate entry please contact to HR')
@ -66,25 +63,22 @@ class TimehseetBlock(models.Model):
current_date = datetime.today().date()
if 'start_datetime' in record or 'end_datetime' in record or 'project_id' in record or 'sub_project' in record or 'task_id' in record or 'description' in record:
if 'start_datetime' in record:
entry_date = datetime.strptime(record['start_datetime'],"%Y-%m-%d %H:%M:%S").date()
entry_start_date = datetime.strptime(record['start_datetime'],"%Y-%m-%d %H:%M:%S").date()
# entry_end_date = datetime.strptime(record['end_datetime'],"%Y-%m-%d %H:%M:%S").date()
else:
res_date = str(self.start_datetime).split('.', 1)[0]
entry_date = datetime.strptime(str(res_date), '%Y-%m-%d %H:%M:%S').date()
res_start_date = str(self.start_datetime).split('.', 1)[0]
# res_end_date = str(self.end_datetime).split('.', 1)[0]
entry_start_date = datetime.strptime(str(res_start_date), '%Y-%m-%d %H:%M:%S').date()
# entry_end_date = datetime.strptime(str(res_end_date), '%Y-%m-%d %H:%M:%S').date()
if current_date != entry_date:
if current_date != entry_start_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
permission_object = employee_object.permission_history.search([('permission_type', '=', 'edit'),('employee_id', '=', employee_object.id)], order='create_date desc' , limit = 1)
if self.user_id.id == self.env.uid:
if permission_untill:
if permission_untill < entry_date:
if permission_object:
# if not (permission_object.start_date <= entry_start_date and permission_object.end_date >= entry_start_date) or not (permission_object.start_date <= entry_end_date and permission_object.end_date >= entry_end_date):
if not (permission_object.start_date <= entry_start_date and permission_object.end_date >= entry_start_date):
raise AccessError(
'You can not edit your backdate entry please connect to HR/Department Head/Project Manager')
else:
@ -104,5 +98,8 @@ class TimehseetBlock(models.Model):
if self.end_datetime and self.start_datetime:
end_date = datetime.strptime(str(self.end_datetime), "%Y-%m-%d %H:%M:%S").date()
start_date = datetime.strptime(str(self.start_datetime), "%Y-%m-%d %H:%M:%S").date()
total_hours = (self.end_datetime - self.start_datetime).total_seconds() / 3600
self.unit_amount = total_hours
if start_date > end_date:
raise AccessError('End date should be greater than start date!')

View File

@ -22,7 +22,8 @@
<group/>
<field name="permission_history" readonly="1" groups="hr_timesheet.group_timesheet_manager">
<tree editable="bottom">
<field name="date"/>
<field name="start_date"/>
<field name="end_date"/>
<field name="reason"/>
<field name="permission_type"/>
<field name="user_id"
@ -34,7 +35,8 @@
<sheet>
<group>
<group>
<field name="date"/>
<field name="start_date"/>
<field name="end_date"/>
<field name="user_id"
options="{'no_create': True, 'no_create_edit':True, 'no_open': True}"/>
</group>

View File

@ -6,7 +6,8 @@ class ProjectCloseDate(models.TransientModel):
_name = "back.date.assign"
_description = "Timesheet Back Date Assign"
date = fields.Date('Date')
start_date = fields.Date('Start Date')
end_date = fields.Date('End Date')
reason = fields.Text('Reason', required=True)
permission_type = fields.Selection(string="Permission Type", selection=[('edit', 'Edit'), ('create', 'Create')],
required=True)
@ -16,7 +17,8 @@ class ProjectCloseDate(models.TransientModel):
employee_obj = self.env['hr.employee'].browse(self._context.get('active_ids', []))
print("employee_obj", employee_obj)
employee_obj.permission_history.create({'employee_id': employee_obj.id,
'date': self.date,
'start_date': self.start_date,
'end_date': self.end_date,
'permission_type': self.permission_type,
'reason': self.reason,
'user_id': self.env.uid})

View File

@ -8,7 +8,8 @@
<form string="Project Close">
<group>
<group>
<field name="date" required="1"/>
<field name="start_date" required="1"/>
<field name="end_date" required="1"/>
</group>
<group>
<field name="permission_type" required="1"/>