diff --git a/addons/hr_timesheet_attendance/models/hr_timesheet_sheet.py b/addons/hr_timesheet_attendance/models/hr_timesheet_sheet.py
index 653f19d8ce0..acdd32820f4 100644
--- a/addons/hr_timesheet_attendance/models/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_attendance/models/hr_timesheet_sheet.py
@@ -66,12 +66,12 @@ class HrTimesheetSheet(models.Model):
}
@api.multi
- def button_confirm(self):
+ def action_timesheet_confirm(self):
for sheet in self:
sheet.check_employee_attendance_state()
di = sheet.user_id.company_id.timesheet_max_difference
if (abs(sheet.total_difference) <= di) or not di:
- return super(HrTimesheetSheet, self).button_confirm()
+ return super(HrTimesheetSheet, self).action_timesheet_confirm()
else:
raise UserError(_('Please verify that the total difference of the sheet is lower than %.2f.') % (di,))
diff --git a/addons/hr_timesheet_attendance/tests/test_hr_timesheet_sheet.py b/addons/hr_timesheet_attendance/tests/test_hr_timesheet_sheet.py
index 44c26482bd3..443c9d9339e 100644
--- a/addons/hr_timesheet_attendance/tests/test_hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_attendance/tests/test_hr_timesheet_sheet.py
@@ -48,7 +48,7 @@ class TestHrTimesheetSheet(TransactionCase):
# I confirm Gilles' timesheet with over 1 hour difference
# in attendance and actual worked hours
try:
- self.test_timesheet_sheet.button_confirm()
+ self.test_timesheet_sheet.action_timesheet_confirm()
except Exception:
pass
@@ -67,7 +67,7 @@ class TestHrTimesheetSheet(TransactionCase):
# I confirm Gilles' timesheet with less than 1 hour difference
# in attendance and actual worked hours
- self.test_timesheet_sheet.button_confirm()
+ self.test_timesheet_sheet.action_timesheet_confirm()
# I check the state is confirmed
assert self.test_timesheet_sheet.state == 'confirm'
diff --git a/addons/hr_timesheet_sheet/__openerp__.py b/addons/hr_timesheet_sheet/__openerp__.py
index 5144083be7c..b49e849c4bc 100644
--- a/addons/hr_timesheet_sheet/__openerp__.py
+++ b/addons/hr_timesheet_sheet/__openerp__.py
@@ -30,7 +30,6 @@ The validation can be configured in the company:
'data': [
'security/ir.model.access.csv',
'security/hr_timesheet_sheet_security.xml',
- 'data/hr_timesheet_workflow.xml',
'data/hr_timesheet_sheet_data.xml',
'views/hr_timesheet_sheet_templates.xml',
'views/hr_timesheet_sheet_views.xml',
diff --git a/addons/hr_timesheet_sheet/data/hr_timesheet_workflow.xml b/addons/hr_timesheet_sheet/data/hr_timesheet_workflow.xml
deleted file mode 100644
index 0f2e61f012a..00000000000
--- a/addons/hr_timesheet_sheet/data/hr_timesheet_workflow.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
- hr_timesheet_sheet.sheet
- hr_timesheet_sheet.sheet
- True
-
-
-
-
- new
- function
- write({'state':'new'})
- True
-
-
-
- draft
- function
- write({'state':'draft'})
-
-
-
- confirm
- function
- write({'state':'confirm'})
-
-
-
- done
- function
- write({'state':'done'})
- True
-
-
-
-
-
-
-
-
-
-
- confirm
-
-
-
-
-
- done
-
-
-
-
-
- cancel
-
-
-
diff --git a/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py
index caf3dc2d8bf..af694054355 100644
--- a/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py
@@ -56,6 +56,8 @@ class HrTimesheetSheet(models.Model):
readonly=True, states={
'draft': [('readonly', False)],
'new': [('readonly', False)]})
+ # state is created in 'new', automatically goes to 'draft' when created. Then 'new' is never used again ...
+ # (=> 'new' is completely useless)
state = fields.Selection([
('new', 'New'),
('draft', 'Open'),
@@ -102,7 +104,9 @@ class HrTimesheetSheet(models.Model):
if 'employee_id' in vals:
if not self.env['hr.employee'].browse(vals['employee_id']).user_id:
raise UserError(_('In order to create a timesheet for this employee, you must link him/her to a user.'))
- return super(HrTimesheetSheet, self).create(vals)
+ res = super(HrTimesheetSheet, self).create(vals)
+ res.write({'state': 'draft'})
+ return res
@api.multi
def write(self, vals):
@@ -114,19 +118,28 @@ class HrTimesheetSheet(models.Model):
return super(HrTimesheetSheet, self).write(vals)
@api.multi
- def button_confirm(self):
- for sheet in self:
- if sheet.employee_id and sheet.employee_id.parent_id and sheet.employee_id.parent_id.user_id:
- self.message_subscribe_users(user_ids=[sheet.employee_id.parent_id.user_id.id])
- sheet.signal_workflow('confirm')
+ def action_timesheet_draft(self):
+ if not self.env.user.has_group('base.group_hr_user'):
+ raise UserError(_('Only an HR Officer or Manager can refuse timesheets or reset them to draft.'))
+ self.write({'state': 'draft'})
return True
@api.multi
- def action_set_to_draft(self):
- self.write({'state': 'draft'})
- self.create_workflow()
+ def action_timesheet_confirm(self):
+ for sheet in self:
+ if sheet.employee_id and sheet.employee_id.parent_id and sheet.employee_id.parent_id.user_id:
+ self.message_subscribe_users(user_ids=[sheet.employee_id.parent_id.user_id.id])
+ self.write({'state': 'confirm'})
return True
+ @api.multi
+ def action_timesheet_done(self):
+ if not self.env.user.has_group('base.group_hr_user'):
+ raise UserError(_('Only an HR Officer or Manager can approve timesheets.'))
+ if self.filtered(lambda sheet: sheet.state != 'confirm'):
+ raise UserError(_("Cannot approve a non-submitted timesheet."))
+ self.write({'state': 'done'})
+
@api.multi
def name_get(self):
# week number according to ISO 8601 Calendar
diff --git a/addons/hr_timesheet_sheet/views/hr_timesheet_sheet_views.xml b/addons/hr_timesheet_sheet/views/hr_timesheet_sheet_views.xml
index 3c67c4113b3..c308e1ccaa5 100644
--- a/addons/hr_timesheet_sheet/views/hr_timesheet_sheet_views.xml
+++ b/addons/hr_timesheet_sheet/views/hr_timesheet_sheet_views.xml
@@ -57,10 +57,10 @@