Repository
odoo/odoo · module folder
Module version
1.2
Category
Accounting/Accounting
Folder size
5.12 MB
License
LGPL-3
Application
No
Auto-installable
Yes
Website
None
Last tracking update
2026-08-15 22:44:18
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Xavier ALT, Raphael Collet, Thibault Delavallée, Josse Colpaert, Odoo Translation Bot, Laurent Smet, Julien Castiaux, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, william-andre, Ruben Gomes, assellalou, Florian Gilbert, luvi, Pierrot (prro), Louis Wicket (wil), Thomas Becquevort (thbe), Gauthier Wala (gawa), Claire Bretton (clbr), Yosua Nicolaus, Dylan Kiss (dyki), Paolo Gatti, Antoine Boonen, Harsh Modi, Zeel Patel, Aurelien MARIE (auma), Sven Fuehr, kcv-odoo, Louis Gobert, hatr-odoo, Claire (clbr), Antoine Dupuis, Saif (segn), Victor Miguel Armenta Carrillo, Logan Staelens, roto-odoo, Anton Romanova (roan), Corentin Heinix (cohe), Allesio, Corentin Lombard, Krzysztof Magusiak (krma), dhruv, Ester Andreetto, bhra-odoo, Yassien Ghoniem, Jugurtha, igbe, Jeanne Delneste, Laurent Smet (LAS), adip-odoo, Jérôme Belpaire, Ashish Nirmal, GACI Jugurtha, Arnav Varshney, Zachary (zavan), Romaric MOYEUVRE, Jérémy Bazin (baje), Kyrillos, Cyril Moreau (cymo)
Odoo dependencies
Python dependencies
phonenumbers
System dependencies
None
Required by
account_peppol_response, l10n_hr_edi
Description
- Register as a PEPPOL participant
- Send and receive documents via PEPPOL network in Peppol BIS Billing 3.0 format
    

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
account_peppol_view_account_invoice_filter account.invoice.select.inherit account.move Inherits account.view_account_invoice_filter
account_peppol_view_move_form account.peppol.view.move.form account.move form Inherits account.view_move_form
account_peppol_view_out_credit_note_tree_inherit account.move.credit.note.list.inherit account.move list Inherits account.view_out_credit_note_tree
account_peppol_view_out_invoice_tree_inherit account.move.out.invoice.list.inherit account.move list Inherits account.view_out_invoice_tree
mail_notification_layout_with_responsible_signature_and_peppol Mail: mail notification layout with responsible signature (user_id of the record) and Peppol status ir.ui.view qweb Inherits mail.mail_notification_layout_with_responsible_signature
peppol_config_wizard_form peppol.config.wizard.form peppol.config.wizard form New
peppol_registration_form peppol.registration.form peppol.registration form New
portal_my_details portal_my_details ir.ui.view qweb Inherits portal.portal_my_details
res_config_settings_view_form res.config.settings.view.form.inherit.proxy.user res.config.settings form Inherits account.res_config_settings_view_form
res_partner_form_account_peppol res.partner.form.account.peppol res.partner form Inherits account_edi_ubl_cii.view_partner_property_form
HTTP endpoints (5)
Route(s)HandlerAuthTypeMethodsFlags
/peppol/authentication/callback PeppolAuthentication.peppol_authentication_callback user http GET sudo
/peppol/authentication/webhook PeppolAuthentication.peppol_authentication_webhook public http POST csrf off sudo
/peppol/webhook/message-state-update PeppolWebhookController.webhook_message_update public http POST csrf off sudo
/peppol/webhook/new-message PeppolWebhookController.webhook_new_message public http POST csrf off sudo
/peppol/webhook/user-state-update PeppolWebhookController.webhook_user_update public http POST csrf off sudo
Models touched (15)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • account_peppol_proxy_state Selection
    related='company_id.account_peppol_proxy_state'
  • is_peppol_journal Boolean
    default=False string='Account used for Peppol'
Public methods (2)
  • button_fetch_in_einvoices(self)
  • button_refresh_out_einvoices_status(self)

New fields (3)
  • peppol_is_sent Boolean
    compute='_compute_peppol_is_sent'
  • peppol_message_uuid Char
    copy=False index='btree_not_null' string='PEPPOL message ID'
  • peppol_move_state Selection
    compute='_compute_peppol_move_state' copy=False selection=[('ready', 'Ready to send'), ('to_send', 'Queued'), ('skipped', 'Skipped'), ('processing', 'Pending Reception'), ('done', 'Done'), ('error', 'Error')] store=True string='PEPPOL status'
Public methods (4)
  • action_cancel_peppol_documents(self)
  • action_peppol_cancel_and_remove_sequence(self)
  • action_peppol_reset_documents(self, ids_to_delete=None)
  • action_send_and_print(self)

New fields (0)

No new fields.

Public methods (1)
  • action_what_is_peppol_activate(self, moves)

New fields (0)

No new fields.

Public methods (1)
  • action_send_and_print(self, force_synchronous=False, allow_fallback_pdf=False)

New fields (0)

No new fields.

Public methods (1)
  • action_send_and_print(self, allow_fallback_pdf=False)

New fields (1)
  • proxy_type Selection
    ondelete={'peppol': 'cascade'} selection_add=[('peppol', 'PEPPOL')]
Public methods (0)

No public methods.

New fields (4)
  • document_identifier Char
  • document_name Char
  • enabled Boolean
  • wizard_id Many2one → peppol.config.wizard
    comodel_name='peppol.config.wizard'
Public methods (0)

No public methods.

New fields (11)
  • account_peppol_contact_email Char
    default=<expr> required=True
  • account_peppol_edi_identification Char
    related='account_peppol_edi_user.edi_identification'
  • account_peppol_edi_user Many2one
    related='company_id.account_peppol_edi_user'
  • account_peppol_migration_key Char
    readonly=False related='company_id.account_peppol_migration_key'
  • account_peppol_proxy_state Selection
    readonly=False related='company_id.account_peppol_proxy_state'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True
  • peppol_activate_self_billing Boolean
    compute='_compute_peppol_activate_self_billing' help='If activated, you will be able to send and receive self-billed invoices via Peppol.You can still disable reception by disabling the self-billing document types below.' inverse='_inverse_peppol_activate_self_billing' string='Activate self-billing'
  • peppol_self_billing_reception_journal_id Many2one
    readonly=False related='company_id.peppol_self_billing_reception_journal_id'
  • service_ids One2many → account_peppol.service
    comodel_name='account_peppol.service' compute='_compute_service_ids' inverse_name='wizard_id' readonly=False store=True
  • service_info Html
    compute='_compute_service_info'
  • service_json Json
    compute='_compute_service_json' help='JSON representation of peppol services as retrieved from the peppol server.' readonly=False store=True
Public methods (4)
  • button_peppol_register_sender_as_receiver(self)
    Reset the participant back to sender and unregister it from the SMP
  • button_peppol_reset_to_sender(self)
    Reset the participant back to sender and unregister it from the SMP
  • button_peppol_unregister(self)
    Unregister the user from Peppol network.
  • button_sync_form_with_peppol_proxy(self)
    Update the peppol contact email on IAP. Note: The service configuration is DEPRECATED / hidden in the view. Disabling services can lead to complicance issues and is not necessary since all existing services should just work.

New fields (24)
  • account_peppol_proxy_state Selection
    related='company_id.account_peppol_proxy_state'
  • active_parent_company Many2one
    related='parent_company_id' string='Active Parent Company'
  • active_parent_company_name Char
    related='parent_company_name' string='Active Parent Company Name'
  • can_use_parent_connection Boolean
    related='display_use_parent_connection_selection' string='Can Use Parent Connection'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True
  • contact_email Char
    readonly=False related='selected_company_id.account_peppol_contact_email' required=True
  • display_itsme_login Boolean
    compute='_compute_peppol_can_connect_data'
  • display_no_auth_buttons Boolean
    compute='_compute_peppol_can_connect_data'
  • display_use_parent_connection_selection Boolean
    compute='_compute_display_use_parent_connection_selection'
  • edi_mode Selection
    compute='_compute_edi_mode' selection=[('demo', 'Demo'), ('test', 'Test'), ('prod', 'Live')] string='EDI mode'
  • edi_user_id Many2one → account_edi_proxy_client.user
    comodel_name='account_edi_proxy_client.user' compute='_compute_edi_user_id' string='EDI user'
  • is_branch_company Boolean
    store=False
  • parent_company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_parent_company_id'
  • parent_company_name Char
    related='parent_company_id.name'
  • peppol_can_connect_data Json
    compute='_compute_peppol_can_connect_data'
  • peppol_eas Selection
    compute='_compute_peppol_eas' inverse='_inverse_peppol_eas' readonly=False required=True selection='_get_peppol_eas_selection' store=False
  • peppol_endpoint Char
    readonly=False related='selected_company_id.peppol_endpoint' required=True
  • peppol_external_provider Char
    compute='_compute_smp_registration_external_provider'
  • peppol_warnings Json
    compute='_compute_peppol_warnings' string='Peppol warnings'
  • phone_number Char
    readonly=False related='selected_company_id.account_peppol_phone_number'
  • selected_company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_selected_company_id'
  • smp_registration Boolean
    compute='_compute_smp_registration_external_provider' string='Register as a receiver'
  • use_parent_connection Boolean
    compute='_compute_use_parent_connection'
  • use_parent_connection_selection Selection
    compute='_compute_use_parent_connection_selection' readonly=False selection=[('use_parent', 'Send from parent company'), ('use_self', 'Register this company on peppol')] store=True
Public methods (2)
  • button_register_peppol_participant(self, selected_auth=None)
  • button_register_with_itsme(self)

New fields (15)
  • account_peppol_contact_email Char
    compute='_compute_account_peppol_contact_email' help='Primary contact email for Peppol connection related communications and notifications.\nIn particular, this email is used by Odoo to reconnect your Peppol account in case of database change.' readonly=False store=True string='Primary contact email'
  • account_peppol_edi_user Many2one → account_edi_proxy_client.user
    comodel_name='account_edi_proxy_client.user' compute='_compute_account_peppol_edi_user'
  • account_peppol_migration_key Char
    groups='base.group_system' string='Migration Key'
  • account_peppol_phone_number Char
    compute='_compute_account_peppol_phone_number' help='This number is used for identification purposes only.' readonly=False store=True string='Mobile number'
  • account_peppol_proxy_state Selection
    default='not_registered' required=True selection=[('not_registered', 'Not registered'), ('sender', 'Can send but not receive'), ('smp_registration', 'Can send, pending registration to receive'), ('receiver', 'Can send and receive'), ('rejected', 'Rejected')] string='PEPPOL status'
  • peppol_activate_self_billing_sending Boolean
    help='If activated, you will be able to send vendor bills as self-billed invoices via Peppol.' string='Activate self-billing sending'
  • peppol_can_send Boolean
    compute='_compute_peppol_can_send'
  • peppol_eas Selection
    readonly=False related='partner_id.peppol_eas'
  • peppol_endpoint Char
    readonly=False related='partner_id.peppol_endpoint'
  • peppol_external_provider Char
    tracking=True
  • peppol_metadata Json
    string='Peppol Metadata'
  • peppol_metadata_updated_at Datetime
    string='Peppol meta updated at'
  • peppol_parent_company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_peppol_parent_company_id'
  • peppol_purchase_journal_id Many2one → account.journal
    comodel_name='account.journal' compute='_compute_peppol_purchase_journal_id' domain=[('type', '=', 'purchase')] inverse='_inverse_peppol_purchase_journal_id' readonly=False store=True string='Peppol Purchase Journal'
  • peppol_self_billing_reception_journal_id Many2one → account.journal
    comodel_name='account.journal' compute='_compute_peppol_self_billing_reception_journal_id' domain=[('type', '=', 'sale')] help='Any self-billed invoices / credit notes received via Peppol will be created in draft in this journal. Defaults to the first sale journal.' inverse='_inverse_peppol_self_billing_reception_journal_id' readonly=False store=True string='Self-Billing reception journal'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (16)
  • account_is_token_out_of_sync Boolean
    readonly=False related='account_peppol_edi_user.is_token_out_of_sync'
  • account_peppol_contact_email Char
    compute='_compute_account_peppol_contact_email' inverse='_inverse_account_peppol_contact_email'
  • account_peppol_eas Selection
    readonly=False related='company_id.peppol_eas'
  • account_peppol_edi_identification Char
    related='account_peppol_edi_user.edi_identification'
  • account_peppol_edi_mode Selection
    related='account_peppol_edi_user.edi_mode'
  • account_peppol_edi_user Many2one
    related='company_id.account_peppol_edi_user'
  • account_peppol_endpoint Char
    readonly=False related='company_id.peppol_endpoint'
  • account_peppol_migration_key Char
    readonly=False related='company_id.account_peppol_migration_key'
  • account_peppol_phone_number Char
    readonly=False related='company_id.account_peppol_phone_number'
  • account_peppol_proxy_state Selection
    readonly=False related='company_id.account_peppol_proxy_state'
  • account_peppol_purchase_journal_id Many2one
    readonly=False related='company_id.peppol_purchase_journal_id'
  • peppol_external_provider Char
    readonly=False related='company_id.peppol_external_provider'
  • peppol_parent_company_name Char
    compute='_compute_peppol_use_parent_company'
  • peppol_participation_role Selection
    compute='_compute_peppol_participation_role' inverse='_inverse_peppol_participation_role' selection=[('sending_and_receiving', 'Sending & Receiving'), ('sending_only', 'Sending Only')]
  • peppol_purchase_journal_required Boolean
    compute='_compute_peppol_purchase_journal_required'
  • peppol_use_parent_company Boolean
    compute='_compute_peppol_use_parent_company'
Public methods (8)
  • action_open_peppol_form(self)
  • button_disconnect_this_database(self)
    Disconnect the current database from the Peppol network. This does not delete or affect the IAP connection, which will remain intact. So don't use this to deregister the participant/connection.
  • button_open_peppol_config_wizard(self)
  • button_peppol_deregister(self)
    Unregister the user from Peppol network.
  • button_peppol_disconnect_branch_from_parent(self)
  • button_peppol_register_sender_as_receiver(self)
    Register the existing user as a receiver.
  • button_peppol_reregister(self)
  • button_reconnect_this_database(self)
    Re-establish an out-of-sync connection

New fields (5)
  • available_peppol_edi_formats Json
    compute='_compute_available_peppol_edi_formats'
  • available_peppol_sending_methods Json
    compute='_compute_available_peppol_sending_methods'
  • invoice_sending_method Selection
    selection_add=[('peppol', 'by Peppol')]
  • peppol_eas Selection
    selection_add=[('odemo', 'Odoo Demo ID')]
  • peppol_verification_state Selection
    company_dependent=True selection=[('not_verified', 'Unchecked'), ('not_valid', 'Partner is not on Peppol'), ('not_valid_format', 'Partner cannot receive format'), ('valid', 'Partner is on Peppol')] string='Peppol status'
Public methods (2)
  • button_account_peppol_check_partner_endpoint(self, company=None)
    A basic check for whether a participant is reachable at the given Peppol participant ID - peppol_eas:peppol_endpoint (ex: '9999:test') The SML (Service Metadata Locator) assigns a DNS name to each peppol participant. This DNS name resolves into the SMP (Service Metadata Publisher) of the participant. The DNS address is of the following form: strip-trailing(base32(sha256(lowercase(ID-VALUE))),"=") + "." + ID-SCHEME + "." + SML-ZONE-NAME The lookup should be done on NAPTR DNS from 2025-11-01 (ref:https://peppol.helger.com/public/locale-en_US/menuitem-docs-doc-exchange)
  • create(self, vals_list)
    @api.model_create_multi

Loading…

Loading…

Loading…