1
1
# Copyright 2019 Kitti Upariphutthiphong <[email protected] >
2
+ # Copyright 2024 Tecnativa - Víctor Martínez
2
3
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3
4
4
5
from odoo import fields
5
6
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
8
9
10
+ from odoo .addons .hr_expense .tests .common import TestExpenseCommon
9
11
10
- class TestHrExpenseAdvanceClearing (common .TransactionCase ):
12
+
13
+ @tagged ("-at_install" , "post_install" )
14
+ class TestHrExpenseAdvanceClearing (TestExpenseCommon ):
11
15
@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
55
20
cls .emp_advance = cls .env .ref ("hr_expense_advance_clearing.product_emp_advance" )
56
21
cls .emp_advance .property_account_expense_id = advance_account
22
+ cls .product_a .standard_price = 0
57
23
# Create advance expense 1,000
58
24
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 ,
60
31
)
61
32
# Create clearing expense 1,000
62
33
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
64
35
)
65
36
# Create clearing expense 1,200
66
37
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
68
39
)
69
40
# Create clearing expense 800
70
41
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
72
43
)
73
44
74
45
def _create_expense (
@@ -120,7 +91,7 @@ def _register_payment(self, move_id, amount, ctx=False, hr_return_advance=False)
120
91
ctx ["hr_return_advance" ] = hr_return_advance
121
92
PaymentWizard = self .env ["account.payment.register" ]
122
93
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" ]
124
95
f .payment_date = fields .Date .today ()
125
96
f .amount = amount
126
97
payment_wizard = f .save ()
@@ -136,31 +107,37 @@ def test_0_test_constraints(self):
136
107
with self .assertRaises (ValidationError ):
137
108
expense = self ._create_expense (
138
109
"Advance 1,000" ,
139
- self .employee ,
110
+ self .expense_employee ,
140
111
self .emp_advance ,
141
112
1.0 ,
142
113
advance = True ,
143
114
)
144
- expense .account_id = self .account_sales . id
115
+ expense .account_id = self .company_data [ "default_account_payable" ]
145
116
expense ._check_advance ()
146
117
# Advance Sheet should not have > 1 expense lines
147
118
with self .assertRaises (ValidationError ):
148
119
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
150
121
)
151
122
self .advance .write ({"expense_line_ids" : [(4 , expense .id )]})
152
123
# Advance Expense's product, must not has tax involved
153
124
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
+ ]
155
128
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 ,
157
134
)
158
135
self .emp_advance .supplier_taxes_id = False # Remove tax bf proceed
159
136
# Advance Expense, must not paid by company
160
137
with self .assertRaises (ValidationError ):
161
138
expense = self ._create_expense (
162
139
"Advance 1,000" ,
163
- self .employee ,
140
+ self .expense_employee ,
164
141
self .emp_advance ,
165
142
1.0 ,
166
143
advance = True ,
@@ -170,20 +147,25 @@ def test_0_test_constraints(self):
170
147
with self .assertRaises (ValidationError ):
171
148
expense = self ._create_expense (
172
149
"Advance 1,000" ,
173
- self .employee ,
150
+ self .expense_employee ,
174
151
self .emp_advance ,
175
152
1.0 ,
176
153
advance = True ,
177
154
)
178
- expense .product_id = self .product . id
155
+ expense .product_id = self .product_a
179
156
expense ._check_advance ()
180
157
# Advance Expense's product must have account configured
181
158
with self .assertRaises (ValidationError ):
182
159
self .emp_advance .property_account_expense_id = False
183
160
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 ,
185
166
)
186
167
168
+ @mute_logger ("odoo.models.unlink" )
187
169
def test_1_clear_equal_advance (self ):
188
170
"""When clear equal advance, all set"""
189
171
# ------------------ Advance --------------------------
@@ -220,10 +202,10 @@ def test_1_clear_equal_advance(self):
220
202
len (clearing_dict ["domain" ][0 ][2 ]), self .advance .clearing_count
221
203
)
222
204
# 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 ()
225
207
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
227
209
)
228
210
# Check back state move in advance after create clearing
229
211
with self .assertRaises (UserError ):
@@ -233,6 +215,7 @@ def test_1_clear_equal_advance(self):
233
215
with self .assertRaises (UserError ):
234
216
self .advance .account_move_id ._reverse_moves ()
235
217
218
+ @mute_logger ("odoo.models.unlink" )
236
219
def test_2_clear_more_than_advance (self ):
237
220
"""When clear more than advance, do pay more"""
238
221
# ------------------ Advance --------------------------
@@ -255,6 +238,7 @@ def test_2_clear_more_than_advance(self):
255
238
self ._register_payment (self .clearing_more .account_move_id , 200.0 )
256
239
self .assertEqual (self .clearing_more .state , "done" )
257
240
241
+ @mute_logger ("odoo.models.unlink" )
258
242
def test_3_clear_less_than_advance (self ):
259
243
"""When clear less than advance, do return advance"""
260
244
# ------------------ Advance --------------------------
@@ -310,10 +294,11 @@ def test_3_clear_less_than_advance(self):
310
294
)
311
295
self .assertEqual (len (payment ), 1 )
312
296
297
+ @mute_logger ("odoo.models.unlink" )
313
298
def test_4_clearing_product_advance (self ):
314
299
"""When select clearing product on advance"""
315
300
# ------------------ Advance --------------------------
316
- self .advance .expense_line_ids .clearing_product_id = self .product
301
+ self .advance .expense_line_ids .clearing_product_id = self .product_a
317
302
self .advance .action_submit_sheet ()
318
303
self .advance .approve_expense_sheets ()
319
304
self .advance .action_sheet_move_create ()
@@ -323,7 +308,7 @@ def test_4_clearing_product_advance(self):
323
308
# ------------------ Clearing --------------------------
324
309
with Form (self .env ["hr.expense.sheet" ]) as sheet :
325
310
sheet .name = "Test Clearing"
326
- sheet .employee_id = self .employee
311
+ sheet .employee_id = self .expense_employee
327
312
ex_sheet = sheet .save ()
328
313
ex_sheet .advance_sheet_id = self .advance
329
314
self .assertEqual (len (ex_sheet .expense_line_ids ), 0 )
0 commit comments