Merge branch 'cor_cr' of https://gitlab.sunarctechnologies.com/prakash.jain/cor-odoo into cor_cr
This commit is contained in:
commit
44ba69976c
|
@ -26,7 +26,9 @@ class AccountAnalyticLine(models.Model):
|
|||
return res
|
||||
|
||||
def _domain_project_id(self):
|
||||
domain = [('allow_timesheets', '=', True), ('is_sub_project', '=', False)]
|
||||
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)]
|
||||
if not self.user_has_groups('hr_timesheet.group_timesheet_manager'):
|
||||
return expression.AND([domain,
|
||||
['|', ('privacy_visibility', '!=', 'followers'),
|
||||
|
@ -77,21 +79,26 @@ class AccountAnalyticLine(models.Model):
|
|||
def _onchange_employee_id(self):
|
||||
project_manager_grp = self.env.ref('project.group_project_manager').users.ids
|
||||
project_user_grp = self.env.ref('project.group_project_user').users.ids
|
||||
today = fields.Date.today()
|
||||
domain = []
|
||||
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)]).ids
|
||||
('is_sub_project', '=', False),
|
||||
('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
|
||||
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
|
||||
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)])
|
||||
|
|
|
@ -160,8 +160,8 @@
|
|||
</xpath>
|
||||
<xpath expr="//field[@name='partner_id']" position="replace">
|
||||
<field name="partner_id" string="Client" required="0" groups="project.group_project_manager"/>
|
||||
<field name="date_start" groups="project.group_project_manager"/>
|
||||
<field name="date" groups="project.group_project_manager"/>
|
||||
<field name="date_start" groups="project.group_project_manager" required="1"/>
|
||||
<field name="date" groups="project.group_project_manager" required="1"/>
|
||||
</xpath>
|
||||
<!-- <xpath expr="//page[@name='settings']" position="after">
|
||||
<page string="Consultant Allocation" groups="project.group_project_manager"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from odoo import api, fields, models
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import UserError, AccessError, ValidationError
|
||||
from datetime import datetime, timedelta
|
||||
from dateutil import relativedelta
|
||||
|
@ -25,7 +25,6 @@ class ProjectResourceWizard(models.TransientModel):
|
|||
project_id = fields.Many2one('project.project')
|
||||
add_project_resource = fields.One2many('project.resource.line', 'wizard_id')
|
||||
|
||||
|
||||
def action_add_project_lines(self):
|
||||
record = self.env['project.sale.line.employee.map']
|
||||
for val in self.add_project_resource:
|
||||
|
@ -56,6 +55,7 @@ class ProjectResourceLine(models.Model):
|
|||
wizard_id = fields.Integer()
|
||||
project_id = fields.Many2one('project.project')
|
||||
employee_id = fields.Many2one('hr.employee')
|
||||
employee_ids = fields.Many2many('hr.employee', compute='_compute_allow_employee_ids')
|
||||
role = fields.Selection([('Manager', 'Manager'),('Employee', 'Employee'), ], string="Role", default="Employee")
|
||||
start_date = fields.Date()
|
||||
end_date = fields.Date()
|
||||
|
@ -66,6 +66,19 @@ class ProjectResourceLine(models.Model):
|
|||
hour_distribution = fields.Selection(related='project_id.hour_distribution')
|
||||
distribution_per = fields.Float("%")
|
||||
|
||||
@api.depends('employee_id')
|
||||
def _compute_allow_employee_ids(self):
|
||||
for rec in self:
|
||||
if rec.project_id.privacy_visibility == 'followers':
|
||||
users = rec.project_id.allowed_internal_user_ids
|
||||
employees = self.env['hr.employee'].search([('user_id', 'in', users.ids)]).ids
|
||||
elif rec.project_id.privacy_visibility == 'employees':
|
||||
employees = self.env['hr.employee'].search([]).ids
|
||||
else:
|
||||
portal_users = rec.project_id.allowed_portal_user_ids
|
||||
employees = self.env['hr.employee'].search([]).ids + portal_users.ids
|
||||
rec.employee_ids = employees
|
||||
|
||||
@api.onchange('employee_id')
|
||||
def onchange_employee_price(self):
|
||||
if self.employee_id:
|
||||
|
@ -85,3 +98,13 @@ class ProjectResourceLine(models.Model):
|
|||
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.end_date > self.start_date):
|
||||
raise AccessError('End date could not be greater than start date')
|
||||
|
||||
@api.onchange('start_date', 'end_date')
|
||||
def _onchange_start_date(self):
|
||||
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,self.project_id.date))
|
||||
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,self.project_id.date))
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
</group>
|
||||
<field name="add_project_resource" context="{'default_project_id': active_id}">
|
||||
<tree editable="bottom">
|
||||
<field name="employee_id"/>
|
||||
<field name="employee_id" domain="[('id', 'in', employee_ids)]"/>
|
||||
<field name="employee_ids" widget="many2many_tags" invisible="1"/>
|
||||
<field name="role"/>
|
||||
<field name="start_date" required="1"/>
|
||||
<field name="end_date"/>
|
||||
|
|
|
@ -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,90 +38,71 @@ 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()
|
||||
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()
|
||||
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
|
||||
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()
|
||||
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 please connect to HR/Department Head/Project Manager')
|
||||
else:
|
||||
raise AccessError(
|
||||
'You can not edit your backdate entry ')
|
||||
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')
|
||||
'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')
|
||||
|
||||
@api.onchange('end_datetime' ,'start_datetime')
|
||||
def _onchange_end_datetime(self):
|
||||
if self.end_datetime:
|
||||
current_date = datetime.today().date()
|
||||
end_date = datetime.strptime(str(self.end_datetime), "%Y-%m-%d %H:%M:%S").date()
|
||||
if end_date > current_date:
|
||||
raise AccessError('End date cannot be a future date!')
|
||||
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()
|
||||
if start_date > end_date:
|
||||
raise AccessError('End date should be greater than start date!')
|
||||
|
|
|
@ -1,2 +1,4 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_timesheet_permission_history_user,access.timesheet.block.history.user,model_timesheet_block_history,,1,1,0,0
|
||||
access_timesheet_permission_history_manager,access.timesheet.block.history.manager,model_timesheet_block_history,hr_timesheet.group_timesheet_manager,1,1,1,1
|
||||
access_timesheet_permission_history_user,access.timesheet.block.history.user,model_timesheet_block_history,hr_timesheet.group_hr_timesheet_user,1,1,1,0
|
||||
access_back_date_assign_user,access.back.date.assign.user,model_back_date_assign,hr_timesheet.group_timesheet_manager,1,1,1,1
|
||||
|
|
|
|
@ -20,7 +20,7 @@
|
|||
type="action" groups="hr.group_hr_manager"
|
||||
class="oe_highlight"/>
|
||||
<group/>
|
||||
<field name="permission_history" readonly="1">
|
||||
<field name="permission_history" readonly="1" groups="hr_timesheet.group_timesheet_manager">
|
||||
<tree editable="bottom">
|
||||
<field name="date"/>
|
||||
<field name="reason"/>
|
||||
|
|
Loading…
Reference in New Issue