EDI

edi
REPOSITORY
REPOSITORYOCA/edi
GIT
GIThttps://github.com/OCA/edi.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/edi/tree/13.0/edi
VERSION
VERSION 1.24.0
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE
COMMITTERS
COMMITTERSEnric Tobella, Lois Rilo, JordiMForgeFlow, oca-travis, OCA-git-bot, Simone Orsi, oca-ci, Alba Riera, Jaume Bernaus
WEBSITE
WEBSITEhttps://github.com/OCA/edi
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component_event
    - component
OCA/edi:
    - base_edi
OCA/queue:
    - queue_job
odoo/odoo:
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES pyyaml
cachetools
requests
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (16)
XML IDNameModelTypeStatus
assets_backend assets_backend ir.ui.view qweb Inherits web.assets_backend
edi_backend_type_view_form edi.backend.type form New
edi_backend_type_view_search edi.backend.type search New
edi_backend_type_view_tree edi.backend.type tree New
edi_backend_view_form edi.backend form New
edi_backend_view_search edi.backend search New
edi_backend_view_tree edi.backend tree New
edi_exchange_consumer_mixin_buttons edi_exchange_consumer_mixin_buttons ir.ui.view qweb New
edi_exchange_record_create_form_view edi.exchange.record.create.form (in edi) edi.exchange.record.create form New
edi_exchange_record_view_form edi.exchange.record form New
edi_exchange_record_view_search edi.exchange.record search New
edi_exchange_record_view_tree edi.exchange.record tree New
edi_exchange_type_view_form edi.exchange.type form New
edi_exchange_type_view_search edi.exchange.type search New
edi_exchange_type_view_tree edi.exchange.type tree New
message_edi_exchange_link message_edi_exchange_link ir.ui.view qweb New
Models touched (6)

New fields (4)
  • active Boolean
    default=True
  • backend_type_id Many2one → edi.backend.type
    comodel_name='edi.backend.type' ondelete='restrict' required=True string='EDI Backend type'
  • name Char
    required=True
  • output_sent_processed_auto Boolean
    help='\n Automatically set the record as processed after sending.\n Usecase: the web service you send the file to processes it on the fly.\n '
Public methods (7)
  • create_record(self, type_code, values)
    Create an exchange record for current backend. :param type_code: edi.exchange.type code :param values: edi.exchange.record values :return: edi.exchange.record record
  • exchange_create_ack_record(self, exchange_record)
  • exchange_generate(self, exchange_record, store=True, force=False, **kw)
    Generate output content for given exchange record. :param exchange_record: edi.exchange.record recordset :param store: store output on the record itself :param force: allow to re-genetate the content :param kw: keyword args to be propagated to output generate handler
  • exchange_process(self, exchange_record)
    Process an incoming document.
  • exchange_receive(self, exchange_record)
    Retrieve an incoming document.
  • exchange_record_model(self)
    @property
  • exchange_send(self, exchange_record)
    Send exchange file.

New fields (2)
  • code Char
    inverse='_inverse_code' required=True
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (4)
  • edi_auto_disabled Boolean
    help='When marked, EDI could be avoided' readonly=True
  • exchange_record_count Integer
    compute='_compute_exchange_record_count'
  • exchange_record_ids One2many → edi.exchange.record
    domain=<expr> inverse_name='res_id' args: 'edi.exchange.record'
  • has_expected_edi_configuration Boolean
    compute='_compute_expected_edi_configuration'
Public methods (4)
  • action_view_edi_records(self)
  • edi_create_exchange_record(self, exchange_type_id)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_edi_access(self, doc_ids, operation, model_name=False)
    @api.model
    Retrieve access policy. The behavior is similar to `mail.thread` and `mail.message` and it relies on the access rules defines on the related record. The behavior can be customized on the related model by defining `_edi_exchange_record_access`. By default `write`, otherwise the custom permission is returned.

New fields (20)
  • ack_exchange_id Many2one → edi.exchange.record
    comodel_name='edi.exchange.record' compute='_compute_ack_exchange_id' help='ACK for this exchange' store=True string='ACK exchange'
  • ack_expected Boolean
    compute='_compute_ack_expected'
  • ack_received_on Datetime
    related='ack_exchange_id.exchanged_on' string='ACK received on'
  • backend_id Many2one → edi.backend
    comodel_name='edi.backend' required=True
  • direction Selection
    related='type_id.direction'
  • edi_exchange_state Selection
    default='new' readonly=True selection=[('new', 'New'), ('validate_error', 'Error on validation'), ('output_pending', 'Waiting to be sent'), ('output_error_on_send', 'error on send'), ('output_sent', 'Sent'), ('output_sent_and_processed', 'Sent and processed'), ('output_sent_and_error', 'Sent and error'), ('input_pending', 'Waiting to be received'), ('input_received', 'Received'), ('input_receive_error', 'Error on reception'), ('input_processed', 'Processed'), ('input_processed_error', 'Error on process')] string='Exchange state'
  • exchange_error Text
    readonly=True string='Exchange error'
  • exchange_file Binary
    attachment=True
  • exchange_file_auto_generate Boolean
    related='type_id.exchange_file_auto_generate'
  • exchange_filename Char
    compute='_compute_exchange_filename' readonly=False store=True
  • exchanged_on Datetime
    compute='_compute_exchanged_on' help='Sent or received on this date.' readonly=False store=True string='Exchanged on'
  • external_identifier Char
    index=True readonly=True
  • identifier Char
    index=True readonly=True required=True
  • model Char
    index=True readonly=True required=False
  • name Char
    compute='_compute_name'
  • parent_id Many2one → edi.exchange.record
    comodel_name='edi.exchange.record' help='Original exchange which originated this record'
  • related_exchange_ids One2many → edi.exchange.record
    comodel_name='edi.exchange.record' inverse_name='parent_id' string='Related records'
  • res_id Many2oneReference
    index=True model_field='model' readonly=True required=False string='Record'
  • retryable Boolean
    compute='_compute_retryable' help='The record state can be rolled back manually in case of failure.'
  • type_id Many2one → edi.exchange.type
    auto_join=True comodel_name='edi.exchange.type' ondelete='cascade' required=True string='Exchange type'
Public methods (14)
  • action_exchange_generate(self)
  • action_exchange_process(self)
  • action_exchange_receive(self)
  • action_exchange_send(self)
  • action_open_related_exchanges(self)
  • action_open_related_record(self)
  • action_retry(self)
  • check_access_rule(self, operation)
    In order to check if we can access a record, we are checking if we can access the related document
  • create(self, vals)
    @api.model
  • name_get(self)
  • needs_ack(self)
  • read(self, fields=None, load='_classic_read')
    Override to explicitely call check_access_rule, that is not called by the ORM. It instead directly fetches ir.rules and apply them.
  • record(self)
    @property
  • write(self, vals)

New fields (5)
  • backend_id Many2one → edi.backend
    required=True args: 'edi.backend'
  • backend_type_id Many2one → edi.backend.type
    related='exchange_type_id.backend_type_id' args: 'edi.backend.type'
  • exchange_type_id Many2one → edi.exchange.type
    required=True args: 'edi.exchange.type'
  • model Char
    required=True
  • res_id Integer
    required=True
Public methods (1)
  • create_edi(self)

New fields (14)
  • ack_type_id Many2one → edi.exchange.type
    comodel_name='edi.exchange.type' help='Identify the type of the ack. If this field is valued it means an hack is expected.' ondelete='set null' string='Ack exchange type'
  • advanced_settings_edit Text
    help='\n Advanced technical settings as YAML format.\n The YAML structure should reproduce a dictionary.\n The backend might use these settings for automated operations.\n\n Currently supported conf:\n\n components:\n generate:\n usage: $comp_usage\n work_ctx:\n opt1: True\n validate:\n usage: $comp_usage\n check:\n usage: $comp_usage\n send:\n usage: $comp_usage\n receive:\n usage: $comp_usage\n process:\n usage: $comp_usage\n\n In any case, you can use these settings\n to provide your own configuration for whatever need you might have.\n ' string='Advanced YAML settings'
  • backend_id Many2one → edi.backend
    comodel_name='edi.backend' ondelete='set null' string='Backend'
  • backend_type_id Many2one → edi.backend.type
    comodel_name='edi.backend.type' ondelete='restrict' required=True string='Backend type'
  • code Char
    required=True
  • direction Selection
    required=True selection=[('input', 'Input'), ('output', 'Output')]
  • enable_domain Char
    help='Filter domain to be checked on Models' string='Enable on domain'
  • enable_snippet Char
    help='Snippet of code to be checked on Models,\n You can use `record` and `exchange_type` here.\n It will be executed if variable result has been defined as True\n ' string='Enable on snippet'
  • exchange_file_auto_generate Boolean
    help='Auto generate output for records missing their payload. If active, a cron will take care of generating the output when not set yet. '
  • exchange_file_ext Char
  • exchange_filename_pattern Char
    default='{record_name}-{type.code}-{dt}'
  • job_channel_id Many2one → queue.job.channel
    comodel_name='queue.job.channel'
  • model_ids Many2many → ir.model
    help='Modules to be checked for manual EDI generation' args: 'ir.model'
  • name Char
    required=True
Public methods (1)
  • get_settings(self)