[FIX] hr_expense: Fix accounting fields edition + add test

This fix will complete the task 1965890 by allowing the user with
access rights to edit fields (reference, account_id, taxes_ids
& analytic_account_id) depending the sheet state.

Also added Tests to check if access rights on expense lines are
working well depending on the expense.sheet.state and the user group.

Task ID 2226352

closes odoo/odoo#53862

X-original-commit: f42c812916a50438078210c020f6144c7417d365
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Signed-off-by: bon-odoo <nboulif@users.noreply.github.com>
This commit is contained in:
Nasreddin (bon)
2020-06-30 11:09:14 +00:00
parent f3f07434f6
commit b033244f99
2 changed files with 102 additions and 1 deletions
+1 -1
View File
@@ -751,7 +751,7 @@ class HrExpenseSheet(models.Model):
return self.env['account.journal'].search([('type', 'in', ['cash', 'bank']), ('company_id', '=', default_company_id)], limit=1)
name = fields.Char('Expense Report Summary', required=True, tracking=True)
expense_line_ids = fields.One2many('hr.expense', 'sheet_id', string='Expense Lines', states={'approve': [('readonly', True)], 'done': [('readonly', True)], 'post': [('readonly', True)]}, copy=False)
expense_line_ids = fields.One2many('hr.expense', 'sheet_id', string='Expense Lines', copy=False)
state = fields.Selection([
('draft', 'Draft'),
('submit', 'Submitted'),
+101
View File
@@ -366,3 +366,104 @@ class TestExpenseRights(TestExpenseCommon):
with self.assertRaises(AccessError):
sheet_3.with_user(self.user_officer).refuse_sheet('')
sheet_3.with_user(self.user_manager).refuse_sheet('')
class TestExpenseLinesRights(TestExpenseCommon):
def setUp(self):
super(TestExpenseLinesRights, self).setUp()
self.setUpAdditionalAccounts()
self.product_expense = self.env['product.product'].create({
'name': "Delivered at cost",
'standard_price': 700,
'list_price': 700,
'type': 'consu',
'supplier_taxes_id': [(6, 0, [self.tax.id])],
'default_code': 'CONSU-DELI-COST',
'taxes_id': False,
'property_account_expense_id': self.account_expense.id,
})
self.user_manager.write({
'groups_id': [(4, self.env.ref('account.group_account_user').id)],
})
def test_expense_lines_rights(self):
expense = self.env['hr.expense.sheet'].with_user(self.user_employee).create({
'name': 'Expense for John Smith',
'employee_id': self.employee.id,
})
expense_line = self.env['hr.expense'].with_user(self.user_employee).create({
'name': 'Car Travel Expenses',
'employee_id': self.employee.id,
'product_id': self.product_expense.id,
'unit_amount': 700.00,
'tax_ids': [(6, 0, [self.tax.id])],
'sheet_id': expense.id,
'analytic_account_id': self.analytic_account.id,
})
expense.with_user(self.user_employee).action_submit_sheet()
# STATE APPROVE
expense.with_user(self.user_manager).approve_expense_sheets()
# Test User without Accountant Rights
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'reference': 'Test Reference'})
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'tax_ids': [(6, 0, [self.tax.id])]})
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'account_id': self.account_expense.id})
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'analytic_account_id': self.analytic_account.id})
# Test User with Accountant Rights
expense_line.with_user(self.user_manager).write({'reference': 'Test Reference'})
expense_line.with_user(self.user_manager).write({'tax_ids': [(6, 0, [self.tax.id])]})
expense_line.with_user(self.user_manager).write({'account_id': self.account_expense.id})
expense_line.with_user(self.user_manager).write({'analytic_account_id': self.analytic_account.id})
expense_line.invalidate_cache()
# STATE POST
expense.with_user(self.env.user).action_sheet_move_create()
# Test User without Accountant Rights
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'reference': 'Test Reference'})
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'tax_ids': [(6, 0, [self.tax.id])]})
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'account_id': self.account_expense.id})
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'analytic_account_id': self.analytic_account.id})
# Test User with Accountant Rights
expense_line.with_user(self.user_manager).write({'reference': 'Test Reference'})
expense_line.invalidate_cache()
with self.assertRaises(UserError):
expense_line.with_user(self.user_manager).write({'tax_ids': [(6, 0, [self.tax.id])]})
with self.assertRaises(UserError):
expense_line.with_user(self.user_manager).write({'account_id': self.account_expense.id})
with self.assertRaises(UserError):
expense_line.with_user(self.user_manager).write({'analytic_account_id': self.analytic_account.id})
# STATE DONE
expense.set_to_paid()
# Test User without Accountant Rights
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'reference': 'Test Reference'})
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'tax_ids': [(6, 0, [self.tax.id])]})
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'account_id': self.account_expense.id})
with self.assertRaises(UserError):
expense_line.with_user(self.user_employee).write({'analytic_account_id': self.analytic_account.id})
# Test User with Accountant Rights
expense_line.with_user(self.user_manager).write({'reference': 'Test Reference'})
with self.assertRaises(UserError):
expense_line.with_user(self.user_manager).write({'tax_ids': [(6, 0, [self.tax.id])]})
with self.assertRaises(UserError):
expense_line.with_user(self.user_manager).write({'account_id': self.account_expense.id})
with self.assertRaises(UserError):
expense_line.with_user(self.user_manager).write({'analytic_account_id': self.analytic_account.id})