TIP: You can type at any time to perform a new search.
Peppol
account_peppol · odoo/odoo
🛠 Migration considerations
- Raw `cr.execute()` INSERT/UPDATE/DELETE bypasses the ORM (no compute/constrains/tracking/mail): `UPDATE ir_attachment SET res_id = NULL WHERE id IN %s` - re-check the table/column names still match after upgrading. migration-raw-sql-write · source
Found by automated static analysis: patterns worth a look before/after upgrading this module to a newer Odoo version.
- 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 ID | Name | Model | Type | Status |
|---|---|---|---|---|
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) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/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_stateSelectionrelated='company_id.account_peppol_proxy_state' -
is_peppol_journalBooleandefault=Falsestring='Account used for Peppol'
-
button_fetch_in_einvoices(self) -
button_refresh_out_einvoices_status(self)
New fields (3)
-
peppol_is_sentBooleancompute='_compute_peppol_is_sent' -
peppol_message_uuidCharcopy=Falseindex='btree_not_null'string='PEPPOL message ID' -
peppol_move_stateSelectioncompute='_compute_peppol_move_state'copy=Falseselection=[('ready', 'Ready to send'), ('to_send', 'Queued'), ('skipped', 'Skipped'), ('processing', 'Pending Reception'), ('done', 'Done'), ('error', 'Error')]store=Truestring='PEPPOL status'
-
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_typeSelectionondelete={'peppol': 'cascade'}selection_add=[('peppol', 'PEPPOL')]
No public methods.
New fields (4)
-
document_identifierChar -
document_nameChar -
enabledBoolean -
wizard_idMany2one → peppol.config.wizardcomodel_name='peppol.config.wizard'
No public methods.
New fields (11)
-
account_peppol_contact_emailChardefault=<expr>required=True -
account_peppol_edi_identificationCharrelated='account_peppol_edi_user.edi_identification' -
account_peppol_edi_userMany2onerelated='company_id.account_peppol_edi_user' -
account_peppol_migration_keyCharreadonly=Falserelated='company_id.account_peppol_migration_key' -
account_peppol_proxy_stateSelectionreadonly=Falserelated='company_id.account_peppol_proxy_state' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>required=True -
peppol_activate_self_billingBooleancompute='_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_idMany2onereadonly=Falserelated='company_id.peppol_self_billing_reception_journal_id' -
service_idsOne2many → account_peppol.servicecomodel_name='account_peppol.service'compute='_compute_service_ids'inverse_name='wizard_id'readonly=Falsestore=True -
service_infoHtmlcompute='_compute_service_info' -
service_jsonJsoncompute='_compute_service_json'help='JSON representation of peppol services as retrieved from the peppol server.'readonly=Falsestore=True
-
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_stateSelectionrelated='company_id.account_peppol_proxy_state' -
active_parent_companyMany2onerelated='parent_company_id'string='Active Parent Company' -
active_parent_company_nameCharrelated='parent_company_name'string='Active Parent Company Name' -
can_use_parent_connectionBooleanrelated='display_use_parent_connection_selection'string='Can Use Parent Connection' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>required=True -
contact_emailCharreadonly=Falserelated='selected_company_id.account_peppol_contact_email'required=True -
display_itsme_loginBooleancompute='_compute_peppol_can_connect_data' -
display_no_auth_buttonsBooleancompute='_compute_peppol_can_connect_data' -
display_use_parent_connection_selectionBooleancompute='_compute_display_use_parent_connection_selection' -
edi_modeSelectioncompute='_compute_edi_mode'selection=[('demo', 'Demo'), ('test', 'Test'), ('prod', 'Live')]string='EDI mode' -
edi_user_idMany2one → account_edi_proxy_client.usercomodel_name='account_edi_proxy_client.user'compute='_compute_edi_user_id'string='EDI user' -
is_branch_companyBooleanstore=False -
parent_company_idMany2one → res.companycomodel_name='res.company'compute='_compute_parent_company_id' -
parent_company_nameCharrelated='parent_company_id.name' -
peppol_can_connect_dataJsoncompute='_compute_peppol_can_connect_data' -
peppol_easSelectioncompute='_compute_peppol_eas'inverse='_inverse_peppol_eas'readonly=Falserequired=Trueselection='_get_peppol_eas_selection'store=False -
peppol_endpointCharreadonly=Falserelated='selected_company_id.peppol_endpoint'required=True -
peppol_external_providerCharcompute='_compute_smp_registration_external_provider' -
peppol_warningsJsoncompute='_compute_peppol_warnings'string='Peppol warnings' -
phone_numberCharreadonly=Falserelated='selected_company_id.account_peppol_phone_number' -
selected_company_idMany2one → res.companycomodel_name='res.company'compute='_compute_selected_company_id' -
smp_registrationBooleancompute='_compute_smp_registration_external_provider'string='Register as a receiver' -
use_parent_connectionBooleancompute='_compute_use_parent_connection' -
use_parent_connection_selectionSelectioncompute='_compute_use_parent_connection_selection'readonly=Falseselection=[('use_parent', 'Send from parent company'), ('use_self', 'Register this company on peppol')]store=True
-
button_register_peppol_participant(self, selected_auth=None) -
button_register_with_itsme(self)
New fields (15)
-
account_peppol_contact_emailCharcompute='_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=Falsestore=Truestring='Primary contact email' -
account_peppol_edi_userMany2one → account_edi_proxy_client.usercomodel_name='account_edi_proxy_client.user'compute='_compute_account_peppol_edi_user' -
account_peppol_migration_keyChargroups='base.group_system'string='Migration Key' -
account_peppol_phone_numberCharcompute='_compute_account_peppol_phone_number'help='This number is used for identification purposes only.'readonly=Falsestore=Truestring='Mobile number' -
account_peppol_proxy_stateSelectiondefault='not_registered'required=Trueselection=[('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_sendingBooleanhelp='If activated, you will be able to send vendor bills as self-billed invoices via Peppol.'string='Activate self-billing sending' -
peppol_can_sendBooleancompute='_compute_peppol_can_send' -
peppol_easSelectionreadonly=Falserelated='partner_id.peppol_eas' -
peppol_endpointCharreadonly=Falserelated='partner_id.peppol_endpoint' -
peppol_external_providerChartracking=True -
peppol_metadataJsonstring='Peppol Metadata' -
peppol_metadata_updated_atDatetimestring='Peppol meta updated at' -
peppol_parent_company_idMany2one → res.companycomodel_name='res.company'compute='_compute_peppol_parent_company_id' -
peppol_purchase_journal_idMany2one → account.journalcomodel_name='account.journal'compute='_compute_peppol_purchase_journal_id'domain=[('type', '=', 'purchase')]inverse='_inverse_peppol_purchase_journal_id'readonly=Falsestore=Truestring='Peppol Purchase Journal' -
peppol_self_billing_reception_journal_idMany2one → account.journalcomodel_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=Falsestore=Truestring='Self-Billing reception journal'
-
create(self, vals_list)@api.model_create_multi -
write(self, vals)
New fields (16)
-
account_is_token_out_of_syncBooleanreadonly=Falserelated='account_peppol_edi_user.is_token_out_of_sync' -
account_peppol_contact_emailCharcompute='_compute_account_peppol_contact_email'inverse='_inverse_account_peppol_contact_email' -
account_peppol_easSelectionreadonly=Falserelated='company_id.peppol_eas' -
account_peppol_edi_identificationCharrelated='account_peppol_edi_user.edi_identification' -
account_peppol_edi_modeSelectionrelated='account_peppol_edi_user.edi_mode' -
account_peppol_edi_userMany2onerelated='company_id.account_peppol_edi_user' -
account_peppol_endpointCharreadonly=Falserelated='company_id.peppol_endpoint' -
account_peppol_migration_keyCharreadonly=Falserelated='company_id.account_peppol_migration_key' -
account_peppol_phone_numberCharreadonly=Falserelated='company_id.account_peppol_phone_number' -
account_peppol_proxy_stateSelectionreadonly=Falserelated='company_id.account_peppol_proxy_state' -
account_peppol_purchase_journal_idMany2onereadonly=Falserelated='company_id.peppol_purchase_journal_id' -
peppol_external_providerCharreadonly=Falserelated='company_id.peppol_external_provider' -
peppol_parent_company_nameCharcompute='_compute_peppol_use_parent_company' -
peppol_participation_roleSelectioncompute='_compute_peppol_participation_role'inverse='_inverse_peppol_participation_role'selection=[('sending_and_receiving', 'Sending & Receiving'), ('sending_only', 'Sending Only')] -
peppol_purchase_journal_requiredBooleancompute='_compute_peppol_purchase_journal_required' -
peppol_use_parent_companyBooleancompute='_compute_peppol_use_parent_company'
-
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_formatsJsoncompute='_compute_available_peppol_edi_formats' -
available_peppol_sending_methodsJsoncompute='_compute_available_peppol_sending_methods' -
invoice_sending_methodSelectionselection_add=[('peppol', 'by Peppol')] -
peppol_easSelectionselection_add=[('odemo', 'Odoo Demo ID')] -
peppol_verification_stateSelectioncompany_dependent=Trueselection=[('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'
-
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…