Repository
odoo/odoo · module folder
Module version
1.0
Category
Accounting/Localizations/EDI
Folder size
0.15 MB
License
LGPL-3
Application
No
Auto-installable
Yes
Website
None
Last tracking update
2026-08-07 06:23:36
Authors
Maintainers
None
Committers
Xavier Morel, Xavier ALT, odoo, Odoo Translation Bot, Brice bib Bartoletti, Gorash, Jigar Vaghela, Ruben Gomes, nni-odoo, Habib (ayh), alsh-odoo, Gauthier Wala (gawa), Claire Bretton (clbr), Dylan Kiss (dyki), Sarah Bellefroid, Nicolas Viseur (vin), mega, nni@odoo.com, kaju-odoo
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
l10n_id_efaktur_coretax
Description
E-Faktur Menu(Indonesia)
Format: 010.000-16.00000001
* 2 (dua) digit pertama adalah Kode Transaksi
* 1 (satu) digit berikutnya adalah Kode Status
* 3 (tiga) digit berikutnya adalah Kode Cabang
* 2 (dua) digit pertama adalah Tahun Penerbitan
* 8 (delapan) digit berikutnya adalah Nomor Urut

To be able to export customer invoices as e-Faktur,
you need to put the ranges of numbers you were assigned
by the government in Accounting > Customers > e-Faktur

When you validate an invoice, where the partner has the ID PKP
field checked, a tax number will be assigned to that invoice.
Afterwards, you can filter the invoices still to export in the
invoices list and click on Action > Download e-Faktur to download
the csv and upload it to the site of the government.

You can replace an already sent invoice by another by indicating
the replaced invoice and the new one and you can reset an invoice
you have not already sent to the government to reuse its number.
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
account_move_efaktur_form_view account.move.efaktur.form.view account.move form Inherits account.view_move_form
account_move_efaktur_tree_view account.move.efaktur.list.view account.move list Inherits account.view_invoice_tree
efaktur_tree_view l10n_id_efaktur.efaktur.range.list.view l10n_id_efaktur.efaktur.range list New
l10n_id_efaktur_document_filter_view l10n_id.efaktur.document.filter.view l10n_id_efaktur.document search New
l10n_id_efaktur_document_form_view l10n_id.efaktur.document.form.view l10n_id_efaktur.document form New
l10n_id_efaktur_document_list_view l10n_id.efaktur.document.list.view l10n_id_efaktur.document list New
res_config_settings_view_form res.config.settings.view.form.chilean.loc res.config.settings form Inherits account.res_config_settings_view_form
res_partner_tax_form_view res.partner.tax.form.view res.partner form Inherits base.view_partner_form
view_account_invoice_filter account.move.select.l10n_id.inherit account.move Inherits account.view_account_invoice_filter
HTTP endpoints (1)
Route(s)HandlerAuthTypeMethodsFlags
/l10n_id_efaktur/download_attachments/<models("ir.attachment"):attachments> EfakturDownloadController.download_invoice_attachments user http ALL
Models touched (5)

New fields (8)
  • l10n_id_available_range_count Integer
    compute='_compute_available_range_count' compute_sudo=True
  • l10n_id_efaktur_document Many2one → l10n_id_efaktur.document
    copy=False readonly=True string='e-Faktur Document' args: 'l10n_id_efaktur.document'
  • l10n_id_efaktur_range Many2one → l10n_id_efaktur.efaktur.range
    copy=False domain="[('company_id', '=', company_id), ('available', '>', 0)]" string='E-faktur Range' args: 'l10n_id_efaktur.efaktur.range'
  • l10n_id_kode_transaksi Selection
    compute='_compute_kode_transaksi' copy=False help='Dua digit pertama nomor pajak' readonly=False store=True string='Kode Transaksi' args: [('01', '01 To the Parties that is not VAT Collector (Regular Customers)'), ('02', '02 To the Treasurer'), ('03', '03 To other VAT Collectors other than the Treasurer'), ('04', '04 Other Value of VAT Imposition Base'), ('05', '05 Specified Amount (Article 9A Paragraph (1) VAT Law)'), ('06', '06 to individuals holding foreign passports'), ('07', '07 Deliveries that the VAT is not Collected'), ('08', '08 Deliveries that the VAT is Exempted'), ('09', '09 Deliveries of Assets (Article 16D of VAT Law)')]
  • l10n_id_need_kode_transaksi Boolean
    compute='_compute_need_kode_transaksi'
  • l10n_id_replace_invoice_id Many2one → account.move
    copy=False domain="['|', '&', '&', ('state', '=', 'posted'), ('partner_id', '=', partner_id), ('reversal_move_ids', '!=', False), ('state', '=', 'cancel')]" index='btree_not_null' string='Replace Invoice' args: 'account.move'
  • l10n_id_show_kode_transaksi Boolean
    compute='_compute_show_kode_transaksi'
  • l10n_id_tax_number Char
    copy=False string='Tax Number'
Public methods (4)
  • button_draft(self)
  • download_csv(self)
  • download_efaktur(self)
    Collect the data and execute function _generate_efaktur.
  • reset_efaktur(self)
    Reset E-Faktur, so it can be use for other invoice.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True string='Active'
  • attachment_id Many2one → ir.attachment
    comodel_name='ir.attachment' readonly=True
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • invoice_ids One2many → account.move
    comodel_name='account.move' domain="[('move_type', 'in', ['out_invoice', 'out_refund']), ('company_id', '=', company_id), ('l10n_id_efaktur_document', '=', False), ('l10n_id_tax_number', '!=', False), ('state', '=', 'posted')]" inverse_name='l10n_id_efaktur_document' tracking=True
  • name Char
    compute='_compute_name' precompute=True readonly=False required=True store=True
Public methods (2)
  • action_download(self)
    Download the e-faktur related attachment
  • action_regenerate(self)
    Regenerate the e-faktur csv file, based on the invoice in the document. All new file generation will log a copy of the attachment to keep track of past generations.

New fields (5)
  • available Integer
    readonly=True
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • max Char
    required=True
  • min Char
    required=True
  • next_num Integer
    compute='_compute_next_num'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • pop_number(self)
    Consume the availability of a specific range to generate the eTax number for an invoice
  • push_number(self, company_id, number)
    @api.model
    Restoring the eTax number that got released after doing reset eFaktur on an invoice so that it can be reused :param company_id (int): company ID :param number (str): number to be restored
  • write(self, vals)
    Override to determine behaviour of changing min and max of an e-Faktur range For unused ranges, availability lowers when minimum is increased or maximum is decreased. Vice versa applies. For used ranges, minimum is fixed while maximum can only be udpated to a value above the used number. Availability decreases when the maximum is decreased and vice versa.

New fields (3)
  • l10n_id_kode_transaksi Selection
    default='01' help='Dua digit pertama nomor pajak' string='Invoice Transaction Code' tracking=True args: [('01', '01 To the Parties that is not VAT Collector (Regular Customers)'), ('02', '02 To the Treasurer'), ('03', '03 To other VAT Collectors other than the Treasurer'), ('04', '04 Other Value of VAT Imposition Base'), ('05', '05 Specified Amount (Article 9A Paragraph (1) VAT Law)'), ('06', '06 to individuals holding foreign passports'), ('07', '07 Deliveries that the VAT is not Collected'), ('08', '08 Deliveries that the VAT is Exempted'), ('09', '09 Deliveries of Assets (Article 16D of VAT Law)')]
  • l10n_id_nik Char
    string='NIK'
  • l10n_id_pkp Boolean
    compute='_compute_l10n_id_pkp' help='Denoting whether the following partner is taxable' readonly=False store=True string='Is PKP'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…