From 0741dcd989169526d28c7bc92f250c1ece71ad9b Mon Sep 17 00:00:00 2001 From: "pawan.sharma" Date: Tue, 30 Aug 2022 22:13:48 +0530 Subject: [PATCH 1/2] add date duration permission in timesheet --- timesheet_block/models/timesheet.py | 49 ++++++++++++-------------- timesheet_block/views/timesheet.xml | 6 ++-- timesheet_block/wizard/date_assign.py | 6 ++-- timesheet_block/wizard/date_assign.xml | 3 +- 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/timesheet_block/models/timesheet.py b/timesheet_block/models/timesheet.py index fda0dbc..6c28210 100755 --- a/timesheet_block/models/timesheet.py +++ b/timesheet_block/models/timesheet.py @@ -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!') + diff --git a/timesheet_block/views/timesheet.xml b/timesheet_block/views/timesheet.xml index b2b9751..b2fb1e0 100755 --- a/timesheet_block/views/timesheet.xml +++ b/timesheet_block/views/timesheet.xml @@ -22,7 +22,8 @@ - + + - + + diff --git a/timesheet_block/wizard/date_assign.py b/timesheet_block/wizard/date_assign.py index a885f80..c178523 100755 --- a/timesheet_block/wizard/date_assign.py +++ b/timesheet_block/wizard/date_assign.py @@ -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}) diff --git a/timesheet_block/wizard/date_assign.xml b/timesheet_block/wizard/date_assign.xml index 0506e37..8db6445 100755 --- a/timesheet_block/wizard/date_assign.xml +++ b/timesheet_block/wizard/date_assign.xml @@ -8,7 +8,8 @@
- + + From ce93a93f1f82895cc8eac61522c6d443e8008756 Mon Sep 17 00:00:00 2001 From: "pawan.sharma" Date: Wed, 31 Aug 2022 11:56:13 +0530 Subject: [PATCH 2/2] add date conditions --- cor_custom/models/project.py | 14 ++++++++ cor_custom/views/project_view.xml | 2 +- cor_custom/wizard/project_resource_wizard.py | 32 ++++++++++--------- cor_custom/wizard/project_resource_wizard.xml | 2 +- 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py index 4449092..fdc6dc9 100755 --- a/cor_custom/models/project.py +++ b/cor_custom/models/project.py @@ -438,6 +438,20 @@ class InheritProjectProductEmployeeMap(models.Model): return { 'type': 'ir.actions.act_window_close'} + @api.onchange('start_date', 'end_date') + def _onchange_start_date(self): + # if self.start_date: + # self.end_date = self.start_date + relativedelta.relativedelta(months=1) - relativedelta.relativedelta(days=1) + if self.start_date and self.end_date and (self.start_date > self.end_date): + raise AccessError('End date could not be greater than start date') + if self.project_id: + if self.start_date and not self.project_id.date_start <= self.start_date <= self.project_id.date: + raise AccessError(_('Allocation Start date must be between %s to %s') % ( + self.project_id.date_start.strftime('%d-%b-%Y'), self.project_id.date.strftime('%d-%b-%Y'))) + if self.end_date and not (self.project_id.date_start <= self.end_date <= self.project_id.date): + raise AccessError(_('Allocation Start date must be between %s to %s') % ( + self.project_id.date_start.strftime('%d-%b-%Y'), self.project_id.date.strftime('%d-%b-%Y'))) + class CustomProjectTags(models.Model): """ Tags of project's tasks """ diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml index bb4d10a..f8176be 100755 --- a/cor_custom/views/project_view.xml +++ b/cor_custom/views/project_view.xml @@ -101,7 +101,7 @@