Datev Export XML

datev_export_xml
REPOSITORY
REPOSITORYOCA/l10n-germany
GIT
GIThttps://github.com/OCA/l10n-germany.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-germany/tree/18.0/datev_export_xml
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg, Jan Sierpina
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg, Jan Sierpina
COMMITTERS
COMMITTERSHolger Brunn, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-germany
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-germany:
    - datev_export
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
    - l10n_de
    - base_iban
    - base_vat
    - l10n_din5008
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
## Odoo Export to DATEV XML

The datev_export_xml module allows to export invoices and bills with
their origin digitized receipts in order to transmitt structured
accounting data via file-based DATEV XML format. The transfer of these
files created by this module to the invoice books in DATEV Unternehmen
Online can be done currently via the free DATEV document transfer app.

The DATEV XML interface cannot cover use cases such as:

- Pure G/L account postings (G/L account to G/L account, e.g. payment
  postings)
- Master data transfer for business partners (customers/creditors)
- certain §13b UStG issues (see permissible tax codes for DATEV
  Unternehmen online)

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
datev_export_view_kanban datev.export.xml.kanban datev.export.xml kanban New
datev_export_view_tree datev.export.xml.view.list datev.export.xml list New
export_invoice export_invoice ir.ui.view qweb New
export_invoice_document export_invoice_document ir.ui.view qweb New
export_invoice_line export_invoice_line ir.ui.view qweb New
export_invoice_line_item export_invoice_line_item ir.ui.view qweb New
export_party export_party ir.ui.view qweb New
res_config_settings_view_form res.config.settings.datev.view.form res.config.settings block Inherits datev_export.res_config_settings_view_form
view_account_invoice_filter account.move filter Inherits account.view_account_invoice_filter
view_datev_export_form datev.export.xml.form datev.export.xml form New
view_datev_export_popup_form datev.export.xml.popup.form datev.export.xml header Inherits view_datev_export_form
view_move_datev_validation account.move list New
view_move_form account.move group Inherits account.view_move_form
Models touched (9)

New fields (2)
  • datev_exported Boolean
    copy=False help='When finishing a datev export the processed invoices are marked as exported.\nIf you need to export the invoices again, set this field to False.' string='Exported to Datev'
  • datev_validation Text
Public methods (8)
  • datev_delivery_date(self)
  • datev_filename(self, extension='.pdf')
  • datev_format_total(self, value, prec=2)
  • datev_invoice_id(self)
  • datev_invoice_type(self)
  • datev_order_id(self)
  • datev_party_attributes(self, partner)
  • datev_sanitize(self, value, length=36)

New fields (0)

No new fields.

Public methods (2)
  • datev_analytic_account(self)
  • datev_price_information(self)

New fields (19)
  • check_xsd Boolean
    default=True required=True args: 'Check XSD'
  • client_number Char
    readonly=True related='company_id.datev_client_number'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • consultant_number Char
    readonly=True related='company_id.datev_consultant_number'
  • date_start Date
    default=_default_start args: 'From Date'
  • date_stop Date
    default=_default_stop args: 'To Date'
  • exception_info Text
    readonly=True
  • export_invoice Boolean
    default=True args: 'Export Invoices'
  • export_refund Boolean
    default=True args: 'Export Refunds'
  • export_type Selection
    default='out' required=True args: [('out', 'Customers'), ('in', 'Vendors')]
  • invoice_ids Many2many → account.move
    comodel_name='account.move' string='Invoices'
  • invoices_count Integer
    compute='_compute_invoices_count' store=True string='Total Invoices'
  • invoices_exported_count Integer
    compute='_compute_invoices_count' store=True string='Exported Invoices'
  • line_count Integer
    compute='_compute_line_count'
  • line_ids One2many → datev.export.xml.line
    args: 'datev.export.xml.line', 'export_id', 'Lines'
  • manually_document_selection Boolean
    default=False
  • name Char
  • problematic_invoices_count Integer
    compute='_compute_problematic_invoices_count'
  • state Selection
    default='draft' readonly=True required=True string='Status' tracking=True args: [('draft', 'Draft'), ('pending', 'Pending'), ('running', 'Running'), ('done', 'Done'), ('failed', 'Failed')]
Public methods (16)
  • action_done(self)
  • action_draft(self)
  • action_invalidate_lines(self)
  • action_pending(self)
  • action_show_invalid_invoices_view(self)
  • action_show_related_invoices_view(self)
  • action_validate(self)
  • create(self, vals_list)
    @api.model_create_multi
  • cron_run_pending_export(self)
    @api.model
    A Cron job can't execute parallel, so if we run this cron and there is currently a running datev export we can restart it.
  • export_zip(self)
  • export_zip_invoice(self, invoice_ids=None)
    @api.model
  • get_invoices(self)
  • get_type_list(self)
  • get_zip(self)
  • validate_types(self)
    @api.constrains('export_invoice', 'export_refund', 'export_type')
  • write(self, vals)

New fields (6)
  • attachment_id Many2one → ir.attachment
    ondelete='cascade' readonly=True args: 'ir.attachment'
  • export_id Many2one → datev.export.xml
    readonly=True args: 'datev.export.xml'
  • filename Char
    readonly=True related='attachment_id.name'
  • filesize Char
    compute='_compute_filesize'
  • invoice_ids Many2many → account.move
    readonly=True args: 'account.move'
  • invoices_count Integer
    compute='_compute_invoices_count' store=True string='Invoices'
Public methods (3)
  • action_datev_download(self)
  • action_open_invoices(self)
  • unlink(self)

New fields (0)

No new fields.

Public methods (3)
  • find_existing_attachments(self, invoice)
    @api.model
  • generate_pdf(self, invoice)
    @api.model
  • report_name(self)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • check_xml_file(self, doc_name, root, xsd=None, invoice=None)
    @api.model
  • generate_xml_document(self, invoices, check_xsd=True)
    @api.model
  • generate_xml_invoice(self, invoice, check_xsd=True)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • check_valid_data(self, invoices)
    @api.model
  • generate_zip(self, invoices, check_xsd)
    @api.model

New fields (5)
  • datev_customer_order_ref Selection
    default='odoo' required=True args: [('odoo', 'Odoo Reference'), ('partner', 'Partner Reference'), ('payment', 'Payment Reference')], 'Customer Order Reference'
  • datev_default_period Selection
    default='week' help='Used to get default values for start and stop date at DATEV Export!' args: [('day', 'Day'), ('week', 'Week'), ('month', 'Month'), ('year', 'Year')]
  • datev_export_state Boolean
    help='If set, the invoices are marked as exported when finishing a Datev export.'
  • datev_package_limit Integer
    default=100 string='Package Limit in MB'
  • datev_vendor_order_ref Selection
    default='odoo' required=True args: [('odoo', 'Odoo Reference'), ('partner', 'Partner Reference'), ('payment', 'Payment Reference')], 'Vendor Order Reference'
Public methods (0)

No public methods.

New fields (5)
  • datev_customer_order_ref Selection
    readonly=False related='company_id.datev_customer_order_ref'
  • datev_default_period Selection
    readonly=False related='company_id.datev_default_period'
  • datev_export_state Boolean
    readonly=False related='company_id.datev_export_state'
  • datev_package_limit Integer
    readonly=False related='company_id.datev_package_limit'
  • datev_vendor_order_ref Selection
    readonly=False related='company_id.datev_vendor_order_ref'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-germany
GIT
GIThttps://github.com/OCA/l10n-germany.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-germany/tree/17.0/datev_export_xml
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg, Jan Sierpina
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg, Jan Sierpina
COMMITTERS
COMMITTERSEnric Tobella, Víctor Martínez, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-germany
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:10
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-germany:
    - datev_export
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_de
    - base_iban
    - base_vat
    - l10n_din5008
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
## Odoo Export to DATEV XML

The datev_export_xml module allows to export invoices and bills with
their origin digitized receipts in order to transmitt structured
accounting data via file-based DATEV XML format. The transfer of these
files created by this module to the invoice books in DATEV Unternehmen
Online can be done currently via the free DATEV document transfer app.

The DATEV XML interface cannot cover use cases such as:

- Pure G/L account postings (G/L account to G/L account, e.g. payment
  postings)
- Master data transfer for business partners (customers/creditors)
- certain §13b UStG issues (see permissible tax codes for DATEV
  Unternehmen online)

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
datev_export_view_kanban datev.export.xml.kanban datev.export.xml kanban New
datev_export_view_tree datev.export.xml.view.tree datev.export.xml tree New
export_invoice export_invoice ir.ui.view qweb New
export_invoice_document export_invoice_document ir.ui.view qweb New
export_invoice_line export_invoice_line ir.ui.view qweb New
export_invoice_line_item export_invoice_line_item ir.ui.view qweb New
export_party export_party ir.ui.view qweb New
res_config_settings_view_form res.config.settings.datev.view.form res.config.settings div Inherits datev_export.res_config_settings_view_form
view_account_invoice_filter account.move filter Inherits account.view_account_invoice_filter
view_datev_export_form datev.export.xml.form datev.export.xml form New
view_datev_export_popup_form datev.export.xml.popup.form datev.export.xml header Inherits view_datev_export_form
view_move_datev_validation account.move tree New
view_move_form account.move group Inherits account.view_move_form
Models touched (8)

New fields (2)
  • datev_exported Boolean
    copy=False help='When finishing a datev export the processed invoices are marked as exported.\nIf you need to export the invoices again, set this field to False.' string='Exported to Datev'
  • datev_validation Text
Public methods (7)
  • datev_delivery_date(self)
  • datev_filename(self, extension='.pdf')
  • datev_format_total(self, value, prec=2)
  • datev_invoice_id(self)
  • datev_invoice_type(self)
  • datev_order_id(self)
  • datev_sanitize(self, value, length=36)

New fields (0)

No new fields.

Public methods (2)
  • datev_analytic_account(self)
  • datev_price_information(self)

New fields (20)
  • attachment_id Many2one → ir.attachment
    comodel_name='ir.attachment' readonly=True required=False string='Attachment'
  • check_xsd Boolean
    default=True required=True args: 'Check XSD'
  • client_number Char
    readonly=True related='company_id.datev_client_number'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • consultant_number Char
    readonly=True related='company_id.datev_consultant_number'
  • date_start Date
    default=_default_start args: 'From Date'
  • date_stop Date
    default=_default_stop args: 'To Date'
  • datev_file Binary
    readonly=True related='attachment_id.datas' args: 'ZIP file'
  • datev_filename Char
    readonly=True related='attachment_id.name' args: 'ZIP filename'
  • datev_filesize Char
    compute='_compute_datev_filesize' args: 'Filesize'
  • exception_info Text
    readonly=True
  • export_invoice Boolean
    default=True args: 'Export Invoices'
  • export_refund Boolean
    default=True args: 'Export Refunds'
  • export_type Selection
    default='out' required=True args: [('out', _('Customers')), ('in', _('Vendors'))]
  • invoice_ids Many2many → account.move
    comodel_name='account.move' string='Invoices'
  • invoices_count Integer
    compute='_compute_invoices_count' store=True
  • manually_document_selection Boolean
    default=False
  • name Char
  • problematic_invoices_count Integer
    compute='_compute_problematic_invoices_count'
  • state Selection
    default='draft' readonly=True required=True string='Status' tracking=True args: [('draft', _('Draft')), ('pending', _('Pending')), ('running', _('Running')), ('done', _('Done')), ('failed', _('Failed'))]
Public methods (16)
  • action_done(self)
  • action_draft(self)
  • action_pending(self)
  • action_show_invalid_invoices_view(self)
  • action_show_related_invoices_view(self)
  • action_validate(self)
  • create(self, vals_list)
    @api.model_create_multi
  • cron_run_pending_export(self)
    @api.model
    A Cron job can't execute parallel, so if we run this cron and there is currently a running datev export we can restart it.
  • export_zip(self)
  • export_zip_invoice(self, invoice_ids=None)
    @api.model
  • get_invoices(self)
  • get_type_list(self)
  • get_zip(self)
  • unlink(self)
  • validate_types(self)
    @api.constrains('export_invoice', 'export_refund', 'export_type')
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • find_existing_attachments(self, invoice)
    @api.model
  • generate_pdf(self, invoice)
    @api.model
  • report_name(self)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • check_xml_file(self, doc_name, root, xsd=None, invoice=None)
    @api.model
  • generate_xml_document(self, invoices, check_xsd=True)
    @api.model
  • generate_xml_invoice(self, invoice, check_xsd=True)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • check_valid_data(self, invoices)
    @api.model
  • generate_zip(self, invoices, check_xsd)
    @api.model

New fields (4)
  • datev_customer_order_ref Selection
    default='odoo' required=True args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))], 'Customer Order Reference'
  • datev_default_period Selection
    default='week' help='Used to get default values for start and stop date at DATEV Export!' args: [('day', _('Day')), ('week', _('Week')), ('month', _('Month')), ('year', _('Year'))]
  • datev_export_state Boolean
    help='If set, the invoices are marked as exported when finishing a Datev export.'
  • datev_vendor_order_ref Selection
    default='odoo' required=True args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))], 'Vendor Order Reference'
Public methods (0)

No public methods.

New fields (4)
  • datev_customer_order_ref Selection
    readonly=False related='company_id.datev_customer_order_ref'
  • datev_default_period Selection
    readonly=False related='company_id.datev_default_period'
  • datev_export_state Boolean
    readonly=False related='company_id.datev_export_state'
  • datev_vendor_order_ref Selection
    readonly=False related='company_id.datev_vendor_order_ref'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-germany
GIT
GIThttps://github.com/OCA/l10n-germany.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-germany/tree/16.0/datev_export_xml
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg, Jan Sierpina
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg, Jan Sierpina
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci, Jan Sierpina
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-germany
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-germany:
    - datev_export
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_de
    - base_iban
    - base_vat
    - l10n_din5008
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
datev_export_view_kanban datev.export.xml.kanban datev.export.xml kanban New
datev_export_view_tree datev.export.xml.view.tree datev.export.xml tree New
export_invoice export_invoice ir.ui.view qweb New
export_invoice_document export_invoice_document ir.ui.view qweb New
export_invoice_line export_invoice_line ir.ui.view qweb New
export_invoice_line_item export_invoice_line_item ir.ui.view qweb New
export_party export_party ir.ui.view qweb New
res_config_settings_view_form res.config.settings.datev.view.form res.config.settings div Inherits datev_export.res_config_settings_view_form
view_account_invoice_filter account.move filter Inherits account.view_account_invoice_filter
view_datev_export_form datev.export.xml.form datev.export.xml form New
view_datev_export_popup_form datev.export.xml.popup.form datev.export.xml header Inherits view_datev_export_form
view_move_datev_validation account.move tree New
view_move_form account.move group Inherits account.view_move_form
Models touched (8)

New fields (2)
  • datev_exported Boolean
    copy=False help='When finishing a datev export the processed invoices are marked as exported.\nIf you need to export the invoices again, set this field to False.' string='Exported to Datev'
  • datev_validation Text
Public methods (7)
  • datev_delivery_date(self)
  • datev_filename(self, extension='.pdf')
  • datev_format_total(self, value, prec=2)
  • datev_invoice_id(self)
  • datev_invoice_type(self)
  • datev_order_id(self)
  • datev_sanitize(self, value, length=36)

New fields (0)

No new fields.

Public methods (2)
  • datev_analytic_account(self)
  • datev_price_information(self)

New fields (20)
  • attachment_id Many2one → ir.attachment
    comodel_name='ir.attachment' readonly=True required=False string='Attachment'
  • check_xsd Boolean
    default=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Check XSD'
  • client_number Char
    readonly=True related='company_id.datev_client_number'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • consultant_number Char
    readonly=True related='company_id.datev_consultant_number'
  • date_start Date
    default=_default_start readonly=True states={'draft': [('readonly', False)]} args: 'From Date'
  • date_stop Date
    default=_default_stop readonly=True states={'draft': [('readonly', False)]} args: 'To Date'
  • datev_file Binary
    readonly=True related='attachment_id.datas' args: 'ZIP file'
  • datev_filename Char
    readonly=True related='attachment_id.name' args: 'ZIP filename'
  • datev_filesize Char
    compute='_compute_datev_filesize' args: 'Filesize'
  • exception_info Text
    readonly=True
  • export_invoice Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} args: 'Export Invoices'
  • export_refund Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} args: 'Export Refunds'
  • export_type Selection
    default='out' readonly=True required=True states={'draft': [('readonly', False)]} args: [('out', _('Customers')), ('in', _('Vendors'))]
  • invoice_ids Many2many → account.move
    comodel_name='account.move' string='Invoices'
  • invoices_count Integer
    compute='_compute_invoices_count' store=True
  • manually_document_selection Boolean
    default=False
  • name Char
  • problematic_invoices_count Integer
    compute='_compute_problematic_invoices_count'
  • state Selection
    default='draft' readonly=True required=True string='Status' tracking=True args: [('draft', _('Draft')), ('pending', _('Pending')), ('running', _('Running')), ('done', _('Done')), ('failed', _('Failed'))]
Public methods (17)
  • action_done(self)
  • action_draft(self)
  • action_pending(self)
  • action_show_invalid_invoices_view(self)
  • action_show_related_invoices_view(self)
  • action_validate(self)
  • create(self, vals)
    @api.model
  • cron_run_pending_export(self)
    @api.model
    A Cron job can't execute parallel, so if we run this cron and there is currently a running datev export we can restart it.
  • export_zip(self)
  • export_zip_invoice(self, invoice_ids=None)
    @api.model
  • get_invoices(self)
  • get_type_list(self)
  • get_zip(self)
  • name_get(self)
  • unlink(self)
  • validate_types(self)
    @api.constrains('export_invoice', 'export_refund', 'export_type')
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • find_existing_attachments(self, invoice)
    @api.model
  • generate_pdf(self, invoice)
    @api.model
  • report_name(self)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • check_xml_file(self, doc_name, root, xsd=None, invoice=None)
    @api.model
  • generate_xml_document(self, invoices, check_xsd=True)
    @api.model
  • generate_xml_invoice(self, invoice, check_xsd=True)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • check_valid_data(self, invoices)
    @api.model
  • generate_zip(self, invoices, check_xsd)
    @api.model

New fields (4)
  • datev_customer_order_ref Selection
    default='odoo' required=True args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))], 'Customer Order Reference'
  • datev_default_period Selection
    default='week' help='Used to get default values for start and stop date at DATEV Export!' args: [('day', _('Day')), ('week', _('Week')), ('month', _('Month')), ('year', _('Year'))]
  • datev_export_state Boolean
    help='If set, the invoices are marked as exported when finishing a Datev export.'
  • datev_vendor_order_ref Selection
    default='odoo' required=True args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))], 'Vendor Order Reference'
Public methods (0)

No public methods.

New fields (4)
  • datev_customer_order_ref Selection
    readonly=False related='company_id.datev_customer_order_ref'
  • datev_default_period Selection
    readonly=False related='company_id.datev_default_period'
  • datev_export_state Boolean
    readonly=False related='company_id.datev_export_state'
  • datev_vendor_order_ref Selection
    readonly=False related='company_id.datev_vendor_order_ref'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-germany
GIT
GIThttps://github.com/OCA/l10n-germany.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-germany/tree/15.0/datev_export_xml
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, fkantelberg
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-germany
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-germany:
    - datev_export
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_de
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
datev_export_view_kanban datev.export.xml.kanban datev.export.xml kanban New
datev_export_view_tree datev.export.xml.view.tree datev.export.xml tree New
export_invoice export_invoice ir.ui.view qweb New
export_invoice_document export_invoice_document ir.ui.view qweb New
export_invoice_line export_invoice_line ir.ui.view qweb New
export_invoice_line_item export_invoice_line_item ir.ui.view qweb New
export_party export_party ir.ui.view qweb New
res_config_settings_view_form res.config.settings.datev.view.form res.config.settings div Inherits datev_export.res_config_settings_view_form
view_account_invoice_filter account.move filter Inherits account.view_account_invoice_filter
view_datev_export_form datev.export.xml.form datev.export.xml form New
view_datev_export_popup_form datev.export.xml.popup.form datev.export.xml header Inherits view_datev_export_form
view_move_datev_validation account.move tree New
view_move_form account.move group Inherits account.view_move_form
Models touched (8)

New fields (2)
  • datev_exported Boolean
    copy=False help='When finishing a datev export the processed invoices are marked as exported.\nIf you need to export the invoices again, set this field to False.' string='Exported to Datev'
  • datev_validation Text
Public methods (7)
  • datev_delivery_date(self)
  • datev_filename(self, extension='.pdf')
  • datev_format_total(self, value, prec=2)
  • datev_invoice_id(self)
  • datev_invoice_type(self)
  • datev_order_id(self)
  • datev_sanitize(self, value, length=36)

New fields (0)

No new fields.

Public methods (1)
  • datev_price_information(self)

New fields (20)
  • attachment_id Many2one → ir.attachment
    comodel_name='ir.attachment' readonly=True required=False string='Attachment'
  • check_xsd Boolean
    default=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Check XSD'
  • client_number Char
    readonly=True related='company_id.datev_client_number'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • consultant_number Char
    readonly=True related='company_id.datev_consultant_number'
  • date_start Date
    default=_default_start readonly=True states={'draft': [('readonly', False)]} args: 'From Date'
  • date_stop Date
    default=_default_stop readonly=True states={'draft': [('readonly', False)]} args: 'To Date'
  • datev_file Binary
    readonly=True related='attachment_id.datas' args: 'ZIP file'
  • datev_filename Char
    readonly=True related='attachment_id.name' args: 'ZIP filename'
  • datev_filesize Char
    compute='_compute_datev_filesize' args: 'Filesize'
  • exception_info Text
    readonly=True
  • export_invoice Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} args: 'Export Invoices'
  • export_refund Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} args: 'Export Refunds'
  • export_type Selection
    default='out' readonly=True required=True states={'draft': [('readonly', False)]} args: [('out', _('Customers')), ('in', _('Vendors'))]
  • invoice_ids Many2many → account.move
    comodel_name='account.move' string='Invoices'
  • invoices_count Integer
    compute='_compute_invoices_count' store=True
  • manually_document_selection Boolean
    default=False
  • name Char
  • problematic_invoices_count Integer
    compute='_compute_problematic_invoices_count'
  • state Selection
    default='draft' readonly=True required=True string='Status' tracking=True args: [('draft', _('Draft')), ('pending', _('Pending')), ('running', _('Running')), ('done', _('Done')), ('failed', _('Failed'))]
Public methods (17)
  • action_done(self)
  • action_draft(self)
  • action_pending(self)
  • action_show_invalid_invoices_view(self)
  • action_show_related_invoices_view(self)
  • action_validate(self)
  • create(self, vals)
    @api.model
  • cron_run_pending_export(self)
    @api.model
    A Cron job can't execute parallel, so if we run this cron and there is currently a running datev export we can restart it.
  • export_zip(self)
  • export_zip_invoice(self, invoice_ids=None)
    @api.model
  • get_invoices(self)
  • get_type_list(self)
  • get_zip(self)
  • name_get(self)
  • unlink(self)
  • validate_types(self)
    @api.constrains('export_invoice', 'export_refund', 'export_type')
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • find_existing_attachments(self, invoice)
    @api.model
  • generate_pdf(self, invoice)
    @api.model
  • report_name(self)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • check_xml_file(self, doc_name, root, xsd=None, invoice=None)
    @api.model
  • generate_xml_document(self, invoices, check_xsd=True)
    @api.model
  • generate_xml_invoice(self, invoice, check_xsd=True)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • check_valid_data(self, invoices)
    @api.model
  • generate_zip(self, invoices, check_xsd)
    @api.model

New fields (4)
  • datev_customer_order_ref Selection
    default='odoo' required=True args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))], 'Customer Order Reference'
  • datev_default_period Selection
    default='week' help='Used to get default values for start and stop date at DATEV Export!' args: [('day', _('Day')), ('week', _('Week')), ('month', _('Month')), ('year', _('Year'))]
  • datev_export_state Boolean
    help='If set, the invoices are marked as exported when finishing a Datev export.'
  • datev_vendor_order_ref Selection
    default='odoo' required=True args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))], 'Vendor Order Reference'
Public methods (0)

No public methods.

New fields (4)
  • datev_customer_order_ref Selection
    readonly=False related='company_id.datev_customer_order_ref'
  • datev_default_period Selection
    readonly=False related='company_id.datev_default_period'
  • datev_export_state Boolean
    readonly=False related='company_id.datev_export_state'
  • datev_vendor_order_ref Selection
    readonly=False related='company_id.datev_vendor_order_ref'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-germany
GIT
GIThttps://github.com/OCA/l10n-germany.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-germany/tree/14.0/datev_export_xml
VERSION
VERSION 1.1.4
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg
COMMITTERS
COMMITTERSoca-travis, Weblate, OCA-git-bot, fkantelberg
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-germany
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-germany:
    - datev_export
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_de
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
datev_export_view_kanban datev.export.xml.kanban datev.export.xml kanban New
datev_export_view_tree datev.export.xml.view.tree datev.export.xml tree New
export_invoice export_invoice ir.ui.view qweb New
export_invoice_document export_invoice_document ir.ui.view qweb New
export_invoice_line export_invoice_line ir.ui.view qweb New
export_invoice_line_item export_invoice_line_item ir.ui.view qweb New
export_party export_party ir.ui.view qweb New
res_config_settings_view_form res.config.settings.datev.view.form res.config.settings div Inherits datev_export.res_config_settings_view_form
view_account_invoice_filter account.move filter Inherits account.view_account_invoice_filter
view_datev_export_form datev.export.xml.form datev.export.xml form New
view_datev_export_popup_form datev.export.xml.popup.form datev.export.xml header Inherits view_datev_export_form
view_move_datev_validation account.move tree New
view_move_form account.move group Inherits account.view_move_form
Models touched (9)

New fields (2)
  • datev_exported Boolean
    copy=False help='When finishing a datev export the processed invoices are marked as exported.\nIf you need to export the invoices again, set this field to False.' string='Exported to Datev'
  • datev_validation Text
Public methods (7)
  • datev_delivery_date(self)
  • datev_filename(self, extension='.pdf')
  • datev_format_total(self, value, prec=2)
  • datev_invoice_id(self)
  • datev_invoice_type(self)
  • datev_order_id(self)
  • datev_sanitize(self, value, length=36)

New fields (0)

No new fields.

Public methods (1)
  • datev_price_information(self)

New fields (19)
  • check_xsd Boolean
    default=True readonly=True required=True states={'draft': [('readonly', False)]} string='Check XSD'
  • client_number Char
    readonly=True related='company_id.datev_client_number'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • consultant_number Char
    readonly=True related='company_id.datev_consultant_number'
  • date_start Date
    default=_default_start readonly=True states={'draft': [('readonly', False)]} string='From Date'
  • date_stop Date
    default=_default_stop readonly=True states={'draft': [('readonly', False)]} string='To Date'
  • exception_info Text
    readonly=True string='Exception Info'
  • export_invoice Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} string='Export Invoices'
  • export_refund Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} string='Export Refunds'
  • export_type Selection
    default='out' readonly=True required=True states={'draft': [('readonly', False)]} args: [('out', _('Customers')), ('in', _('Vendors'))]
  • invoice_ids Many2many → account.move
    comodel_name='account.move' string='Invoices'
  • invoices_count Integer
    compute='_compute_invoices_count' store=True string='Total Invoices'
  • invoices_exported_count Integer
    compute='_compute_invoices_count' store=True string='Exported Invoices'
  • line_count Integer
    compute='_compute_line_count'
  • line_ids One2many → datev.export.xml.line
    args: 'datev.export.xml.line', 'export_id', 'Lines'
  • manually_document_selection Boolean
    default=False
  • name Char
  • problematic_invoices_count Integer
    compute='_compute_problematic_invoices_count'
  • state Selection
    default='draft' readonly=True required=True string='Status' tracking=True args: [('draft', _('Draft')), ('pending', _('Pending')), ('running', _('Running')), ('done', _('Done')), ('failed', _('Failed'))]
Public methods (18)
  • action_done(self)
  • action_draft(self)
  • action_invalidate_lines(self)
  • action_pending(self)
  • action_show_invalid_invoices_view(self)
  • action_show_related_invoices_view(self)
  • action_validate(self)
  • create(self, vals)
    @api.model
  • cron_run_pending_export(self)
    @api.model
    A Cron job can't execute parallel, so if we run this cron and there is currently a running datev export we can restart it.
  • export_zip(self)
  • export_zip_invoice(self, invoice_ids=None)
    @api.model
  • get_invoices(self)
  • get_type_list(self)
  • get_zip(self)
  • name_get(self)
  • unlink(self)
  • validate_types(self)
    @api.constrains('export_invoice', 'export_refund', 'export_type')
  • write(self, vals)

New fields (6)
  • attachment_id Many2one → ir.attachment
    ondelete='cascade' readonly=True args: 'ir.attachment'
  • export_id Many2one → datev.export.xml
    readonly=True args: 'datev.export.xml'
  • filename Char
    readonly=True related='attachment_id.name'
  • filesize Char
    compute='_compute_filesize'
  • invoice_ids Many2many → account.move
    readonly=True args: 'account.move'
  • invoices_count Integer
    compute='_compute_invoices_count' store=True string='Invoices'
Public methods (3)
  • action_datev_download(self)
  • action_open_invoices(self)
  • unlink(self)

New fields (0)

No new fields.

Public methods (3)
  • find_existing_attachments(self, invoice)
    @api.model
  • generate_pdf(self, invoice)
    @api.model
  • report_name(self)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • check_xml_file(self, doc_name, root, xsd=None, invoice=None)
    @api.model
  • generate_xml_document(self, invoices, check_xsd=True)
    @api.model
  • generate_xml_invoice(self, invoice, check_xsd=True)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • check_valid_data(self, invoices)
    @api.model
  • generate_zip(self, invoices, check_xsd)
    @api.model

New fields (5)
  • datev_customer_order_ref Selection
    default='odoo' required=True string='Customer Order Reference' args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))]
  • datev_default_period Selection
    default='week' help='Used to get default values for start and stop date at DATEV Export!' args: [('day', _('Day')), ('week', _('Week')), ('month', _('Month')), ('year', _('Year'))]
  • datev_export_state Boolean
    help='If set, the invoices are marked as exported when finishing a Datev export.' string='Datev Export State'
  • datev_package_limit Integer
    default=100 string='Package Limit in MB'
  • datev_vendor_order_ref Selection
    default='odoo' required=True string='Vendor Order Reference' args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))]
Public methods (0)

No public methods.

New fields (5)
  • datev_customer_order_ref Selection
    readonly=False related='company_id.datev_customer_order_ref'
  • datev_default_period Selection
    readonly=False related='company_id.datev_default_period'
  • datev_export_state Boolean
    readonly=False related='company_id.datev_export_state'
  • datev_package_limit Integer
    readonly=False related='company_id.datev_package_limit'
  • datev_vendor_order_ref Selection
    readonly=False related='company_id.datev_vendor_order_ref'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-germany
GIT
GIThttps://github.com/OCA/l10n-germany.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-germany/tree/13.0/datev_export_xml
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), initOS GmbH, Guenter Selbert, Thorsten Vocks, Maciej Wichowski, Daniela Scarpa, Maria Sparenberg
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, Carolina Fernandez
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-germany
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-germany:
    - datev_export
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_de
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
datev_export_view_kanban datev.export.xml.kanban datev.export.xml kanban New
datev_export_view_tree datev.export.xml.view.tree datev.export.xml tree New
export_invoice export_invoice ir.ui.view qweb New
export_invoice_document export_invoice_document ir.ui.view qweb New
export_invoice_line export_invoice_line ir.ui.view qweb New
export_invoice_line_item export_invoice_line_item ir.ui.view qweb New
export_party export_party ir.ui.view qweb New
res_config_settings_view_form res.config.settings.datev.view.form res.config.settings div Inherits datev_export.res_config_settings_view_form
view_account_invoice_filter account.move filter Inherits account.view_account_invoice_filter
view_datev_export_form datev.export.xml.form datev.export.xml form New
view_datev_export_popup_form datev.export.xml.popup.form datev.export.xml header Inherits view_datev_export_form
view_move_form account.move group Inherits account.view_move_form
Models touched (8)

New fields (1)
  • datev_exported Boolean
    copy=False help='When finishing a datev export the processed invoices are marked as exported.\nIf you need to export the invoices again, set this field to False.' string='Exported to Datev'
Public methods (7)
  • datev_delivery_date(self)
  • datev_filename(self, extension='.pdf')
  • datev_format_total(self, value)
  • datev_invoice_id(self)
  • datev_invoice_type(self)
  • datev_order_id(self)
  • datev_sanitize(self, value, length=36)

New fields (0)

No new fields.

Public methods (1)
  • datev_price_information(self)

New fields (19)
  • attachment_id Many2one → ir.attachment
    comodel_name='ir.attachment' readonly=True required=False string='Attachment'
  • check_xsd Boolean
    default=True readonly=True required=True states={'draft': [('readonly', False)]} string='Check XSD'
  • client_number Char
    readonly=True related='company_id.datev_client_number'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • consultant_number Char
    readonly=True related='company_id.datev_consultant_number'
  • date_start Date
    default=_default_start readonly=True states={'draft': [('readonly', False)]} string='From Date'
  • date_stop Date
    default=_default_stop readonly=True states={'draft': [('readonly', False)]} string='To Date'
  • datev_file Binary
    readonly=True related='attachment_id.datas' args: 'ZIP file'
  • datev_filename Char
    readonly=True related='attachment_id.name' args: 'ZIP filename'
  • datev_filesize Char
    compute='_compute_datev_filesize' args: 'Filesize'
  • exception_info Text
    readonly=True string='Exception Info'
  • export_invoice Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} string='Export Invoices'
  • export_refund Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} string='Export Refunds'
  • export_type Selection
    default='out' readonly=True required=True states={'draft': [('readonly', False)]} args: [('out', _('Customers')), ('in', _('Vendors'))]
  • invoice_ids Many2many → account.move
    comodel_name='account.move' string='Invoices'
  • invoices_count Integer
    compute='_compute_invoices_count' store=True string='Invoices Count'
  • manually_document_selection Boolean
    default=False
  • name Char
  • state Selection
    default='draft' readonly=True required=True string='Status' tracking=True args: [('draft', _('Draft')), ('pending', _('Pending')), ('running', _('Running')), ('done', _('Done')), ('failed', _('Failed'))]
Public methods (15)
  • action_done(self)
  • action_draft(self)
  • action_pending(self)
  • action_show_related_invoices_view(self)
  • create(self, vals)
    @api.model
  • cron_run_pending_export(self)
    @api.model
    A Cron job can't execute parallel, so if we run this cron and there is currently a running datev export we can restart it.
  • export_zip(self)
  • export_zip_invoice(self, invoice_ids=None)
    @api.model
  • get_invoices(self)
  • get_type_list(self)
  • get_zip(self)
  • name_get(self)
  • unlink(self)
  • validate_types(self)
    @api.constrains('export_invoice', 'export_refund', 'export_type')
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • find_existing_attachments(self, invoice)
    @api.model
  • generate_pdf(self, invoice)
    @api.model
  • report_name(self)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • check_xml_file(self, doc_name, root, xsd=None)
    @api.model
  • generate_xml_document(self, invoices, check_xsd=True)
    @api.model
  • generate_xml_invoice(self, invoice, check_xsd=True)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • check_valid_data(self, invoices)
    @api.model
  • generate_zip(self, invoices, check_xsd)
    @api.model

New fields (4)
  • datev_customer_order_ref Selection
    default='odoo' required=True string='Customer Order Reference' args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))]
  • datev_default_period Selection
    default='week' help='Used to get default values for start and stop date at DATEV Export!' args: [('day', _('Day')), ('week', _('Week')), ('month', _('Month')), ('year', _('Year'))]
  • datev_export_state Boolean
    help='If set, the invoices are marked as exported when finishing a Datev export.' string='Datev Export State'
  • datev_vendor_order_ref Selection
    default='odoo' required=True string='Vendor Order Reference' args: [('odoo', _('Odoo Reference')), ('partner', _('Partner Reference')), ('payment', _('Payment Reference'))]
Public methods (0)

No public methods.

New fields (4)
  • datev_customer_order_ref Selection
    readonly=False related='company_id.datev_customer_order_ref'
  • datev_default_period Selection
    readonly=False related='company_id.datev_default_period'
  • datev_export_state Boolean
    readonly=False related='company_id.datev_export_state'
  • datev_vendor_order_ref Selection
    readonly=False related='company_id.datev_vendor_order_ref'
Public methods (0)

No public methods.