Egypt E-Invoicing

l10n_eg_edi_eta
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/l10n_eg_edi_eta
VERSION
VERSION 0.2
CATEGORY
CATEGORYaccount
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A., Plementus
MAINTAINERS
MAINTAINERSOdoo S.A., Plementus
COMMITTERS
COMMITTERSOdoo Translation Bot, Josse Colpaert, Xavier Morel, Laurent Smet, Julien Castiaux, Andrea Grazioso (agr-odoo), Gorash, Mathieu Duckerts-Antoine, odoo, william-andre, Mathieu Walravens, alsh-odoo, Gaetan Vanden Bergh (gavb), Gauthier Wala (gawa), Ali Alfie (alal), Dylan Kiss (dyki), Sven Fuehr, Louis Gobert, thle-odoo, Yousef Alnashef (alny), Antoine Dupuis, Saif (segn), Ahmed Abdelaziz Hasaneen, Mohammad Abdulmoneim (abdu), Michaël Mattiello, Krzysztof Magusiak (krma), sawer
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_eg
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES asn1crypto
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Egypt Tax Authority Invoice Integration
==============================================================================
Integrates with the ETA portal to automatically send and sign the Invoices to the Tax Authority.
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
eg_partner_address_form eg.partner.form.address res.partner form New
egyptian_invoice egyptian_invoice ir.ui.view qweb Inherits account.report_invoice_document
product_normal_form_view_inherit_l10n_eg_eta_edi product.product.form.l10n_eg_eta_edi product.product page Inherits product.product_normal_form_view
product_template_only_form_view_inherit_l10n_eg_eta_edi product.template.form.l10n_eg_eta_edi product.template page Inherits product.product_template_only_form_view
product_uom_form_view_inherit product_uom_form_view_inherit uom.uom xpath Inherits uom.product_uom_form_view
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_eg_edi_eta res.config.settings xpath Inherits account.res_config_settings_view_form
view_account_journal_form_inherit_l10n_eg_edi account.journal.form.inherit.l10n_eg_edi account.journal xpath Inherits account.view_account_journal_form
view_l10n_eg_edi_thumb_drive_tree view_l10n_eg_edi_thumb_drive_tree l10n_eg_edi.thumb.drive list New
view_move_form_inherit view_move_form_inherit account.move xpath Inherits account.view_move_form
Models touched (13)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • l10n_eg_activity_type_id Many2one → l10n_eg_edi.activity.type
    copy=False help='This is the activity type of the branch according to Egyptian Tax Authority' args: 'l10n_eg_edi.activity.type', 'ETA Activity Code'
  • l10n_eg_branch_id Many2one → res.partner
    copy=False help='Address of the subdivision of the company. You can just put the company partner if this is used for the main branch.' string='Branch' args: 'res.partner'
  • l10n_eg_branch_identifier Char
    copy=False help='This number can be found on the taxpayer profile on the eInvoicing portal. ' args: 'ETA Branch ID'
Public methods (0)

No public methods.

New fields (7)
  • l10n_eg_eta_json_doc_file Binary
    attachment=True copy=False string='ETA JSON Document'
  • l10n_eg_is_signed Boolean
    copy=False
  • l10n_eg_long_id Char
    compute='_compute_eta_long_id' string='ETA Long ID'
  • l10n_eg_qr_code Char
    compute='_compute_eta_qr_code_str' string='ETA QR Code'
  • l10n_eg_signing_time Datetime
    copy=False args: 'Signing Time'
  • l10n_eg_submission_number Char
    compute='_compute_eta_response_data' copy=False store=True string='Submission ID'
  • l10n_eg_uuid Char
    compute='_compute_eta_response_data' copy=False store=True string='Document UUID'
Public methods (3)
  • action_get_eta_invoice_pdf(self)
    This is a pdf with the structure from the government. While we can use our own format, some clients appreciate this to verify that all the data is there in case of confusion.
  • action_post_sign_invoices(self)
  • button_draft(self)

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (5)
  • access_token Char
    required=True
  • certificate Binary
    args: 'ETA Certificate'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • pin Char
    required=True args: 'ETA USB Pin'
  • user_id Many2one → res.users
    default=<expr> required=True args: 'res.users'
Public methods (4)
  • action_set_certificate_from_usb(self)
  • action_sign_invoices(self, invoice_ids)
  • set_certificate(self, certificate)
    This is called from the browser to set the certificate
  • set_signature_data(self, invoices)
    This is called from the browser with the signed data from the local server

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    copy=False help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty. ' args: 'ETA Code'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    compute='_compute_l10n_eg_eta_code' help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty.' inverse='_set_l10n_eg_eta_code' args: 'ETA Item code'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (4)
  • l10n_eg_client_identifier Char
    groups='base.group_erp_manager' args: 'ETA Client ID'
  • l10n_eg_client_secret Char
    groups='base.group_erp_manager' args: 'ETA Secret'
  • l10n_eg_invoicing_threshold Float
    default=0.0 help='Threshold at which you are required to give the VAT number of the customer. ' args: 'Invoicing Threshold'
  • l10n_eg_production_env Boolean
    args: 'In Production Environment'
Public methods (0)

No public methods.

New fields (4)
  • l10n_eg_client_identifier Char
    readonly=False related='company_id.l10n_eg_client_identifier'
  • l10n_eg_client_secret Char
    readonly=False related='company_id.l10n_eg_client_secret'
  • l10n_eg_invoicing_threshold Float
    readonly=False related='company_id.l10n_eg_invoicing_threshold'
  • l10n_eg_production_env Boolean
    readonly=False related='company_id.l10n_eg_production_env'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_building_no Char
    args: 'Building No.'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_unit_code_id Many2one → l10n_eg_edi.uom.code
    help='This is the type of unit according to egyptian tax authority' string='ETA Unit Code' args: 'l10n_eg_edi.uom.code'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/l10n_eg_edi_eta
VERSION
VERSION 0.2
CATEGORY
CATEGORYaccount
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A., Plementus
MAINTAINERS
MAINTAINERSOdoo S.A., Plementus
COMMITTERS
COMMITTERSOdoo Translation Bot, Xavier Morel, Laurent Smet, Christophe Monniez, Julien Castiaux, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), Gorash, odoo, Mathieu Walravens, alsh-odoo, Thomas Becquevort (thbe), Gauthier Wala (gawa), Ali Alfie (alal), Antoine Boonen, Dylan Kiss (dyki), hupo-odoo, Mattis Megevand (mmeg), Sven Fuehr, adsh-odoo, Louis Gobert, Louis (wil), Yousef Alnashef (alny), Antoine Dupuis, Ahmed Abdelaziz Hasaneen, kusi-odoo, Krzysztof Magusiak (krma), sawer, khom-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi
    - 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_eg
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES asn1crypto
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Egypt Tax Authority Invoice Integration
==============================================================================
Integrates with the ETA portal to automatically send and sign the Invoices to the Tax Authority.
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
eg_partner_address_form eg.partner.form.address res.partner form New
egyptian_invoice egyptian_invoice ir.ui.view qweb Inherits account.report_invoice_document
product_normal_form_view_inherit_l10n_eg_eta_edi product.product.form.l10n_eg_eta_edi product.product page Inherits product.product_normal_form_view
product_template_only_form_view_inherit_l10n_eg_eta_edi product.template.form.l10n_eg_eta_edi product.template page Inherits product.product_template_only_form_view
product_uom_form_view_inherit product_uom_form_view_inherit uom.uom xpath Inherits uom.product_uom_form_view
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_eg_edi_eta res.config.settings xpath Inherits account.res_config_settings_view_form
view_account_journal_form_inherit_l10n_eg_edi account.journal.form.inherit.l10n_eg_edi account.journal xpath Inherits account.view_account_journal_form
view_l10n_eg_edi_thumb_drive_tree view_l10n_eg_edi_thumb_drive_tree l10n_eg_edi.thumb.drive list New
view_move_form_inherit view_move_form_inherit account.move xpath Inherits account.view_move_form
Models touched (13)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • l10n_eg_activity_type_id Many2one → l10n_eg_edi.activity.type
    copy=False help='This is the activity type of the branch according to Egyptian Tax Authority' args: 'l10n_eg_edi.activity.type', 'ETA Activity Code'
  • l10n_eg_branch_id Many2one → res.partner
    copy=False help='Address of the subdivision of the company. You can just put the company partner if this is used for the main branch.' string='Branch' args: 'res.partner'
  • l10n_eg_branch_identifier Char
    copy=False help='This number can be found on the taxpayer profile on the eInvoicing portal. ' args: 'ETA Branch ID'
Public methods (0)

No public methods.

New fields (7)
  • l10n_eg_eta_json_doc_id Many2one → ir.attachment
    copy=False args: 'ir.attachment'
  • l10n_eg_is_signed Boolean
    copy=False
  • l10n_eg_long_id Char
    compute='_compute_eta_long_id' string='ETA Long ID'
  • l10n_eg_qr_code Char
    compute='_compute_eta_qr_code_str' string='ETA QR Code'
  • l10n_eg_signing_time Datetime
    copy=False args: 'Signing Time'
  • l10n_eg_submission_number Char
    compute='_compute_eta_response_data' copy=False store=True string='Submission ID'
  • l10n_eg_uuid Char
    compute='_compute_eta_response_data' copy=False store=True string='Document UUID'
Public methods (3)
  • action_get_eta_invoice_pdf(self)
    This is a pdf with the structure from the government. While we can use our own format, some clients appreciate this to verify that all the data is there in case of confusion.
  • action_post_sign_invoices(self)
  • button_draft(self)

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (5)
  • access_token Char
    required=True
  • certificate Binary
    args: 'ETA Certificate'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • pin Char
    required=True args: 'ETA USB Pin'
  • user_id Many2one → res.users
    default=<expr> required=True args: 'res.users'
Public methods (4)
  • action_set_certificate_from_usb(self)
  • action_sign_invoices(self, invoice_ids)
  • set_certificate(self, certificate)
    This is called from the browser to set the certificate
  • set_signature_data(self, invoices)
    This is called from the browser with the signed data from the local server

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    copy=False help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty. ' args: 'ETA Code'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    compute='_compute_l10n_eg_eta_code' help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty.' inverse='_set_l10n_eg_eta_code' args: 'ETA Item code'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (4)
  • l10n_eg_client_identifier Char
    groups='base.group_erp_manager' args: 'ETA Client ID'
  • l10n_eg_client_secret Char
    groups='base.group_erp_manager' args: 'ETA Secret'
  • l10n_eg_invoicing_threshold Float
    default=0.0 help='Threshold at which you are required to give the VAT number of the customer. ' args: 'Invoicing Threshold'
  • l10n_eg_production_env Boolean
    args: 'In Production Environment'
Public methods (0)

No public methods.

New fields (4)
  • l10n_eg_client_identifier Char
    readonly=False related='company_id.l10n_eg_client_identifier'
  • l10n_eg_client_secret Char
    readonly=False related='company_id.l10n_eg_client_secret'
  • l10n_eg_invoicing_threshold Float
    readonly=False related='company_id.l10n_eg_invoicing_threshold'
  • l10n_eg_production_env Boolean
    readonly=False related='company_id.l10n_eg_production_env'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_building_no Char
    args: 'Building No.'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_unit_code_id Many2one → l10n_eg_edi.uom.code
    help='This is the type of unit according to egyptian tax authority' string='ETA Unit Code' args: 'l10n_eg_edi.uom.code'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/l10n_eg_edi_eta
VERSION
VERSION 0.2
CATEGORY
CATEGORYaccount
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A., Plementus
MAINTAINERS
MAINTAINERSOdoo S.A., Plementus
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Josse Colpaert, Fabien Meghazi, Xavier Morel, Nicolas Lempereur, Laurent Smet, Jorge Pinna Puissant, Julien Castiaux, Xavier-Do, Victor Feyens, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), Rémy Voet (ryv), Gorash, momegahed, Ricardo Gomes Rodrigues (rigr), william-andre, Julien Van Roy, bat-odoo, Thomas Beckers, Mathieu Walravens, Achraf, niyasraphy, baa, alsh-odoo, Louis Wicket (wil), Ali Alfie (alal), Saurabh Mishra, Claire Bretton (clbr), Antoine Boonen, Dylan Kiss (dyki), hupo-odoo, FrancoisGe, Mattis Megevand (mmeg), adsh-odoo, Yousef Alnashef (alny), Ahmed Abdelaziz Hasaneen, Pierre Pulinckx (pipu), sawer
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_eg
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES asn1crypto
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Egypt Tax Authority Invoice Integration
==============================================================================
Integrates with the ETA portal to automatically send and sign the Invoices to the Tax Authority.
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
eg_partner_address_form eg.partner.form.address res.partner form New
egyptian_invoice egyptian_invoice ir.ui.view qweb Inherits account.report_invoice_document
product_normal_form_view_inherit_l10n_eg_eta_edi product.product.form.l10n_eg_eta_edi product.product page Inherits product.product_normal_form_view
product_template_only_form_view_inherit_l10n_eg_eta_edi product.template.form.l10n_eg_eta_edi product.template page Inherits product.product_template_only_form_view
product_uom_form_view_inherit product_uom_form_view_inherit uom.uom xpath Inherits uom.product_uom_form_view
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_eg_edi_eta res.config.settings xpath Inherits account.res_config_settings_view_form
view_account_journal_form_inherit_l10n_eg_edi account.journal.form.inherit.l10n_eg_edi account.journal xpath Inherits account.view_account_journal_form
view_l10n_eg_edi_thumb_drive_tree view_l10n_eg_edi_thumb_drive_tree l10n_eg_edi.thumb.drive tree New
view_move_form_inherit view_move_form_inherit account.move xpath Inherits account.view_move_form
Models touched (13)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • l10n_eg_activity_type_id Many2one → l10n_eg_edi.activity.type
    copy=False help='This is the activity type of the branch according to Egyptian Tax Authority' args: 'l10n_eg_edi.activity.type', 'ETA Activity Code'
  • l10n_eg_branch_id Many2one → res.partner
    copy=False help='Address of the subdivision of the company. You can just put the company partner if this is used for the main branch.' string='Branch' args: 'res.partner'
  • l10n_eg_branch_identifier Char
    copy=False help='This number can be found on the taxpayer profile on the eInvoicing portal. ' args: 'ETA Branch ID'
Public methods (0)

No public methods.

New fields (7)
  • l10n_eg_eta_json_doc_id Many2one → ir.attachment
    copy=False args: 'ir.attachment'
  • l10n_eg_is_signed Boolean
    copy=False
  • l10n_eg_long_id Char
    compute='_compute_eta_long_id' string='ETA Long ID'
  • l10n_eg_qr_code Char
    compute='_compute_eta_qr_code_str' string='ETA QR Code'
  • l10n_eg_signing_time Datetime
    copy=False args: 'Signing Time'
  • l10n_eg_submission_number Char
    compute='_compute_eta_response_data' copy=False store=True string='Submission ID'
  • l10n_eg_uuid Char
    compute='_compute_eta_response_data' copy=False store=True string='Document UUID'
Public methods (3)
  • action_get_eta_invoice_pdf(self)
    This is a pdf with the structure from the government. While we can use our own format, some clients appreciate this to verify that all the data is there in case of confusion.
  • action_post_sign_invoices(self)
  • button_draft(self)

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (5)
  • access_token Char
    required=True
  • certificate Binary
    args: 'ETA Certificate'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • pin Char
    required=True args: 'ETA USB Pin'
  • user_id Many2one → res.users
    default=<expr> required=True args: 'res.users'
Public methods (4)
  • action_set_certificate_from_usb(self)
  • action_sign_invoices(self, invoice_ids)
  • set_certificate(self, certificate)
    This is called from the browser to set the certificate
  • set_signature_data(self, invoices)
    This is called from the browser with the signed data from the local server

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    copy=False help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty. ' args: 'ETA Code'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    compute='_compute_l10n_eg_eta_code' help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty.' inverse='_set_l10n_eg_eta_code' args: 'ETA Item code'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (4)
  • l10n_eg_client_identifier Char
    groups='base.group_erp_manager' args: 'ETA Client ID'
  • l10n_eg_client_secret Char
    groups='base.group_erp_manager' args: 'ETA Secret'
  • l10n_eg_invoicing_threshold Float
    default=0.0 help='Threshold at which you are required to give the VAT number of the customer. ' args: 'Invoicing Threshold'
  • l10n_eg_production_env Boolean
    args: 'In Production Environment'
Public methods (0)

No public methods.

New fields (4)
  • l10n_eg_client_identifier Char
    readonly=False related='company_id.l10n_eg_client_identifier'
  • l10n_eg_client_secret Char
    readonly=False related='company_id.l10n_eg_client_secret'
  • l10n_eg_invoicing_threshold Float
    readonly=False related='company_id.l10n_eg_invoicing_threshold'
  • l10n_eg_production_env Boolean
    readonly=False related='company_id.l10n_eg_production_env'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_building_no Char
    args: 'Building No.'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_unit_code_id Many2one → l10n_eg_edi.uom.code
    help='This is the type of unit according to egyptian tax authority' string='ETA Unit Code' args: 'l10n_eg_edi.uom.code'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/l10n_eg_edi_eta
VERSION
VERSION 0.2
CATEGORY
CATEGORYaccount
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A., Plementus
MAINTAINERS
MAINTAINERSOdoo S.A., Plementus
COMMITTERS
COMMITTERSRaphael Collet, Josse Colpaert, Fabien Meghazi, Xavier Morel, Nicolas Lempereur, Laurent Smet, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), Alvaro Fuentes, momegahed, william-andre, Julien Van Roy, Thomas Beckers, Mathieu Walravens, Achraf, baa, alsh-odoo, Ali Alfie (alal), Saurabh Mishra, Claire Bretton (clbr), Antoine Boonen, hupo-odoo, akr, Mattis Megevand (mmeg), Yousef Alnashef (alny)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_eg
    - l10n_multilang
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES asn1crypto
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Egypt Tax Authority Invoice Integration
==============================================================================
Integrates with the ETA portal to automatically send and sign the Invoices to the Tax Authority.
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
eg_partner_address_form eg.partner.form.address res.partner form New
egyptian_invoice egyptian_invoice ir.ui.view qweb Inherits account.report_invoice_document
product_normal_form_view_inherit_l10n_eg_eta_edi product.product.form.l10n_eg_eta_edi product.product page Inherits product.product_normal_form_view
product_template_only_form_view_inherit_l10n_eg_eta_edi product.template.form.l10n_eg_eta_edi product.template page Inherits product.product_template_only_form_view
product_uom_form_view_inherit product_uom_form_view_inherit uom.uom xpath Inherits uom.product_uom_form_view
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_eg_edi_eta res.config.settings xpath Inherits account.res_config_settings_view_form
view_account_journal_form_inherit_l10n_eg_edi account.journal.form.inherit.l10n_eg_edi account.journal xpath Inherits account.view_account_journal_form
view_l10n_eg_edi_thumb_drive_tree view_l10n_eg_edi_thumb_drive_tree l10n_eg_edi.thumb.drive tree New
view_move_form_inherit view_move_form_inherit account.move xpath Inherits account.view_move_form
Models touched (13)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • l10n_eg_activity_type_id Many2one → l10n_eg_edi.activity.type
    copy=False help='This is the activity type of the branch according to Egyptian Tax Authority' args: 'l10n_eg_edi.activity.type', 'ETA Activity Code'
  • l10n_eg_branch_id Many2one → res.partner
    copy=False help='Address of the subdivision of the company. You can just put the company partner if this is used for the main branch.' string='Branch' args: 'res.partner'
  • l10n_eg_branch_identifier Char
    copy=False help='This number can be found on the taxpayer profile on the eInvoicing portal. ' args: 'ETA Branch ID'
Public methods (0)

No public methods.

New fields (7)
  • l10n_eg_eta_json_doc_id Many2one → ir.attachment
    copy=False args: 'ir.attachment'
  • l10n_eg_is_signed Boolean
    copy=False
  • l10n_eg_long_id Char
    compute='_compute_eta_long_id' string='ETA Long ID'
  • l10n_eg_qr_code Char
    compute='_compute_eta_qr_code_str' string='ETA QR Code'
  • l10n_eg_signing_time Datetime
    copy=False args: 'Signing Time'
  • l10n_eg_submission_number Char
    compute='_compute_eta_response_data' copy=False store=True string='Submission ID'
  • l10n_eg_uuid Char
    compute='_compute_eta_response_data' copy=False store=True string='Document UUID'
Public methods (3)
  • action_get_eta_invoice_pdf(self)
    This is a pdf with the structure from the government. While we can use our own format, some clients appreciate this to verify that all the data is there in case of confusion.
  • action_post_sign_invoices(self)
  • button_draft(self)

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (5)
  • access_token Char
    required=True
  • certificate Binary
    args: 'ETA Certificate'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • pin Char
    required=True args: 'ETA USB Pin'
  • user_id Many2one → res.users
    default=<expr> required=True args: 'res.users'
Public methods (4)
  • action_set_certificate_from_usb(self)
  • action_sign_invoices(self, invoice_ids)
  • set_certificate(self, certificate)
    This is called from the browser to set the certificate
  • set_signature_data(self, invoices)
    This is called from the browser with the signed data from the local server

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    copy=False help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty. ' args: 'ETA Code'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    compute='_compute_l10n_eg_eta_code' help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty.' inverse='_set_l10n_eg_eta_code' args: 'ETA Item code'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (4)
  • l10n_eg_client_identifier Char
    groups='base.group_erp_manager' args: 'ETA Client ID'
  • l10n_eg_client_secret Char
    groups='base.group_erp_manager' args: 'ETA Secret'
  • l10n_eg_invoicing_threshold Float
    default=0.0 help='Threshold at which you are required to give the VAT number of the customer. ' args: 'Invoicing Threshold'
  • l10n_eg_production_env Boolean
    args: 'In Production Environment'
Public methods (0)

No public methods.

New fields (4)
  • l10n_eg_client_identifier Char
    readonly=False related='company_id.l10n_eg_client_identifier'
  • l10n_eg_client_secret Char
    readonly=False related='company_id.l10n_eg_client_secret'
  • l10n_eg_invoicing_threshold Float
    readonly=False related='company_id.l10n_eg_invoicing_threshold'
  • l10n_eg_production_env Boolean
    readonly=False related='company_id.l10n_eg_production_env'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_building_no Char
    args: 'Building No.'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_unit_code_id Many2one → l10n_eg_edi.uom.code
    help='This is the type of unit according to egyptian tax authority' string='ETA Unit Code' args: 'l10n_eg_edi.uom.code'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/l10n_eg_edi_eta
VERSION
VERSION 0.2
CATEGORY
CATEGORYaccount
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSodoo
MAINTAINERS
MAINTAINERSodoo
COMMITTERS
COMMITTERSOdoo Translation Bot, Josse Colpaert, Nicolas Lempereur, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), momegahed, Thomas Beckers, baa, Saurabh Mishra, Antoine Boonen, hupo-odoo, akr, Mattis Megevand (mmeg), sod-odoo
WEBSITE
WEBSITEhttps://www.odoo.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_eg
    - l10n_multilang
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES asn1crypto
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
       This module integrate with the ETA Portal to automatically sign and send your invoices to the tax Authority.
       Special thanks to Plementus <info@plementus.com> for their help in developing this module.
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
eg_partner_address_form eg.partner.form.address res.partner form New
egyptian_invoice egyptian_invoice ir.ui.view qweb Inherits account.report_invoice_document
product_normal_form_view_inherit_l10n_eg_eta_edi product.product.form.l10n_eg_eta_edi product.product page Inherits product.product_normal_form_view
product_template_only_form_view_inherit_l10n_eg_eta_edi product.template.form.l10n_eg_eta_edi product.template page Inherits product.product_template_only_form_view
product_uom_form_view_inherit product_uom_form_view_inherit uom.uom xpath Inherits uom.product_uom_form_view
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_eg_edi_eta res.config.settings xpath Inherits account.res_config_settings_view_form
view_account_journal_form_inherit_l10n_eg_edi account.journal.form.inherit.l10n_eg_edi account.journal xpath Inherits account.view_account_journal_form
view_l10n_eg_edi_thumb_drive_tree view_l10n_eg_edi_thumb_drive_tree l10n_eg_edi.thumb.drive tree New
view_move_form_inherit view_move_form_inherit account.move xpath Inherits account.view_move_form
Models touched (13)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • l10n_eg_activity_type_id Many2one → l10n_eg_edi.activity.type
    copy=False help='This is the activity type of the branch according to Egyptian Tax Authority' args: 'l10n_eg_edi.activity.type', 'ETA Activity Code'
  • l10n_eg_branch_id Many2one → res.partner
    copy=False help='Address of the subdivision of the company. You can just put the company partner if this is used for the main branch.' string='Branch' args: 'res.partner'
  • l10n_eg_branch_identifier Char
    copy=False help='This number can be found on the taxpayer profile on the eInvoicing portal. ' args: 'ETA Branch ID'
Public methods (0)

No public methods.

New fields (7)
  • l10n_eg_eta_json_doc_id Many2one → ir.attachment
    copy=False args: 'ir.attachment'
  • l10n_eg_is_signed Boolean
    copy=False
  • l10n_eg_long_id Char
    compute='_compute_eta_long_id' string='ETA Long ID'
  • l10n_eg_qr_code Char
    compute='_compute_eta_qr_code_str' string='ETA QR Code'
  • l10n_eg_signing_time Datetime
    copy=False args: 'Signing Time'
  • l10n_eg_submission_number Char
    compute='_compute_eta_response_data' copy=False store=True string='Submission ID'
  • l10n_eg_uuid Char
    compute='_compute_eta_response_data' copy=False store=True string='Document UUID'
Public methods (3)
  • action_get_eta_invoice_pdf(self)
    This is a pdf with the structure from the government. While we can use our own format, some clients appreciate this to verify that all the data is there in case of confusion.
  • action_post_sign_invoices(self)
  • button_draft(self)

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (5)
  • access_token Char
    required=True
  • certificate Binary
    args: 'ETA Certificate'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • pin Char
    required=True args: 'ETA USB Pin'
  • user_id Many2one → res.users
    default=<expr> required=True args: 'res.users'
Public methods (4)
  • action_set_certificate_from_usb(self)
  • action_sign_invoices(self, invoice_ids)
  • set_certificate(self, certificate)
    This is called from the browser to set the certificate
  • set_signature_data(self, invoices)
    This is called from the browser with the signed data from the local server

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    copy=False help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty. ' args: 'ETA Code'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_eta_code Char
    compute='_compute_l10n_eg_eta_code' help='This can be an EGS or GS1 product code, which is needed for the e-invoice. The best practice however is to use that code also as barcode and in that case, you should put it in the Barcode field instead and leave this field empty.' inverse='_set_l10n_eg_eta_code' args: 'ETA Item code'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (4)
  • l10n_eg_client_identifier Char
    groups='base.group_erp_manager' args: 'ETA Client ID'
  • l10n_eg_client_secret Char
    groups='base.group_erp_manager' args: 'ETA Secret'
  • l10n_eg_invoicing_threshold Float
    default=0.0 help='Threshold at which you are required to give the VAT number of the customer. ' args: 'Invoicing Threshold'
  • l10n_eg_production_env Boolean
    args: 'In Production Environment'
Public methods (0)

No public methods.

New fields (4)
  • l10n_eg_client_identifier Char
    readonly=False related='company_id.l10n_eg_client_identifier'
  • l10n_eg_client_secret Char
    readonly=False related='company_id.l10n_eg_client_secret'
  • l10n_eg_invoicing_threshold Float
    readonly=False related='company_id.l10n_eg_invoicing_threshold'
  • l10n_eg_production_env Boolean
    readonly=False related='company_id.l10n_eg_production_env'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_building_no Char
    args: 'Building No.'
Public methods (0)

No public methods.

New fields (1)
  • l10n_eg_unit_code_id Many2one → l10n_eg_edi.uom.code
    help='This is the type of unit according to egyptian tax authority' string='ETA Unit Code' args: 'l10n_eg_edi.uom.code'
Public methods (0)

No public methods.