From 6b40bddcbb708c2a03b47aaa4eaaab306d684a12 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Thu, 22 Nov 2018 12:30:41 -0800 Subject: [PATCH 1/4] Initial commit of `hr_expense_change_analytic` for 11.0 --- hr_expense_change_analytic/__init__.py | 1 + hr_expense_change_analytic/__manifest__.py | 23 ++++++++ hr_expense_change_analytic/tests/__init__.py | 1 + .../tests/test_expense_change.py | 33 +++++++++++ hr_expense_change_analytic/wizard/__init__.py | 1 + .../wizard/expense_change.py | 57 +++++++++++++++++++ .../wizard/expense_change_views.xml | 14 +++++ 7 files changed, 130 insertions(+) create mode 100644 hr_expense_change_analytic/__init__.py create mode 100644 hr_expense_change_analytic/__manifest__.py create mode 100644 hr_expense_change_analytic/tests/__init__.py create mode 100644 hr_expense_change_analytic/tests/test_expense_change.py create mode 100644 hr_expense_change_analytic/wizard/__init__.py create mode 100644 hr_expense_change_analytic/wizard/expense_change.py create mode 100644 hr_expense_change_analytic/wizard/expense_change_views.xml diff --git a/hr_expense_change_analytic/__init__.py b/hr_expense_change_analytic/__init__.py new file mode 100644 index 00000000..40272379 --- /dev/null +++ b/hr_expense_change_analytic/__init__.py @@ -0,0 +1 @@ +from . import wizard diff --git a/hr_expense_change_analytic/__manifest__.py b/hr_expense_change_analytic/__manifest__.py new file mode 100644 index 00000000..7eea3391 --- /dev/null +++ b/hr_expense_change_analytic/__manifest__.py @@ -0,0 +1,23 @@ +{ + 'name': 'HR Expense Change - Analytic', + 'author': 'Hibou Corp. ', + 'version': '11.0.1.0.0', + 'category': 'Employees', + 'sequence': 96, + 'summary': 'Change Analytic Account on Expense.', + 'description': """ +Adds fields and functionality to change the analytic account on expense +and subsequent documents. + + """, + 'website': 'https://hibou.io/', + 'depends': [ + 'hr_expense_change', + 'analytic', + ], + 'data': [ + 'wizard/expense_change_views.xml', + ], + 'installable': True, + 'application': False, +} diff --git a/hr_expense_change_analytic/tests/__init__.py b/hr_expense_change_analytic/tests/__init__.py new file mode 100644 index 00000000..431d3587 --- /dev/null +++ b/hr_expense_change_analytic/tests/__init__.py @@ -0,0 +1 @@ +from . import test_expense_change diff --git a/hr_expense_change_analytic/tests/test_expense_change.py b/hr_expense_change_analytic/tests/test_expense_change.py new file mode 100644 index 00000000..a7923f45 --- /dev/null +++ b/hr_expense_change_analytic/tests/test_expense_change.py @@ -0,0 +1,33 @@ +from odoo.addons.hr_expense_change.tests.test_expense_change import TestExpenseChange + + +class TestWizard(TestExpenseChange): + def test_expense_change_basic(self): + self.analytic_account = self.env['account.analytic.account'].create({ + 'name': 'test account', + }) + self.analytic_account2 = self.env['account.analytic.account'].create({ + 'name': 'test account2', + }) + + self.expense.expense_line_ids.write({'analytic_account_id': False}) + + super(TestWizard, self).test_expense_change_basic() + + # Tests Adding an Analytic Account + self.assertFalse(self.expense.expense_line_ids.analytic_account_id) + ctx = {'active_model': 'hr.expense', 'active_ids': self.expense.expense_line_ids.ids} + change = self.env['hr.expense.change'].with_context(ctx).create({}) + change.analytic_account_id = self.analytic_account + change.affect_change() + self.assertEqual(self.expense.expense_line_ids.analytic_account_id, self.analytic_account) + + # Tests Changing + change.analytic_account_id = self.analytic_account2 + change.affect_change() + self.assertEqual(self.expense.expense_line_ids.analytic_account_id, self.analytic_account2) + + # Tests Removing + change.analytic_account_id = False + change.affect_change() + self.assertFalse(self.expense.expense_line_ids.analytic_account_id) diff --git a/hr_expense_change_analytic/wizard/__init__.py b/hr_expense_change_analytic/wizard/__init__.py new file mode 100644 index 00000000..2d905886 --- /dev/null +++ b/hr_expense_change_analytic/wizard/__init__.py @@ -0,0 +1 @@ +from . import expense_change \ No newline at end of file diff --git a/hr_expense_change_analytic/wizard/expense_change.py b/hr_expense_change_analytic/wizard/expense_change.py new file mode 100644 index 00000000..d4463043 --- /dev/null +++ b/hr_expense_change_analytic/wizard/expense_change.py @@ -0,0 +1,57 @@ +from odoo import api, fields, models, _ + + +class ExpenseChangeWizard(models.TransientModel): + _inherit = 'hr.expense.change' + + analytic_account_id = fields.Many2one('account.analytic.account', string='Analytic Account') + analytic_account_warning = fields.Char(string='Analytic Account Warning', compute='_compute_analytic_warning') + + @api.model + def default_get(self, fields): + rec = super(ExpenseChangeWizard, self).default_get(fields) + expense = self.env['hr.expense'].browse(rec['expense_id']) + rec.update({ + 'analytic_account_id': expense.analytic_account_id.id, + }) + return rec + + @api.onchange('expense_id', 'analytic_account_id') + @api.multi + def _compute_analytic_warning(self): + self.ensure_one() + expenses = self._find_expenses_to_write_analytic(self.expense_id.analytic_account_id.id) + if len(expenses) <= 1: + self.analytic_account_warning = '' + else: + other_expenses = expenses - self.expense_id + self.analytic_account_warning = '%d other expenses will be changed. (%s)' % \ + (len(other_expenses), ', '.join(other_expenses.mapped('name'))) + + + + @api.multi + def affect_change(self): + old_analytic_id = self.expense_id.analytic_account_id.id + res = super(ExpenseChangeWizard, self).affect_change() + self._affect_analytic_change(old_analytic_id) + return res + + def _find_expenses_to_write_analytic(self, old_analytic_id): + if self.analytic_account_id.id == old_analytic_id: + return [] + # Essentially, if you have a move, you must write all related expenses and lines. + if not self.expense_id.sheet_id.account_move_id: + return self.expense_id + return self.expense_id.sheet_id.expense_line_ids\ + .filtered(lambda l: l.analytic_account_id.id == old_analytic_id) + + def _affect_analytic_change(self, old_analytic_id): + expenses_to_affect = self._find_expenses_to_write_analytic(old_analytic_id) + if expenses_to_affect: + expenses_to_affect.write({'analytic_account_id': self.analytic_account_id.id}) + + lines_to_affect = self.expense_id.sheet_id.account_move_id \ + .line_ids.filtered(lambda l: l.analytic_account_id.id == old_analytic_id and l.debit) + lines_to_affect.write({'analytic_account_id': self.analytic_account_id.id}) + lines_to_affect.create_analytic_lines() diff --git a/hr_expense_change_analytic/wizard/expense_change_views.xml b/hr_expense_change_analytic/wizard/expense_change_views.xml new file mode 100644 index 00000000..06d9749a --- /dev/null +++ b/hr_expense_change_analytic/wizard/expense_change_views.xml @@ -0,0 +1,14 @@ + + + + hr.expense.change.form.inherit + hr.expense.change + + + + + + + + + \ No newline at end of file From 2db66459501a3f12504f93599c805b3bba776552 Mon Sep 17 00:00:00 2001 From: Bhoomi Date: Fri, 13 Sep 2019 16:28:59 -0400 Subject: [PATCH 2/4] MIG `hr_expense_change_analytic` For Odoo 12.0 --- hr_expense_change_analytic/__manifest__.py | 2 +- hr_expense_change_analytic/tests/test_expense_change.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hr_expense_change_analytic/__manifest__.py b/hr_expense_change_analytic/__manifest__.py index 7eea3391..736c887f 100644 --- a/hr_expense_change_analytic/__manifest__.py +++ b/hr_expense_change_analytic/__manifest__.py @@ -1,7 +1,7 @@ { 'name': 'HR Expense Change - Analytic', 'author': 'Hibou Corp. ', - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'category': 'Employees', 'sequence': 96, 'summary': 'Change Analytic Account on Expense.', diff --git a/hr_expense_change_analytic/tests/test_expense_change.py b/hr_expense_change_analytic/tests/test_expense_change.py index a7923f45..28086894 100644 --- a/hr_expense_change_analytic/tests/test_expense_change.py +++ b/hr_expense_change_analytic/tests/test_expense_change.py @@ -1,7 +1,7 @@ -from odoo.addons.hr_expense_change.tests.test_expense_change import TestExpenseChange +from odoo.addons.hr_expense_change.tests.test_expense_change import TestAccountEntry -class TestWizard(TestExpenseChange): +class TestWizard(TestAccountEntry): def test_expense_change_basic(self): self.analytic_account = self.env['account.analytic.account'].create({ 'name': 'test account', From eab74444d7b199602afffd72d43472b04e7323a4 Mon Sep 17 00:00:00 2001 From: Connor Christian Date: Tue, 10 Nov 2020 15:19:58 -0500 Subject: [PATCH 3/4] [MIG] hr_expense_change_analytic: for Odoo 13.0 --- hr_expense_change_analytic/__manifest__.py | 2 +- hr_expense_change_analytic/wizard/expense_change.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/hr_expense_change_analytic/__manifest__.py b/hr_expense_change_analytic/__manifest__.py index 736c887f..7cf2cfa9 100644 --- a/hr_expense_change_analytic/__manifest__.py +++ b/hr_expense_change_analytic/__manifest__.py @@ -1,7 +1,7 @@ { 'name': 'HR Expense Change - Analytic', 'author': 'Hibou Corp. ', - 'version': '12.0.1.0.0', + 'version': '13.0.1.0.0', 'category': 'Employees', 'sequence': 96, 'summary': 'Change Analytic Account on Expense.', diff --git a/hr_expense_change_analytic/wizard/expense_change.py b/hr_expense_change_analytic/wizard/expense_change.py index d4463043..81069d08 100644 --- a/hr_expense_change_analytic/wizard/expense_change.py +++ b/hr_expense_change_analytic/wizard/expense_change.py @@ -17,7 +17,6 @@ class ExpenseChangeWizard(models.TransientModel): return rec @api.onchange('expense_id', 'analytic_account_id') - @api.multi def _compute_analytic_warning(self): self.ensure_one() expenses = self._find_expenses_to_write_analytic(self.expense_id.analytic_account_id.id) @@ -30,7 +29,6 @@ class ExpenseChangeWizard(models.TransientModel): - @api.multi def affect_change(self): old_analytic_id = self.expense_id.analytic_account_id.id res = super(ExpenseChangeWizard, self).affect_change() From 1c71fabdb6f0267bdefc929ea1e5c4de2faf2c58 Mon Sep 17 00:00:00 2001 From: Connor Christian Date: Wed, 11 Nov 2020 15:35:07 -0500 Subject: [PATCH 4/4] [MIG] hr_expense_change_analytic: for Odoo 14.0 --- .../tests/test_expense_change.py | 4 +-- hr_expense_change_analytic/__manifest__.py | 2 +- .../tests/test_expense_change.py | 29 ++++++++++--------- .../wizard/expense_change.py | 3 ++ 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/hr_expense_change/tests/test_expense_change.py b/hr_expense_change/tests/test_expense_change.py index 7c4cc156..45379bfa 100644 --- a/hr_expense_change/tests/test_expense_change.py +++ b/hr_expense_change/tests/test_expense_change.py @@ -141,12 +141,12 @@ class TestAccountEntry(test_expenses.TestExpenses): self.assertEqual(expense_sheet.accounting_date, expense_sheet.account_move_id.date) expense = expense_sheet.expense_line_ids[0] - + self.expense = expense ctx = {'active_model': 'hr.expense', 'active_ids': expense.ids} change = self.env['hr.expense.change'].sudo(flag=True).with_context(ctx).create({}) self.assertEqual(change.date, expense.date) - change_date = '2018-01-01' + change_date = '2017-01-31' change.write({'date': change_date}) change.affect_change() diff --git a/hr_expense_change_analytic/__manifest__.py b/hr_expense_change_analytic/__manifest__.py index 7cf2cfa9..f2f132a6 100644 --- a/hr_expense_change_analytic/__manifest__.py +++ b/hr_expense_change_analytic/__manifest__.py @@ -1,7 +1,7 @@ { 'name': 'HR Expense Change - Analytic', 'author': 'Hibou Corp. ', - 'version': '13.0.1.0.0', + 'version': '14.0.1.0.0', 'category': 'Employees', 'sequence': 96, 'summary': 'Change Analytic Account on Expense.', diff --git a/hr_expense_change_analytic/tests/test_expense_change.py b/hr_expense_change_analytic/tests/test_expense_change.py index 28086894..3098afa2 100644 --- a/hr_expense_change_analytic/tests/test_expense_change.py +++ b/hr_expense_change_analytic/tests/test_expense_change.py @@ -1,8 +1,16 @@ -from odoo.addons.hr_expense_change.tests.test_expense_change import TestAccountEntry +from odoo.addons.hr_expense_change.tests import test_expense_change +from odoo.tests import tagged +from odoo import fields -class TestWizard(TestAccountEntry): +@tagged('-at_install', 'post_install') +class TestWizard(test_expense_change.TestAccountEntry): + def test_expense_change_basic(self): + super(TestWizard, self).test_expense_values() + + # Tests Adding an Analytic Account + self.analytic_account = self.env['account.analytic.account'].create({ 'name': 'test account', }) @@ -10,24 +18,19 @@ class TestWizard(TestAccountEntry): 'name': 'test account2', }) - self.expense.expense_line_ids.write({'analytic_account_id': False}) - - super(TestWizard, self).test_expense_change_basic() - - # Tests Adding an Analytic Account - self.assertFalse(self.expense.expense_line_ids.analytic_account_id) - ctx = {'active_model': 'hr.expense', 'active_ids': self.expense.expense_line_ids.ids} - change = self.env['hr.expense.change'].with_context(ctx).create({}) + self.assertNotEqual(self.expense.analytic_account_id, self.analytic_account) + ctx = {'active_model': 'hr.expense', 'active_ids': self.expense.ids} + change = self.env['hr.expense.change'].sudo().with_context(ctx).create({}) change.analytic_account_id = self.analytic_account change.affect_change() - self.assertEqual(self.expense.expense_line_ids.analytic_account_id, self.analytic_account) + self.assertEqual(self.expense.analytic_account_id, self.analytic_account) # Tests Changing change.analytic_account_id = self.analytic_account2 change.affect_change() - self.assertEqual(self.expense.expense_line_ids.analytic_account_id, self.analytic_account2) + self.assertEqual(self.expense.analytic_account_id, self.analytic_account2) # Tests Removing change.analytic_account_id = False change.affect_change() - self.assertFalse(self.expense.expense_line_ids.analytic_account_id) + self.assertFalse(self.expense.analytic_account_id) diff --git a/hr_expense_change_analytic/wizard/expense_change.py b/hr_expense_change_analytic/wizard/expense_change.py index 81069d08..1c6e6930 100644 --- a/hr_expense_change_analytic/wizard/expense_change.py +++ b/hr_expense_change_analytic/wizard/expense_change.py @@ -47,9 +47,12 @@ class ExpenseChangeWizard(models.TransientModel): def _affect_analytic_change(self, old_analytic_id): expenses_to_affect = self._find_expenses_to_write_analytic(old_analytic_id) if expenses_to_affect: + prev_state = expenses_to_affect.state + expenses_to_affect.state = "draft" expenses_to_affect.write({'analytic_account_id': self.analytic_account_id.id}) lines_to_affect = self.expense_id.sheet_id.account_move_id \ .line_ids.filtered(lambda l: l.analytic_account_id.id == old_analytic_id and l.debit) lines_to_affect.write({'analytic_account_id': self.analytic_account_id.id}) lines_to_affect.create_analytic_lines() + expenses_to_affect.state = prev_state