Repository
OCA/l10n-france · module folder · Try on Runboat
Module version
1.2.0
Category
French Localization
Folder size
1.01 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/l10n-france
Last tracking update
2026-08-07 08:43:01
Authors
Akretion, Odoo Community Association (OCA)
Maintainers
Akretion, Odoo Community Association (OCA)
Committers
Alexis de Lattre, Florian da Costa, Weblate, OCA-git-bot, oca-ci, Olivier Bitsch
Odoo dependencies
Python dependencies
requests_oauthlib, python-stdnum
System dependencies
None
Required by
l10n_fr_chorus_facturx, l10n_fr_chorus_sale
Description
This is the base module for the support of [Chorus
Pro](https://chorus-pro.gouv.fr/), the electronic invoicing plateform of
the French administration. Chorus Pro specifications are available on
[Chorus Pro Community
website](https://communaute-chorus-pro.finances.gouv.fr/). All the
suppliers of the French administration must send their invoices through
Chorus Pro. To know more about Chorus and the obligation to send
electronic invoices to the French administration, read [the dedicated
page](https://www.economie.gouv.fr/entreprises/marches-publics-facture-electronique)
on the website of the Ministry of Economic Affairs.

To be able to generate an electronic invoice for Chorus, you need the
module *l10n_fr_chorus_factur-x* or *l10n_fr_chorus_ubl*.

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
account_invoice_chorus_send_form account.invoice.chorus.send form New
chorus_flow_form chorus.flow.form chorus.flow form New
chorus_flow_search chorus.flow.search chorus.flow search New
chorus_flow_tree chorus.flow.list chorus.flow list New
chorus_partner_service_form chorus.partner.service.form chorus.partner.service form New
chorus_partner_service_search chorus.partner.service.search chorus.partner.service search New
chorus_partner_service_tree chorus.partner.service.tree chorus.partner.service list New
res_config_settings_view_form chorus.account.res.settings.form res.config.settings form Inherits account.res_config_settings_view_form
view_account_invoice_filter Chorus groupby on Invoice search view account.move Inherits account.view_account_invoice_filter
view_invoice_tree account.move tree Inherits account.view_invoice_tree
view_move_form Chorus support on Customer Invoice form view account.move form Inherits account.view_move_form
view_partner_form chorus.res.partner.form res.partner form Inherits account.view_partner_property_form
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (7)

New fields (4)
  • chorus_invoice_format Selection
    related='company_id.fr_chorus_invoice_format'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • invoice_count Integer
    readonly=True string='Number of Invoices'
  • invoice_ids Many2many → account.move
    check_company=True readonly=True string='Invoices to Send' args: 'account.move'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • run(self)

New fields (7)
  • chorus_attachment_ids Many2many → ir.attachment
    check_company=True copy=False string='Chorus Attachments' args: 'ir.attachment', 'account_move_chorus_ir_attachment_rel'
  • chorus_flow_id Many2one → chorus.flow
    check_company=True copy=False readonly=True string='Chorus Flow' tracking=True args: 'chorus.flow'
  • chorus_identifier Integer
    copy=False readonly=True string='Chorus Invoice Identifier' tracking=True
  • chorus_service_code Char
    related='partner_id.fr_chorus_service_id.code' store=True string='Chorus Service Code'
  • chorus_status Char
    copy=False readonly=True string='Chorus Invoice Status' tracking=True
  • chorus_status_date Datetime
    copy=False readonly=True string='Last Chorus Invoice Status Update'
  • invoice_sending_method Selection
    related='commercial_partner_id.invoice_sending_method' store=True
Public methods (1)
  • chorus_update_invoice_status(self)
    Called by a button on the invoice or by cron

New fields (12)
  • attachment_id Many2one → ir.attachment
    check_company=True copy=False readonly=True string='File Sent to Chorus' args: 'ir.attachment'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • date Date
    copy=False readonly=True required=True args: 'Flow Date'
  • initial_invoice_ids Many2many → account.move
    check_company=True help='Invoices in the flow before potential rejections' readonly=True string='Initial Invoices' args: 'account.move', 'chorus_flow_initial_account_move_rel', 'chorus_flow_id', 'move_id'
  • invoice_identifiers Boolean
    compute='_compute_invoice_identifiers' readonly=True store=True
  • invoice_ids One2many → account.move
    help='Invoices in the flow after potential rejections' readonly=True string='Invoices' args: 'account.move', 'chorus_flow_id'
  • name Char
    copy=False readonly=True required=True args: 'Flow Ref'
  • notes Text
    copy=False readonly=True
  • status Char
    copy=False readonly=True string='Flow Status (raw value)'
  • status_date Datetime
    copy=False readonly=True string='Last Status Update'
  • status_display Char
    compute='_compute_status_display' store=True string='Flow Status'
  • syntax Selection
    copy=False readonly=True string='Flow Syntax' args: []
Public methods (4)
  • chorus_cron(self)
    @api.model
  • get_invoice_identifiers(self)
    Called by a button or cron
  • syntax_odoo2chorus(self)
    @api.model
  • update_flow_status(self)
    Called by a button on the flow or by cron

New fields (6)
  • active Boolean
    default=True
  • chorus_identifier Integer
    readonly=True
  • code Char
    required=True string='Service Code'
  • engagement_required Boolean
  • name Char
    required=True string='Service Name'
  • partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] ondelete='cascade' string='Customer' args: 'res.partner'
Public methods (1)
  • service_update(self)

New fields (6)
  • fr_chorus_api_login Char
    groups='base.group_system' string='Chorus Technical User Login'
  • fr_chorus_api_password Char
    groups='base.group_system' string='Chorus Technical User Password'
  • fr_chorus_check_commitment_number Boolean
    help="If enabled, Odoo will check the commitment number upon invoice validation. This commitment number must be set in the field 'Customer Reference' of the invoice. It will also check it upon sale order validation if the module l10n_fr_chorus_sale is installed." string='Check Commitment Numbers'
  • fr_chorus_expiry_remind_user_ids Many2many → res.users
    string='Users Receiving the Expiry Reminder' args: 'res.users', 'fr_chorus_api_expiry_remind_user_rel', 'company_id', 'user_id'
  • fr_chorus_invoice_format Selection
    string='Chorus Invoice Format' args: []
  • fr_chorus_pwd_expiry_date Date
    string='Chorus Technical User Password Expiry Date'
Public methods (2)
  • chorus_api_expiry_reminder_cron(self)
    @api.model
  • chorus_expiry_remind_user_list(self)

New fields (8)
  • fr_chorus_api_login Char
    readonly=False related='company_id.fr_chorus_api_login'
  • fr_chorus_api_password Char
    readonly=False related='company_id.fr_chorus_api_password'
  • fr_chorus_check_commitment_number Boolean
    readonly=False related='company_id.fr_chorus_check_commitment_number'
  • fr_chorus_expiry_remind_user_ids Many2many
    readonly=False related='company_id.fr_chorus_expiry_remind_user_ids'
  • fr_chorus_invoice_format Selection
    readonly=False related='company_id.fr_chorus_invoice_format'
  • fr_chorus_pwd_expiry_date Date
    readonly=False related='company_id.fr_chorus_pwd_expiry_date'
  • fr_chorus_qualif Boolean
    default=<expr> readonly=True string='Use Chorus Qualification Platform'
  • group_chorus_api Boolean
    help="If you select 'Use Chorus Pro API', it will add all users to the Chorus API group." implied_group='l10n_fr_chorus_account.group_chorus_api' string='Use Chorus Pro API'
Public methods (1)
  • fr_chorus_test_api(self)

New fields (6)
  • fr_chorus_identifier Integer
    readonly=True args: 'Chorus Identifier'
  • fr_chorus_required Selection
    compute='_compute_fr_chorus_required' readonly=False store=True string='Info Required for Chorus' tracking=True args: [('none', 'None'), ('service', 'Service'), ('engagement', 'Engagement'), ('service_or_engagement', 'Service or Engagement'), ('service_and_engagement', 'Service and Engagement')]
  • fr_chorus_service_count Integer
    compute='_compute_fr_chorus_service_count' readonly=True string='Number of Chorus Services'
  • fr_chorus_service_id Many2one → chorus.partner.service
    ondelete='restrict' string='Chorus Service' tracking=True args: 'chorus.partner.service'
  • fr_chorus_service_ids One2many → chorus.partner.service
    string='Chorus Services' args: 'chorus.partner.service', 'partner_id'
  • invoice_sending_method Selection
    ondelete={'fr_chorus': 'set null'} selection_add=[('fr_chorus', 'Chorus Pro')]
Public methods (5)
  • chorus_cron(self)
    @api.model
  • fr_chorus_identifier_and_required_button(self)
  • fr_chorus_identifier_get(self)
  • fr_chorus_required_get(self)
  • fr_chorus_services_get(self)

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…