Malaysia - E-invoicing (POS)

l10n_my_edi_pos
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/l10n_my_edi_pos
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Dylan Kiss (dyki), Jinane Maksoud, Nicolas Viseur (vin), Sven Fuehr, David Monnom, masm-odoo, Krzysztof Magusiak (krma), Ajit Singh, mojem, Laurent Smet (LAS), adip-odoo, Arnav Varshney, prdu, jand-odoo, erle
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_my_edi
    - 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
    - point_of_sale
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - phone_validation
    - partner_autocomplete
    - iap_mail
    - iap
    - iot_base
    - google_address_autocomplete
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
    This modules allows the user to send consolidated invoices to the MyInvois system when using the POS app.
    

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
myinvois_document_pos_form_view myinvois.document.pos.form.view myinvois.document div Inherits l10n_my_edi.myinvois_document_form_view
myinvois_document_pos_list_view myinvois.document.list.view myinvois.document header Inherits l10n_my_edi.myinvois_document_list_view
myinvois_product_product_view_form_normalized_pos myinvois.product.product.view.form.normalized.inherit product.template xpath Inherits point_of_sale.product_template_view_form_normalized_pos
view_pos_pos_form pos.order.form.inherit pos.order xpath Inherits point_of_sale.view_pos_pos_form
Models touched (4)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • consolidation_type Selection
    ondelete={'pos': 'cascade'} selection_add=[('pos', 'PoS Order')]
Public methods (0)

No public methods.

New fields (4)
  • linked_order_count Integer
    compute='_compute_linked_order_count'
  • pos_config_id Many2one → pos.config
    comodel_name='pos.config' readonly=True string='PoS Config'
  • pos_order_date_range Char
    compute='_compute_pos_order_date_range' store=True string='Date Range'
  • pos_order_ids Many2many → pos.order
    check_company=True column1='document_id' column2='order_id' comodel_name='pos.order' name='Orders' relation='myinvois_document_pos_order_rel'
Public methods (3)
  • action_open_consolidate_invoice_wizard(self)
    Open the wizard, and set a default date_from/date_to based on the current date as well as already existing consolidated invoices.
  • action_show_myinvois_documents(self)
    Open the documents in self in the correct view based on the amount of records. When the documents are linked to pos orders, we use a specific view for them.
  • action_view_linked_orders(self)
    Return the action used to open the order(s) linked to the selected consolidated invoice.

New fields (1)
  • consolidated_invoice_ids Many2many → myinvois.document
    column1='order_id' column2='document_id' comodel_name='myinvois.document' groups='account.group_account_invoice' name='Consolidated Invoices' relation='myinvois_document_pos_order_rel'
Public methods (1)
  • action_show_myinvois_documents(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/l10n_my_edi_pos
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Dylan Kiss (dyki), Jinane Maksoud, Nicolas Viseur (vin), Sven Fuehr, masm-odoo, dvsh-odoo, mojem, Laurent Smet (LAS), adip-odoo, Arnav Varshney, prdu, jand-odoo, erle
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:54
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_my_edi_extended
    - l10n_my_edi
    - 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
    - point_of_sale
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - phone_validation
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
    This modules allows the user to send consolidated invoices to the MyInvois system when using the POS app.
    

Code Analysis

Views touched (9)
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_pos_form_view myinvois.document.pos.form.view myinvois.document div Inherits l10n_my_edi_pos.myinvois_document_form_view
myinvois_document_pos_list_view myinvois.document.list.view myinvois.document header Inherits l10n_my_edi_pos.myinvois_document_list_view
myinvois_document_status_update_form myinvois.document.status.update.wizard.form myinvois.document.status.update.wizard form New
myinvois_product_product_view_form_normalized_pos myinvois.product.product.view.form.normalized.inherit product.product xpath Inherits product.product_product_view_form_normalized
view_pos_pos_form pos.order.form.inherit pos.order xpath Inherits point_of_sale.view_pos_pos_form
view_tax_form_inherit_l10n_my_edi_pos account.tax.form.inherit.l10n_my_edi_pos account.tax xpath Inherits l10n_my_edi.view_tax_form_inherit_l10n_my_myinvois
Models touched (7)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • 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'
Public methods (0)

No public methods.

New fields (2)
  • date_from Date
    required=True string='Date From'
  • date_to Date
    required=True string='Date To'
Public methods (1)
  • button_consolidate_orders(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 (4)
  • 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_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 (4)
  • linked_order_count Integer
    compute='_compute_linked_order_count'
  • pos_config_id Many2one → pos.config
    comodel_name='pos.config' readonly=True string='PoS Config'
  • pos_order_date_range Char
    compute='_compute_pos_order_date_range' store=True string='Date Range'
  • pos_order_ids Many2many → pos.order
    check_company=True column1='document_id' column2='order_id' comodel_name='pos.order' name='Orders' relation='myinvois_document_pos_order_rel'
Public methods (2)
  • action_open_consolidate_invoice_wizard(self)
    Open the wizard, and set a default date_from/date_to based on the current date as well as already existing consolidated invoices.
  • action_view_linked_orders(self)
    Return the action used to open the order(s) linked to the selected consolidated invoice.

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)
  • consolidated_invoice_ids Many2many → myinvois.document
    column1='order_id' column2='document_id' comodel_name='myinvois.document' name='Consolidated Invoices' relation='myinvois_document_pos_order_rel'
Public methods (1)
  • action_show_consolidated_invoice(self)