Merge branch 'cor_cr' of https://gitlab.sunarctechnologies.com/prakash.jain/cor-odoo into cor_cr
This commit is contained in:
commit
df0cc07911
|
@ -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 """
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
<field name="actual_revenue"/>
|
||||
<field name="budgeted_hour_week" invisible="1"/>
|
||||
<button type="object" name="edit_sale_line_employee_record" string="Edit" class="oe_highlight"/>
|
||||
<button name="unlink" type="object" icon="fa-trash-o"/>
|
||||
<!--<button name="unlink" type="object" icon="fa-trash-o"/>-->
|
||||
</tree>
|
||||
</field>
|
||||
<!--<field name="consultant_timesheet_hrs" readonly="1" attrs="{'invisible': [('pricing_type','!=','fixed_rate')]}">-->
|
||||
|
|
|
@ -3,6 +3,7 @@ from odoo.exceptions import UserError, AccessError, ValidationError
|
|||
from datetime import datetime, timedelta
|
||||
from dateutil import relativedelta
|
||||
|
||||
|
||||
class ProjectResourceWizard(models.TransientModel):
|
||||
_name = 'project.resource.wizard'
|
||||
|
||||
|
@ -17,7 +18,8 @@ class ProjectResourceWizard(models.TransientModel):
|
|||
resource_rec = {}
|
||||
if rec.employee_id and rec.employee_id.id not in emp_id:
|
||||
emp_id.append(rec.employee_id.id)
|
||||
resource_rec.update({'employee_id':rec.employee_id.id, 'project_id': res_id, 'employee_price': rec.employee_id.timesheet_cost})
|
||||
resource_rec.update({'employee_id': rec.employee_id.id, 'project_id': res_id,
|
||||
'employee_price': rec.employee_id.timesheet_cost})
|
||||
lines.append((0, 0, resource_rec))
|
||||
res.update({'add_project_resource': lines})
|
||||
return res
|
||||
|
@ -45,9 +47,10 @@ class ProjectResourceWizard(models.TransientModel):
|
|||
############
|
||||
for emp in self.project_id.sale_line_employee_ids:
|
||||
if emp.employee_id == val.employee_id and emp.end_date == False and val.start_date:
|
||||
emp.write({'end_date' : val.start_date - relativedelta.relativedelta(days=1)})
|
||||
emp.write({'end_date': val.start_date - relativedelta.relativedelta(days=1)})
|
||||
return True
|
||||
|
||||
|
||||
class ProjectResourceLine(models.Model):
|
||||
_name = "project.resource.line"
|
||||
_description = "Project Resource Line"
|
||||
|
@ -56,7 +59,7 @@ class ProjectResourceLine(models.Model):
|
|||
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")
|
||||
role = fields.Selection([('Manager', 'Manager'), ('Employee', 'Employee'), ], string="Role", default="Employee")
|
||||
start_date = fields.Date()
|
||||
end_date = fields.Date()
|
||||
price_unit = fields.Float("Hourly Rate")
|
||||
|
@ -88,23 +91,22 @@ class ProjectResourceLine(models.Model):
|
|||
|
||||
@api.onchange('price_unit', 'budgeted_qty')
|
||||
def _calculate_total_cost(self):
|
||||
#if self.env.context.get('active_model') == 'project.project' and self.env.context.get('active_id'):
|
||||
#pro = self.env['project.project'].browse(self.env.context.get('active_id'))
|
||||
# if self.env.context.get('active_model') == 'project.project' and self.env.context.get('active_id'):
|
||||
# pro = self.env['project.project'].browse(self.env.context.get('active_id'))
|
||||
if self.project_id.project_type == 'hours_in_consultant':
|
||||
if self.hour_distribution == 'Manual':
|
||||
self.cost = self.price_unit * self.budgeted_qty
|
||||
|
||||
@api.onchange('start_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.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):
|
||||
def _onchange_start_end_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,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,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')))
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
</group>
|
||||
<field name="add_project_resource" context="{'default_project_id': active_id}">
|
||||
<tree editable="bottom">
|
||||
<field name="employee_id" domain="[('id', 'in', employee_ids)]"/>
|
||||
<field name="employee_id" domain="[('id', 'in', employee_ids)]" required="1"/>
|
||||
<field name="employee_ids" widget="many2many_tags" invisible="1"/>
|
||||
<field name="role"/>
|
||||
<field name="start_date" required="1"/>
|
||||
|
|
|
@ -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!')
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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})
|
||||
|
|
|
@ -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"/>
|
||||
|
|
Loading…
Reference in New Issue