Skip to content

Commit 8efff4d

Browse files
alexis-viaadrienpeiffer
authored andcommitted
Adapt code to new UNECE modules from OCA/community-data-files
1 parent 2bc6bfd commit 8efff4d

19 files changed

+120
-267
lines changed

account_invoice_import_ubl/README.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ This module is an extension of the module *account_invoice_import* to add the ab
1111
Configuration
1212
=============
1313

14-
There is no configuration specific to this module. Please refer to the configuration section of the modules *account_invoice_import* and *base_zugferd* (this module should be renamed).
14+
There is no configuration specific to this module. Please refer to the configuration section of the modules *account_invoice_import* and *account_tax_unece*.
1515

1616
Usage
1717
=====

account_invoice_import_ubl/__openerp__.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@
2929
'summary': 'Import UBL XML supplier invoices/refunds',
3030
'author': 'Akretion,Odoo Community Association (OCA)',
3131
'website': 'http://www.akretion.com',
32-
# TODO : rename module base_zugferd
33-
# because it seems payment means code and some tax codes
34-
# are common between zugferd/CII and UBL !
35-
'depends': ['account_invoice_import', 'base_vat', 'base_zugferd'],
32+
'depends': [
33+
'account_invoice_import',
34+
'base_vat',
35+
'account_tax_unece',
36+
'product_uom_unece',
37+
],
3638
'data': [],
3739
'demo': ['demo/demo_data.xml'],
3840
'test': ['test/ubl.yml'],

account_invoice_import_ubl/demo/demo_data.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
<field name="type_tax_use">purchase</field>
3030
<field name="amount">0.21</field>
3131
<field name="type">percent</field>
32-
<field name="zugferd_type_code">VAT</field>
33-
<field name="zugferd_categ_code">S</field>
32+
<field name="unece_type_id" ref="account_tax_unece.tax_type_vat"/>
33+
<field name="unece_categ_id" ref="account_tax_unece.tax_categ_s"/>
3434
<field name="account_collected_id" ref="account.a_expense"/>
3535
<field name="account_paid_id" ref="account.a_expense"/>
3636
<field name="base_sign">-1</field>
@@ -43,8 +43,8 @@
4343
<field name="type_tax_use">purchase</field>
4444
<field name="amount">0.06</field>
4545
<field name="type">percent</field>
46-
<field name="zugferd_type_code">VAT</field>
47-
<field name="zugferd_categ_code">S</field>
46+
<field name="unece_type_id" ref="account_tax_unece.tax_type_vat"/>
47+
<field name="unece_categ_id" ref="account_tax_unece.tax_categ_s"/>
4848
<field name="account_collected_id" ref="account.a_expense"/>
4949
<field name="account_paid_id" ref="account.a_expense"/>
5050
<field name="base_sign">-1</field>

account_invoice_import_ubl/test/ubl.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# @author: Alexis de Lattre <[email protected]>
44
# The licence is in the file __openerp__.py
55
-
6-
Mass import of ZUGFeRD sample invoices
6+
Mass import of UBL sample invoices
77
-
88
!python {model: account.invoice.import}: |
99
import base64

account_invoice_import_ubl/wizard/account_invoice_import.py

+20-20
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def parse_xml_invoice(self, xml_root):
4545

4646
@api.model
4747
def ubl_select_taxes_of_invoice_line(
48-
self, taxes_xpath, namespaces, zug2odoo_tax, line_name=False):
48+
self, taxes_xpath, namespaces, unece2odoo_tax, line_name=False):
4949
'''This method is designed to be inherited'''
5050
tax_ids = []
5151
prec = self.env['decimal.precision'].precision_get('Account')
@@ -65,13 +65,13 @@ def ubl_select_taxes_of_invoice_line(
6565
percent = percent_xpath[0].text and float(percent_xpath[0].text)\
6666
or 0.0
6767
odoo_tax_found = False
68-
for otax in zug2odoo_tax:
68+
for otax in unece2odoo_tax:
6969
if (
70-
otax['zugferd_type_code'] == type_code and
70+
otax['unece_type_code'] == type_code and
7171
otax['type'] == 'percent' and
7272
not float_compare(
7373
percent, otax['amount'], precision_digits=prec)):
74-
if categ_code and categ_code != otax['zugferd_categ_code']:
74+
if categ_code and categ_code != otax['unece_categ_code']:
7575
continue
7676
tax_ids.append(otax['id'])
7777
odoo_tax_found = True
@@ -157,27 +157,27 @@ def parse_ubl_xml(self, xml_root):
157157
"/cac:FinancialInstitution"
158158
"/cbc:ID[@schemeID='BIC']",
159159
namespaces=namespaces)
160-
uoms = self.env['product.uom'].search([('zugferd_code', '!=', False)])
161-
zug2odoo_uom = {}
160+
uoms = self.env['product.uom'].search([('unece_code', '!=', False)])
161+
unece2odoo_uom = {}
162162
for uom in uoms:
163-
zug2odoo_uom[uom.zugferd_code] = uom.id
164-
logger.debug('zug2odoo_uom = %s', zug2odoo_uom)
163+
unece2odoo_uom[uom.unece_code] = uom.id
164+
logger.debug('unece2odoo_uom = %s', unece2odoo_uom)
165165
taxes = self.env['account.tax'].search([
166-
('zugferd_type_code', '!=', False),
167-
('zugferd_categ_code', '!=', False),
166+
('unece_type_id', '!=', False),
167+
('unece_categ_id', '!=', False),
168168
('type_tax_use', 'in', ('all', 'purchase')),
169169
('price_include', '=', False), # TODO : check what the standard
170170
]) # says about this
171-
zug2odoo_tax = []
171+
unece2odoo_tax = []
172172
for tax in taxes:
173-
zug2odoo_tax.append({
174-
'zugferd_type_code': tax.zugferd_type_code,
175-
'zugferd_categ_code': tax.zugferd_categ_code,
173+
unece2odoo_tax.append({
174+
'unece_type_code': tax.unece_type_code,
175+
'unece_categ_code': tax.unece_categ_code,
176176
'type': tax.type,
177177
'amount': tax.amount * 100,
178178
'id': tax.id,
179179
})
180-
logger.debug('zug2odoo_tax=%s', zug2odoo_tax)
180+
logger.debug('unece2odoo_tax=%s', unece2odoo_tax)
181181
res_lines = []
182182
total_line_lines = 0.0
183183
inv_line_xpath = xml_root.xpath(
@@ -194,10 +194,10 @@ def parse_ubl_xml(self, xml_root):
194194
qty = 1
195195
uos_id = False
196196
if qty_xpath[0].attrib and qty_xpath[0].attrib.get('unitCode'):
197-
zug_uom = qty_xpath[0].attrib['unitCode']
198-
if zug_uom == 'ZZ':
199-
zug_uom = 'C62'
200-
uos_id = zug2odoo_uom.get(zug_uom)
197+
unece_uom = qty_xpath[0].attrib['unitCode']
198+
if unece_uom == 'ZZ':
199+
unece_uom = 'C62'
200+
uos_id = unece2odoo_uom.get(unece_uom)
201201
ean13_xpath = iline.xpath(
202202
"cac:Item"
203203
"/cac:StandardItemIdentification"
@@ -226,7 +226,7 @@ def parse_ubl_xml(self, xml_root):
226226
"cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory",
227227
namespaces=namespaces)
228228
tax_ids = self.ubl_select_taxes_of_invoice_line(
229-
taxes_xpath, namespaces, zug2odoo_tax, name)
229+
taxes_xpath, namespaces, unece2odoo_tax, name)
230230
vals = {
231231
'ean13': ean13_xpath and ean13_xpath[0].text or False,
232232
'product_code':

account_invoice_import_zugferd/demo/demo_data.xml

+8-8
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ Versicherungsverein Musterstadt a.G.</field>
6565
<field name="type_tax_use">purchase</field>
6666
<field name="amount">0.19</field>
6767
<field name="type">percent</field>
68-
<field name="zugferd_type_code">VAT</field>
69-
<field name="zugferd_categ_code">S</field>
68+
<field name="unece_type_id" ref="account_tax_unece.tax_type_vat"/>
69+
<field name="unece_categ_id" ref="account_tax_unece.tax_categ_s"/>
7070
<field name="account_collected_id" ref="account.a_expense"/>
7171
<field name="account_paid_id" ref="account.a_expense"/>
7272
<field name="base_sign">-1</field>
@@ -79,8 +79,8 @@ Versicherungsverein Musterstadt a.G.</field>
7979
<field name="type_tax_use">purchase</field>
8080
<field name="amount">0.07</field>
8181
<field name="type">percent</field>
82-
<field name="zugferd_type_code">VAT</field>
83-
<field name="zugferd_categ_code">S</field>
82+
<field name="unece_type_id" ref="account_tax_unece.tax_type_vat"/>
83+
<field name="unece_categ_id" ref="account_tax_unece.tax_categ_s"/>
8484
<field name="account_collected_id" ref="account.a_expense"/>
8585
<field name="account_paid_id" ref="account.a_expense"/>
8686
<field name="base_sign">-1</field>
@@ -93,8 +93,8 @@ Versicherungsverein Musterstadt a.G.</field>
9393
<field name="type_tax_use">purchase</field>
9494
<field name="amount">0.19</field>
9595
<field name="type">percent</field>
96-
<field name="zugferd_type_code">ZF_INSURANCE_TAX</field>
97-
<field name="zugferd_categ_code">S</field>
96+
<field name="unece_type_id" ref="base_zugferd.tax_type_zf_insurance_tax"/>
97+
<field name="unece_categ_id" ref="account_tax_unece.tax_categ_s"/>
9898
<field name="account_collected_id" ref="account.a_expense"/>
9999
<field name="account_paid_id" ref="account.a_expense"/>
100100
<field name="base_sign">-1</field>
@@ -107,8 +107,8 @@ Versicherungsverein Musterstadt a.G.</field>
107107
<field name="type_tax_use">purchase</field>
108108
<field name="amount">0.1634</field>
109109
<field name="type">percent</field>
110-
<field name="zugferd_type_code">ZF_INSURANCE_TAX</field>
111-
<field name="zugferd_categ_code">S</field>
110+
<field name="unece_type_id" ref="base_zugferd.tax_type_zf_insurance_tax"/>
111+
<field name="unece_categ_id" ref="account_tax_unece.tax_categ_s"/>
112112
<field name="account_collected_id" ref="account.a_expense"/>
113113
<field name="account_paid_id" ref="account.a_expense"/>
114114
<field name="base_sign">-1</field>

account_invoice_import_zugferd/wizard/account_invoice_import.py

+24-21
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def parse_xml_invoice(self, xml_root):
8989

9090
@api.model
9191
def select_taxes_of_invoice_line(
92-
self, taxes_xpath, namespaces, zug2odoo_tax, line_name=False):
92+
self, taxes_xpath, namespaces, unece2odoo_tax, line_name=False):
9393
'''This method is designed to be inherited'''
9494
tax_ids = []
9595
prec = self.env['decimal.precision'].precision_get('Account')
@@ -105,13 +105,16 @@ def select_taxes_of_invoice_line(
105105
percent = percent_xpath[0].text and float(percent_xpath[0].text)\
106106
or 0.0
107107
odoo_tax_found = False
108-
for otax in zug2odoo_tax:
108+
logger.debug(
109+
'select_taxes_of_invoice_line type_code=%s '
110+
'categ_code=%s percent=%s', type_code, categ_code, percent)
111+
for otax in unece2odoo_tax:
109112
if (
110-
otax['zugferd_type_code'] == type_code and
113+
otax['unece_type_code'] == type_code and
111114
otax['type'] == 'percent' and
112115
not float_compare(
113116
percent, otax['amount'], precision_digits=prec)):
114-
if categ_code and categ_code != otax['zugferd_categ_code']:
117+
if categ_code and categ_code != otax['unece_categ_code']:
115118
continue
116119
tax_ids.append(otax['id'])
117120
odoo_tax_found = True
@@ -237,34 +240,34 @@ def parse_zugferd_xml(self, xml_root):
237240
"//ram:SpecifiedTradeSettlementPaymentMeans"
238241
"/ram:PayeeSpecifiedCreditorFinancialInstitution"
239242
"/ram:BICID", namespaces=namespaces)
240-
uoms = self.env['product.uom'].search([('zugferd_code', '!=', False)])
241-
zug2odoo_uom = {}
243+
uoms = self.env['product.uom'].search([('unece_code', '!=', False)])
244+
unece2odoo_uom = {}
242245
for uom in uoms:
243-
zug2odoo_uom[uom.zugferd_code] = uom.id
244-
logger.debug('zug2odoo_uom = %s', zug2odoo_uom)
246+
unece2odoo_uom[uom.unece_code] = uom.id
247+
logger.debug('unece2odoo_uom = %s', unece2odoo_uom)
245248
taxes = self.env['account.tax'].search([
246-
('zugferd_type_code', '!=', False),
247-
('zugferd_categ_code', '!=', False),
249+
('unece_type_id', '!=', False),
250+
('unece_categ_id', '!=', False),
248251
('type_tax_use', 'in', ('all', 'purchase')),
249252
('price_include', '=', False), # TODO : check what the standard
250253
]) # says about this
251-
zug2odoo_tax = []
254+
unece2odoo_tax = []
252255
for tax in taxes:
253-
zug2odoo_tax.append({
254-
'zugferd_type_code': tax.zugferd_type_code,
255-
'zugferd_categ_code': tax.zugferd_categ_code,
256+
unece2odoo_tax.append({
257+
'unece_type_code': tax.unece_type_code,
258+
'unece_categ_code': tax.unece_categ_code,
256259
'type': tax.type,
257260
'amount': tax.amount * 100,
258261
'id': tax.id,
259262
})
260-
logger.debug('zug2odoo_tax=%s', zug2odoo_tax)
263+
logger.debug('unece2odoo_tax=%s', unece2odoo_tax)
261264
# global_tax_ids only used as fallback when taxes are not detailed
262265
# on invoice lines (which is the case at Basic level)
263266
global_taxes_xpath = xml_root.xpath(
264267
"//ram:ApplicableSupplyChainTradeSettlement"
265268
"/ram:ApplicableTradeTax", namespaces=namespaces)
266269
global_tax_ids = self.select_taxes_of_invoice_line(
267-
global_taxes_xpath, namespaces, zug2odoo_tax)
270+
global_taxes_xpath, namespaces, unece2odoo_tax)
268271
logger.debug('global_tax_ids=%s', global_tax_ids)
269272
res_lines = []
270273
total_line_lines = 0.0
@@ -284,8 +287,8 @@ def parse_zugferd_xml(self, xml_root):
284287
qty = float(qty_xpath[0].text)
285288
uos_id = False
286289
if qty_xpath[0].attrib and qty_xpath[0].attrib.get('unitCode'):
287-
zug_uom = qty_xpath[0].attrib['unitCode']
288-
uos_id = zug2odoo_uom.get(zug_uom)
290+
unece_uom = qty_xpath[0].attrib['unitCode']
291+
uos_id = unece2odoo_uom.get(unece_uom)
289292
ean13_xpath = iline.xpath(
290293
"ram:SpecifiedTradeProduct/ram:GlobalID",
291294
namespaces=namespaces)
@@ -314,7 +317,7 @@ def parse_zugferd_xml(self, xml_root):
314317
"ram:SpecifiedSupplyChainTradeSettlement"
315318
"//ram:ApplicableTradeTax", namespaces=namespaces)
316319
tax_ids = self.select_taxes_of_invoice_line(
317-
taxes_xpath, namespaces, zug2odoo_tax, name)
320+
taxes_xpath, namespaces, unece2odoo_tax, name)
318321
vals = {
319322
'ean13': ean13_xpath and ean13_xpath[0].text or False,
320323
'product_code':
@@ -350,7 +353,7 @@ def parse_zugferd_xml(self, xml_root):
350353
taxes_xpath = chline.xpath(
351354
"ram:AppliedTradeTax", namespaces=namespaces)
352355
tax_ids = self.select_taxes_of_invoice_line(
353-
taxes_xpath, namespaces, zug2odoo_tax, name)
356+
taxes_xpath, namespaces, unece2odoo_tax, name)
354357
vals = {
355358
'name': name,
356359
'quantity': 1,
@@ -396,7 +399,7 @@ def parse_zugferd_xml(self, xml_root):
396399
taxes_xpath = alline.xpath(
397400
"ram:CategoryTradeTax", namespaces=namespaces)
398401
tax_ids = self.select_taxes_of_invoice_line(
399-
taxes_xpath, namespaces, zug2odoo_tax, name)
402+
taxes_xpath, namespaces, unece2odoo_tax, name)
400403
vals = {
401404
'name': name,
402405
'quantity': tradeallowance_qty,

0 commit comments

Comments
 (0)