diff --git a/cor_custom/models/analytic.py b/cor_custom/models/analytic.py index eac7bfc..ba14b98 100755 --- a/cor_custom/models/analytic.py +++ b/cor_custom/models/analytic.py @@ -27,8 +27,9 @@ class AccountAnalyticLine(models.Model): def _domain_project_id(self): today = fields.Date.today() - #domain = [('allow_timesheets', '=', True), ('is_sub_project', '=', False)] - domain = [('allow_timesheets', '=', True), ('is_sub_project', '=', False),('date', '>=', today),('date_start', '<=', today)] + # domain = [('allow_timesheets', '=', True), ('is_sub_project', '=', False)] + domain = [('allow_timesheets', '=', True), ('is_sub_project', '=', False), ('date', '>=', today), + ('date_start', '<=', today)] if not self.user_has_groups('hr_timesheet.group_timesheet_manager'): return expression.AND([domain, ['|', ('privacy_visibility', '!=', 'followers'), @@ -42,7 +43,6 @@ class AccountAnalyticLine(models.Model): result['employee_id'] = self.env['hr.employee'].search([('user_id', '=', self.env.user.id)], limit=1).id return result - project_id = fields.Many2one('project.project', 'Project', compute='_compute_project_id', store=True, readonly=False, domain=_domain_project_id) @@ -57,7 +57,7 @@ class AccountAnalyticLine(models.Model): string='Sub Project') active_project = fields.Boolean(related='project_id.active', store=True) pricing_type = fields.Selection(related='project_id.pricing_type', store=True) - project_type= fields.Selection(related='project_id.project_type', store=True) + project_type = fields.Selection(related='project_id.project_type', store=True) @api.onchange('project_id') def _onchange_sub_project_id(self): @@ -84,25 +84,34 @@ class AccountAnalyticLine(models.Model): if self.employee_id and self.employee_id.user_id and self.employee_id.user_id.id in project_manager_grp: all_projects = self.env['project.project'].search([('allow_timesheets', '=', True), ('is_sub_project', '=', False), - ('date', '>=', today),('date_start', '<=', today)]).ids + ('date', '>=', today), ('date_start', '<=', today)]).ids domain = [('id', 'in', all_projects)] else: if self.employee_id and self.employee_id.user_id and self.employee_id.user_id.id in project_user_grp: manager_id = self.env['project.project'].search( [('user_id', '=', self.employee_id.user_id.id), ('allow_timesheets', '=', True), ('date', '>=', today),('date_start', '<=', today), - ('is_sub_project', '=', False)]).ids + ('is_sub_project', '=', False),('pricing_type', '=', 'fixed_rate')]).ids emp_project_ids = self.env['project.project'].search( [('privacy_visibility', 'in', ('employees', 'portal')), ('allow_timesheets', '=', True), ('date', '>=', today),('date_start', '<=', today), - ('is_sub_project', '=', False)]).ids + ('is_sub_project', '=', False),('pricing_type', '=', 'fixed_rate')]).ids project_ids = self.env['project.project'].search( [('privacy_visibility', '=', 'followers'), ('allow_timesheets', '=', True), ('date', '>=', today),('date_start', '<=', today), ('is_sub_project', '=', False), - ('allowed_internal_user_ids', 'in', self.employee_id.user_id.id)]).ids - consul_ids = self.env['project.sale.line.employee.map'].search([('employee_id', '=', self.employee_id.id)]) - consul_project_ids = [val.project_id.id for val in consul_ids] + ('allowed_internal_user_ids', 'in', self.employee_id.user_id.id),('pricing_type', '=', 'fixed_rate')]).ids + consul_ids = self.env['project.sale.line.employee.map'].search( + [('employee_id', '=', self.employee_id.id)]) + consul_project_ids = [] + for rec in consul_ids: + if rec.project_id.pricing_type != 'fixed_rate' and rec.project_id.allow_timesheets == True and rec.project_id.is_sub_project == False: + if rec.start_date and rec.end_date: + if rec.start_date <= today <= rec.end_date: + consul_project_ids.append(rec.project_id.id) + elif rec.start_date: + if rec.start_date <= today: + consul_project_ids.append(rec.project_id.id) emp_all_project_ids = manager_id + emp_project_ids + project_ids + consul_project_ids domain = [('id', 'in', list(set(emp_all_project_ids)))] result = { @@ -185,7 +194,6 @@ class AccountAnalyticLine(models.Model): raise ValidationError(_("End time cannot be earlier than Start time")) self.unit_amount = res""" - # @api.onchange('start_time', 'end_time') # def _onchange_start_end_time(self): # if self.start_time > 0: diff --git a/cor_custom/security/cor_custom_security.xml b/cor_custom/security/cor_custom_security.xml index 8ecd9a9..fe044f1 100755 --- a/cor_custom/security/cor_custom_security.xml +++ b/cor_custom/security/cor_custom_security.xml @@ -1,24 +1,46 @@ + + + + + + + + + Project: Only invited users + + [ + '|', '|', + ('privacy_visibility', '!=', 'followers'), + ('allowed_internal_user_ids', 'in', user.ids), + ('sale_line_employee_ids.employee_id.user_id', 'in', user.ids), + ] + + + + + + - + + Show HR Menu + Show HR Menu related user group + + --> - + - + @@ -50,12 +72,13 @@ ('user_id', '=', user.id), ('project_id', '!=', False), '|', '|','|', - ('project_id.privacy_visibility', '!=', 'followers'), - ('project_id.allowed_internal_user_ids', 'in', user.ids), - ('task_id.allowed_user_ids', 'in', user.ids), - ('project_id.sale_line_employee_ids.employee_id.user_id', 'in', user.ids), + ('project_id.privacy_visibility', '!=', 'followers'), + ('project_id.allowed_internal_user_ids', 'in', user.ids), + ('task_id.allowed_user_ids', 'in', user.ids), + ('project_id.sale_line_employee_ids.employee_id.user_id', 'in', user.ids), - ] + ] + @@ -64,20 +87,21 @@ - + account.analytic.line.timesheet.approver - + [ ('project_id', '!=', False), '|','|', - ('project_id.privacy_visibility', '!=', 'followers'), - ('project_id.allowed_internal_user_ids', 'in', user.ids), - ('project_id.sale_line_employee_ids.employee_id.user_id', 'in', user.ids), - ] - + ('project_id.privacy_visibility', '!=', 'followers'), + ('project_id.allowed_internal_user_ids', 'in', user.ids), + ('project_id.sale_line_employee_ids.employee_id.user_id', 'in', user.ids), + ] + + - + + Project/Task: project manager: see all + + [(1, '=', 1)] + + --> Project: view Consultant: Own User @@ -137,12 +161,12 @@ - +