4
4
# @author: Simone Orsi <simahawk@gmail.com>
5
5
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
6
6
7
- import mock
7
+ from unittest import mock
8
8
9
9
from odoo import fields
10
10
from odoo .tests .common import TransactionCase
@@ -21,18 +21,36 @@ def setUpClass(cls):
21
21
{
22
22
"code" : "612AII" ,
23
23
"name" : "expense account invoice import" ,
24
- "user_type_id " : cls . env . ref ( "account.data_account_type_expenses" ). id ,
24
+ "account_type " : "expense" ,
25
25
"company_id" : cls .company .id ,
26
26
}
27
27
)
28
28
cls .income_account = cls .env ["account.account" ].create (
29
29
{
30
30
"code" : "707AII" ,
31
31
"name" : "revenue account invoice import" ,
32
- "user_type_id " : cls . env . ref ( "account.data_account_type_revenue" ). id ,
32
+ "account_type " : "income" ,
33
33
"company_id" : cls .company .id ,
34
34
}
35
35
)
36
+ cls .adj_debit_account = cls .env ["account.account" ].create (
37
+ {
38
+ "code" : "658AII" ,
39
+ "name" : "Adjustment debit account" ,
40
+ "account_type" : "expense" ,
41
+ "company_id" : cls .company .id ,
42
+ }
43
+ )
44
+ cls .adj_credit_account = cls .env ["account.account" ].create (
45
+ {
46
+ "code" : "758AII" ,
47
+ "name" : "Adjustment credit account" ,
48
+ "account_type" : "income" ,
49
+ "company_id" : cls .company .id ,
50
+ }
51
+ )
52
+ cls .company .adjustment_debit_account_id = cls .adj_debit_account .id
53
+ cls .company .adjustment_credit_account_id = cls .adj_credit_account .id
36
54
purchase_tax_vals = {
37
55
"name" : "Test 1% VAT" ,
38
56
"description" : "ZZ-VAT-buy-1.0" ,
@@ -50,15 +68,19 @@ def setUpClass(cls):
50
68
sale_tax_vals = purchase_tax_vals .copy ()
51
69
sale_tax_vals .update ({"description" : "ZZ-VAT-sale-1.0" , "type_tax_use" : "sale" })
52
70
cls .sale_tax = cls .env ["account.tax" ].create (sale_tax_vals )
53
- cls .product = cls .env ["product.product" ].create (
54
- {
55
- "name" : "Expense product" ,
56
- "default_code" : "AII-TEST-PRODUCT" ,
57
- "taxes_id" : [(6 , 0 , [cls .sale_tax .id ])],
58
- "supplier_taxes_id" : [(6 , 0 , [cls .purchase_tax .id ])],
59
- "property_account_income_id" : cls .income_account .id ,
60
- "property_account_expense_id" : cls .expense_account .id ,
61
- }
71
+ cls .product = (
72
+ cls .env ["product.product" ]
73
+ .with_company (cls .company .id )
74
+ .create (
75
+ {
76
+ "name" : "Expense product" ,
77
+ "default_code" : "AII-TEST-PRODUCT" ,
78
+ "taxes_id" : [(6 , 0 , [cls .sale_tax .id ])],
79
+ "supplier_taxes_id" : [(6 , 0 , [cls .purchase_tax .id ])],
80
+ "property_account_income_id" : cls .income_account .id ,
81
+ "property_account_expense_id" : cls .expense_account .id ,
82
+ }
83
+ )
62
84
)
63
85
cls .all_import_config = [
64
86
{
@@ -185,6 +207,53 @@ def test_import_in_invoice(self):
185
207
)
186
208
self .assertEqual (inv .journal_id .id , self .pur_journal2 .id )
187
209
210
+ def test_import_in_invoice_with_global_adjustment (self ):
211
+ parsed_inv = {
212
+ "type" : "in_invoice" ,
213
+ "journal" : {"code" : "XXXP2" },
214
+ "invoice_number" : "TESTAIIGLOBAL" ,
215
+ "amount_untaxed" : 100.05 ,
216
+ "amount_total" : 101.0 ,
217
+ "date" : "2023-04-08" ,
218
+ "date_due" : "2023-05-07" ,
219
+ "partner" : {"name" : "Wood Corner" },
220
+ "lines" : [
221
+ {
222
+ "product" : {"code" : "AII-TEST-PRODUCT" },
223
+ "name" : "Super test product" ,
224
+ "qty" : 2 ,
225
+ "price_unit" : 50 ,
226
+ "taxes" : [
227
+ {
228
+ "amount_type" : "percent" ,
229
+ "amount" : 1.0 ,
230
+ "unece_type_code" : "VAT" ,
231
+ "unece_categ_code" : "S" ,
232
+ }
233
+ ],
234
+ }
235
+ ],
236
+ }
237
+ import_config = {"invoice_line_method" : "nline_auto_product" }
238
+ inv = (
239
+ self .env ["account.invoice.import" ]
240
+ .with_company (self .company .id )
241
+ .create_invoice (parsed_inv , import_config )
242
+ )
243
+ self .assertEqual (inv .move_type , parsed_inv ["type" ])
244
+ self .assertFalse (
245
+ inv .currency_id .compare_amounts (
246
+ inv .amount_untaxed , parsed_inv ["amount_untaxed" ]
247
+ )
248
+ )
249
+ self .assertFalse (
250
+ inv .currency_id .compare_amounts (
251
+ inv .amount_total , parsed_inv ["amount_total" ]
252
+ )
253
+ )
254
+ # Check that we have an adjustment line
255
+ self .assertEqual (len (inv .invoice_line_ids ), 2 )
256
+
188
257
def test_import_out_invoice (self ):
189
258
parsed_inv = {
190
259
"type" : "out_invoice" ,
0 commit comments