Account Invoice Import

account_invoice_import
REPOSITORY
REPOSITORYOCA/edi
GIT
GIThttps://github.com/OCA/edi.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/edi/tree/18.0/account_invoice_import
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Weblate, OCA-git-bot, oca-ci, Arnaud LAYEC
WEBSITE
WEBSITEhttps://github.com/OCA/edi
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/community-data-files:
    - account_tax_unece
    - base_unece
    - uom_unece
OCA/edi:
    - base_business_document_import
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module has been started by lazy accounting users who hate enter
they vendor bills manually in Odoo. Almost all companies have several
vendor bills to enter regularly in the system from the same vendors:
phone bill, electricity bill, Internet access, train tickets, etc. Most
of these invoices are available as PDF. If we are able to automatically
extract from the PDF the required information to enter the invoice as
vendor bill in Odoo, then this module will create it automatically. To
know the full story behind the development of this module, read this
[blog
post](http://www.akretion.com/blog/akretions-christmas-present-for-the-odoo-community).

In order to reliably extract the required information from the invoice,
two international standards exists to describe an Invoice in XML:

- [CII](http://tfig.unece.org/contents/cross-industry-invoice-cii.htm)
  (Cross-Industry Invoice) developped by
  [UN/CEFACT](http://www.unece.org/cefact) (United Nations Centre for
  Trade Facilitation and Electronic Business),
- [UBL](http://ubl.xml.org/) (Universal Business Language) which is an
  ISO standard ([ISO/IEC
  19845](http://www.iso.org/iso/catalogue_detail.htm?csnumber=66370))
  developped by [OASIS](https://www.oasis-open.org/) (Organization for
  the Advancement of Structured Information Standards).

Some e-invoice standards such as
[Factur-X](http://fnfe-mpe.org/factur-x/) propose to embed the XML
description of the invoice inside the PDF invoice. Other people think
that the futur is pure-XML invoices: a European initiative called
[PEPPOL](https://peppol.eu/) aims at setting up an open network to
exchange e-invoices as UBL XML. We don't know yet which standard and
which practice will prevail on electronic invoicing in the future, but
we hope that lazy accountants won't have to manually encode their vendor
bills in the near future. This module is here to help achieve this goal!

This module doesn't do anything useful by itself ; it requires other
modules to work: each modules adds a specific invoice format.

Here is how the module works:

- the user starts a wizard and uploads the PDF or XML invoice,
- if it is an XML file, Odoo will parse it to create the invoice
  (requires additional modules for specific XML formats, such as the
  module *account_invoice_import_ubl* for the UBL format),
- if it is a PDF file with an embedded XML file in Factur-X/CII format,
  Odoo will extract the embedded XML file and parse it to create the
  invoice (requires the module *account_invoice_import_facturx*),
- otherwise, Odoo will use the *invoice2data* Python library to try to
  interpret the text of the PDF (requires the module
  *account_invoice_import_invoice2data*),
- if there is already some draft supplier invoice for this supplier,
  Odoo will propose to select one to update or create a new draft
  invoice,
- otherwise, Odoo will directly create a new draft supplier invoice and
  attach the PDF to it.

This module also works with supplier refunds.

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
account_invoice_import_form account.invoice.import form New
account_invoice_import_partner_create_form account.invoice.import.partner.create form New
res_config_settings_view_form res.config.settings xpath Inherits account.res_config_settings_view_form
view_move_form account.move div Inherits account.view_move_form
view_partner_property_form res.partner group Inherits account.view_partner_property_form
Models touched (7)

New fields (2)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • invoice_attachment_ids Many2many → ir.attachment
    required=True string='PDF or XML Invoices to Import' args: 'ir.attachment'
Public methods (11)
  • create_invoice(self, parsed_inv, import_config, origin=None)
    @api.model
  • create_invoice_webservice(self, invoice_file_b64, invoice_filename, company_id, origin, email_from=None)
    @api.model
  • fallback_parse_pdf_invoice(self, file_data, company)
    Designed to be inherited by the module account_invoice_import_invoice2data, to be sure the invoice2data technique is used after the electronic invoice modules such as account_invoice_import_facturx and account_invoice_import_ubl
  • import_invoices(self)
    Method called by the button of the wizard
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Process the message data from a fetchmail configuration The caller expects us to create a record so we always return an empty one even though the actual result is the imported invoice, if the message content allows it.
  • multi_xpath_helper(self, xml_root, xpath_list, namespaces, isdate=False, isfloat=False, ischar_to_clean=False)
  • parse_invoice(self, invoice_file_b64, invoice_filename, company, email_from=None)
    @api.model
  • parse_pdf_invoice(self, file_data, company)
    @api.model
    This method must be inherited by additional modules with the same kind of logic as the account_statement_import_* modules
  • parse_xml_invoice(self, xml_root, company)
    @api.model
  • raw_multi_xpath_helper(self, xml_root, xpath_list, namespaces)
  • xpath_to_dict_helper(self, xml_root, xpath_dict, namespaces)

New fields (6)
  • create_or_update Selection
    default='create' required=True args: [('create', "This partner doesn't already exists in Odoo"), ('update', 'This partner already exists in Odoo')]
  • import_partner_data Json
  • move_id Many2one → account.move
    readonly=True required=True string='Vendor Bill' args: 'account.move'
  • partner_name Char
    readonly=True
  • partner_vat Char
    readonly=True string='Partner VAT Number'
  • update_partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] string='Partner to Update' args: 'res.partner'
Public methods (3)
  • create_partner(self)
  • default_get(self, fields_list)
    @api.model
  • update_partner(self)

New fields (0)

No new fields.

Public methods (1)
  • create_document_from_attachment(self, attachment_ids)
    Inherit native method used when clicking on the 'Upload' button from the Vendor Bill tree view

New fields (3)
  • import_partner_data Json
  • import_warnings Html
    readonly=True
  • show_import_warnings Boolean
    compute='_compute_show_import_warnings'
Public methods (0)

No public methods.

New fields (4)
  • adjustment_credit_account_id Many2one → account.account
    check_company=True args: 'account.account'
  • adjustment_debit_account_id Many2one → account.account
    check_company=True args: 'account.account'
  • invoice_import_create_bank_account Boolean
    string='Auto-create Bank Account of Supplier'
  • invoice_import_email Char
    help='This field is used in multi-company setups to import the invoices received by the mail gateway in the appropriate company' args: 'Mail Gateway: Destination E-mail'
Public methods (0)

No public methods.

New fields (4)
  • adjustment_credit_account_id Many2one
    domain="[('deprecated', '=', False), ('company_ids', 'in', company_id), ('account_type', '=like', 'income%')]" readonly=False related='company_id.adjustment_credit_account_id'
  • adjustment_debit_account_id Many2one
    domain="[('deprecated', '=', False), ('company_ids', 'in', company_id), ('account_type', '=like', 'expense%')]" readonly=False related='company_id.adjustment_debit_account_id'
  • invoice_import_create_bank_account Boolean
    readonly=False related='company_id.invoice_import_create_bank_account'
  • invoice_import_email Char
    readonly=False related='company_id.invoice_import_email'
Public methods (0)

No public methods.

New fields (8)
  • invoice_import_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False), ('company_ids', 'in', current_company_id)]" help='The account configured here will be updated by the mapping of the fiscal position.' string='Default Expense Account' args: 'account.account'
  • invoice_import_journal_id Many2one → account.journal
    company_dependent=True domain="[('type', '=', 'purchase'), ('company_id', '=', current_company_id)]" help='If empty, Odoo will use the first purchase journal.' string='Force Purchase Journal' args: 'account.journal'
  • invoice_import_label Char
    company_dependent=True help='Force Invoice Line Description' string='Force Invoice Line Description'
  • invoice_import_move_id Many2one → account.move
    readonly=True string='Related Imported Vendor Bill' args: 'account.move'
  • invoice_import_move_partner_id Many2one
    related='invoice_import_move_id.partner_id'
  • invoice_import_product_id Many2one → product.product
    company_dependent=True string='Default Product' args: 'product.product'
  • invoice_import_single_line Boolean
    company_dependent=True string='Force Single Invoice Line'
  • invoice_import_tax_ids Many2many → account.tax
    domain="[('type_tax_use', '=', 'purchase'), ('company_id', '=', current_company_id)]" help='Taxes configured here will go through the mapping of the fiscal position.' string='Default Taxes' args: 'account.tax'
Public methods (1)
  • update_imported_invoice(self)
    Method called by button in partner banner
REPOSITORY
REPOSITORYOCA/edi
GIT
GIThttps://github.com/OCA/edi.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/edi/tree/16.0/account_invoice_import
VERSION
VERSION 2.5.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Weblate, OCA-git-bot, oca-ci, Souheil Bejaoui, Arnaud LAYEC, Marwan Behillil
WEBSITE
WEBSITEhttps://github.com/OCA/edi
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/community-data-files:
    - account_tax_unece
    - base_unece
    - uom_unece
OCA/edi:
    - base_business_document_import
    - pdf_helper
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
account_invoice_import_form account.invoice.import form New
account_invoice_import_partner_create_form account.invoice.import.partner.create form New
res_config_settings_view_form res.config.settings xpath Inherits account.res_config_settings_view_form
view_move_form account.move div Inherits account.view_move_form
view_partner_property_form res.partner group Inherits account.view_partner_property_form
Models touched (7)

New fields (2)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • invoice_attachment_ids Many2many → ir.attachment
    required=True string='PDF or XML Invoices to Import' args: 'ir.attachment'
Public methods (11)
  • create_invoice(self, parsed_inv, import_config, origin=None)
    @api.model
  • create_invoice_webservice(self, invoice_file_b64, invoice_filename, origin, company_id=None, email_from=None)
    @api.model
  • fallback_parse_pdf_invoice(self, file_data, company)
    Designed to be inherited by the module account_invoice_import_invoice2data, to be sure the invoice2data technique is used after the electronic invoice modules such as account_invoice_import_facturx and account_invoice_import_ubl
  • import_invoices(self)
    Method called by the button of the wizard
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Process the message data from a fetchmail configuration The caller expects us to create a record so we always return an empty one even though the actual result is the imported invoice, if the message content allows it.
  • multi_xpath_helper(self, xml_root, xpath_list, namespaces, isdate=False, isfloat=False, ischar_to_clean=False)
  • parse_invoice(self, invoice_file_b64, invoice_filename, company, email_from=None)
    @api.model
  • parse_pdf_invoice(self, file_data, company)
    @api.model
    This method must be inherited by additional modules with the same kind of logic as the account_statement_import_* modules
  • parse_xml_invoice(self, xml_root, company)
    @api.model
  • raw_multi_xpath_helper(self, xml_root, xpath_list, namespaces)
  • xpath_to_dict_helper(self, xml_root, xpath_dict, namespaces)

New fields (6)
  • create_or_update Selection
    default='create' required=True args: [('create', "This partner doesn't already exists in Odoo"), ('update', 'This partner already exists in Odoo')]
  • import_partner_data Json
  • move_id Many2one → account.move
    readonly=True required=True string='Vendor Bill' args: 'account.move'
  • partner_name Char
    readonly=True
  • partner_vat Char
    readonly=True string='Partner VAT Number'
  • update_partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] string='Partner to Update' args: 'res.partner'
Public methods (3)
  • create_partner(self)
  • default_get(self, fields_list)
    @api.model
  • update_partner(self)

New fields (0)

No new fields.

Public methods (1)
  • create_document_from_attachment(self, attachment_ids=None)
    Inherit native method used when clicking on the 'Upload' button from the Vendor Bill tree view

New fields (3)
  • import_partner_data Json
  • import_warnings Html
    readonly=True
  • show_import_warnings Boolean
    compute='_compute_show_import_warnings'
Public methods (0)

No public methods.

New fields (4)
  • adjustment_credit_account_id Many2one → account.account
    check_company=True args: 'account.account'
  • adjustment_debit_account_id Many2one → account.account
    check_company=True args: 'account.account'
  • invoice_import_create_bank_account Boolean
    string='Auto-create Bank Account of Supplier'
  • invoice_import_email Char
    help='This field is used in multi-company setups to import the invoices received by the mail gateway in the appropriate company' args: 'Mail Gateway: Destination E-mail'
Public methods (0)

No public methods.

New fields (4)
  • adjustment_credit_account_id Many2one
    domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', '=like', 'income%')]" readonly=False related='company_id.adjustment_credit_account_id'
  • adjustment_debit_account_id Many2one
    domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', '=like', 'expense%')]" readonly=False related='company_id.adjustment_debit_account_id'
  • invoice_import_create_bank_account Boolean
    readonly=False related='company_id.invoice_import_create_bank_account'
  • invoice_import_email Char
    readonly=False related='company_id.invoice_import_email'
Public methods (0)

No public methods.

New fields (8)
  • invoice_import_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='The account configured here will be updated by the mapping of the fiscal position.' string='Default Expense Account' args: 'account.account'
  • invoice_import_journal_id Many2one → account.journal
    company_dependent=True domain="[('type', '=', 'purchase'), ('company_id', '=', current_company_id)]" help='If empty, Odoo will use the first purchase journal.' string='Force Purchase Journal' args: 'account.journal'
  • invoice_import_label Char
    company_dependent=True help='Force Invoice Line Description' string='Force Invoice Line Description'
  • invoice_import_move_id Many2one → account.move
    readonly=True string='Related Imported Vendor Bill' args: 'account.move'
  • invoice_import_move_partner_id Many2one
    related='invoice_import_move_id.partner_id'
  • invoice_import_product_id Many2one → product.product
    company_dependent=True string='Default Product' args: 'product.product'
  • invoice_import_single_line Boolean
    company_dependent=True string='Force Single Invoice Line'
  • invoice_import_tax_ids Many2many → account.tax
    domain="[('type_tax_use', '=', 'purchase'), ('company_id', '=', current_company_id)]" help='Taxes configured here will go through the mapping of the fiscal position.' string='Default Taxes' args: 'account.tax'
Public methods (1)
  • update_imported_invoice(self)
    Method called by button in partner banner
REPOSITORY
REPOSITORYOCA/edi
GIT
GIThttps://github.com/OCA/edi.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/edi/tree/14.0/account_invoice_import
VERSION
VERSION 3.5.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Stefan Rijnhart, GitHub, Enric Tobella, OCA Transbot, Sébastien Alix, oca-travis, Weblate, OCA-git-bot, Simone Orsi, Iryna Vyshnevska, oca-ci, bosd
WEBSITE
WEBSITEhttps://github.com/OCA/edi
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/community-data-files:
    - account_tax_unece
    - base_unece
    - uom_unece
OCA/edi:
    - base_business_document_import
    - pdf_helper
OCA/server-tools:
    - onchange_helper
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES pypdf>=3.1.0,<5.0
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
account_invoice_import_config_form account.invoice.import.config form New
account_invoice_import_config_search account.invoice.import.config search New
account_invoice_import_config_tree account.invoice.import.config tree New
account_invoice_import_form account.invoice.import form New
account_journal_dashboard_kanban_view account.journal button Inherits account.account_journal_dashboard_kanban_view
res_config_settings_view_form res.config.settings xpath Inherits account.res_config_settings_view_form
view_move_form account.move button Inherits account.view_move_form
view_partner_property_form res.partner button Inherits account.view_partner_property_form
Models touched (7)

New fields (13)
  • amount_total Float
    digits='Account' readonly=True string='Total'
  • amount_untaxed Float
    digits='Account' readonly=True string='Total Untaxed'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency'
  • import_config_id Many2one → account.invoice.import.config
    string='Invoice Import Configuration' args: 'account.invoice.import.config'
  • invoice_file Binary
    string='PDF or XML Invoice'
  • invoice_filename Char
    string='Filename'
  • invoice_id Many2one → account.move
    string='Draft Supplier Invoice to Update' args: 'account.move'
  • invoice_type Selection
    readonly=True string='Invoice or Refund' args: [('in_invoice', 'Invoice'), ('in_refund', 'Refund')]
  • message Text
    readonly=True
  • partner_country_id Many2one → res.country
    readonly=True args: 'res.country'
  • partner_id Many2one → res.partner
    readonly=True string='Vendor' args: 'res.partner'
  • partner_vat Char
    readonly=True
  • state Selection
    default='import' args: [('import', 'Import'), ('config', 'Select Invoice Import Configuration'), ('update', 'Update'), ('update-from-invoice', 'Update From Invoice'), ('partner-not-found', 'Partner not found')]
Public methods (29)
  • company_cannot_refund_vat(self)
  • create_invoice(self, parsed_inv, import_config=False, origin=None)
    @api.model
  • create_invoice_action(self, parsed_inv=None, import_config=None, origin=None)
    parsed_inv is not a required argument
  • create_invoice_action_button(self)
    If I call create_invoice_action() directly from the button, I get the context in parsed_inv
  • create_invoice_webservice(self, invoice_file_b64, invoice_filename, origin, company_id=None, email_from=None)
    @api.model
  • default_get(self, fields_list)
    @api.model
  • fallback_parse_pdf_invoice(self, file_data)
    Designed to be inherited by the module account_invoice_import_invoice2data, to be sure the invoice2data technique is used after the electronic invoice modules such as account_invoice_import_facturx and account_invoice_import_ubl
  • get_parsed_invoice(self)
    Hook to change the method of retrieval for the invoice data
  • get_precision_rounding_from_currency_helper(self, parsed_inv)
    @api.model
  • goto_partner_not_found(self, parsed_inv, error_message)
    Hook designed to add an action when no partner is found For instance to propose to create the partner based on the partner_dict.
  • import_invoice(self)
    Method called by the button of the wizard (import step AND config step)
  • invoice_already_exists(self, commercial_partner, parsed_inv)
    @api.model
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Process the message data from a fetchmail configuration The caller expects us to create a record so we always return an empty one even though the actual result is the imported invoice, if the message content allows it.
  • multi_xpath_helper(self, xml_root, xpath_list, namespaces, isdate=False, isfloat=False)
  • new_partner(self)
  • parse_invoice(self, invoice_file_b64, invoice_filename, email_from=None)
    @api.model
  • parse_pdf_invoice(self, file_data)
    @api.model
    This method must be inherited by additional modules with the same kind of logic as the account_statement_import_* modules
  • parse_xml_invoice(self, xml_root)
    @api.model
  • post_process_invoice(self, parsed_inv, invoice, import_config)
    @api.model
  • pre_process_parsed_inv(self, parsed_inv)
    @api.model
  • raw_multi_xpath_helper(self, xml_root, xpath_list, namespaces)
  • set_1line_price_unit_and_quantity(self, il_vals, parsed_inv)
    @api.model
    For the moment, we only take into account the 'price_include' option of the first tax
  • set_1line_start_end_dates(self, il_vals, parsed_inv)
    @api.model
    Only useful if you have installed the module account_cutoff_prepaid from https://github.com/OCA/account-closing
  • update_invoice(self)
    Called by the button of the wizard (step 'update-from-invoice')
  • update_invoice_lines(self, parsed_inv, invoice, seller)
  • update_partner_vat(self)
    In the update process, we only take care of VAT and country code
  • update_partner_vat_continue(self)
  • update_partner_vat_show(self)
  • xpath_to_dict_helper(self, xml_root, xpath_dict, namespaces)

New fields (12)
  • account_analytic_id Many2one → account.analytic.account
    check_company=True string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Expense Account' args: 'account.account'
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' required=True args: 'res.company'
  • invoice_line_method Selection
    default='1line_no_product' help="The multi-line methods will not work for PDF invoices that don't have an embedded XML file which has structured information on each line." required=True string='Method for Invoice Line' args: [('1line_no_product', 'Single Line, No Product'), ('1line_static_product', 'Single Line, Static Product'), ('nline_no_product', 'Multi Line, No Product'), ('nline_static_product', 'Multi Line, Static Product'), ('nline_auto_product', 'Multi Line, Auto-selected Product')]
  • journal_id Many2one → account.journal
    check_company=True domain="[('company_id', '=', company_id), ('type', '=', 'purchase')]" help='If empty, Odoo will use the first purchase journal.' string='Force Purchase Journal' args: 'account.journal'
  • label Char
    help='Force supplier invoice line description' string='Force Description'
  • name Char
    required=True
  • partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] ondelete='cascade' args: 'res.partner'
  • sequence Integer
  • static_product_id Many2one → product.product
    check_company=True domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" args: 'product.product'
  • tax_ids Many2many → account.tax
    check_company=True domain="[('type_tax_use', '=', 'purchase'), ('company_id', '=', company_id)]" string='Taxes' args: 'account.tax'
Public methods (2)
  • convert_to_import_config(self)
  • invoice_line_method_change(self)
    @api.onchange('invoice_line_method', 'account_id')

New fields (0)

No new fields.

Public methods (1)
  • create_invoice_from_attachment(self, attachment_ids=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • adjustment_credit_account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" args: 'account.account'
  • adjustment_debit_account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" args: 'account.account'
  • invoice_import_create_bank_account Boolean
    string='Auto-create Bank Account of Supplier'
  • invoice_import_email Char
    help='This field is used in multi-company setups to import the invoices received by the mail gateway in the appropriate company' args: 'Mail Gateway: Destination E-mail'
Public methods (0)

No public methods.

New fields (4)
  • adjustment_credit_account_id Many2one
    readonly=False related='company_id.adjustment_credit_account_id'
  • adjustment_debit_account_id Many2one
    readonly=False related='company_id.adjustment_debit_account_id'
  • invoice_import_create_bank_account Boolean
    readonly=False related='company_id.invoice_import_create_bank_account'
  • invoice_import_email Char
    readonly=False related='company_id.invoice_import_email'
Public methods (0)

No public methods.

New fields (2)
  • invoice_import_count Integer
    compute='_compute_invoice_import_count' readonly=True string='Number of Invoice Import Configurations'
  • invoice_import_ids One2many → account.invoice.import.config
    string='Invoice Import Configuration' args: 'account.invoice.import.config', 'partner_id'
Public methods (1)
  • show_account_invoice_import_config(self)
REPOSITORY
REPOSITORYOCA/edi
GIT
GIThttps://github.com/OCA/edi.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/edi/tree/12.0/account_invoice_import
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Enric Tobella, OCA Transbot, oca-travis, OCA-git-bot, Maksym Yankin
WEBSITE
WEBSITEhttps://github.com/OCA/edi
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:18
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/community-data-files:
    - account_tax_unece
    - base_unece
    - uom_unece
OCA/edi:
    - base_business_document_import
OCA/partner-contact:
    - base_vat_sanitized
OCA/server-tools:
    - onchange_helper
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - http_routing
    - digest
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES PyPDF2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
account_invoice_import_config_form account.invoice.import.config form New
account_invoice_import_config_search account.invoice.import.config search New
account_invoice_import_config_tree account.invoice.import.config tree New
account_invoice_import_form account.invoice.import form New
account_journal_dashboard_kanban_view account.journal button Inherits account.account_journal_dashboard_kanban_view
invoice_supplier_form account.invoice button Inherits account.invoice_supplier_form
res_config_settings_view_form res.config.settings xpath Inherits account.res_config_settings_view_form
view_partner_property_form res.partner group Inherits account.view_partner_property_form
Models touched (6)

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)
    @api.multi
    Add amount_untaxed in name_get of invoices

New fields (10)
  • amount_total Float
    digits=dp.get_precision('Account') readonly=True string='Total'
  • amount_untaxed Float
    digits=dp.get_precision('Account') readonly=True string='Total Untaxed'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency'
  • import_config_id Many2one → account.invoice.import.config
    string='Invoice Import Configuration' args: 'account.invoice.import.config'
  • invoice_file Binary
    required=True string='PDF or XML Invoice'
  • invoice_filename Char
    string='Filename'
  • invoice_id Many2one → account.invoice
    string='Draft Supplier Invoice to Update' args: 'account.invoice'
  • invoice_type Selection
    readonly=True string='Invoice or Refund' args: [('in_invoice', 'Invoice'), ('in_refund', 'Refund')]
  • partner_id Many2one → res.partner
    readonly=True string='Supplier' args: 'res.partner'
  • state Selection
    default='import' args: [('import', 'Import'), ('config', 'Select Invoice Import Configuration'), ('update', 'Update'), ('update-from-invoice', 'Update From Invoice')]
Public methods (22)
  • company_cannot_refund_vat(self)
  • create_invoice(self, parsed_inv, import_config=False)
    @api.model
  • create_invoice_action(self, parsed_inv=None, import_config=None)
    @api.multi
    parsed_inv is not a required argument
  • create_invoice_action_button(self)
    @api.multi
    Workaround for a v10 bug: if I call create_invoice_action() directly from the button, I get the context in parsed_inv
  • default_get(self, fields_list)
    @api.model
  • fallback_parse_pdf_invoice(self, file_data)
    Designed to be inherited by the module account_invoice_import_invoice2data, to be sure the invoice2data technique is used after the electronic invoice modules such as account_invoice_import_zugferd
  • get_parsed_invoice(self)
    Hook to change the method of retrieval for the invoice data
  • import_invoice(self)
    @api.multi
    Method called by the button of the wizard (import step AND config step)
  • invoice_already_exists(self, commercial_partner, parsed_inv)
    @api.model
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • multi_xpath_helper(self, xml_root, xpath_list, namespaces, isdate=False, isfloat=False)
  • parse_invoice(self, invoice_file_b64, invoice_filename)
    @api.model
  • parse_pdf_invoice(self, file_data)
    @api.model
    This method must be inherited by additional modules with the same kind of logic as the account_bank_statement_import_* modules
  • parse_xml_invoice(self, xml_root)
    @api.model
  • post_process_invoice(self, parsed_inv, invoice, import_config)
    @api.model
  • pre_process_parsed_inv(self, parsed_inv)
    @api.model
  • raw_multi_xpath_helper(self, xml_root, xpath_list, namespaces)
  • set_1line_price_unit_and_quantity(self, il_vals, parsed_inv)
    @api.model
    For the moment, we only take into account the 'price_include' option of the first tax
  • set_1line_start_end_dates(self, il_vals, parsed_inv)
    @api.model
    Only useful if you have installed the module account_cutoff_prepaid from https://github.com/OCA/account-closing
  • update_invoice(self)
    @api.multi
    Called by the button of the wizard (step 'update-from-invoice')
  • update_invoice_lines(self, parsed_inv, invoice, seller)
    @api.multi
  • xpath_to_dict_helper(self, xml_root, xpath_dict, namespaces)

New fields (11)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Expense Account' args: 'account.account'
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' required=True args: 'res.company'
  • invoice_line_method Selection
    default='1line_no_product' help="The multi-line methods will not work for PDF invoices that don't have an embedded XML file. The 'Multi Line, Auto-selected Product' method will only work with ZUGFeRD invoices at Comfort or Extended level, not at Basic level." required=True string='Method for Invoice Line' args: [('1line_no_product', 'Single Line, No Product'), ('1line_static_product', 'Single Line, Static Product'), ('nline_no_product', 'Multi Line, No Product'), ('nline_static_product', 'Multi Line, Static Product'), ('nline_auto_product', 'Multi Line, Auto-selected Product')]
  • label Char
    help='Force supplier invoice line description' string='Force Description'
  • name Char
    required=True
  • partner_id Many2one → res.partner
    domain=[('supplier', '=', True), ('parent_id', '=', False)] ondelete='cascade' args: 'res.partner'
  • sequence Integer
  • static_product_id Many2one → product.product
    args: 'product.product'
  • tax_ids Many2many → account.tax
    domain=[('type_tax_use', '=', 'purchase')] string='Taxes' args: 'account.tax'
Public methods (2)
  • convert_to_import_config(self)
  • invoice_line_method_change(self)
    @api.onchange('invoice_line_method', 'account_id')

New fields (4)
  • adjustment_credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] args: 'account.account'
  • adjustment_debit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] args: 'account.account'
  • invoice_import_create_bank_account Boolean
    string='Auto-create Bank Account of Supplier'
  • invoice_import_email Char
    help='This field is used in multi-company setups to import the invoices received by the mail gateway in the appropriate company' args: 'Mail Gateway: Destination E-mail'
Public methods (0)

No public methods.

New fields (4)
  • adjustment_credit_account_id Many2one
    readonly=False related='company_id.adjustment_credit_account_id'
  • adjustment_debit_account_id Many2one
    readonly=False related='company_id.adjustment_debit_account_id'
  • invoice_import_create_bank_account Boolean
    readonly=False related='company_id.invoice_import_create_bank_account'
  • invoice_import_email Char
    readonly=False related='company_id.invoice_import_email'
Public methods (0)

No public methods.

New fields (2)
  • invoice_import_count Integer
    compute='_compute_invoice_import_count' readonly=True string='Number of Invoice Import Configurations'
  • invoice_import_ids One2many → account.invoice.import.config
    string='Invoice Import Configuration' args: 'account.invoice.import.config', 'partner_id'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/edi
GIT
GIThttps://github.com/OCA/edi.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/edi/tree/11.0/account_invoice_import
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAndrea, OCA Transbot, oca-travis, OCA-git-bot
WEBSITE
WEBSITEhttp://www.akretion.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/bank-payment:
    - account_payment_partner
    - account_payment_mode
OCA/community-data-files:
    - account_tax_unece
    - base_unece
    - product_uom_unece
OCA/edi:
    - base_business_document_import
OCA/partner-contact:
    - base_vat_sanitized
OCA/server-tools:
    - onchange_helper
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - analytic
    - web_planner
    - portal
    - http_routing
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES PyPDF2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
account_invoice_import_config_form account.invoice.import.config.form account.invoice.import.config form New
account_invoice_import_config_search account.invoice.import.config.search account.invoice.import.config search New
account_invoice_import_config_tree account.invoice.import.config.tree account.invoice.import.config tree New
account_invoice_import_form account.invoice.import.form account.invoice.import form New
invoice_supplier_form account_invoice_import.invoice.supplier.form account.invoice button Inherits account.invoice_supplier_form
res_config_settings_view_form invoice_import.res.config.settings.form res.config.settings xpath Inherits account.res_config_settings_view_form
view_partner_property_form invoice.import.partner.form res.partner group Inherits account.view_partner_property_form
Models touched (6)

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)
    @api.multi
    Add amount_untaxed in name_get of invoices

New fields (10)
  • amount_total Float
    digits=dp.get_precision('Account') readonly=True string='Total'
  • amount_untaxed Float
    digits=dp.get_precision('Account') readonly=True string='Total Untaxed'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency', 'Currency'
  • import_config_id Many2one → account.invoice.import.config
    string='Invoice Import Configuration' args: 'account.invoice.import.config'
  • invoice_file Binary
    required=True string='PDF or XML Invoice'
  • invoice_filename Char
    string='Filename'
  • invoice_id Many2one → account.invoice
    string='Draft Supplier Invoice to Update' args: 'account.invoice'
  • invoice_type Selection
    readonly=True string='Invoice or Refund' args: [('in_invoice', 'Invoice'), ('in_refund', 'Refund')]
  • partner_id Many2one → res.partner
    readonly=True string='Supplier' args: 'res.partner'
  • state Selection
    default='import' string='State' args: [('import', 'Import'), ('config', 'Select Invoice Import Configuration'), ('update', 'Update'), ('update-from-invoice', 'Update From Invoice')]
Public methods (21)
  • company_cannot_refund_vat(self)
  • create_invoice(self, parsed_inv, import_config=False)
    @api.model
  • create_invoice_action(self, parsed_inv=None, import_config=None)
    @api.multi
    parsed_inv is not a required argument
  • create_invoice_action_button(self)
    @api.multi
    Workaround for a v10 bug: if I call create_invoice_action() directly from the button, I get the context in parsed_inv
  • default_get(self, fields_list)
    @api.model
  • fallback_parse_pdf_invoice(self, file_data)
    Designed to be inherited by the module account_invoice_import_invoice2data, to be sure the invoice2data technique is used after the electronic invoice modules such as account_invoice_import_zugferd
  • import_invoice(self)
    @api.multi
    Method called by the button of the wizard (import step AND config step)
  • invoice_already_exists(self, commercial_partner, parsed_inv)
    @api.model
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • multi_xpath_helper(self, xml_root, xpath_list, namespaces, isdate=False, isfloat=False)
  • parse_invoice(self, invoice_file_b64, invoice_filename)
    @api.model
  • parse_pdf_invoice(self, file_data)
    @api.model
    This method must be inherited by additional modules with the same kind of logic as the account_bank_statement_import_* modules
  • parse_xml_invoice(self, xml_root)
    @api.model
  • post_process_invoice(self, parsed_inv, invoice, import_config)
    @api.model
  • pre_process_parsed_inv(self, parsed_inv)
    @api.model
  • raw_multi_xpath_helper(self, xml_root, xpath_list, namespaces)
  • set_1line_price_unit_and_quantity(self, il_vals, parsed_inv)
    @api.model
    For the moment, we only take into account the 'price_include' option of the first tax
  • set_1line_start_end_dates(self, il_vals, parsed_inv)
    @api.model
    Only useful if you have installed the module account_cutoff_prepaid from https://github.com/OCA/account-closing
  • update_invoice(self)
    @api.multi
    Called by the button of the wizard (step 'update-from-invoice')
  • update_invoice_lines(self, parsed_inv, invoice, seller)
    @api.multi
  • xpath_to_dict_helper(self, xml_root, xpath_dict, namespaces)

New fields (11)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Expense Account' args: 'account.account'
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' required=True string='Company' args: 'res.company'
  • invoice_line_method Selection
    default='1line_no_product' help="The multi-line methods will not work for PDF invoices that don't have an embedded XML file. The 'Multi Line, Auto-selected Product' method will only work with ZUGFeRD invoices at Comfort or Extended level, not at Basic level." required=True string='Method for Invoice Line' args: [('1line_no_product', 'Single Line, No Product'), ('1line_static_product', 'Single Line, Static Product'), ('nline_no_product', 'Multi Line, No Product'), ('nline_static_product', 'Multi Line, Static Product'), ('nline_auto_product', 'Multi Line, Auto-selected Product')]
  • label Char
    help='Force supplier invoice line description' string='Force Description'
  • name Char
    required=True string='Name'
  • partner_id Many2one → res.partner
    domain=[('supplier', '=', True), ('parent_id', '=', False)] ondelete='cascade' string='Partner' args: 'res.partner'
  • sequence Integer
  • static_product_id Many2one → product.product
    string='Static Product' args: 'product.product'
  • tax_ids Many2many → account.tax
    domain=[('type_tax_use', '=', 'purchase')] string='Taxes' args: 'account.tax'
Public methods (2)
  • convert_to_import_config(self)
  • invoice_line_method_change(self)
    @api.onchange('invoice_line_method', 'account_id')

New fields (3)
  • adjustment_credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Adjustment Credit Account' args: 'account.account'
  • adjustment_debit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Adjustment Debit Account' args: 'account.account'
  • invoice_import_email Char
    help='This field is used in multi-company setups to import the invoices received by the mail gateway in the appropriate company' args: 'Mail Gateway: Destination E-mail'
Public methods (0)

No public methods.

New fields (3)
  • adjustment_credit_account_id Many2one
    related='company_id.adjustment_credit_account_id'
  • adjustment_debit_account_id Many2one
    related='company_id.adjustment_debit_account_id'
  • invoice_import_email Char
    related='company_id.invoice_import_email'
Public methods (0)

No public methods.

New fields (2)
  • invoice_import_count Integer
    compute='_compute_invoice_import_count' readonly=True string='Number of Invoice Import Configurations'
  • invoice_import_ids One2many → account.invoice.import.config
    string='Invoice Import Configuration' args: 'account.invoice.import.config', 'partner_id'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/edi
GIT
GIThttps://github.com/OCA/edi.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/edi/tree/10.0/account_invoice_import
VERSION
VERSION 2.0.3
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Yannick Vaucher, Holger Brunn, Pedro M. Baeza, GitHub, OCA Transbot, oca-travis, OCA-git-bot, Iryna Vyshnevska, François Honoré
WEBSITE
WEBSITEhttp://www.akretion.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:56
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/community-data-files:
    - account_tax_unece
    - base_unece
    - product_uom_unece
OCA/edi:
    - base_business_document_import
OCA/partner-contact:
    - base_vat_sanitized
OCA/server-tools:
    - onchange_helper
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - report
    - analytic
    - web_planner
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES PyPDF2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
account_invoice_import_config_form account.invoice.import.config.form account.invoice.import.config form New
account_invoice_import_config_search account.invoice.import.config.search account.invoice.import.config search New
account_invoice_import_config_tree account.invoice.import.config.tree account.invoice.import.config tree New
account_invoice_import_form account.invoice.import.form account.invoice.import form New
account_journal_dashboard_kanban_view account_invoice_import.journal.dashboard account.journal xpath Inherits account.account_journal_dashboard_kanban_view
invoice_supplier_form account_invoice_import.invoice.supplier.form account.invoice button Inherits account.invoice_supplier_form
view_account_config_settings invoice_import.account.config.settings.form account.config.settings xpath Inherits account.view_account_config_settings
view_partner_property_form invoice.import.partner.form res.partner group Inherits account.view_partner_property_form
Models touched (5)

New fields (4)
  • adjustment_credit_account_id Many2one
    related='company_id.adjustment_credit_account_id'
  • adjustment_debit_account_id Many2one
    related='company_id.adjustment_debit_account_id'
  • invoice_import_create_bank_account Boolean
    related='company_id.invoice_import_create_bank_account'
  • invoice_import_email Char
    related='company_id.invoice_import_email'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)
    @api.multi
    Add amount_untaxed in name_get of invoices

New fields (11)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Expense Account' args: 'account.account'
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' required=True string='Company' args: 'res.company'
  • invoice_line_method Selection
    default='1line_no_product' help="The multi-line methods will not work for PDF invoices that don't have an embedded XML file. The 'Multi Line, Auto-selected Product' method will only work with ZUGFeRD invoices at Comfort or Extended level, not at Basic level." required=True string='Method for Invoice Line' args: [('1line_no_product', 'Single Line, No Product'), ('1line_static_product', 'Single Line, Static Product'), ('nline_no_product', 'Multi Line, No Product'), ('nline_static_product', 'Multi Line, Static Product'), ('nline_auto_product', 'Multi Line, Auto-selected Product')]
  • label Char
    help='Force supplier invoice line description' string='Force Description'
  • name Char
    required=True string='Name'
  • partner_id Many2one → res.partner
    domain=[('supplier', '=', True), ('parent_id', '=', False)] ondelete='cascade' string='Partner' args: 'res.partner'
  • sequence Integer
  • static_product_id Many2one → product.product
    string='Static Product' args: 'product.product'
  • tax_ids Many2many → account.tax
    domain=[('type_tax_use', '=', 'purchase')] string='Taxes' args: 'account.tax'
Public methods (2)
  • convert_to_import_config(self)
  • invoice_line_method_change(self)
    @api.onchange('invoice_line_method', 'account_id')

New fields (4)
  • adjustment_credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Adjustment Credit Account' args: 'account.account'
  • adjustment_debit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Adjustment Debit Account' args: 'account.account'
  • invoice_import_create_bank_account Boolean
    string='Auto-create Bank Account of Supplier'
  • invoice_import_email Char
    help='This field is used in multi-company setups to import the invoices received by the mail gateway in the appropriate company' args: 'Mail Gateway: Destination E-mail'
Public methods (0)

No public methods.

New fields (2)
  • invoice_import_count Integer
    compute='_compute_invoice_import_count' readonly=True string='Number of Invoice Import Configurations'
  • invoice_import_ids One2many → account.invoice.import.config
    string='Invoice Import Configuration' args: 'account.invoice.import.config', 'partner_id'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/edi
GIT
GIThttps://github.com/OCA/edi.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/edi/tree/9.0/account_invoice_import
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSHolger Brunn
WEBSITE
WEBSITEhttp://www.akretion.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/community-data-files:
    - account_tax_unece
    - base_unece
    - product_uom_unece
OCA/edi:
    - base_business_document_import
OCA/partner-contact:
    - base_vat_sanitized
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - report
    - analytic
    - web_tip
    - web_planner
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES PyPDF2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
account_invoice_import_config_form account.invoice.import.config.form account.invoice.import.config form New
account_invoice_import_config_tree account.invoice.import.config.tree account.invoice.import.config tree New
account_invoice_import_form account.invoice.import.form account.invoice.import form New
invoice_supplier_form account_invoice_import.invoice.supplier.form account.invoice button Inherits account.invoice_supplier_form
view_partner_property_form encres2.partner.form res.partner field Inherits account.view_partner_property_form
Models touched (4)

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)
    @api.multi
    Add amount_untaxed in name_get of invoices

New fields (9)
  • amount_total Float
    digits=dp.get_precision('Account') readonly=True string='Total'
  • amount_untaxed Float
    digits=dp.get_precision('Account') readonly=True string='Total Untaxed'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency', 'Currency'
  • invoice_file Binary
    required=True string='PDF or XML Invoice'
  • invoice_filename Char
    string='Filename'
  • invoice_id Many2one → account.invoice
    string='Draft Supplier Invoice to Update' args: 'account.invoice'
  • invoice_type Selection
    readonly=True string='Invoice or Refund' args: [('in_invoice', 'Invoice'), ('in_refund', 'Refund')]
  • partner_id Many2one → res.partner
    readonly=True string='Supplier' args: 'res.partner'
  • state Selection
    default='import' string='State' args: [('import', 'Import'), ('update', 'Update'), ('update-from-invoice', 'Update From Invoice')]
Public methods (12)
  • create_invoice(self)
    @api.multi
  • fallback_parse_pdf_invoice(self, file_data)
    Designed to be inherited by the module account_invoice_import_invoice2data, to be sure the invoice2data technique is used after the electronic invoice modules such as account_invoice_import_zugferd
  • import_invoice(self)
    @api.multi
    Method called by the button of the wizard (1st step)
  • parse_invoice(self)
    @api.multi
  • parse_pdf_invoice(self, file_data)
    @api.model
    This method must be inherited by additionnal modules with the same kind of logic as the account_bank_statement_import_* modules
  • parse_xml_invoice(self, xml_root)
    @api.model
  • post_process_invoice(self, parsed_inv, invoice)
    @api.model
  • set_1line_price_unit_and_quantity(self, il_vals, parsed_inv)
    @api.model
    For the moment, we only take into account the 'price_include' option of the first tax
  • set_1line_start_end_dates(self, il_vals, parsed_inv)
    @api.model
    Only useful if you have installed the module account_cutoff_prepaid from https://github.com/OCA/account-closing
  • update_clean_parsed_inv(self, parsed_inv)
    @api.model
  • update_invoice(self)
    @api.multi
  • update_invoice_lines(self, parsed_inv, invoice, seller)
    @api.multi

New fields (10)
  • account_analytic_id Many2one → account.analytic.account
    domain=[('type', '!=', 'view')] string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('type', 'not in', ('view', 'closed'))] string='Expense Account' args: 'account.account'
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' required=True string='Company' args: 'res.company'
  • invoice_line_method Selection
    default='1line_no_product' help="The multi-line methods will not work for PDF invoices that don't have an embedded XML file. The 'Multi Line, Auto-selected Product' method will only work with ZUGFeRD invoices at Comfort or Extended level, not at Basic level." required=True string='Method for Invoice Line' args: [('1line_no_product', 'Single Line, No Product'), ('1line_static_product', 'Single Line, Static Product'), ('nline_no_product', 'Multi Line, No Product'), ('nline_static_product', 'Multi Line, Static Product'), ('nline_auto_product', 'Multi Line, Auto-selected Product')]
  • label Char
    help='Force supplier invoice line description' string='Force Description'
  • name Char
    required=True string='Name'
  • partner_ids One2many → res.partner
    string='Partners' args: 'res.partner', 'invoice_import_id'
  • static_product_id Many2one → product.product
    string='Static Product' args: 'product.product'
  • tax_ids Many2many → account.tax
    domain=[('type_tax_use', 'in', ('all', 'purchase'))] string='Taxes' args: 'account.tax'
Public methods (0)

No public methods.

New fields (1)
  • invoice_import_id Many2one → account.invoice.import.config
    company_dependent=True string='Invoice Import Configuration' args: 'account.invoice.import.config'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/edi
GIT
GIThttps://github.com/OCA/edi.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/edi/tree/8.0/account_invoice_import
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Pedro M. Baeza, OCA Transbot, Adrien Peiffer (ACSONE), oca-travis, OCA-git-bot, Alfredo Zamora, houssine
WEBSITE
WEBSITEhttp://www.akretion.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:22
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/community-data-files:
    - account_tax_unece
    - base_unece
    - product_uom_unece
OCA/edi:
    - base_business_document_import
OCA/partner-contact:
    - base_vat_sanitized
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - report
    - analytic
    - board
    - edi
    - email_template
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES PyPDF2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
account_invoice_import_config_form account.invoice.import.config.form account.invoice.import.config form New
account_invoice_import_config_tree account.invoice.import.config.tree account.invoice.import.config tree New
account_invoice_import_form account.invoice.import.form account.invoice.import form New
invoice_supplier_form account_invoice_import.invoice.supplier.form account.invoice button Inherits account.invoice_supplier_form
view_partner_property_form encres2.partner.form res.partner field Inherits account.view_partner_property_form
Models touched (4)

New fields (0)

No new fields.

Public methods (1)
  • name_get(self)
    @api.multi
    Add amount_untaxed in name_get of invoices

New fields (9)
  • amount_total Float
    digits=dp.get_precision('Account') readonly=True string='Total'
  • amount_untaxed Float
    digits=dp.get_precision('Account') readonly=True string='Total Untaxed'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency', 'Currency'
  • invoice_file Binary
    required=True string='PDF or XML Invoice'
  • invoice_filename Char
    string='Filename'
  • invoice_id Many2one → account.invoice
    string='Draft Supplier Invoice to Update' args: 'account.invoice'
  • invoice_type Selection
    readonly=True string='Invoice or Refund' args: [('in_invoice', 'Invoice'), ('in_refund', 'Refund')]
  • partner_id Many2one → res.partner
    readonly=True string='Supplier' args: 'res.partner'
  • state Selection
    default='import' string='State' args: [('import', 'Import'), ('update', 'Update'), ('update-from-invoice', 'Update From Invoice')]
Public methods (12)
  • create_invoice(self)
    @api.multi
  • fallback_parse_pdf_invoice(self, file_data)
    Designed to be inherited by the module account_invoice_import_invoice2data, to be sure the invoice2data technique is used after the electronic invoice modules such as account_invoice_import_zugferd
  • import_invoice(self)
    @api.multi
    Method called by the button of the wizard (1st step)
  • parse_invoice(self)
    @api.multi
  • parse_pdf_invoice(self, file_data)
    @api.model
    This method must be inherited by additionnal modules with the same kind of logic as the account_bank_statement_import_* modules
  • parse_xml_invoice(self, xml_root)
    @api.model
  • post_process_invoice(self, parsed_inv, invoice)
    @api.model
  • set_1line_price_unit_and_quantity(self, il_vals, parsed_inv)
    @api.model
    For the moment, we only take into account the 'price_include' option of the first tax
  • set_1line_start_end_dates(self, il_vals, parsed_inv)
    @api.model
    Only useful if you have installed the module account_cutoff_prepaid from https://github.com/OCA/account-closing
  • update_clean_parsed_inv(self, parsed_inv)
    @api.model
  • update_invoice(self)
    @api.multi
  • update_invoice_lines(self, parsed_inv, invoice, seller)
    @api.multi

New fields (10)
  • account_analytic_id Many2one → account.analytic.account
    domain=[('type', '!=', 'view')] string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('type', 'not in', ('view', 'closed'))] string='Expense Account' args: 'account.account'
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' required=True string='Company' args: 'res.company'
  • invoice_line_method Selection
    default='1line_no_product' help="The multi-line methods will not work for PDF invoices that don't have an embedded XML file. The 'Multi Line, Auto-selected Product' method will only work with ZUGFeRD invoices at Comfort or Extended level, not at Basic level." required=True string='Method for Invoice Line' args: [('1line_no_product', 'Single Line, No Product'), ('1line_static_product', 'Single Line, Static Product'), ('nline_no_product', 'Multi Line, No Product'), ('nline_static_product', 'Multi Line, Static Product'), ('nline_auto_product', 'Multi Line, Auto-selected Product')]
  • label Char
    help='Force supplier invoice line description' string='Force Description'
  • name Char
    required=True string='Name'
  • partner_ids One2many → res.partner
    string='Partners' args: 'res.partner', 'invoice_import_id'
  • static_product_id Many2one → product.product
    string='Static Product' args: 'product.product'
  • tax_ids Many2many → account.tax
    domain=[('type_tax_use', 'in', ('all', 'purchase'))] string='Taxes' args: 'account.tax'
Public methods (0)

No public methods.

New fields (1)
  • invoice_import_id Many2one → account.invoice.import.config
    company_dependent=True string='Invoice Import Configuration' args: 'account.invoice.import.config'
Public methods (0)

No public methods.

STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/edi
PULL REQUEST
PULL REQUEST[17.0][MIG] account_invoice_import: Migration to 17.0 (#1295)
STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/edi
PULL REQUEST
PULL REQUEST[19.0][MIG] account_invoice_import: Migration to 19.0 (#1363)