Malaysia - E-invoicing

l10n_my_edi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/l10n_my_edi
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSOdoo Translation Bot, Josse Colpaert, Joren Van Onder, Julien Castiaux, Andrea Grazioso (agr-odoo), Gaetan Vanden Bergh (gavb), Ali Alfie (alal), Yosua Nicolaus, Dylan Kiss (dyki), Nicolas Viseur (vin), dijo-odoo, manv-afk, yagp-odoo, Antoine Dupuis, Michaël Mattiello, Anton Romanova (roan), masm-odoo, Vincent Sevestre, Krzysztof Magusiak (krma), kkuj-odoo, devp-odoo, mojem, Laurent Smet (LAS), adip-odoo, Arnav Varshney, Woojang (WOPY), erle
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_my
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - account_tax_python
    - l10n_my_ubl_pint
    - account_edi_ubl_cii
    - account_edi_proxy_client
    - certificate
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
    This modules allows the user to send their invoices to the MyInvois system.
    

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
myinvois_consolidate_invoice_wizard_form myinvois.consolidate.invoice.wizard.form myinvois.consolidate.invoice.wizard form New
myinvois_document_form_view myinvois.document.form.view myinvois.document form New
myinvois_document_list_view myinvois.document.list.view myinvois.document list New
myinvois_document_status_update_form myinvois.document.status.update.wizard.form myinvois.document.status.update.wizard form New
portal_my_details_fields portal_my_details_fields ir.ui.view qweb Inherits account.portal_my_details
product_template_form_view product.template.form.inherit product.template xpath Inherits product.product_template_form_view
report_invoice report_invoice ir.ui.view qweb Inherits account.report_invoice
report_invoice_document report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
res_config_settings_view_form res.config.settings.view.form.inherit.proxy.user res.config.settings xpath Inherits account.res_config_settings_view_form
view_classification_list l10n_my_edi.industry_classification.list l10n_my_edi.industry_classification list New
view_company_form_inherit_l10n_my_myinvois res.company.form.inherit.l10n_my_myinvois res.company xpath Inherits base.view_company_form
view_invoice_list_inherit_l10n_my_myinvois account.move.list.inherit.l10n_my_myinvois account.move field Inherits account.view_invoice_tree
view_move_form_inherit_l10n_my_myinvois account.move.form.inherit.l10n_my_myinvois account.move xpath Inherits account.view_move_form
view_partner_form_inherit_l10n_my_myinvois res.partner.form.inherit.l10n_my_myinvois res.partner group Inherits account.view_partner_property_form
view_tax_form_inherit_l10n_my_myinvois account.tax.form.inherit.l10n_my_myinvois account.tax xpath Inherits account.view_tax_form
Models touched (14)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • l10n_my_edi_custom_form_reference Char
    help='Reference Number of Customs Form No.1, 9, etc.' string='Customs Form Reference Number'
  • l10n_my_edi_display_tax_exemption_reason Boolean
    compute='_compute_l10n_my_edi_display_tax_exemption_reason' export_string_translation=False string='Display Tax Exemption Reason'
  • l10n_my_edi_document_ids Many2many → myinvois.document
    column1='invoice_id' column2='document_id' comodel_name='myinvois.document' copy=False name='MyInvois Documents' relation='myinvois_document_invoice_rel'
  • l10n_my_edi_exemption_reason Char
    help="Buyer’s sales tax exemption certificate number, special exemption as per gazette orders, etc.\nOnly applicable if you are using a tax with a type 'Exempt'." string='Tax Exemption Reason'
  • l10n_my_edi_state Selection
    compute='_compute_l10n_my_edi_state' export_string_translation=False help='State of this document on the MyInvois portal.\nA document awaiting validation will be automatically updated once the validation status is available.' selection=[('in_progress', 'Validation In Progress'), ('valid', 'Valid'), ('rejected', 'Rejected'), ('invalid', 'Invalid'), ('cancelled', 'Cancelled')] store=True string='MyInvois State' tracking=True
  • l10n_my_invoice_need_edi Boolean
    compute='_compute_l10n_my_invoice_need_edi' export_string_translation=False
Public methods (5)
  • action_invoice_sent(self)
    The wizard should not be available for invoices sent to MyInvois but not yet validated. This is because before validation the ID used for the QR code is not available and the user should NOT send the invoice yet.
  • action_l10n_my_edi_send_invoice(self)
    This action will create the MyInvois Document for this invoice if it does not already exist. Once done, it will trigger the sending of said document to the platform.
  • action_l10n_my_edi_update_status(self)
  • action_show_myinvois_documents(self)
  • button_request_cancel(self)

New fields (1)
  • l10n_my_edi_classification_code Selection
    compute='_compute_l10n_my_edi_classification_code' copy=False readonly=False selection=CLASSIFICATION_CODES_LIST store=True string='Malaysian classification code'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • l10n_my_tax_exemption_reason Char
    help='The reason for tax exemption, used when submitting consolidated invoices including this tax.' string='Malaysian Tax Exemption Reason'
  • l10n_my_tax_type Selection
    compute='_compute_l10n_my_tax_type' readonly=False selection=[('01', 'Sales Tax'), ('02', 'Service Tax'), ('03', 'Tourism Tax'), ('04', 'High-Value Goods Tax'), ('05', 'Sales Tax on Low Value Goods'), ('06', 'Not Applicable'), ('E', 'Tax exemption (where applicable)')] store=True string='Malaysian Tax Type'
Public methods (0)

No public methods.

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

No public methods.

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

No public methods.

New fields (3)
  • consolidation_type Selection
    required=True selection=[('invoice', 'Invoice')]
  • date_from Date
    required=True string='Date From'
  • date_to Date
    required=True string='Date To'
Public methods (1)
  • button_consolidate(self)
    By default, we only consolidated orders that are in the range, done and not invoiced. We do allow to also consolidate invoices linked to a cancelled consolidated invoice. Note that doing so lock the cancelled invoice into its cancelled state.

New fields (18)
  • active Boolean
    default=True string='Active'
  • company_currency_id Many2one
    related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' required=True
  • invoice_ids Many2many → account.move
    check_company=True column1='document_id' column2='invoice_id' comodel_name='account.move' name='Invoices' relation='myinvois_document_invoice_rel'
  • myinvois_custom_form_reference Char
    help='Reference Number of Customs Form No.1, 9, etc.' string='Customs Form Reference Number'
  • myinvois_document_long_id Char
    copy=False readonly=True string='MyInvois Long ID'
  • myinvois_error_document_hash Char
    copy=False export_string_translation=False readonly=True string='Document Hash'
  • myinvois_exemption_reason Char
    help="Buyer’s sales tax exemption certificate number, special exemption as per gazette orders, etc.\nOnly applicable if you are using a tax with a type 'Exempt'." string='Tax Exemption Reason'
  • myinvois_external_uuid Char
    copy=False help='Unique ID assigned to a specific document when sent to MyInvois.' index=True readonly=True string='MyInvois ID'
  • myinvois_file Binary
    copy=False export_string_translation=False readonly=True string='MyInvois XML File'
  • myinvois_file_id Many2one → ir.attachment
    comodel_name='ir.attachment' compute=<expr> copy=False depends=['myinvois_file'] export_string_translation=False
  • myinvois_issuance_date Date
    copy=False readonly=True string='Issuance Date'
  • myinvois_retry_at Char
    copy=False export_string_translation=False readonly=True string='Document Retry At'
  • myinvois_state Selection
    copy=False help='State of this document on the MyInvois portal.\nA document awaiting validation will be automatically updated once the validation status is available.' readonly=True selection=[('in_progress', 'Validation In Progress'), ('valid', 'Valid'), ('rejected', 'Rejected'), ('invalid', 'Invalid'), ('cancelled', 'Cancelled')] string='MyInvois State' tracking=True
  • myinvois_submission_uid Char
    copy=False help='Unique ID assigned to a batch of documents when sent to MyInvois.' readonly=True string='Submission UID'
  • myinvois_validation_time Datetime
    copy=False readonly=True string='Validation Time'
  • name Char
    compute='_compute_name' copy=False index='trigram' store=True
Public methods (5)
  • action_cancel_submission(self)
    Cancel the document on the platform.
  • action_generate_xml_file(self)
    Generate a xml file for each of the MyInvois documents in self. If the document already as a file, the previous file's name is updated to include an (old) tag to avoid confusion in the attachment list.
  • action_show_myinvois_documents(self)
    Open the documents in self in the correct view based on the amount of records.
  • action_submit_to_myinvois(self)
    Submit all new documents in self to MyInvois. This can also be used on invalid documents to re-submit them after correcting the error.
  • action_update_submission_status(self)
    Fetches the status of all the documents in self. Note that the endpoint reached to do so will differ based on the amount of documents in the recordset.

New fields (3)
  • document_id Many2one → myinvois.document
    comodel_name='myinvois.document' readonly=True required=True string='Document To Update'
  • new_status Char
    help='New status to set on the document.' readonly=True required=True
  • reason Char
    help='Reason for updating the document.' required=True
Public methods (1)
  • button_request_update(self)

New fields (1)
  • l10n_my_edi_classification_code Selection
    selection=CLASSIFICATION_CODES_LIST string='Malaysian classification code'
Public methods (0)

No public methods.

New fields (7)
  • l10n_my_edi_default_import_journal_id Many2one → account.journal
    comodel_name='account.journal' domain="[('type', '=', 'purchase')]" help='The journal on which invoices imported from MyInvois will be booked. Leave empty to use the default purchase journal.' string='Default import journal'
  • l10n_my_edi_industrial_classification Many2one
    readonly=False related='partner_id.l10n_my_edi_industrial_classification'
  • l10n_my_edi_mode Selection
    default='test' selection=[('test', 'Pre-Production'), ('prod', 'Production')]
  • l10n_my_edi_proxy_user_id Many2one → account_edi_proxy_client.user
    comodel_name='account_edi_proxy_client.user' compute='_compute_l10n_my_edi_proxy_user_id'
  • l10n_my_identification_number Char
    readonly=False related='partner_id.l10n_my_identification_number'
  • l10n_my_identification_number_placeholder Char
    compute='_compute_l10n_my_identification_number_placeholder'
  • l10n_my_identification_type Selection
    readonly=False related='partner_id.l10n_my_identification_type'
Public methods (0)

No public methods.

New fields (5)
  • l10n_my_accept_processing Boolean
  • l10n_my_edi_company_vat Char
    related='company_id.vat'
  • l10n_my_edi_default_import_journal_id Many2one
    readonly=False related='company_id.l10n_my_edi_default_import_journal_id'
  • l10n_my_edi_mode Selection
    readonly=False related='company_id.l10n_my_edi_mode'
  • l10n_my_edi_proxy_user_id Many2one
    related='company_id.l10n_my_edi_proxy_user_id'
Public methods (3)
  • action_l10n_my_edi_allow_processing(self)
    We always expect the user to give his consent by pressing the button, in any mode, to enable the edi.
  • action_l10n_my_edi_unregister(self)
    Send a notification to the proxy to free the ID (vat) of the user, and archive the local proxy user. Useful if there has been a misconfiguration or the user wishes to use a new database/...
  • action_open_company_form(self)
    This will be used to ease the configuration by allowing to quickly access the company.

New fields (7)
  • l10n_my_edi_display_tin_warning Boolean
    compute='_compute_l10n_my_edi_display_tin_warning'
  • l10n_my_edi_industrial_classification Many2one → l10n_my_edi.industry_classification
    comodel_name='l10n_my_edi.industry_classification' compute='_compute_l10n_my_edi_industrial_classification' readonly=False store=True string='Ind. Classification'
  • l10n_my_edi_malaysian_tin Char
    help='The value set in this field will be used as TIN for the customer/supplier.\nIf left empty, the Tax ID field will be used.' string='Malaysian TIN'
  • l10n_my_identification_number Char
    string='ID Number'
  • l10n_my_identification_number_placeholder Char
    compute='_compute_l10n_my_identification_number_placeholder'
  • l10n_my_identification_type Selection
    default='BRN' help='The identification type and number used by the MyTax/MyInvois system to identify the user.\nNote: For MyPR and MyKAS to use NRIC scheme' selection=[('NRIC', 'MyKad/MyTentera/MyPR/MyKAS'), ('BRN', 'Business Registration Number'), ('PASSPORT', 'Passport'), ('ARMY', 'Army')] string='ID Type'
  • l10n_my_tin_validation_state Selection
    compute='_compute_l10n_my_tin_validation_state' export_string_translation=False help='Technical field, hold the result of TIN validation using MyInvois API.\nIt is non blocking, and will simply help ensure that the customer of an invoice is valid to avoid submission errors.' readonly=False selection=[('valid', 'Valid'), ('invalid', 'Invalid')] store=True string='Tin Validation State'
Public methods (1)
  • action_validate_tin(self)
    Calling this action will reach our EDI proxy in order to validate the TIN against the provided identification information.
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/l10n_my_edi
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Xavier Morel, Andrea Grazioso (agr-odoo), odoo, Ali Alfie (alal), Dylan Kiss (dyki), Nicolas Viseur (vin), Antoine Dupuis, masm-odoo, Vincent Sevestre, devp-odoo, dvsh-odoo, Laurent Smet (LAS), Arnav Varshney, erle
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_my
    - 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_my_ubl_pint
    - account_edi_ubl_cii
    - account_edi_proxy_client
    - certificate
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
    This modules allows the user to send their invoices to the MyInvois system.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
l10n_my_edi_document_status_update_form l10n_my_edi.document.status.update.form l10n_my_edi.document.status.update form New
product_template_form_view product.template.form.inherit product.template xpath Inherits product.product_template_form_view
res_config_settings_view_form res.config.settings.view.form.inherit.proxy.user res.config.settings xpath Inherits account.res_config_settings_view_form
ubl_20_DeliveryType_my ubl_20_DeliveryType_my ir.ui.view qweb New
ubl_20_InvoiceLineType_my ubl_20_InvoiceLineType_my ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_InvoiceLineType
ubl_21_InvoiceType_my ubl_21_InvoiceType_my ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_InvoiceType
view_classification_list l10n_my_edi.industry_classification.list l10n_my_edi.industry_classification list New
view_company_form_inherit_l10n_my_myinvois res.company.form.inherit.l10n_my_myinvois res.company xpath Inherits base.view_company_form
view_invoice_list_inherit_l10n_my_myinvois account.move.list.inherit.l10n_my_myinvois account.move field Inherits account.view_invoice_tree
view_move_form_inherit_l10n_my_myinvois account.move.form.inherit.l10n_my_myinvois account.move xpath Inherits account.view_move_form
view_partner_form_inherit_l10n_my_myinvois res.partner.form.inherit.l10n_my_myinvois res.partner group Inherits account.view_partner_property_form
view_tax_form_inherit_l10n_my_myinvois account.tax.form.inherit.l10n_my_myinvois account.tax xpath Inherits account.view_tax_form
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • l10n_my_edi_custom_form_reference Char
    help='Reference Number of Customs Forms\nCustoms form No. 2 for Customer Invoices\nCustoms form No. 1, 9, etc for Vendor Bills' string='Customs Form Reference Number'
  • l10n_my_edi_display_tax_exemption_reason Boolean
    compute='_compute_l10n_my_edi_display_tax_exemption_reason' export_string_translation=False string='Display Tax Exemption Reason'
  • l10n_my_edi_exemption_reason Char
    help="Buyer’s sales tax exemption certificate number, special exemption as per gazette orders, etc.\nOnly applicable if you are using a tax with a type 'Exempt'." string='Tax Exemption Reason'
  • l10n_my_edi_external_uuid Char
    copy=False help='Unique ID assigned to a specific invoice when sent to MyInvois.' index=True readonly=True string='MyInvois ID'
  • l10n_my_edi_file Binary
    copy=False export_string_translation=False readonly=True string='MyInvois XML File'
  • l10n_my_edi_file_id Many2one → ir.attachment
    comodel_name='ir.attachment' compute=<expr> copy=False depends=['l10n_my_edi_file'] export_string_translation=False readonly=True
  • l10n_my_edi_retry_at Char
    copy=False export_string_translation=False readonly=True string='Document Retry At'
  • l10n_my_edi_state Selection
    copy=False export_string_translation=False help='State of this invoice on the MyInvois portal.\nAn invoice awaiting validation will be automatically updated once the validation status is available.' readonly=True selection=[('in_progress', 'Validation In Progress'), ('valid', 'Valid'), ('rejected', 'Rejected'), ('invalid', 'Invalid'), ('cancelled', 'Cancelled')] string='MyInvois State' tracking=True
  • l10n_my_edi_submission_uid Char
    copy=False help='Unique ID assigned to a batch of invoices when sent to MyInvois.' readonly=True string='Submission UID'
  • l10n_my_edi_validation_time Datetime
    copy=False export_string_translation=False readonly=True string='Validation Time'
  • l10n_my_error_document_hash Char
    copy=False export_string_translation=False readonly=True string='Document Hash'
Public methods (5)
  • action_l10n_my_edi_reject_bill(self)
  • action_l10n_my_edi_update_status(self)
  • action_validate_tin(self)
  • button_draft(self)
  • button_request_cancel(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • l10n_my_tax_type Selection
    compute='_compute_l10n_my_tax_type' readonly=False selection=[('01', 'Sales Tax'), ('02', 'Service Tax'), ('03', 'Tourism Tax'), ('04', 'High-Value Goods Tax'), ('05', 'Sales Tax on Low Value Goods'), ('06', 'Not Applicable'), ('E', 'Tax exemption (where applicable)')] store=True string='Malaysian Tax Type'
Public methods (0)

No public methods.

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

No public methods.

New fields (3)
  • invoice_id Many2one → account.move
    comodel_name='account.move' readonly=True required=True string='Document To Update'
  • new_status Char
    help='New status to set on the document.' readonly=True required=True
  • reason Char
    help='Reason for cancelling the document.' required=True
Public methods (1)
  • button_request_update(self)

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

No public methods.

New fields (1)
  • l10n_my_edi_classification_code Selection
    selection=CLASSIFICATION_CODES_LIST string='Malaysian classification code'
Public methods (0)

No public methods.

New fields (7)
  • l10n_my_edi_default_import_journal_id Many2one → account.journal
    comodel_name='account.journal' domain="[('type', '=', 'purchase')]" help='The journal on which invoices imported from MyInvois will be booked. Leave empty to use the default purchase journal.' string='Default import journal'
  • l10n_my_edi_industrial_classification Many2one → l10n_my_edi.industry_classification
    comodel_name='l10n_my_edi.industry_classification' default=_default_l10n_my_edi_industrial_classification string='Ind. Classification'
  • l10n_my_edi_mode Selection
    default='test' selection=[('test', 'Pre-Production'), ('prod', 'Production')]
  • l10n_my_edi_proxy_user_id Many2one → account_edi_proxy_client.user
    comodel_name='account_edi_proxy_client.user' compute='_compute_l10n_my_edi_proxy_user_id'
  • l10n_my_identification_number Char
    readonly=False related='partner_id.l10n_my_identification_number'
  • l10n_my_identification_number_placeholder Char
    compute='_compute_l10n_my_identification_number_placeholder'
  • l10n_my_identification_type Selection
    readonly=False related='partner_id.l10n_my_identification_type'
Public methods (0)

No public methods.

New fields (5)
  • l10n_my_accept_processing Boolean
  • l10n_my_edi_company_vat Char
    related='company_id.vat'
  • l10n_my_edi_default_import_journal_id Many2one
    readonly=False related='company_id.l10n_my_edi_default_import_journal_id'
  • l10n_my_edi_mode Selection
    readonly=False related='company_id.l10n_my_edi_mode'
  • l10n_my_edi_proxy_user_id Many2one
    related='company_id.l10n_my_edi_proxy_user_id'
Public methods (3)
  • action_l10n_my_edi_allow_processing(self)
    We always expect the user to give his consent by pressing the button, in any mode, to enable the edi.
  • action_l10n_my_edi_unregister(self)
    Send a notification to the proxy to free the ID (vat) of the user, and archive the local proxy user. Useful if there has been a misconfiguration or the user wishes to use a new database/...
  • action_open_company_form(self)
    This will be used to ease the configuration by allowing to quickly access the company.

New fields (5)
  • l10n_my_edi_display_tin_warning Boolean
    compute='_compute_l10n_my_edi_display_tin_warning'
  • l10n_my_identification_number Char
    string='ID Number'
  • l10n_my_identification_number_placeholder Char
    compute='_compute_l10n_my_identification_number_placeholder'
  • l10n_my_identification_type Selection
    default='BRN' help='The identification type and number used by the MyTax/MyInvois system to identify the user.\nNote: For MyPR and MyKAS to use NRIC scheme' selection=[('NRIC', 'MyKad/MyTentera/MyPR/MyKAS'), ('BRN', 'Business Registration Number'), ('PASSPORT', 'Passport'), ('ARMY', 'Army')] string='ID Type'
  • l10n_my_tin_validation_state Selection
    compute='_compute_l10n_my_tin_validation_state' export_string_translation=False help='Technical field, hold the result of TIN validation using MyInvois API.\nIt is non blocking, and will simply help ensure that the customer of an invoice is valid to avoid submission errors.' readonly=False selection=[('valid', 'Valid'), ('invalid', 'Invalid')] store=True string='Tin Validation State'
Public methods (1)
  • action_validate_tin(self)
    Calling this action will reach our EDI proxy in order to validate the TIN against the provided identification information.
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/l10n_my_edi
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Andrea Grazioso (agr-odoo), Yosua Nicolaus, Dylan Kiss (dyki), Nicolas Viseur (vin), masm-odoo, devp-odoo, dvsh-odoo, Arnav Varshney
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:10
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_my
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - l10n_my_ubl_pint
    - account_edi_ubl_cii
    - account_edi_proxy_client
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
    This modules allows the user to send their invoices to the MyInvois system.
    

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
account_move_send_inherit_l10n_my_edi account.move.send.form.inherit.l10n_my_edi account.move.send xpath Inherits account.account_move_send_form
l10n_my_edi_document_status_update_form l10n_my_edi.document.status.update.form l10n_my_edi.document.status.update form New
product_template_form_view product.template.form.inherit product.template xpath Inherits product.product_template_form_view
res_config_settings_view_form res.config.settings.view.form.inherit.proxy.user res.config.settings xpath Inherits account.res_config_settings_view_form
ubl_20_AddressType_my ubl_20_AddressType_my ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_AddressType
ubl_20_DeliveryType_my ubl_20_DeliveryType_my ir.ui.view qweb New
ubl_20_InvoiceLineType_my ubl_20_InvoiceLineType_my ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_InvoiceLineType
ubl_20_PartyType_my ubl_20_PartyType_my ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_PartyType
ubl_21_InvoiceType_my ubl_21_InvoiceType_my ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_InvoiceType
view_classification_list l10n_my_edi.industry_classification.list l10n_my_edi.industry_classification tree New
view_company_form_inherit_l10n_my_myinvois res.company.form.inherit.l10n_my_myinvois res.company xpath Inherits base.view_company_form
view_invoice_tree_inherit_l10n_my_myinvois account.move.tree.inherit.l10n_my_myinvois account.move field Inherits account.view_invoice_tree
view_move_form_inherit_l10n_my_myinvois account.move.form.inherit.l10n_my_myinvois account.move xpath Inherits account.view_move_form
view_partner_form_inherit_l10n_my_myinvois res.partner.form.inherit.l10n_my_myinvois res.partner group Inherits account.view_partner_property_form
view_tax_form_inherit_l10n_my_myinvois account.tax.form.inherit.l10n_my_myinvois account.tax xpath Inherits account.view_tax_form
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • l10n_my_edi_custom_form_reference Char
    help='Reference Number of Customs Forms\nCustoms form No. 2 for Customer Invoices\nCustoms form No. 1, 9, etc for Vendor Bills' string='Customs Form Reference Number'
  • l10n_my_edi_display_tax_exemption_reason Boolean
    compute='_compute_l10n_my_edi_display_tax_exemption_reason' export_string_translation=False string='Display Tax Exemption Reason'
  • l10n_my_edi_exemption_reason Char
    help="Buyer’s sales tax exemption certificate number, special exemption as per gazette orders, etc.\nOnly applicable if you are using a tax with a type 'Exempt'." string='Tax Exemption Reason'
  • l10n_my_edi_external_uuid Char
    copy=False help='Unique ID assigned to a specific invoice when sent to MyInvois.' index=True readonly=True string='MyInvois ID'
  • l10n_my_edi_file Binary
    copy=False export_string_translation=False readonly=True string='MyInvois XML File'
  • l10n_my_edi_file_id Many2one → ir.attachment
    comodel_name='ir.attachment' compute=<expr> copy=False depends=['l10n_my_edi_file'] export_string_translation=False readonly=True
  • l10n_my_edi_retry_at Char
    copy=False export_string_translation=False readonly=True string='Document Retry At'
  • l10n_my_edi_state Selection
    copy=False export_string_translation=False help='State of this invoice on the MyInvois portal.\nAn invoice awaiting validation will be automatically updated once the validation status is available.' readonly=True selection=[('in_progress', 'Validation In Progress'), ('valid', 'Valid'), ('rejected', 'Rejected'), ('invalid', 'Invalid'), ('cancelled', 'Cancelled')] string='MyInvois State' tracking=True
  • l10n_my_edi_submission_uid Char
    copy=False help='Unique ID assigned to a batch of invoices when sent to MyInvois.' readonly=True string='Submission UID'
  • l10n_my_edi_validation_time Datetime
    copy=False export_string_translation=False readonly=True string='Validation Time'
  • l10n_my_error_document_hash Char
    copy=False export_string_translation=False readonly=True string='Document Hash'
Public methods (5)
  • action_l10n_my_edi_reject_bill(self)
  • action_l10n_my_edi_update_status(self)
  • action_validate_tin(self)
  • button_draft(self)
  • button_request_cancel(self)

New fields (2)
  • l10n_my_edi_enable Boolean
    compute='_compute_l10n_my_edi_enable'
  • l10n_my_edi_send_checkbox Boolean
    compute='_compute_l10n_my_edi_send_checkbox' readonly=False store=True string='Send to MyInvois'
Public methods (0)

No public methods.

New fields (1)
  • l10n_my_tax_type Selection
    compute='_compute_l10n_my_tax_type' readonly=False selection=[('01', 'Sales Tax'), ('02', 'Service Tax'), ('03', 'Tourism Tax'), ('04', 'High-Value Goods Tax'), ('05', 'Sales Tax on Low Value Goods'), ('06', 'Not Applicable'), ('E', 'Tax exemption (where applicable)')] store=True string='Malaysian Tax Type'
Public methods (0)

No public methods.

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

No public methods.

New fields (3)
  • invoice_id Many2one → account.move
    comodel_name='account.move' readonly=True required=True string='Document To Update'
  • new_status Char
    help='New status to set on the document.' readonly=True required=True
  • reason Char
    help='Reason for cancelling the document.' required=True
Public methods (1)
  • button_request_update(self)

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

No public methods.

New fields (1)
  • l10n_my_edi_classification_code Selection
    selection=CLASSIFICATION_CODES_LIST string='Malaysian classification code'
Public methods (0)

No public methods.

New fields (6)
  • l10n_my_edi_default_import_journal_id Many2one → account.journal
    comodel_name='account.journal' domain="[('type', '=', 'purchase')]" help='The journal on which invoices imported from MyInvois will be booked. Leave empty to use the default purchase journal.' string='Default import journal'
  • l10n_my_edi_industrial_classification Many2one → l10n_my_edi.industry_classification
    comodel_name='l10n_my_edi.industry_classification' default=_default_l10n_my_edi_industrial_classification string='Ind. Classification'
  • l10n_my_edi_mode Selection
    default='test' selection=[('test', 'Pre-Production'), ('prod', 'Production')]
  • l10n_my_edi_proxy_user_id Many2one → account_edi_proxy_client.user
    comodel_name='account_edi_proxy_client.user' compute='_compute_l10n_my_edi_proxy_user_id'
  • l10n_my_identification_number Char
    readonly=False related='partner_id.l10n_my_identification_number'
  • l10n_my_identification_type Selection
    readonly=False related='partner_id.l10n_my_identification_type'
Public methods (0)

No public methods.

New fields (5)
  • l10n_my_accept_processing Boolean
  • l10n_my_edi_company_vat Char
    related='company_id.vat'
  • l10n_my_edi_default_import_journal_id Many2one
    readonly=False related='company_id.l10n_my_edi_default_import_journal_id'
  • l10n_my_edi_mode Selection
    readonly=False related='company_id.l10n_my_edi_mode'
  • l10n_my_edi_proxy_user_id Many2one
    related='company_id.l10n_my_edi_proxy_user_id'
Public methods (3)
  • action_l10n_my_edi_allow_processing(self)
    We always expect the user to give his consent by pressing the button, in any mode, to enable the edi.
  • action_l10n_my_edi_unregister(self)
    Send a notification to the proxy to free the ID (vat) of the user, and archive the local proxy user. Useful if there has been a misconfiguration or the user wishes to use a new database/...
  • action_open_company_form(self)
    This will be used to ease the configuration by allowing to quickly access the company.

New fields (4)
  • l10n_my_edi_display_tin_warning Boolean
    compute='_compute_l10n_my_edi_display_tin_warning'
  • l10n_my_identification_number Char
    string='ID Number'
  • l10n_my_identification_type Selection
    default='BRN' help='The identification type and number used by the MyTax/MyInvois system to identify the user.\nNote: For MyPR and MyKAS to use NRIC scheme' selection=[('NRIC', 'MyKad/MyTentera/MyPR/MyKAS'), ('BRN', 'Business Registration Number'), ('PASSPORT', 'Passport'), ('ARMY', 'Army')] string='ID Type'
  • l10n_my_tin_validation_state Selection
    compute='_compute_l10n_my_tin_validation_state' export_string_translation=False help='Technical field, hold the result of TIN validation using MyInvois API.\nIt is non blocking, and will simply help ensure that the customer of an invoice is valid to avoid submission errors.' readonly=False selection=[('valid', 'Valid'), ('invalid', 'Invalid')] store=True string='Tin Validation State'
Public methods (1)
  • action_validate_tin(self)
    Calling this action will reach our EDI proxy in order to validate the TIN against the provided identification information.