Skip to content

Commit 69e1fc8

Browse files
committed
Merge PR #278 into 16.0
Signed-off-by pedrobaeza
2 parents 170f04e + 450d959 commit 69e1fc8

File tree

5 files changed

+134
-229
lines changed

5 files changed

+134
-229
lines changed

hr_expense_advance_clearing/tests/test_hr_expense_advance_clearing.py

Lines changed: 50 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,45 @@
11
# Copyright 2019 Kitti Upariphutthiphong <[email protected]>
2+
# Copyright 2024 Tecnativa - Víctor Martínez
23
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
34

45
from odoo import fields
56
from odoo.exceptions import UserError, ValidationError
6-
from odoo.tests import common
7-
from odoo.tests.common import Form
7+
from odoo.tests.common import Form, tagged
8+
from odoo.tools import mute_logger
89

10+
from odoo.addons.hr_expense.tests.common import TestExpenseCommon
911

10-
class TestHrExpenseAdvanceClearing(common.TransactionCase):
12+
13+
@tagged("-at_install", "post_install")
14+
class TestHrExpenseAdvanceClearing(TestExpenseCommon):
1115
@classmethod
12-
def setUpClass(cls):
13-
super().setUpClass()
14-
company = cls.env.ref("base.main_company")
15-
cls.company_2 = cls.env["res.company"].create({"name": "Company 2"})
16-
cls.journal_bank = cls.env["account.journal"].search(
17-
[("type", "=", "bank")], limit=1
18-
)
19-
cls.product = cls.env["product.product"].create(
20-
{"name": "Service 1", "type": "service"}
21-
)
22-
tax_group = cls.env["account.tax.group"].create(
23-
{"name": "Tax Group 1", "sequence": 1}
24-
)
25-
cls.tax = cls.env["account.tax"].create(
26-
{
27-
"name": "Tax 10.0%",
28-
"amount": 10.0,
29-
"amount_type": "percent",
30-
"type_tax_use": "purchase",
31-
"company_id": company.id,
32-
"tax_group_id": tax_group.id,
33-
"price_include": True,
34-
}
35-
)
36-
employee_home = cls.env["res.partner"].create({"name": "Employee Home Address"})
37-
cls.employee = cls.env["hr.employee"].create(
38-
{"name": "Employee A", "address_home_id": employee_home.id}
39-
)
40-
advance_account = cls.env["account.account"].create(
41-
{
42-
"code": "154000",
43-
"name": "Employee Advance",
44-
"account_type": "asset_current",
45-
"reconcile": True,
46-
}
47-
)
48-
cls.account_sales = cls.env["account.account"].create(
49-
{
50-
"code": "X1020",
51-
"name": "Product Sales - (test)",
52-
"account_type": "asset_current",
53-
}
54-
)
16+
def setUpClass(cls, chart_template_ref=None):
17+
super().setUpClass(chart_template_ref=chart_template_ref)
18+
advance_account = cls.company_data["default_account_assets"]
19+
advance_account.reconcile = True
5520
cls.emp_advance = cls.env.ref("hr_expense_advance_clearing.product_emp_advance")
5621
cls.emp_advance.property_account_expense_id = advance_account
22+
cls.product_a.standard_price = 0
5723
# Create advance expense 1,000
5824
cls.advance = cls._create_expense_sheet(
59-
cls, "Advance 1,000", cls.employee, cls.emp_advance, 1000.0, advance=True
25+
cls,
26+
"Advance 1,000",
27+
cls.expense_employee,
28+
cls.emp_advance,
29+
1000.0,
30+
advance=True,
6031
)
6132
# Create clearing expense 1,000
6233
cls.clearing_equal = cls._create_expense_sheet(
63-
cls, "Buy service 1,000", cls.employee, cls.product, 1000.0
34+
cls, "Buy service 1,000", cls.expense_employee, cls.product_a, 1000.0
6435
)
6536
# Create clearing expense 1,200
6637
cls.clearing_more = cls._create_expense_sheet(
67-
cls, "Buy service 1,200", cls.employee, cls.product, 1200.0
38+
cls, "Buy service 1,200", cls.expense_employee, cls.product_a, 1200.0
6839
)
6940
# Create clearing expense 800
7041
cls.clearing_less = cls._create_expense_sheet(
71-
cls, "Buy service 800", cls.employee, cls.product, 800.0
42+
cls, "Buy service 800", cls.expense_employee, cls.product_a, 800.0
7243
)
7344

7445
def _create_expense(
@@ -120,7 +91,7 @@ def _register_payment(self, move_id, amount, ctx=False, hr_return_advance=False)
12091
ctx["hr_return_advance"] = hr_return_advance
12192
PaymentWizard = self.env["account.payment.register"]
12293
with Form(PaymentWizard.with_context(**ctx)) as f:
123-
f.journal_id = self.journal_bank
94+
f.journal_id = self.company_data["default_journal_bank"]
12495
f.payment_date = fields.Date.today()
12596
f.amount = amount
12697
payment_wizard = f.save()
@@ -136,31 +107,37 @@ def test_0_test_constraints(self):
136107
with self.assertRaises(ValidationError):
137108
expense = self._create_expense(
138109
"Advance 1,000",
139-
self.employee,
110+
self.expense_employee,
140111
self.emp_advance,
141112
1.0,
142113
advance=True,
143114
)
144-
expense.account_id = self.account_sales.id
115+
expense.account_id = self.company_data["default_account_payable"]
145116
expense._check_advance()
146117
# Advance Sheet should not have > 1 expense lines
147118
with self.assertRaises(ValidationError):
148119
expense = self._create_expense(
149-
"Buy service 1,000", self.employee, self.product, 1.0
120+
"Buy service 1,000", self.expense_employee, self.product_a, 1.0
150121
)
151122
self.advance.write({"expense_line_ids": [(4, expense.id)]})
152123
# Advance Expense's product, must not has tax involved
153124
with self.assertRaises(ValidationError):
154-
self.emp_advance.supplier_taxes_id |= self.tax
125+
self.emp_advance.supplier_taxes_id |= self.company_data[
126+
"default_tax_purchase"
127+
]
155128
expense = self._create_expense(
156-
"Advance 1,000", self.employee, self.emp_advance, 1.0, advance=True
129+
"Advance 1,000",
130+
self.expense_employee,
131+
self.emp_advance,
132+
1.0,
133+
advance=True,
157134
)
158135
self.emp_advance.supplier_taxes_id = False # Remove tax bf proceed
159136
# Advance Expense, must not paid by company
160137
with self.assertRaises(ValidationError):
161138
expense = self._create_expense(
162139
"Advance 1,000",
163-
self.employee,
140+
self.expense_employee,
164141
self.emp_advance,
165142
1.0,
166143
advance=True,
@@ -170,20 +147,25 @@ def test_0_test_constraints(self):
170147
with self.assertRaises(ValidationError):
171148
expense = self._create_expense(
172149
"Advance 1,000",
173-
self.employee,
150+
self.expense_employee,
174151
self.emp_advance,
175152
1.0,
176153
advance=True,
177154
)
178-
expense.product_id = self.product.id
155+
expense.product_id = self.product_a
179156
expense._check_advance()
180157
# Advance Expense's product must have account configured
181158
with self.assertRaises(ValidationError):
182159
self.emp_advance.property_account_expense_id = False
183160
expense = self._create_expense(
184-
"Advance 1,000", self.employee, self.emp_advance, 1.0, advance=True
161+
"Advance 1,000",
162+
self.expense_employee,
163+
self.emp_advance,
164+
1.0,
165+
advance=True,
185166
)
186167

168+
@mute_logger("odoo.models.unlink")
187169
def test_1_clear_equal_advance(self):
188170
"""When clear equal advance, all set"""
189171
# ------------------ Advance --------------------------
@@ -220,10 +202,10 @@ def test_1_clear_equal_advance(self):
220202
len(clearing_dict["domain"][0][2]), self.advance.clearing_count
221203
)
222204
# Check advance from employee
223-
self.assertEqual(self.employee.advance_count, 1)
224-
clearing_document = self.employee.action_open_advance_clearing()
205+
self.assertEqual(self.expense_employee.advance_count, 1)
206+
clearing_document = self.expense_employee.action_open_advance_clearing()
225207
self.assertEqual(
226-
len(clearing_document["domain"][0][2]), self.employee.advance_count
208+
len(clearing_document["domain"][0][2]), self.expense_employee.advance_count
227209
)
228210
# Check back state move in advance after create clearing
229211
with self.assertRaises(UserError):
@@ -233,6 +215,7 @@ def test_1_clear_equal_advance(self):
233215
with self.assertRaises(UserError):
234216
self.advance.account_move_id._reverse_moves()
235217

218+
@mute_logger("odoo.models.unlink")
236219
def test_2_clear_more_than_advance(self):
237220
"""When clear more than advance, do pay more"""
238221
# ------------------ Advance --------------------------
@@ -255,6 +238,7 @@ def test_2_clear_more_than_advance(self):
255238
self._register_payment(self.clearing_more.account_move_id, 200.0)
256239
self.assertEqual(self.clearing_more.state, "done")
257240

241+
@mute_logger("odoo.models.unlink")
258242
def test_3_clear_less_than_advance(self):
259243
"""When clear less than advance, do return advance"""
260244
# ------------------ Advance --------------------------
@@ -310,10 +294,11 @@ def test_3_clear_less_than_advance(self):
310294
)
311295
self.assertEqual(len(payment), 1)
312296

297+
@mute_logger("odoo.models.unlink")
313298
def test_4_clearing_product_advance(self):
314299
"""When select clearing product on advance"""
315300
# ------------------ Advance --------------------------
316-
self.advance.expense_line_ids.clearing_product_id = self.product
301+
self.advance.expense_line_ids.clearing_product_id = self.product_a
317302
self.advance.action_submit_sheet()
318303
self.advance.approve_expense_sheets()
319304
self.advance.action_sheet_move_create()
@@ -323,7 +308,7 @@ def test_4_clearing_product_advance(self):
323308
# ------------------ Clearing --------------------------
324309
with Form(self.env["hr.expense.sheet"]) as sheet:
325310
sheet.name = "Test Clearing"
326-
sheet.employee_id = self.employee
311+
sheet.employee_id = self.expense_employee
327312
ex_sheet = sheet.save()
328313
ex_sheet.advance_sheet_id = self.advance
329314
self.assertEqual(len(ex_sheet.expense_line_ids), 0)
Lines changed: 35 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,52 @@
11
# Copyright 2019 Tecnativa - Ernesto Tejeda
2+
# Copyright 2024 Tecnativa - Víctor Martínez
23
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
34

45
from odoo.exceptions import UserError
5-
from odoo.tests.common import Form, TransactionCase
6-
7-
8-
class TestHrExpenseCancel(TransactionCase):
9-
def setUp(self):
10-
super().setUp()
11-
self.partner = self.env["res.partner"].create({"name": "Test partner"})
12-
self.payment_obj = self.env["account.payment"]
13-
self.account_payment_register = self.env["account.payment.register"]
14-
self.payment_journal = self.env["account.journal"].search(
15-
[("type", "in", ["cash", "bank"])], limit=1
16-
)
17-
18-
self.main_company = company = self.env.ref("base.main_company")
19-
self.expense_journal = self.env["account.journal"].create(
20-
{
21-
"name": "Purchase Journal - Test",
22-
"code": "HRTPJ",
23-
"type": "purchase",
24-
"company_id": company.id,
25-
}
26-
)
27-
28-
self.expense_sheet = self.env["hr.expense.sheet"].create(
29-
{
30-
"employee_id": self.ref("hr.employee_admin"),
31-
"name": "Expense test",
32-
"journal_id": self.expense_journal.id,
33-
}
34-
)
35-
self.expense_sheet.approve_expense_sheets()
36-
37-
self.expense = self.env["hr.expense"].create(
38-
{
39-
"name": "Expense test",
40-
"employee_id": self.ref("hr.employee_admin"),
41-
"product_id": self.ref(
42-
"hr_expense.expense_product_travel_accommodation"
43-
),
44-
"total_amount": 10,
45-
"sheet_id": self.expense_sheet.id,
46-
}
6+
from odoo.tests.common import Form, tagged
7+
8+
from odoo.addons.hr_expense.tests.common import TestExpenseCommon
9+
10+
11+
@tagged("-at_install", "post_install")
12+
class TestHrExpenseCancel(TestExpenseCommon):
13+
@classmethod
14+
def setUpClass(cls, chart_template_ref=None):
15+
super().setUpClass(chart_template_ref=chart_template_ref)
16+
# Create expense + sheet + approve
17+
expense_form = Form(
18+
cls.env["hr.expense"].with_context(
19+
default_product_id=cls.product_a.id,
20+
default_employee_id=cls.expense_employee.id,
21+
)
4722
)
48-
49-
def _get_payment_wizard(self, expense_sheet):
50-
action = expense_sheet.action_register_payment()
51-
ctx = action.get("context")
52-
with Form(
53-
self.account_payment_register.with_context(**ctx),
54-
view="account.view_account_payment_register_form",
55-
) as f:
56-
f.journal_id = self.payment_journal
57-
f.amount = expense_sheet.total_amount
58-
register_payment = f.save()
59-
return register_payment
23+
expense_form.name = "Test expense"
24+
cls.expense = expense_form.save()
25+
res = cls.expense.action_submit_expenses()
26+
sheet_form = Form(cls.env[res["res_model"]].with_context(**res["context"]))
27+
cls.expense_sheet = sheet_form.save()
28+
cls.expense_sheet.approve_expense_sheets()
29+
30+
def _get_payment_wizard(self):
31+
res = self.expense_sheet.action_register_payment()
32+
register_form = Form(self.env[res["res_model"]].with_context(**res["context"]))
33+
register_form.journal_id = self.company_data["default_journal_bank"]
34+
register_form.amount = self.expense_sheet.total_amount
35+
return register_form.save()
6036

6137
def test_action_cancel_posted(self):
6238
self.expense_sheet.action_sheet_move_create()
63-
6439
self.assertFalse(len(self.expense_sheet.payment_ids), 1)
6540
self.assertTrue(self.expense_sheet.account_move_id)
66-
6741
self.expense_sheet.action_cancel()
68-
6942
self.assertFalse(self.expense_sheet.payment_ids)
7043
self.assertFalse(self.expense_sheet.account_move_id)
7144

7245
def test_action_cancel_no_update_posted(self):
73-
journals = self.payment_journal | self.expense_journal
46+
journals = (
47+
self.company_data["default_journal_bank"]
48+
| self.company_data["default_journal_purchase"]
49+
)
7450
journals.write({"restrict_mode_hash_table": True})
7551
self.test_action_cancel_company_account()
7652
with self.assertRaises(UserError):
@@ -85,11 +61,8 @@ def test_action_cancel_company_account(self):
8561

8662
def test_action_cancel_own_account(self):
8763
self.expense_sheet.action_sheet_move_create()
88-
89-
payment_wizard = self._get_payment_wizard(self.expense_sheet)
64+
payment_wizard = self._get_payment_wizard()
9065
payment_wizard.action_create_payments()
91-
9266
self.assertTrue(self.expense_sheet.payment_ids)
93-
9467
self.expense_sheet.action_cancel() # assertFalse(payment.exist)
9568
self.assertFalse(self.expense_sheet.payment_ids.state != "cancel")

hr_expense_invoice/tests/test_hr_expense_invoice.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,6 @@ def setUpClass(cls, chart_template_ref=None):
3535
"invoice_date": fields.Date.today(),
3636
}
3737
)
38-
cls.expense_employee.address_home_id.write(
39-
{
40-
"bank_ids": [
41-
(
42-
0,
43-
0,
44-
{
45-
"acc_number": "FR20 1242 1242 1242 1242 1242 124",
46-
},
47-
)
48-
],
49-
}
50-
)
51-
cls.expense_employee.bank_account_id = (
52-
cls.expense_employee.address_home_id.bank_ids
53-
)
5438
cls.expense = cls.env["hr.expense"].create(
5539
{
5640
"name": "Expense test",

0 commit comments

Comments
 (0)